@fullcalendar/core 6.0.2 → 6.0.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 → index.esm.js} +147 -158
- package/index.global.js +31 -8
- package/index.global.min.js +2 -2
- package/index.js +158 -147
- package/internal-common.d.ts +9 -7
- package/{internal-common.cjs → internal-common.esm.js} +4742 -4955
- package/internal-common.js +4930 -4671
- package/internal.esm.js +3 -0
- package/internal.js +196 -3
- package/locales/{af.cjs → af.esm.js} +1 -5
- package/locales/af.global.js +1 -1
- package/locales/af.global.min.js +1 -1
- package/locales/af.js +5 -1
- package/locales/{ar-dz.cjs → ar-dz.esm.js} +1 -5
- package/locales/ar-dz.global.js +1 -1
- package/locales/ar-dz.global.min.js +1 -1
- package/locales/ar-dz.js +5 -1
- package/locales/{ar-kw.cjs → ar-kw.esm.js} +1 -5
- package/locales/ar-kw.global.js +1 -1
- package/locales/ar-kw.global.min.js +1 -1
- package/locales/ar-kw.js +5 -1
- package/locales/{ar-ly.cjs → ar-ly.esm.js} +1 -5
- package/locales/ar-ly.global.js +1 -1
- package/locales/ar-ly.global.min.js +1 -1
- package/locales/ar-ly.js +5 -1
- package/locales/{ar-ma.cjs → ar-ma.esm.js} +1 -5
- package/locales/ar-ma.global.js +1 -1
- package/locales/ar-ma.global.min.js +1 -1
- package/locales/ar-ma.js +5 -1
- package/locales/{ar-sa.cjs → ar-sa.esm.js} +1 -5
- package/locales/ar-sa.global.js +1 -1
- package/locales/ar-sa.global.min.js +1 -1
- package/locales/ar-sa.js +5 -1
- package/locales/{ar-tn.cjs → ar-tn.esm.js} +1 -5
- package/locales/ar-tn.global.js +1 -1
- package/locales/ar-tn.global.min.js +1 -1
- package/locales/ar-tn.js +5 -1
- package/locales/{ar.cjs → ar.esm.js} +1 -5
- package/locales/ar.global.js +1 -1
- package/locales/ar.global.min.js +1 -1
- package/locales/ar.js +5 -1
- package/locales/{az.cjs → az.esm.js} +1 -5
- package/locales/az.global.js +1 -1
- package/locales/az.global.min.js +1 -1
- package/locales/az.js +5 -1
- package/locales/{bg.cjs → bg.esm.js} +1 -5
- package/locales/bg.global.js +1 -1
- package/locales/bg.global.min.js +1 -1
- package/locales/bg.js +5 -1
- package/locales/{bn.cjs → bn.esm.js} +1 -5
- package/locales/bn.global.js +1 -1
- package/locales/bn.global.min.js +1 -1
- package/locales/bn.js +5 -1
- package/locales/{bs.cjs → bs.esm.js} +1 -5
- package/locales/bs.global.js +1 -1
- package/locales/bs.global.min.js +1 -1
- package/locales/bs.js +5 -1
- package/locales/{ca.cjs → ca.esm.js} +1 -5
- package/locales/ca.global.js +1 -1
- package/locales/ca.global.min.js +1 -1
- package/locales/ca.js +5 -1
- package/locales/{cs.cjs → cs.esm.js} +1 -5
- package/locales/cs.global.js +1 -1
- package/locales/cs.global.min.js +1 -1
- package/locales/cs.js +5 -1
- package/locales/{cy.cjs → cy.esm.js} +1 -5
- package/locales/cy.global.js +1 -1
- package/locales/cy.global.min.js +1 -1
- package/locales/cy.js +5 -1
- package/locales/{da.cjs → da.esm.js} +1 -5
- package/locales/da.global.js +1 -1
- package/locales/da.global.min.js +1 -1
- package/locales/da.js +5 -1
- package/locales/{de-at.cjs → de-at.esm.js} +1 -5
- package/locales/de-at.global.js +1 -1
- package/locales/de-at.global.min.js +1 -1
- package/locales/de-at.js +5 -1
- package/locales/{de.cjs → de.esm.js} +1 -5
- package/locales/de.global.js +1 -1
- package/locales/de.global.min.js +1 -1
- package/locales/de.js +5 -1
- package/locales/{el.cjs → el.esm.js} +1 -5
- package/locales/el.global.js +1 -1
- package/locales/el.global.min.js +1 -1
- package/locales/el.js +5 -1
- package/locales/{en-au.cjs → en-au.esm.js} +1 -5
- package/locales/en-au.global.js +1 -1
- package/locales/en-au.global.min.js +1 -1
- package/locales/en-au.js +5 -1
- package/locales/{en-gb.cjs → en-gb.esm.js} +1 -5
- package/locales/en-gb.global.js +1 -1
- package/locales/en-gb.global.min.js +1 -1
- package/locales/en-gb.js +5 -1
- package/locales/{en-nz.cjs → en-nz.esm.js} +1 -5
- package/locales/en-nz.global.js +1 -1
- package/locales/en-nz.global.min.js +1 -1
- package/locales/en-nz.js +5 -1
- package/locales/{eo.cjs → eo.esm.js} +1 -5
- package/locales/eo.global.js +1 -1
- package/locales/eo.global.min.js +1 -1
- package/locales/eo.js +5 -1
- package/locales/{es-us.cjs → es-us.esm.js} +1 -5
- package/locales/es-us.global.js +1 -1
- package/locales/es-us.global.min.js +1 -1
- package/locales/es-us.js +5 -1
- package/locales/{es.cjs → es.esm.js} +1 -5
- package/locales/es.global.js +1 -1
- package/locales/es.global.min.js +1 -1
- package/locales/es.js +5 -1
- package/locales/{et.cjs → et.esm.js} +1 -5
- package/locales/et.global.js +1 -1
- package/locales/et.global.min.js +1 -1
- package/locales/et.js +5 -1
- package/locales/{eu.cjs → eu.esm.js} +1 -5
- package/locales/eu.global.js +1 -1
- package/locales/eu.global.min.js +1 -1
- package/locales/eu.js +5 -1
- package/locales/{fa.cjs → fa.esm.js} +1 -5
- package/locales/fa.global.js +1 -1
- package/locales/fa.global.min.js +1 -1
- package/locales/fa.js +5 -1
- package/locales/{fi.cjs → fi.esm.js} +1 -5
- package/locales/fi.global.js +1 -1
- package/locales/fi.global.min.js +1 -1
- package/locales/fi.js +5 -1
- package/locales/{fr-ca.cjs → fr-ca.esm.js} +1 -5
- package/locales/fr-ca.global.js +1 -1
- package/locales/fr-ca.global.min.js +1 -1
- package/locales/fr-ca.js +5 -1
- package/locales/{fr-ch.cjs → fr-ch.esm.js} +1 -5
- package/locales/fr-ch.global.js +1 -1
- package/locales/fr-ch.global.min.js +1 -1
- package/locales/fr-ch.js +5 -1
- package/locales/{fr.cjs → fr.esm.js} +1 -5
- package/locales/fr.global.js +1 -1
- package/locales/fr.global.min.js +1 -1
- package/locales/fr.js +5 -1
- package/locales/{gl.cjs → gl.esm.js} +1 -5
- package/locales/gl.global.js +1 -1
- package/locales/gl.global.min.js +1 -1
- package/locales/gl.js +5 -1
- package/locales/{he.cjs → he.esm.js} +1 -5
- package/locales/he.global.js +1 -1
- package/locales/he.global.min.js +1 -1
- package/locales/he.js +5 -1
- package/locales/{hi.cjs → hi.esm.js} +1 -5
- package/locales/hi.global.js +1 -1
- package/locales/hi.global.min.js +1 -1
- package/locales/hi.js +5 -1
- package/locales/{hr.cjs → hr.esm.js} +1 -5
- package/locales/hr.global.js +1 -1
- package/locales/hr.global.min.js +1 -1
- package/locales/hr.js +5 -1
- package/locales/{hu.cjs → hu.esm.js} +1 -5
- package/locales/hu.global.js +1 -1
- package/locales/hu.global.min.js +1 -1
- package/locales/hu.js +5 -1
- package/locales/{hy-am.cjs → hy-am.esm.js} +1 -5
- package/locales/hy-am.global.js +1 -1
- package/locales/hy-am.global.min.js +1 -1
- package/locales/hy-am.js +5 -1
- package/locales/{id.cjs → id.esm.js} +1 -5
- package/locales/id.global.js +1 -1
- package/locales/id.global.min.js +1 -1
- package/locales/id.js +5 -1
- package/locales/{is.cjs → is.esm.js} +1 -5
- package/locales/is.global.js +1 -1
- package/locales/is.global.min.js +1 -1
- package/locales/is.js +5 -1
- package/locales/{it.cjs → it.esm.js} +1 -5
- package/locales/it.global.js +1 -1
- package/locales/it.global.min.js +1 -1
- package/locales/it.js +5 -1
- package/locales/{ja.cjs → ja.esm.js} +1 -5
- package/locales/ja.global.js +1 -1
- package/locales/ja.global.min.js +1 -1
- package/locales/ja.js +5 -1
- package/locales/{ka.cjs → ka.esm.js} +1 -5
- package/locales/ka.global.js +1 -1
- package/locales/ka.global.min.js +1 -1
- package/locales/ka.js +5 -1
- package/locales/{kk.cjs → kk.esm.js} +1 -5
- package/locales/kk.global.js +1 -1
- package/locales/kk.global.min.js +1 -1
- package/locales/kk.js +5 -1
- package/locales/{km.cjs → km.esm.js} +1 -5
- package/locales/km.global.js +1 -1
- package/locales/km.global.min.js +1 -1
- package/locales/km.js +5 -1
- package/locales/{ko.cjs → ko.esm.js} +1 -5
- package/locales/ko.global.js +1 -1
- package/locales/ko.global.min.js +1 -1
- package/locales/ko.js +5 -1
- package/locales/{ku.cjs → ku.esm.js} +1 -5
- package/locales/ku.global.js +1 -1
- package/locales/ku.global.min.js +1 -1
- package/locales/ku.js +5 -1
- package/locales/{lb.cjs → lb.esm.js} +1 -5
- package/locales/lb.global.js +1 -1
- package/locales/lb.global.min.js +1 -1
- package/locales/lb.js +5 -1
- package/locales/{lt.cjs → lt.esm.js} +1 -5
- package/locales/lt.global.js +1 -1
- package/locales/lt.global.min.js +1 -1
- package/locales/lt.js +5 -1
- package/locales/{lv.cjs → lv.esm.js} +1 -5
- package/locales/lv.global.js +1 -1
- package/locales/lv.global.min.js +1 -1
- package/locales/lv.js +5 -1
- package/locales/{mk.cjs → mk.esm.js} +1 -5
- package/locales/mk.global.js +1 -1
- package/locales/mk.global.min.js +1 -1
- package/locales/mk.js +5 -1
- package/locales/{ms.cjs → ms.esm.js} +1 -5
- package/locales/ms.global.js +1 -1
- package/locales/ms.global.min.js +1 -1
- package/locales/ms.js +5 -1
- package/locales/{nb.cjs → nb.esm.js} +1 -5
- package/locales/nb.global.js +1 -1
- package/locales/nb.global.min.js +1 -1
- package/locales/nb.js +5 -1
- package/locales/{ne.cjs → ne.esm.js} +1 -5
- package/locales/ne.global.js +1 -1
- package/locales/ne.global.min.js +1 -1
- package/locales/ne.js +5 -1
- package/locales/{nl.cjs → nl.esm.js} +1 -5
- package/locales/nl.global.js +1 -1
- package/locales/nl.global.min.js +1 -1
- package/locales/nl.js +5 -1
- package/locales/{nn.cjs → nn.esm.js} +1 -5
- package/locales/nn.global.js +1 -1
- package/locales/nn.global.min.js +1 -1
- package/locales/nn.js +5 -1
- package/locales/{pl.cjs → pl.esm.js} +1 -5
- package/locales/pl.global.js +1 -1
- package/locales/pl.global.min.js +1 -1
- package/locales/pl.js +5 -1
- package/locales/{pt-br.cjs → pt-br.esm.js} +1 -5
- package/locales/pt-br.global.js +1 -1
- package/locales/pt-br.global.min.js +1 -1
- package/locales/pt-br.js +5 -1
- package/locales/{pt.cjs → pt.esm.js} +1 -5
- package/locales/pt.global.js +1 -1
- package/locales/pt.global.min.js +1 -1
- package/locales/pt.js +5 -1
- package/locales/{ro.cjs → ro.esm.js} +1 -5
- package/locales/ro.global.js +1 -1
- package/locales/ro.global.min.js +1 -1
- package/locales/ro.js +5 -1
- package/locales/{ru.cjs → ru.esm.js} +1 -5
- package/locales/ru.global.js +1 -1
- package/locales/ru.global.min.js +1 -1
- package/locales/ru.js +5 -1
- package/locales/{si-lk.cjs → si-lk.esm.js} +1 -5
- package/locales/si-lk.global.js +1 -1
- package/locales/si-lk.global.min.js +1 -1
- package/locales/si-lk.js +5 -1
- package/locales/{sk.cjs → sk.esm.js} +1 -5
- package/locales/sk.global.js +1 -1
- package/locales/sk.global.min.js +1 -1
- package/locales/sk.js +5 -1
- package/locales/{sl.cjs → sl.esm.js} +1 -5
- package/locales/sl.global.js +1 -1
- package/locales/sl.global.min.js +1 -1
- package/locales/sl.js +5 -1
- package/locales/{sm.cjs → sm.esm.js} +1 -5
- package/locales/sm.global.js +1 -1
- package/locales/sm.global.min.js +1 -1
- package/locales/sm.js +5 -1
- package/locales/{sq.cjs → sq.esm.js} +1 -5
- package/locales/sq.global.js +1 -1
- package/locales/sq.global.min.js +1 -1
- package/locales/sq.js +5 -1
- package/locales/{sr-cyrl.cjs → sr-cyrl.esm.js} +1 -5
- package/locales/sr-cyrl.global.js +1 -1
- package/locales/sr-cyrl.global.min.js +1 -1
- package/locales/sr-cyrl.js +5 -1
- package/locales/{sr.cjs → sr.esm.js} +1 -5
- package/locales/sr.global.js +1 -1
- package/locales/sr.global.min.js +1 -1
- package/locales/sr.js +5 -1
- package/locales/{sv.cjs → sv.esm.js} +1 -5
- package/locales/sv.global.js +1 -1
- package/locales/sv.global.min.js +1 -1
- package/locales/sv.js +5 -1
- package/locales/{ta-in.cjs → ta-in.esm.js} +1 -5
- package/locales/ta-in.global.js +1 -1
- package/locales/ta-in.global.min.js +1 -1
- package/locales/ta-in.js +5 -1
- package/locales/{th.cjs → th.esm.js} +1 -5
- package/locales/th.global.js +1 -1
- package/locales/th.global.min.js +1 -1
- package/locales/th.js +5 -1
- package/locales/{tr.cjs → tr.esm.js} +1 -5
- package/locales/tr.global.js +1 -1
- package/locales/tr.global.min.js +1 -1
- package/locales/tr.js +5 -1
- package/locales/{ug.cjs → ug.esm.js} +1 -5
- package/locales/ug.global.js +1 -1
- package/locales/ug.global.min.js +1 -1
- package/locales/ug.js +5 -1
- package/locales/{uk.cjs → uk.esm.js} +1 -5
- package/locales/uk.global.js +1 -1
- package/locales/uk.global.min.js +1 -1
- package/locales/uk.js +5 -1
- package/locales/{uz.cjs → uz.esm.js} +1 -5
- package/locales/uz.global.js +1 -1
- package/locales/uz.global.min.js +1 -1
- package/locales/uz.js +5 -1
- package/locales/{vi.cjs → vi.esm.js} +1 -5
- package/locales/vi.global.js +1 -1
- package/locales/vi.global.min.js +1 -1
- package/locales/vi.js +5 -1
- package/locales/{zh-cn.cjs → zh-cn.esm.js} +1 -5
- package/locales/zh-cn.global.js +1 -1
- package/locales/zh-cn.global.min.js +1 -1
- package/locales/zh-cn.js +5 -1
- package/locales/{zh-tw.cjs → zh-tw.esm.js} +1 -5
- package/locales/zh-tw.global.js +1 -1
- package/locales/zh-tw.global.min.js +1 -1
- package/locales/zh-tw.js +5 -1
- package/locales-all.esm.js +84 -0
- package/locales-all.global.js +1 -1
- package/locales-all.global.min.js +1 -1
- package/locales-all.js +84 -80
- package/package.json +13 -23
- package/preact.esm.js +3 -0
- package/preact.js +22 -3
- package/index.js.map +0 -1
- package/internal-common.js.map +0 -1
- package/internal.cjs +0 -196
- package/internal.js.map +0 -1
- package/locales/af.js.map +0 -1
- package/locales/ar-dz.js.map +0 -1
- package/locales/ar-kw.js.map +0 -1
- package/locales/ar-ly.js.map +0 -1
- package/locales/ar-ma.js.map +0 -1
- package/locales/ar-sa.js.map +0 -1
- package/locales/ar-tn.js.map +0 -1
- package/locales/ar.js.map +0 -1
- package/locales/az.js.map +0 -1
- package/locales/bg.js.map +0 -1
- package/locales/bn.js.map +0 -1
- package/locales/bs.js.map +0 -1
- package/locales/ca.js.map +0 -1
- package/locales/cs.js.map +0 -1
- package/locales/cy.js.map +0 -1
- package/locales/da.js.map +0 -1
- package/locales/de-at.js.map +0 -1
- package/locales/de.js.map +0 -1
- package/locales/el.js.map +0 -1
- package/locales/en-au.js.map +0 -1
- package/locales/en-gb.js.map +0 -1
- package/locales/en-nz.js.map +0 -1
- package/locales/eo.js.map +0 -1
- package/locales/es-us.js.map +0 -1
- package/locales/es.js.map +0 -1
- package/locales/et.js.map +0 -1
- package/locales/eu.js.map +0 -1
- package/locales/fa.js.map +0 -1
- package/locales/fi.js.map +0 -1
- package/locales/fr-ca.js.map +0 -1
- package/locales/fr-ch.js.map +0 -1
- package/locales/fr.js.map +0 -1
- package/locales/gl.js.map +0 -1
- package/locales/he.js.map +0 -1
- package/locales/hi.js.map +0 -1
- package/locales/hr.js.map +0 -1
- package/locales/hu.js.map +0 -1
- package/locales/hy-am.js.map +0 -1
- package/locales/id.js.map +0 -1
- package/locales/is.js.map +0 -1
- package/locales/it.js.map +0 -1
- package/locales/ja.js.map +0 -1
- package/locales/ka.js.map +0 -1
- package/locales/kk.js.map +0 -1
- package/locales/km.js.map +0 -1
- package/locales/ko.js.map +0 -1
- package/locales/ku.js.map +0 -1
- package/locales/lb.js.map +0 -1
- package/locales/lt.js.map +0 -1
- package/locales/lv.js.map +0 -1
- package/locales/mk.js.map +0 -1
- package/locales/ms.js.map +0 -1
- package/locales/nb.js.map +0 -1
- package/locales/ne.js.map +0 -1
- package/locales/nl.js.map +0 -1
- package/locales/nn.js.map +0 -1
- package/locales/pl.js.map +0 -1
- package/locales/pt-br.js.map +0 -1
- package/locales/pt.js.map +0 -1
- package/locales/ro.js.map +0 -1
- package/locales/ru.js.map +0 -1
- package/locales/si-lk.js.map +0 -1
- package/locales/sk.js.map +0 -1
- package/locales/sl.js.map +0 -1
- package/locales/sm.js.map +0 -1
- package/locales/sq.js.map +0 -1
- package/locales/sr-cyrl.js.map +0 -1
- package/locales/sr.js.map +0 -1
- package/locales/sv.js.map +0 -1
- package/locales/ta-in.js.map +0 -1
- package/locales/th.js.map +0 -1
- package/locales/tr.js.map +0 -1
- package/locales/ug.js.map +0 -1
- package/locales/uk.js.map +0 -1
- package/locales/uz.js.map +0 -1
- package/locales/vi.js.map +0 -1
- package/locales/zh-cn.js.map +0 -1
- package/locales/zh-tw.js.map +0 -1
- package/locales-all.cjs +0 -88
- package/locales-all.js.map +0 -1
- package/preact.cjs +0 -22
- package/preact.js.map +0 -1
package/internal-common.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-common.js","sources":["../src/styleUtils.ts","../src/util/DelayedRunner.ts","../src/util/object.ts","../src/util/array.ts","../src/util/memoize.ts","../src/util/dom-manip.ts","../src/util/dom-event.ts","../src/util/misc.ts","../src/datelib/marker.ts","../src/datelib/calendar-system.ts","../src/datelib/duration.ts","../src/datelib/formatting-utils.ts","../src/datelib/parsing.ts","../src/datelib/env.ts","../src/theme/Theme.ts","../src/datelib/formatting-native.ts","../src/datelib/zoned-marker.ts","../src/datelib/DateFormatter.ts","../src/datelib/formatting-cmd.ts","../src/datelib/formatting-func.ts","../src/datelib/formatting.ts","../src/options.ts","../src/preact.ts","../src/ScrollResponder.ts","../src/ViewContext.ts","../src/vdom-util.tsx","../src/content-inject/ContentInjector.ts","../src/content-inject/RenderId.ts","../src/content-inject/ContentContainer.ts","../src/common/ViewContainer.tsx","../src/datelib/date-range.ts","../src/util/date.ts","../src/reducers/current-date.ts","../src/DateProfileGenerator.ts","../src/structs/event-instance.ts","../src/structs/recurring-event.ts","../src/structs/event-parse.ts","../src/structs/event-store.ts","../src/structs/constraint.ts","../src/util/html.ts","../src/component/event-ui.ts","../src/structs/event-source-parse.ts","../src/reducers/eventStore.ts","../src/common/Emitter.ts","../src/structs/business-hours.ts","../src/calendar-utils.ts","../src/structs/event-mutation.ts","../src/api/EventSourceImpl.ts","../src/api/EventImpl.ts","../src/component/event-rendering.ts","../src/structs/date-span.ts","../src/util/promise.ts","../src/util/requestJson.ts","../src/util/table-styling.ts","../src/CalendarRoot.tsx","../src/interactions/interaction.ts","../src/api/CalendarImpl.ts","../src/util/geom.ts","../src/component/event-splitting.ts","../src/component/date-rendering.ts","../src/common/nav-link.ts","../src/util/scrollbar-side.ts","../src/util/scrollbar-width.ts","../src/util/dom-geom.ts","../src/common/PositionCache.ts","../src/common/scroll-controller.ts","../src/component/DateComponent.ts","../src/datelib/timezone.ts","../src/seg-hierarchy.ts","../src/interactions/ElementDragging.ts","../src/global-config.ts","../src/structs/drag-meta.ts","../src/common/table-utils.ts","../src/common/table-cell-util.tsx","../src/common/TableDateCell.tsx","../src/common/TableDowCell.tsx","../src/NowTimer.ts","../src/common/DayHeader.tsx","../src/common/DaySeriesModel.ts","../src/common/DayTableModel.ts","../src/common/slicing-utils.ts","../src/validation.ts","../src/scrollgrid/Scroller.tsx","../src/util/RefMap.ts","../src/scrollgrid/util.tsx","../src/scrollgrid/SimpleScrollGrid.tsx","../src/common/EventContainer.tsx","../src/common/StandardEvent.tsx","../src/common/NowIndicatorContainer.tsx","../src/common/DayCellContainer.tsx","../src/common/bg-fill.tsx","../src/common/WeekNumberContainer.tsx","../src/common/Popover.tsx","../src/common/MorePopover.tsx","../src/common/MoreLinkContainer.tsx","../src/content-inject/Store.ts","../src/content-inject/CustomRenderingStore.ts"],"sourcesContent":["\nexport function injectStyles(css: string): void {\n if (!css || typeof document === 'undefined') { return }\n\n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n\n if ((style as any).styleSheet) {\n (style as any).styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n}\n","export class DelayedRunner {\n private isRunning = false\n private isDirty = false\n private pauseDepths: { [scope: string]: number } = {}\n private timeoutId: number = 0\n\n constructor(\n private drainedOption?: () => void,\n ) {\n }\n\n request(delay?: number) {\n this.isDirty = true\n\n if (!this.isPaused()) {\n this.clearTimeout()\n\n if (delay == null) {\n this.tryDrain()\n } else {\n this.timeoutId = setTimeout( // NOT OPTIMAL! TODO: look at debounce\n this.tryDrain.bind(this),\n delay,\n ) as unknown as number\n }\n }\n }\n\n pause(scope = '') {\n let { pauseDepths } = this\n\n pauseDepths[scope] = (pauseDepths[scope] || 0) + 1\n\n this.clearTimeout()\n }\n\n resume(scope = '', force?: boolean) {\n let { pauseDepths } = this\n\n if (scope in pauseDepths) {\n if (force) {\n delete pauseDepths[scope]\n } else {\n pauseDepths[scope] -= 1\n let depth = pauseDepths[scope]\n\n if (depth <= 0) {\n delete pauseDepths[scope]\n }\n }\n\n this.tryDrain()\n }\n }\n\n isPaused() {\n return Object.keys(this.pauseDepths).length\n }\n\n tryDrain() {\n if (!this.isRunning && !this.isPaused()) {\n this.isRunning = true\n\n while (this.isDirty) {\n this.isDirty = false\n this.drained() // might set isDirty to true again\n }\n\n this.isRunning = false\n }\n }\n\n clear() {\n this.clearTimeout()\n this.isDirty = false\n this.pauseDepths = {}\n }\n\n private clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n this.timeoutId = 0\n }\n }\n\n protected drained() { // subclasses can implement\n if (this.drainedOption) {\n this.drainedOption()\n }\n }\n}\n","const { hasOwnProperty } = Object.prototype\n\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nexport function mergeProps(propObjs, complexPropsMap?): any {\n let dest = {}\n\n if (complexPropsMap) {\n for (let name in complexPropsMap) {\n let complexObjs = []\n\n // collect the trailing object values, stopping when a non-object is discovered\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let val = propObjs[i][name]\n\n if (typeof val === 'object' && val) { // non-null object\n complexObjs.unshift(val)\n } else if (val !== undefined) {\n dest[name] = val // if there were no objects, this value will be used\n break\n }\n }\n\n // if the trailing values were objects, use the merged value\n if (complexObjs.length) {\n dest[name] = mergeProps(complexObjs)\n }\n }\n }\n\n // copy values into the destination, going from last to first\n for (let i = propObjs.length - 1; i >= 0; i -= 1) {\n let props = propObjs[i]\n\n for (let name in props) {\n if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n dest[name] = props[name]\n }\n }\n }\n\n return dest\n}\n\nexport function filterHash(hash, func) {\n let filtered = {}\n\n for (let key in hash) {\n if (func(hash[key], key)) {\n filtered[key] = hash[key]\n }\n }\n\n return filtered\n}\n\nexport function mapHash<InputItem, OutputItem>(\n hash: { [key: string]: InputItem },\n func: (input: InputItem, key: string) => OutputItem,\n): { [key: string]: OutputItem } {\n let newHash = {}\n\n for (let key in hash) {\n newHash[key] = func(hash[key], key)\n }\n\n return newHash\n}\n\nexport function arrayToHash(a): { [key: string]: true } { // TODO: rename to strinArrayToHash or something\n let hash = {}\n\n for (let item of a) {\n hash[item] = true\n }\n\n return hash\n}\n\nexport function buildHashFromArray<Item, ItemRes>(a: Item[], func: (item: Item, index: number) => [ string, ItemRes ]) {\n let hash: { [key: string]: ItemRes } = {}\n\n for (let i = 0; i < a.length; i += 1) {\n let tuple = func(a[i], i)\n\n hash[tuple[0]] = tuple[1]\n }\n\n return hash\n}\n\n// TODO: reassess browser support\n// https://caniuse.com/?search=object.values\nexport function hashValuesToArray(obj) { // can't use Object.values yet because no es2015 support\n let a = []\n\n for (let key in obj) {\n a.push(obj[key])\n }\n\n return a\n}\n\nexport function isPropsEqual(obj0, obj1) { // TODO: merge with compareObjs\n if (obj0 === obj1) {\n return true\n }\n\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n return false\n }\n }\n }\n\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n return false\n }\n }\n }\n\n return true\n}\n\nconst HANDLER_RE = /^on[A-Z]/\n\nexport function isNonHandlerPropsEqual(obj0, obj1) {\n const keys = getUnequalProps(obj0, obj1)\n\n for (let key of keys) {\n if (!HANDLER_RE.test(key)) {\n return false\n }\n }\n\n return true\n}\n\nexport function getUnequalProps(obj0, obj1) {\n let keys: string[] = []\n\n for (let key in obj0) {\n if (hasOwnProperty.call(obj0, key)) {\n if (!(key in obj1)) {\n keys.push(key)\n }\n }\n }\n\n for (let key in obj1) {\n if (hasOwnProperty.call(obj1, key)) {\n if (obj0[key] !== obj1[key]) {\n keys.push(key)\n }\n }\n }\n\n return keys\n}\n\nexport type EqualityFunc<T> = (a: T, b: T) => boolean\nexport type EqualityThing<T> = EqualityFunc<T> | true\n\nexport type EqualityFuncs<ObjType> = { // not really just a \"func\" anymore\n [K in keyof ObjType]?: EqualityThing<ObjType[K]>\n}\n\nexport function compareObjs(oldProps, newProps, equalityFuncs: EqualityFuncs<any> = {}) {\n if (oldProps === newProps) {\n return true\n }\n\n for (let key in newProps) {\n if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) {\n // equal\n } else {\n return false\n }\n }\n\n // check for props that were omitted in the new\n for (let key in oldProps) {\n if (!(key in newProps)) {\n return false\n }\n }\n\n return true\n}\n\n/*\nassumed \"true\" equality for handler names like \"onReceiveSomething\"\n*/\nfunction isObjValsEqual<T>(val0: T, val1: T, comparator: EqualityThing<T>) {\n if (val0 === val1 || comparator === true) {\n return true\n }\n if (comparator) {\n return comparator(val0, val1)\n }\n return false\n}\n\nexport function collectFromHash<Item>(\n hash: { [key: string]: Item },\n startIndex = 0,\n endIndex?: number,\n step = 1,\n) {\n let res: Item[] = []\n\n if (endIndex == null) {\n endIndex = Object.keys(hash).length\n }\n\n for (let i = startIndex; i < endIndex; i += step) {\n let val = hash[i]\n\n if (val !== undefined) { // will disregard undefined for sparse arrays\n res.push(val)\n }\n }\n\n return res\n}\n","// TODO: new util arrayify?\n// Array.prototype.slice.call(\n\nexport function removeMatching(array, testFunc) {\n let removeCnt = 0\n let i = 0\n\n while (i < array.length) {\n if (testFunc(array[i])) { // truthy value means *remove*\n array.splice(i, 1)\n removeCnt += 1\n } else {\n i += 1\n }\n }\n\n return removeCnt\n}\n\nexport function removeExact(array, exactVal) {\n let removeCnt = 0\n let i = 0\n\n while (i < array.length) {\n if (array[i] === exactVal) {\n array.splice(i, 1)\n removeCnt += 1\n } else {\n i += 1\n }\n }\n\n return removeCnt\n}\n\nexport function isArraysEqual(a0, a1, equalityFunc?: (v0, v1) => boolean) { // TODO: better typing\n if (a0 === a1) {\n return true\n }\n\n let len = a0.length\n let i\n\n if (len !== a1.length) { // not array? or not same length?\n return false\n }\n\n for (i = 0; i < len; i += 1) {\n if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {\n return false\n }\n }\n\n return true\n}\n","import { isArraysEqual } from './array.js'\nimport { isPropsEqual } from './object.js'\nimport { Dictionary } from '../options.js'\n\nexport function memoize<Args extends any[], Res>(\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): (...args: Args) => Res {\n let currentArgs: Args | undefined\n let currentRes: Res | undefined\n\n return function (...newArgs: Args) { // eslint-disable-line func-names\n if (!currentArgs) {\n currentRes = workerFunc.apply(this, newArgs)\n } else if (!isArraysEqual(currentArgs, newArgs)) {\n if (teardownFunc) {\n teardownFunc(currentRes)\n }\n\n let res = workerFunc.apply(this, newArgs)\n\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res\n }\n }\n\n currentArgs = newArgs\n\n return currentRes\n }\n}\n\nexport function memoizeObjArg<Arg extends Dictionary, Res>(\n workerFunc: (arg: Arg) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): (arg: Arg) => Res {\n let currentArg: Arg | undefined\n let currentRes: Res | undefined\n\n return (newArg: Arg) => {\n if (!currentArg) {\n currentRes = workerFunc.call(this, newArg)\n } else if (!isPropsEqual(currentArg, newArg)) {\n if (teardownFunc) {\n teardownFunc(currentRes)\n }\n\n let res = workerFunc.call(this, newArg)\n\n if (!resEquality || !resEquality(res, currentRes)) {\n currentRes = res\n }\n }\n\n currentArg = newArg\n\n return currentRes\n }\n}\n\nexport type MemoiseArrayFunc<Args extends any[], Res> =\n (argSets: Args[]) => Res[]\n\nexport function memoizeArraylike<Args extends any[], Res>( // used at all?\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void,\n): MemoiseArrayFunc<Args, Res> {\n let currentArgSets: Args[] = []\n let currentResults: Res[] = []\n\n return (newArgSets: Args[]) => {\n let currentLen = currentArgSets.length\n let newLen = newArgSets.length\n let i = 0\n\n for (; i < currentLen; i += 1) {\n if (!newArgSets[i]) { // one of the old sets no longer exists\n if (teardownFunc) {\n teardownFunc(currentResults[i])\n }\n } else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {\n if (teardownFunc) {\n teardownFunc(currentResults[i])\n }\n\n let res = workerFunc.apply(this, newArgSets[i])\n\n if (!resEquality || !resEquality(res, currentResults[i])) {\n currentResults[i] = res\n }\n }\n }\n\n for (; i < newLen; i += 1) {\n currentResults[i] = workerFunc.apply(this, newArgSets[i])\n }\n\n currentArgSets = newArgSets\n currentResults.splice(newLen) // remove excess\n\n return currentResults\n }\n}\n\nexport type MemoizeHashFunc<Args extends any[], Res> =\n (argHash: { [key: string]: Args }) => { [key: string]: Res }\n\nexport function memoizeHashlike<Args extends any[], Res>(\n workerFunc: (...args: Args) => Res,\n resEquality?: (res0: Res, res1: Res) => boolean,\n teardownFunc?: (res: Res) => void, // TODO: change arg order\n): MemoizeHashFunc<Args, Res> {\n let currentArgHash: { [key: string]: Args } = {}\n let currentResHash: { [key: string]: Res } = {}\n\n return (newArgHash: { [key: string]: Args }) => {\n let newResHash: { [key: string]: Res } = {}\n\n for (let key in newArgHash) {\n if (!currentResHash[key]) {\n newResHash[key] = workerFunc.apply(this, newArgHash[key])\n } else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {\n if (teardownFunc) {\n teardownFunc(currentResHash[key])\n }\n\n let res = workerFunc.apply(this, newArgHash[key])\n\n newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))\n ? currentResHash[key]\n : res\n } else {\n newResHash[key] = currentResHash[key]\n }\n }\n\n currentArgHash = newArgHash\n currentResHash = newResHash\n\n return newResHash\n }\n}\n","import { Dictionary } from '../options.js'\n\nexport function removeElement(el: HTMLElement) { // removes nodes in addition to elements. bad name\n if (el.parentNode) {\n el.parentNode.removeChild(el)\n }\n}\n\n// Querying\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function elementClosest(el: HTMLElement, selector: string): HTMLElement {\n if (el.closest) {\n return el.closest(selector)\n\n // really bad fallback for IE\n // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n }\n if (!document.documentElement.contains(el)) {\n return null\n }\n do {\n if (elementMatches(el, selector)) {\n return el\n }\n el = (el.parentElement || el.parentNode) as HTMLElement\n } while (el !== null && el.nodeType === 1)\n return null\n}\n\nexport function elementMatches(el: HTMLElement, selector: string): HTMLElement {\n let method = el.matches || (el as any).matchesSelector || (el as any).msMatchesSelector\n\n return method.call(el, selector)\n}\n\n// accepts multiple subject els\n// returns a real array. good for methods like forEach\n// TODO: accept the document\nexport function findElements(container: HTMLElement[] | HTMLElement | NodeListOf<HTMLElement>, selector: string): HTMLElement[] {\n let containers = container instanceof HTMLElement ? [container] : container\n let allMatches: HTMLElement[] = []\n\n for (let i = 0; i < containers.length; i += 1) {\n let matches = containers[i].querySelectorAll(selector)\n\n for (let j = 0; j < matches.length; j += 1) {\n allMatches.push(matches[j] as HTMLElement)\n }\n }\n\n return allMatches\n}\n\n// accepts multiple subject els\n// only queries direct child elements // TODO: rename to findDirectChildren!\nexport function findDirectChildren(parent: HTMLElement[] | HTMLElement, selector?: string): HTMLElement[] {\n let parents = parent instanceof HTMLElement ? [parent] : parent\n let allMatches = []\n\n for (let i = 0; i < parents.length; i += 1) {\n let childNodes = parents[i].children // only ever elements\n\n for (let j = 0; j < childNodes.length; j += 1) {\n let childNode = childNodes[j]\n\n if (!selector || elementMatches(childNode as HTMLElement, selector)) {\n allMatches.push(childNode)\n }\n }\n }\n\n return allMatches\n}\n\n// Style\n// ----------------------------------------------------------------------------------------------------------------\n\nconst PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i\n\nexport function applyStyle(el: HTMLElement, props: Dictionary) {\n for (let propName in props) {\n applyStyleProp(el, propName, props[propName])\n }\n}\n\nexport function applyStyleProp(el: HTMLElement, name: string, val) {\n if (val == null) {\n el.style[name] = ''\n } else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n el.style[name] = `${val}px`\n } else {\n el.style[name] = val\n }\n}\n\n// Event Handling\n// ----------------------------------------------------------------------------------------------------------------\n\n// if intercepting bubbled events at the document/window/body level,\n// and want to see originating element (the 'target'), use this util instead\n// of `ev.target` because it goes within web-component boundaries.\nexport function getEventTargetViaRoot(ev: Event) {\n return ev.composedPath?.()[0] ?? ev.target\n}\n\n// Shadow DOM consuderations\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function getElRoot(el: HTMLElement): ShadowRoot | Document {\n return el.getRootNode ? el.getRootNode() as ShadowRoot : document\n}\n\n// Unique ID for DOM attribute\n\nlet guid = 0\n\nexport function getUniqueDomId() {\n guid += 1\n return 'fc-dom-' + guid\n}\n","import { elementClosest } from './dom-manip.js'\n\n// Stops a mouse/touch event from doing it's native browser action\nexport function preventDefault(ev) {\n ev.preventDefault()\n}\n\n// Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function buildDelegationHandler<EventType extends (Event | UIEvent)>(\n selector: string,\n handler: (ev: EventType, matchedTarget: HTMLElement) => void,\n) {\n return (ev: EventType) => {\n let matchedChild = elementClosest(ev.target as HTMLElement, selector)\n\n if (matchedChild) {\n handler.call(matchedChild, ev, matchedChild)\n }\n }\n}\n\nexport function listenBySelector(\n container: HTMLElement,\n eventType: string,\n selector: string,\n handler: (ev: Event, matchedTarget: HTMLElement) => void,\n) {\n let attachedHandler = buildDelegationHandler(selector, handler)\n\n container.addEventListener(eventType, attachedHandler)\n\n return () => {\n container.removeEventListener(eventType, attachedHandler)\n }\n}\n\nexport function listenToHoverBySelector(\n container: HTMLElement,\n selector: string,\n onMouseEnter: (ev: Event, matchedTarget: HTMLElement) => void,\n onMouseLeave: (ev: Event, matchedTarget: HTMLElement) => void,\n) {\n let currentMatchedChild\n\n return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {\n if (matchedChild !== currentMatchedChild) {\n currentMatchedChild = matchedChild\n onMouseEnter(mouseOverEv, matchedChild)\n\n let realOnMouseLeave = (mouseLeaveEv) => {\n currentMatchedChild = null\n onMouseLeave(mouseLeaveEv, matchedChild)\n matchedChild.removeEventListener('mouseleave', realOnMouseLeave)\n }\n\n // listen to the next mouseleave, and then unattach\n matchedChild.addEventListener('mouseleave', realOnMouseLeave)\n }\n })\n}\n\n// Animation\n// ----------------------------------------------------------------------------------------------------------------\n\nconst transitionEventNames = [\n 'webkitTransitionEnd',\n 'otransitionend',\n 'oTransitionEnd',\n 'msTransitionEnd',\n 'transitionend',\n]\n\n// triggered only when the next single subsequent transition finishes\nexport function whenTransitionDone(el: HTMLElement, callback: (ev: Event) => void) {\n let realCallback = (ev) => {\n callback(ev)\n transitionEventNames.forEach((eventName) => {\n el.removeEventListener(eventName, realCallback)\n })\n }\n\n transitionEventNames.forEach((eventName) => {\n el.addEventListener(eventName, realCallback) // cross-browser way to determine when the transition finishes\n })\n}\n\n// ARIA workarounds\n// ----------------------------------------------------------------------------------------------------------------\n\nexport function createAriaClickAttrs(handler: ((ev: UIEvent) => void)) {\n return {\n onClick: handler,\n ...createAriaKeyboardAttrs(handler),\n }\n}\n\nexport function createAriaKeyboardAttrs(handler: ((ev: UIEvent) => void)) {\n return {\n tabIndex: 0,\n onKeyDown(ev: KeyboardEvent) {\n if (ev.key === 'Enter' || ev.key === ' ') {\n handler(ev)\n ev.preventDefault() // if space, don't scroll down page\n }\n },\n }\n}\n","import { preventDefault } from './dom-event.js'\n\nexport type GenericHash = { [key: string]: any } // already did this somewhere\n\nlet guidNumber = 0\n\nexport function guid() {\n guidNumber += 1\n return String(guidNumber)\n}\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n// Make the mouse cursor express that an event is not allowed in the current area\nexport function disableCursor() {\n document.body.classList.add('fc-not-allowed')\n}\n\n// Returns the mouse cursor to its original look\nexport function enableCursor() {\n document.body.classList.remove('fc-not-allowed')\n}\n\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function preventSelection(el: HTMLElement) {\n el.classList.add('fc-unselectable')\n el.addEventListener('selectstart', preventDefault)\n}\n\nexport function allowSelection(el: HTMLElement) {\n el.classList.remove('fc-unselectable')\n el.removeEventListener('selectstart', preventDefault)\n}\n\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function preventContextMenu(el: HTMLElement) {\n el.addEventListener('contextmenu', preventDefault)\n}\n\nexport function allowContextMenu(el: HTMLElement) {\n el.removeEventListener('contextmenu', preventDefault)\n}\n\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport interface OrderSpec<Subject> {\n field?: string\n order?: number\n func?: FieldSpecInputFunc<Subject>\n}\n\nexport type FieldSpecInput<Subject> = string | string[] | FieldSpecInputFunc<Subject> | FieldSpecInputFunc<Subject>[]\nexport type FieldSpecInputFunc<Subject> = (a: Subject, b: Subject) => number\n\nexport function parseFieldSpecs<Subject>(input: FieldSpecInput<Subject>): OrderSpec<Subject>[] {\n let specs: OrderSpec<Subject>[] = []\n let tokens = []\n let i\n let token\n\n if (typeof input === 'string') {\n tokens = input.split(/\\s*,\\s*/)\n } else if (typeof input === 'function') {\n tokens = [input]\n } else if (Array.isArray(input)) {\n tokens = input\n }\n\n for (i = 0; i < tokens.length; i += 1) {\n token = tokens[i]\n\n if (typeof token === 'string') {\n specs.push(\n token.charAt(0) === '-' ?\n { field: token.substring(1), order: -1 } :\n { field: token, order: 1 },\n )\n } else if (typeof token === 'function') {\n specs.push({ func: token })\n }\n }\n\n return specs\n}\n\nexport function compareByFieldSpecs<Subject>(obj0: Subject, obj1: Subject, fieldSpecs: OrderSpec<Subject>[]): number {\n let i\n let cmp\n\n for (i = 0; i < fieldSpecs.length; i += 1) {\n cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i])\n if (cmp) {\n return cmp\n }\n }\n\n return 0\n}\n\nexport function compareByFieldSpec<Subject>(obj0: Subject, obj1: Subject, fieldSpec: OrderSpec<Subject>): number {\n if (fieldSpec.func) {\n return fieldSpec.func(obj0, obj1)\n }\n\n return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])\n * (fieldSpec.order || 1)\n}\n\nexport function flexibleCompare(a, b) {\n if (!a && !b) {\n return 0\n }\n if (b == null) {\n return -1\n }\n if (a == null) {\n return 1\n }\n if (typeof a === 'string' || typeof b === 'string') {\n return String(a).localeCompare(String(b))\n }\n return a - b\n}\n\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function padStart(val, len) { // doesn't work with total length more than 3\n let s = String(val)\n return '000'.substr(0, len - s.length) + s\n}\n\nexport function formatWithOrdinals<Args extends any[]>(\n formatter: string | ((...formatterArgs: Args) => string),\n args: Args,\n fallbackText: string,\n) {\n if (typeof formatter === 'function') {\n return formatter(...args)\n }\n if (typeof formatter === 'string') { // non-blank string\n return args.reduce((str, arg, index) => (\n str.replace('$' + index, arg || '')\n ), formatter)\n }\n return fallbackText\n}\n\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function compareNumbers(a, b) { // for .sort()\n return a - b\n}\n\nexport function isInt(n) {\n return n % 1 === 0\n}\n\n/* Weird Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function firstDefined(...args) {\n for (let i = 0; i < args.length; i += 1) {\n if (args[i] !== undefined) {\n return args[i]\n }\n }\n return undefined\n}\n\n/* FC-specific DOM dimension stuff\n----------------------------------------------------------------------------------------------------------------------*/\n\nexport function computeSmallestCellWidth(cellEl: HTMLElement) {\n let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame')\n let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion')\n\n if (!allWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-frame className') // TODO: use const\n }\n if (!contentWidthEl) {\n throw new Error('needs fc-scrollgrid-shrink-cushion className')\n }\n\n return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border\n contentWidthEl.getBoundingClientRect().width\n}\n","import { Duration } from './duration.js'\n\nexport type DateMarker = Date\n\nexport const DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']\n\n// Adding\n\nexport function addWeeks(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[2] += n * 7\n return arrayToUtcDate(a)\n}\n\nexport function addDays(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[2] += n\n return arrayToUtcDate(a)\n}\n\nexport function addMs(m: DateMarker, n: number) {\n let a = dateToUtcArray(m)\n a[6] += n\n return arrayToUtcDate(a)\n}\n\n// Diffing (all return floats)\n// TODO: why not use ranges?\n\nexport function diffWeeks(m0, m1) {\n return diffDays(m0, m1) / 7\n}\n\nexport function diffDays(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24)\n}\n\nexport function diffHours(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60)\n}\n\nexport function diffMinutes(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / (1000 * 60)\n}\n\nexport function diffSeconds(m0, m1) {\n return (m1.valueOf() - m0.valueOf()) / 1000\n}\n\nexport function diffDayAndTime(m0: DateMarker, m1: DateMarker): Duration {\n let m0day = startOfDay(m0)\n let m1day = startOfDay(m1)\n\n return {\n years: 0,\n months: 0,\n days: Math.round(diffDays(m0day, m1day)),\n milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),\n }\n}\n\n// Diffing Whole Units\n\nexport function diffWholeWeeks(m0: DateMarker, m1: DateMarker): number {\n let d = diffWholeDays(m0, m1)\n\n if (d !== null && d % 7 === 0) {\n return d / 7\n }\n\n return null\n}\n\nexport function diffWholeDays(m0: DateMarker, m1: DateMarker): number {\n if (timeAsMs(m0) === timeAsMs(m1)) {\n return Math.round(diffDays(m0, m1))\n }\n return null\n}\n\n// Start-Of\n\nexport function startOfDay(m: DateMarker): DateMarker {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n ])\n}\n\nexport function startOfHour(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n ])\n}\n\nexport function startOfMinute(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n ])\n}\n\nexport function startOfSecond(m: DateMarker) {\n return arrayToUtcDate([\n m.getUTCFullYear(),\n m.getUTCMonth(),\n m.getUTCDate(),\n m.getUTCHours(),\n m.getUTCMinutes(),\n m.getUTCSeconds(),\n ])\n}\n\n// Week Computation\n\nexport function weekOfYear(marker, dow, doy) {\n let y = marker.getUTCFullYear()\n let w = weekOfGivenYear(marker, y, dow, doy)\n\n if (w < 1) {\n return weekOfGivenYear(marker, y - 1, dow, doy)\n }\n\n let nextW = weekOfGivenYear(marker, y + 1, dow, doy)\n if (nextW >= 1) {\n return Math.min(w, nextW)\n }\n\n return w\n}\n\nfunction weekOfGivenYear(marker, year, dow, doy) {\n let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)])\n let dayStart = startOfDay(marker)\n let days = Math.round(diffDays(firstWeekStart, dayStart))\n\n return Math.floor(days / 7) + 1 // zero-indexed\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n let fwd = 7 + dow - doy\n\n // first-week day local weekday -- which local weekday is fwd\n let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7\n\n return -fwdlw + fwd - 1\n}\n\n// Array Conversion\n\nexport function dateToLocalArray(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ]\n}\n\nexport function arrayToLocalDate(a) {\n return new Date(\n a[0],\n a[1] || 0,\n a[2] == null ? 1 : a[2], // day of month\n a[3] || 0,\n a[4] || 0,\n a[5] || 0,\n )\n}\n\nexport function dateToUtcArray(date) {\n return [\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds(),\n ]\n}\n\nexport function arrayToUtcDate(a) {\n // according to web standards (and Safari), a month index is required.\n // massage if only given a year.\n if (a.length === 1) {\n a = a.concat([0])\n }\n\n return new Date(Date.UTC(...(a as [any, any])))\n}\n\n// Other Utils\n\nexport function isValidDate(m: DateMarker) {\n return !isNaN(m.valueOf())\n}\n\nexport function timeAsMs(m: DateMarker) {\n return m.getUTCHours() * 1000 * 60 * 60 +\n m.getUTCMinutes() * 1000 * 60 +\n m.getUTCSeconds() * 1000 +\n m.getUTCMilliseconds()\n}\n","import { DateMarker, arrayToUtcDate, dateToUtcArray } from './marker.js'\n\nexport interface CalendarSystem {\n getMarkerYear(d: DateMarker): number\n getMarkerMonth(d: DateMarker): number\n getMarkerDay(d: DateMarker): number\n arrayToMarker(arr: number[]): DateMarker\n markerToArray(d: DateMarker): number[]\n}\n\nlet calendarSystemClassMap = {}\n\nexport function registerCalendarSystem(name, theClass) {\n calendarSystemClassMap[name] = theClass\n}\n\nexport function createCalendarSystem(name) {\n return new calendarSystemClassMap[name]()\n}\n\nclass GregorianCalendarSystem implements CalendarSystem {\n getMarkerYear(d: DateMarker) {\n return d.getUTCFullYear()\n }\n\n getMarkerMonth(d: DateMarker) {\n return d.getUTCMonth()\n }\n\n getMarkerDay(d: DateMarker) {\n return d.getUTCDate()\n }\n\n arrayToMarker(arr) {\n return arrayToUtcDate(arr)\n }\n\n markerToArray(marker) {\n return dateToUtcArray(marker)\n }\n}\n\nregisterCalendarSystem('gregory', GregorianCalendarSystem)\n","import { isInt } from '../util/misc.js'\n\nexport type DurationInput = DurationObjectInput | string | number\n\nexport interface DurationObjectInput {\n years?: number\n year?: number\n months?: number\n month?: number\n weeks?: number\n week?: number\n days?: number\n day?: number\n hours?: number\n hour?: number\n minutes?: number\n minute?: number\n seconds?: number\n second?: number\n milliseconds?: number\n millisecond?: number\n ms?: number\n}\n\nexport interface Duration {\n years: number\n months: number\n days: number\n milliseconds: number\n specifiedWeeks?: boolean\n}\n\nconst INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds']\nconst PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/\n\n// Parsing and Creation\n\nexport function createDuration(input: DurationInput, unit?: string): Duration | null {\n if (typeof input === 'string') {\n return parseString(input)\n }\n\n if (typeof input === 'object' && input) { // non-null object\n return parseObject(input)\n }\n\n if (typeof input === 'number') {\n return parseObject({ [unit || 'milliseconds']: input })\n }\n return null\n}\n\nfunction parseString(s: string): Duration {\n let m = PARSE_RE.exec(s)\n if (m) {\n let sign = m[1] ? -1 : 1\n return {\n years: 0,\n months: 0,\n days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n milliseconds: sign * (\n (m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds\n (m[6] ? parseInt(m[6], 10) : 0) // ms\n ),\n }\n }\n return null\n}\n\nfunction parseObject(obj: DurationObjectInput): Duration {\n let duration: Duration = {\n years: obj.years || obj.year || 0,\n months: obj.months || obj.month || 0,\n days: obj.days || obj.day || 0,\n milliseconds:\n (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n (obj.seconds || obj.second || 0) * 1000 + // seconds\n (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms\n }\n\n let weeks = obj.weeks || obj.week\n if (weeks) {\n duration.days += weeks * 7\n duration.specifiedWeeks = true\n }\n\n return duration\n}\n\n// Equality\n\nexport function durationsEqual(d0: Duration, d1: Duration): boolean {\n return d0.years === d1.years &&\n d0.months === d1.months &&\n d0.days === d1.days &&\n d0.milliseconds === d1.milliseconds\n}\n\nexport function asCleanDays(dur: Duration) {\n if (!dur.years && !dur.months && !dur.milliseconds) {\n return dur.days\n }\n return 0\n}\n\n// Simple Math\n\nexport function addDurations(d0: Duration, d1: Duration) {\n return {\n years: d0.years + d1.years,\n months: d0.months + d1.months,\n days: d0.days + d1.days,\n milliseconds: d0.milliseconds + d1.milliseconds,\n }\n}\n\nexport function subtractDurations(d1: Duration, d0: Duration): Duration {\n return {\n years: d1.years - d0.years,\n months: d1.months - d0.months,\n days: d1.days - d0.days,\n milliseconds: d1.milliseconds - d0.milliseconds,\n }\n}\n\nexport function multiplyDuration(d: Duration, n: number) {\n return {\n years: d.years * n,\n months: d.months * n,\n days: d.days * n,\n milliseconds: d.milliseconds * n,\n }\n}\n\n// Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\n\nexport function asRoughYears(dur: Duration) {\n return asRoughDays(dur) / 365\n}\n\nexport function asRoughMonths(dur: Duration) {\n return asRoughDays(dur) / 30\n}\n\nexport function asRoughDays(dur: Duration) {\n return asRoughMs(dur) / 864e5\n}\n\nexport function asRoughHours(dur: Duration) {\n return asRoughMs(dur) / (1000 * 60 * 60)\n}\n\nexport function asRoughMinutes(dur: Duration) {\n return asRoughMs(dur) / (1000 * 60)\n}\n\nexport function asRoughSeconds(dur: Duration) {\n return asRoughMs(dur) / 1000\n}\n\nexport function asRoughMs(dur: Duration) {\n return dur.years * (365 * 864e5) +\n dur.months * (30 * 864e5) +\n dur.days * 864e5 +\n dur.milliseconds\n}\n\n// Advanced Math\n\nexport function wholeDivideDurations(numerator: Duration, denominator: Duration): number {\n let res = null\n\n for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {\n let unit = INTERNAL_UNITS[i]\n\n if (denominator[unit]) {\n let localRes = numerator[unit] / denominator[unit]\n\n if (!isInt(localRes) || (res !== null && res !== localRes)) {\n return null\n }\n\n res = localRes\n } else if (numerator[unit]) {\n // needs to divide by something but can't!\n return null\n }\n }\n\n return res\n}\n\nexport function greatestDurationDenominator(dur: Duration) {\n let ms = dur.milliseconds\n if (ms) {\n if (ms % 1000 !== 0) {\n return { unit: 'millisecond', value: ms }\n }\n if (ms % (1000 * 60) !== 0) {\n return { unit: 'second', value: ms / 1000 }\n }\n if (ms % (1000 * 60 * 60) !== 0) {\n return { unit: 'minute', value: ms / (1000 * 60) }\n }\n if (ms) {\n return { unit: 'hour', value: ms / (1000 * 60 * 60) }\n }\n }\n if (dur.days) {\n if (dur.specifiedWeeks && dur.days % 7 === 0) {\n return { unit: 'week', value: dur.days / 7 }\n }\n return { unit: 'day', value: dur.days }\n }\n if (dur.months) {\n return { unit: 'month', value: dur.months }\n }\n if (dur.years) {\n return { unit: 'year', value: dur.years }\n }\n return { unit: 'millisecond', value: 0 }\n}\n","import { DateMarker } from './marker.js'\nimport { padStart } from '../util/misc.js'\n\n// timeZoneOffset is in minutes\nexport function buildIsoString(marker: DateMarker, timeZoneOffset?: number, stripZeroTime: boolean = false) {\n let s = marker.toISOString()\n\n s = s.replace('.000', '')\n\n if (stripZeroTime) {\n s = s.replace('T00:00:00Z', '')\n }\n\n if (s.length > 10) { // time part wasn't stripped, can add timezone info\n if (timeZoneOffset == null) {\n s = s.replace('Z', '')\n } else if (timeZoneOffset !== 0) {\n s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true))\n }\n // otherwise, its UTC-0 and we want to keep the Z\n }\n\n return s\n}\n\n// formats the date, but with no time part\n// TODO: somehow merge with buildIsoString and stripZeroTime\n// TODO: rename. omit \"string\"\nexport function formatDayString(marker: DateMarker) {\n return marker.toISOString().replace(/T.*$/, '')\n}\n\n// TODO: use Date::toISOString and use everything after the T?\nexport function formatIsoTimeString(marker: DateMarker) {\n return padStart(marker.getUTCHours(), 2) + ':' +\n padStart(marker.getUTCMinutes(), 2) + ':' +\n padStart(marker.getUTCSeconds(), 2)\n}\n\nexport function formatTimeZoneOffset(minutes: number, doIso = false) {\n let sign = minutes < 0 ? '-' : '+'\n let abs = Math.abs(minutes)\n let hours = Math.floor(abs / 60)\n let mins = Math.round(abs % 60)\n\n if (doIso) {\n return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`\n }\n return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`\n}\n","import { isValidDate } from './marker.js'\n\nconst ISO_RE = /^\\s*(\\d{4})(-?(\\d{2})(-?(\\d{2})([T ](\\d{2}):?(\\d{2})(:?(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/\n\nexport function parse(str) {\n let m = ISO_RE.exec(str)\n\n if (m) {\n let marker = new Date(Date.UTC(\n Number(m[1]),\n m[3] ? Number(m[3]) - 1 : 0,\n Number(m[5] || 1),\n Number(m[7] || 0),\n Number(m[8] || 0),\n Number(m[10] || 0),\n m[12] ? Number(`0.${m[12]}`) * 1000 : 0,\n ))\n\n if (isValidDate(marker)) {\n let timeZoneOffset = null\n\n if (m[13]) {\n timeZoneOffset = (m[15] === '-' ? -1 : 1) * (\n Number(m[16] || 0) * 60 +\n Number(m[18] || 0)\n )\n }\n\n return {\n marker,\n isTimeUnspecified: !m[6],\n timeZoneOffset,\n }\n }\n }\n\n return null\n}\n","import {\n DateMarker, addMs,\n diffHours, diffMinutes, diffSeconds, diffWholeWeeks, diffWholeDays,\n startOfDay, startOfHour, startOfMinute, startOfSecond,\n weekOfYear, arrayToUtcDate, dateToUtcArray, dateToLocalArray, arrayToLocalDate, timeAsMs, isValidDate,\n} from './marker.js'\nimport { CalendarSystem, createCalendarSystem } from './calendar-system.js'\nimport { Locale } from './locale.js'\nimport { NamedTimeZoneImpl, NamedTimeZoneImplClass } from './timezone.js'\nimport { Duration, asRoughYears, asRoughMonths, asRoughDays, asRoughMs } from './duration.js'\nimport { DateFormatter, CmdFormatterFunc } from './DateFormatter.js'\nimport { buildIsoString } from './formatting-utils.js'\nimport { parse } from './parsing.js'\nimport { isInt } from '../util/misc.js'\n\nexport type WeekNumberCalculation = 'local' | 'ISO' | ((m: Date) => number)\n\nexport interface DateEnvSettings {\n timeZone: string\n namedTimeZoneImpl?: NamedTimeZoneImplClass\n calendarSystem: string\n locale: Locale\n weekNumberCalculation?: WeekNumberCalculation\n firstDay?: number, // will override what the locale wants\n weekText?: string,\n weekTextLong?: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator?: string\n}\n\nexport type DateInput = Date | string | number | number[]\n\nexport interface DateMarkerMeta {\n marker: DateMarker\n isTimeUnspecified: boolean\n forcedTzo: number | null\n}\n\nexport class DateEnv {\n timeZone: string\n namedTimeZoneImpl: NamedTimeZoneImpl\n canComputeOffset: boolean\n\n calendarSystem: CalendarSystem\n locale: Locale\n weekDow: number // which day begins the week\n weekDoy: number // which day must be within the year, for computing the first week number\n weekNumberFunc: any\n weekText: string // DON'T LIKE how options are confused with local\n weekTextLong: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator: string\n\n constructor(settings: DateEnvSettings) {\n let timeZone = this.timeZone = settings.timeZone\n let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'\n\n if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone)\n }\n\n this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl)\n\n this.calendarSystem = createCalendarSystem(settings.calendarSystem)\n this.locale = settings.locale\n this.weekDow = settings.locale.week.dow\n this.weekDoy = settings.locale.week.doy\n\n if (settings.weekNumberCalculation === 'ISO') {\n this.weekDow = 1\n this.weekDoy = 4\n }\n\n if (typeof settings.firstDay === 'number') {\n this.weekDow = settings.firstDay\n }\n\n if (typeof settings.weekNumberCalculation === 'function') {\n this.weekNumberFunc = settings.weekNumberCalculation\n }\n\n this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText\n this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText\n\n this.cmdFormatter = settings.cmdFormatter\n this.defaultSeparator = settings.defaultSeparator\n }\n\n // Creating / Parsing\n\n createMarker(input: DateInput): DateMarker {\n let meta = this.createMarkerMeta(input)\n if (meta === null) {\n return null\n }\n return meta.marker\n }\n\n createNowMarker(): DateMarker {\n if (this.canComputeOffset) {\n return this.timestampToMarker(new Date().valueOf())\n }\n // if we can't compute the current date val for a timezone,\n // better to give the current local date vals than UTC\n return arrayToUtcDate(dateToLocalArray(new Date()))\n }\n\n createMarkerMeta(input: DateInput): DateMarkerMeta {\n if (typeof input === 'string') {\n return this.parse(input)\n }\n\n let marker = null\n\n if (typeof input === 'number') {\n marker = this.timestampToMarker(input)\n } else if (input instanceof Date) {\n input = input.valueOf()\n\n if (!isNaN(input)) {\n marker = this.timestampToMarker(input)\n }\n } else if (Array.isArray(input)) {\n marker = arrayToUtcDate(input)\n }\n\n if (marker === null || !isValidDate(marker)) {\n return null\n }\n\n return { marker, isTimeUnspecified: false, forcedTzo: null }\n }\n\n parse(s: string) {\n let parts = parse(s)\n if (parts === null) {\n return null\n }\n\n let { marker } = parts\n let forcedTzo = null\n\n if (parts.timeZoneOffset !== null) {\n if (this.canComputeOffset) {\n marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000)\n } else {\n forcedTzo = parts.timeZoneOffset\n }\n }\n\n return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo }\n }\n\n // Accessors\n\n getYear(marker: DateMarker): number {\n return this.calendarSystem.getMarkerYear(marker)\n }\n\n getMonth(marker: DateMarker): number {\n return this.calendarSystem.getMarkerMonth(marker)\n }\n\n // Adding / Subtracting\n\n add(marker: DateMarker, dur: Duration): DateMarker {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] += dur.years\n a[1] += dur.months\n a[2] += dur.days\n a[6] += dur.milliseconds\n return this.calendarSystem.arrayToMarker(a)\n }\n\n subtract(marker: DateMarker, dur: Duration): DateMarker {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] -= dur.years\n a[1] -= dur.months\n a[2] -= dur.days\n a[6] -= dur.milliseconds\n return this.calendarSystem.arrayToMarker(a)\n }\n\n addYears(marker: DateMarker, n: number) {\n let a = this.calendarSystem.markerToArray(marker)\n a[0] += n\n return this.calendarSystem.arrayToMarker(a)\n }\n\n addMonths(marker: DateMarker, n: number) {\n let a = this.calendarSystem.markerToArray(marker)\n a[1] += n\n return this.calendarSystem.arrayToMarker(a)\n }\n\n // Diffing Whole Units\n\n diffWholeYears(m0: DateMarker, m1: DateMarker): number {\n let { calendarSystem } = this\n\n if (\n timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&\n calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)\n ) {\n return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)\n }\n return null\n }\n\n diffWholeMonths(m0: DateMarker, m1: DateMarker): number {\n let { calendarSystem } = this\n\n if (\n timeAsMs(m0) === timeAsMs(m1) &&\n calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)\n ) {\n return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +\n (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12\n }\n return null\n }\n\n // Range / Duration\n\n greatestWholeUnit(m0: DateMarker, m1: DateMarker) {\n let n = this.diffWholeYears(m0, m1)\n\n if (n !== null) {\n return { unit: 'year', value: n }\n }\n\n n = this.diffWholeMonths(m0, m1)\n\n if (n !== null) {\n return { unit: 'month', value: n }\n }\n\n n = diffWholeWeeks(m0, m1)\n\n if (n !== null) {\n return { unit: 'week', value: n }\n }\n\n n = diffWholeDays(m0, m1)\n\n if (n !== null) {\n return { unit: 'day', value: n }\n }\n\n n = diffHours(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'hour', value: n }\n }\n\n n = diffMinutes(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'minute', value: n }\n }\n\n n = diffSeconds(m0, m1)\n\n if (isInt(n)) {\n return { unit: 'second', value: n }\n }\n\n return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }\n }\n\n countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration) {\n // TODO: can use greatestWholeUnit\n let diff\n\n if (d.years) {\n diff = this.diffWholeYears(m0, m1)\n if (diff !== null) {\n return diff / asRoughYears(d)\n }\n }\n\n if (d.months) {\n diff = this.diffWholeMonths(m0, m1)\n if (diff !== null) {\n return diff / asRoughMonths(d)\n }\n }\n\n if (d.days) {\n diff = diffWholeDays(m0, m1)\n if (diff !== null) {\n return diff / asRoughDays(d)\n }\n }\n\n return (m1.valueOf() - m0.valueOf()) / asRoughMs(d)\n }\n\n // Start-Of\n // these DON'T return zoned-dates. only UTC start-of dates\n\n startOf(m: DateMarker, unit: string) {\n if (unit === 'year') {\n return this.startOfYear(m)\n }\n if (unit === 'month') {\n return this.startOfMonth(m)\n }\n if (unit === 'week') {\n return this.startOfWeek(m)\n }\n if (unit === 'day') {\n return startOfDay(m)\n }\n if (unit === 'hour') {\n return startOfHour(m)\n }\n if (unit === 'minute') {\n return startOfMinute(m)\n }\n if (unit === 'second') {\n return startOfSecond(m)\n }\n return null\n }\n\n startOfYear(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n ])\n }\n\n startOfMonth(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n ])\n }\n\n startOfWeek(m: DateMarker): DateMarker {\n return this.calendarSystem.arrayToMarker([\n this.calendarSystem.getMarkerYear(m),\n this.calendarSystem.getMarkerMonth(m),\n m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),\n ])\n }\n\n // Week Number\n\n computeWeekNumber(marker: DateMarker): number {\n if (this.weekNumberFunc) {\n return this.weekNumberFunc(this.toDate(marker))\n }\n return weekOfYear(marker, this.weekDow, this.weekDoy)\n }\n\n // TODO: choke on timeZoneName: long\n format(marker: DateMarker, formatter: DateFormatter, dateOptions: { forcedTzo?: number } = {}) {\n return formatter.format(\n {\n marker,\n timeZoneOffset: dateOptions.forcedTzo != null ?\n dateOptions.forcedTzo :\n this.offsetForMarker(marker),\n },\n this,\n )\n }\n\n formatRange(\n start: DateMarker,\n end: DateMarker,\n formatter: DateFormatter,\n dateOptions: { forcedStartTzo?: number, forcedEndTzo?: number, isEndExclusive?: boolean, defaultSeparator?: string } = {},\n ) {\n if (dateOptions.isEndExclusive) {\n end = addMs(end, -1)\n }\n\n return formatter.formatRange(\n {\n marker: start,\n timeZoneOffset: dateOptions.forcedStartTzo != null ?\n dateOptions.forcedStartTzo :\n this.offsetForMarker(start),\n },\n {\n marker: end,\n timeZoneOffset: dateOptions.forcedEndTzo != null ?\n dateOptions.forcedEndTzo :\n this.offsetForMarker(end),\n },\n this,\n dateOptions.defaultSeparator,\n )\n }\n\n /*\n DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,\n might as well use buildIsoString or some other util directly\n */\n formatIso(marker: DateMarker, extraOptions: any = {}) {\n let timeZoneOffset = null\n\n if (!extraOptions.omitTimeZoneOffset) {\n if (extraOptions.forcedTzo != null) {\n timeZoneOffset = extraOptions.forcedTzo\n } else {\n timeZoneOffset = this.offsetForMarker(marker)\n }\n }\n\n return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime)\n }\n\n // TimeZone\n\n timestampToMarker(ms: number) {\n if (this.timeZone === 'local') {\n return arrayToUtcDate(dateToLocalArray(new Date(ms)))\n } if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n return new Date(ms)\n }\n return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms))\n }\n\n offsetForMarker(m: DateMarker) {\n if (this.timeZone === 'local') {\n return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset() // convert \"inverse\" offset to \"normal\" offset\n } if (this.timeZone === 'UTC') {\n return 0\n } if (this.namedTimeZoneImpl) {\n return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m))\n }\n return null\n }\n\n // Conversion\n\n toDate(m: DateMarker, forcedTzo?: number): Date {\n if (this.timeZone === 'local') {\n return arrayToLocalDate(dateToUtcArray(m))\n }\n\n if (this.timeZone === 'UTC') {\n return new Date(m.valueOf()) // make sure it's a copy\n }\n\n if (!this.namedTimeZoneImpl) {\n return new Date(m.valueOf() - (forcedTzo || 0))\n }\n\n return new Date(\n m.valueOf() -\n this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60, // convert minutes -> ms\n )\n }\n}\n","import { CalendarOptionsRefined } from '../options.js'\n\nexport class Theme {\n // settings. default values are set after the class\n classes: any\n iconClasses: any\n rtlIconClasses: any\n baseIconClass: string // className that ALL icon elements for this theme should have\n iconOverrideOption: any // the name of the setting to use for icons. the subclass must set this.\n iconOverrideCustomButtonOption: any // the name of the setting, *within* each customButtons object, to use for icons\n iconOverridePrefix: string\n\n constructor(calendarOptions: CalendarOptionsRefined) {\n if (this.iconOverrideOption) {\n this.setIconOverride(\n calendarOptions[this.iconOverrideOption],\n )\n }\n }\n\n setIconOverride(iconOverrideHash) {\n let iconClassesCopy\n let buttonName\n\n if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object\n iconClassesCopy = { ...this.iconClasses }\n\n for (buttonName in iconOverrideHash) {\n iconClassesCopy[buttonName] = this.applyIconOverridePrefix(\n iconOverrideHash[buttonName],\n )\n }\n\n this.iconClasses = iconClassesCopy\n } else if (iconOverrideHash === false) {\n this.iconClasses = {}\n }\n }\n\n applyIconOverridePrefix(className) {\n let prefix = this.iconOverridePrefix\n\n if (prefix && className.indexOf(prefix) !== 0) { // if not already present\n className = prefix + className\n }\n\n return className\n }\n\n getClass(key) {\n return this.classes[key] || ''\n }\n\n getIconClass(buttonName, isRtl?: boolean) {\n let className\n\n if (isRtl && this.rtlIconClasses) {\n className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName]\n } else {\n className = this.iconClasses[buttonName]\n }\n\n if (className) {\n return `${this.baseIconClass} ${className}`\n }\n\n return ''\n }\n\n getCustomButtonIconClass(customButtonProps) {\n let className\n\n if (this.iconOverrideCustomButtonOption) {\n className = customButtonProps[this.iconOverrideCustomButtonOption]\n\n if (className) {\n return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`\n }\n }\n\n return ''\n }\n}\n\nTheme.prototype.classes = {}\nTheme.prototype.iconClasses = {}\nTheme.prototype.baseIconClass = ''\nTheme.prototype.iconOverridePrefix = ''\n\nexport type ThemeClass = { new(calendarOptions: any): Theme }\n","import { DateMarker, timeAsMs } from './marker.js'\nimport { CalendarSystem } from './calendar-system.js'\nimport { Locale } from './locale.js'\nimport { DateFormatter, DateFormattingContext } from './DateFormatter.js'\nimport { ZonedMarker } from './zoned-marker.js'\nimport { formatTimeZoneOffset } from './formatting-utils.js'\nimport { memoize } from '../util/memoize.js'\n\nconst EXTENDED_SETTINGS_AND_SEVERITIES = {\n week: 3,\n separator: 0, // 0 = not applicable\n omitZeroMinute: 0,\n meridiem: 0, // like am/pm\n omitCommas: 0,\n}\n\nconst STANDARD_DATE_PROP_SEVERITIES = {\n timeZoneName: 7,\n era: 6,\n year: 5,\n month: 4,\n day: 2,\n weekday: 2,\n hour: 1,\n minute: 1,\n second: 1,\n}\n\nconst MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i // eats up leading spaces too\nconst COMMA_RE = /,/g // we need re for globalness\nconst MULTI_SPACE_RE = /\\s+/g\nconst LTR_RE = /\\u200e/g // control character\nconst UTC_RE = /UTC|GMT/\n\nexport interface NativeFormatterOptions extends Intl.DateTimeFormatOptions {\n week?: 'long' | 'short' | 'narrow' | 'numeric'\n meridiem?: 'lowercase' | 'short' | 'narrow' | boolean\n omitZeroMinute?: boolean\n omitCommas?: boolean\n separator?: string\n}\n\nexport class NativeFormatter implements DateFormatter {\n standardDateProps: any\n extendedSettings: any\n severity: number\n private buildFormattingFunc: typeof buildFormattingFunc // caching for efficiency with same date env\n\n constructor(formatSettings: NativeFormatterOptions) {\n let standardDateProps: any = {}\n let extendedSettings: any = {}\n let severity = 0\n\n for (let name in formatSettings) {\n if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n extendedSettings[name] = formatSettings[name]\n severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity)\n } else {\n standardDateProps[name] = formatSettings[name]\n\n if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity\n severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity)\n }\n }\n }\n\n this.standardDateProps = standardDateProps\n this.extendedSettings = extendedSettings\n this.severity = severity\n\n this.buildFormattingFunc = memoize(buildFormattingFunc)\n }\n\n format(date: ZonedMarker, context: DateFormattingContext) {\n return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date)\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n let { standardDateProps, extendedSettings } = this\n\n let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem)\n if (!diffSeverity) {\n return this.format(start, context)\n }\n\n let biggestUnitForPartial = diffSeverity\n if (\n biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time\n (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&\n (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&\n (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')\n ) {\n biggestUnitForPartial = 1 // make it look like the dates are only different in terms of time\n }\n\n let full0 = this.format(start, context)\n let full1 = this.format(end, context)\n\n if (full0 === full1) {\n return full0\n }\n\n let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial)\n let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context)\n let partial0 = partialFormattingFunc(start)\n let partial1 = partialFormattingFunc(end)\n\n let insertion = findCommonInsertion(full0, partial0, full1, partial1)\n let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || ''\n\n if (insertion) {\n return insertion.before + partial0 + separator + partial1 + insertion.after\n }\n\n return full0 + separator + full1\n }\n\n getLargestUnit() {\n switch (this.severity) {\n case 7:\n case 6:\n case 5:\n return 'year'\n case 4:\n return 'month'\n case 3:\n return 'week'\n case 2:\n return 'day'\n default:\n return 'time' // really?\n }\n }\n}\n\nfunction buildFormattingFunc(\n standardDateProps,\n extendedSettings,\n context: DateFormattingContext,\n): (date: ZonedMarker) => string {\n let standardDatePropCnt = Object.keys(standardDateProps).length\n\n if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n return (date: ZonedMarker) => (\n formatTimeZoneOffset(date.timeZoneOffset)\n )\n }\n\n if (standardDatePropCnt === 0 && extendedSettings.week) {\n return (date: ZonedMarker) => (\n formatWeekNumber(\n context.computeWeekNumber(date.marker),\n context.weekText,\n context.weekTextLong,\n context.locale,\n extendedSettings.week,\n )\n )\n }\n\n return buildNativeFormattingFunc(standardDateProps, extendedSettings, context)\n}\n\nfunction buildNativeFormattingFunc(\n standardDateProps,\n extendedSettings,\n context: DateFormattingContext,\n): (date: ZonedMarker) => string {\n standardDateProps = { ...standardDateProps } // copy\n extendedSettings = { ...extendedSettings } // copy\n\n sanitizeSettings(standardDateProps, extendedSettings)\n\n standardDateProps.timeZone = 'UTC' // we leverage the only guaranteed timeZone for our UTC markers\n\n let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps)\n let zeroFormat // needed?\n\n if (extendedSettings.omitZeroMinute) {\n let zeroProps = { ...standardDateProps }\n delete zeroProps.minute // seconds and ms were already considered in sanitizeSettings\n zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps)\n }\n\n return (date: ZonedMarker) => {\n let { marker } = date\n let format\n\n if (zeroFormat && !marker.getUTCMinutes()) {\n format = zeroFormat\n } else {\n format = normalFormat\n }\n\n let s = format.format(marker)\n\n return postProcess(s, date, standardDateProps, extendedSettings, context)\n }\n}\n\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n // deal with a browser inconsistency where formatting the timezone\n // requires that the hour/minute be present.\n if (standardDateProps.timeZoneName) {\n if (!standardDateProps.hour) {\n standardDateProps.hour = '2-digit'\n }\n if (!standardDateProps.minute) {\n standardDateProps.minute = '2-digit'\n }\n }\n\n // only support short timezone names\n if (standardDateProps.timeZoneName === 'long') {\n standardDateProps.timeZoneName = 'short'\n }\n\n // if requesting to display seconds, MUST display minutes\n if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n delete extendedSettings.omitZeroMinute\n }\n}\n\nfunction postProcess(s: string, date: ZonedMarker, standardDateProps, extendedSettings, context: DateFormattingContext): string {\n s = s.replace(LTR_RE, '') // remove left-to-right control chars. do first. good for other regexes\n\n if (standardDateProps.timeZoneName === 'short') {\n s = injectTzoStr(\n s,\n (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?\n 'UTC' : // important to normalize for IE, which does \"GMT\"\n formatTimeZoneOffset(date.timeZoneOffset),\n )\n }\n\n if (extendedSettings.omitCommas) {\n s = s.replace(COMMA_RE, '').trim()\n }\n\n if (extendedSettings.omitZeroMinute) {\n s = s.replace(':00', '') // zeroFormat doesn't always achieve this\n }\n\n // ^ do anything that might create adjacent spaces before this point,\n // because MERIDIEM_RE likes to eat up loading spaces\n\n if (extendedSettings.meridiem === false) {\n s = s.replace(MERIDIEM_RE, '').trim()\n } else if (extendedSettings.meridiem === 'narrow') { // a/p\n s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase())\n } else if (extendedSettings.meridiem === 'short') { // am/pm\n s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`)\n } else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase\n s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase())\n }\n\n s = s.replace(MULTI_SPACE_RE, ' ')\n s = s.trim()\n\n return s\n}\n\nfunction injectTzoStr(s: string, tzoStr: string): string {\n let replaced = false\n\n s = s.replace(UTC_RE, () => {\n replaced = true\n return tzoStr\n })\n\n // IE11 doesn't include UTC/GMT in the original string, so append to end\n if (!replaced) {\n s += ` ${tzoStr}`\n }\n\n return s\n}\n\nfunction formatWeekNumber(\n num: number,\n weekText: string,\n weekTextLong: string,\n locale: Locale,\n display?: 'numeric' | 'narrow' | 'short' | 'long',\n): string {\n let parts = []\n\n if (display === 'long') {\n parts.push(weekTextLong)\n } else if (display === 'short' || display === 'narrow') {\n parts.push(weekText)\n }\n\n if (display === 'long' || display === 'short') {\n parts.push(' ')\n }\n\n parts.push(locale.simpleNumberFormat.format(num))\n\n if (locale.options.direction === 'rtl') { // TODO: use control characters instead?\n parts.reverse()\n }\n\n return parts.join('')\n}\n\n// Range Formatting Utils\n\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\nfunction computeMarkerDiffSeverity(d0: DateMarker, d1: DateMarker, ca: CalendarSystem) {\n if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n return 5\n }\n if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n return 4\n }\n if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n return 2\n }\n if (timeAsMs(d0) !== timeAsMs(d1)) {\n return 1\n }\n return 0\n}\n\nfunction computePartialFormattingOptions(options, biggestUnit) {\n let partialOptions = {}\n\n for (let name in options) {\n if (\n !(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit\n ) {\n partialOptions[name] = options[name]\n }\n }\n\n return partialOptions\n}\n\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n let i0 = 0\n while (i0 < full0.length) {\n let found0 = full0.indexOf(partial0, i0)\n if (found0 === -1) {\n break\n }\n\n let before0 = full0.substr(0, found0)\n i0 = found0 + partial0.length\n let after0 = full0.substr(i0)\n\n let i1 = 0\n while (i1 < full1.length) {\n let found1 = full1.indexOf(partial1, i1)\n if (found1 === -1) {\n break\n }\n\n let before1 = full1.substr(0, found1)\n i1 = found1 + partial1.length\n let after1 = full1.substr(i1)\n\n if (before0 === before1 && after0 === after1) {\n return {\n before: before0,\n after: after0,\n }\n }\n }\n }\n\n return null\n}\n","import { DateMarker } from './marker.js'\nimport { CalendarSystem } from './calendar-system.js'\n\nexport interface ZonedMarker {\n marker: DateMarker,\n timeZoneOffset: number\n}\n\nexport interface ExpandedZonedMarker extends ZonedMarker {\n array: number[],\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n millisecond: number\n}\n\nexport function expandZonedMarker(dateInfo: ZonedMarker, calendarSystem: CalendarSystem): ExpandedZonedMarker {\n let a = calendarSystem.markerToArray(dateInfo.marker)\n\n return {\n marker: dateInfo.marker,\n timeZoneOffset: dateInfo.timeZoneOffset,\n array: a,\n year: a[0],\n month: a[1],\n day: a[2],\n hour: a[3],\n minute: a[4],\n second: a[5],\n millisecond: a[6],\n }\n}\n","import { DateMarker } from './marker.js'\nimport { CalendarSystem } from './calendar-system.js'\nimport { Locale } from './locale.js'\nimport { ZonedMarker, ExpandedZonedMarker, expandZonedMarker } from './zoned-marker.js'\n\nexport interface VerboseFormattingArg {\n date: ExpandedZonedMarker\n start: ExpandedZonedMarker\n end?: ExpandedZonedMarker\n timeZone: string\n localeCodes: string[],\n defaultSeparator: string\n}\n\nexport function createVerboseFormattingArg(\n start: ZonedMarker,\n end: ZonedMarker,\n context: DateFormattingContext,\n betterDefaultSeparator?: string,\n): VerboseFormattingArg {\n let startInfo = expandZonedMarker(start, context.calendarSystem)\n let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null\n\n return {\n date: startInfo,\n start: startInfo,\n end: endInfo,\n timeZone: context.timeZone,\n localeCodes: context.locale.codes,\n defaultSeparator: betterDefaultSeparator || context.defaultSeparator,\n }\n}\n\nexport type CmdFormatterFunc = (cmd: string, arg: VerboseFormattingArg) => string\n\nexport interface DateFormattingContext {\n timeZone: string,\n locale: Locale,\n calendarSystem: CalendarSystem\n computeWeekNumber: (d: DateMarker) => number\n weekText: string\n weekTextLong: string\n cmdFormatter?: CmdFormatterFunc\n defaultSeparator: string\n}\n\nexport interface DateFormatter {\n format(date: ZonedMarker, context: DateFormattingContext): string\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string): string\n}\n","import { DateFormatter, DateFormattingContext, createVerboseFormattingArg } from './DateFormatter.js'\nimport { ZonedMarker } from './zoned-marker.js'\n\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\nexport class CmdFormatter implements DateFormatter {\n cmdStr: string\n\n constructor(cmdStr: string) {\n this.cmdStr = cmdStr\n }\n\n format(date: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator))\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator))\n }\n}\n","import { DateFormatter, DateFormattingContext, createVerboseFormattingArg, VerboseFormattingArg } from './DateFormatter.js'\nimport { ZonedMarker } from './zoned-marker.js'\n\nexport type FuncFormatterFunc = (arg: VerboseFormattingArg) => string\n\nexport class FuncFormatter implements DateFormatter {\n func: FuncFormatterFunc\n\n constructor(func: FuncFormatterFunc) {\n this.func = func\n }\n\n format(date: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator))\n }\n\n formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, betterDefaultSeparator?: string) {\n return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator))\n }\n}\n","import { NativeFormatter, NativeFormatterOptions } from './formatting-native.js'\nimport { CmdFormatter } from './formatting-cmd.js'\nimport { FuncFormatter, FuncFormatterFunc } from './formatting-func.js'\nimport { DateFormatter } from './DateFormatter.js'\n\nexport type FormatterInput = NativeFormatterOptions | string | FuncFormatterFunc\n\nexport function createFormatter(input: FormatterInput): DateFormatter {\n if (typeof input === 'object' && input) { // non-null object\n return new NativeFormatter(input)\n }\n\n if (typeof input === 'string') {\n return new CmdFormatter(input)\n }\n\n if (typeof input === 'function') {\n return new FuncFormatter(input as FuncFormatterFunc)\n }\n\n return null\n}\n","import { createDuration } from './datelib/duration.js'\nimport { mergeProps, isPropsEqual } from './util/object.js'\nimport { createFormatter } from './datelib/formatting.js'\nimport { parseFieldSpecs } from './util/misc.js'\nimport { DateProfileGeneratorClass } from './DateProfileGenerator.js'\nimport { CalendarApi } from './api/CalendarApi.js'\nimport { ViewApi } from './api/ViewApi.js'\nimport { EventApi } from './api/EventApi.js'\nimport {\n CssDimValue,\n DateInput,\n DateRangeInput,\n BusinessHoursInput,\n EventSourceInput,\n LocaleSingularArg, LocaleInput,\n EventInput, EventInputTransformer,\n OverlapFunc, ConstraintInput, AllowFunc,\n PluginDef,\n ViewComponentType,\n SpecificViewContentArg, SpecificViewMountArg,\n ClassNamesGenerator, CustomContentGenerator, DidMountHandler, WillUnmountHandler,\n NowIndicatorContentArg, NowIndicatorMountArg,\n WeekNumberContentArg, WeekNumberMountArg,\n SlotLaneContentArg, SlotLaneMountArg,\n SlotLabelContentArg, SlotLabelMountArg,\n AllDayContentArg, AllDayMountArg,\n DayHeaderContentArg, DayHeaderMountArg,\n DayCellContentArg, DayCellMountArg,\n ViewContentArg, ViewMountArg,\n EventClickArg,\n EventHoveringArg,\n DateSelectArg, DateUnselectArg,\n WeekNumberCalculation,\n FormatterInput,\n ToolbarInput, CustomButtonInput, ButtonIconsInput, ButtonTextCompoundInput,\n EventContentArg, EventMountArg,\n DatesSetArg,\n EventAddArg, EventChangeArg, EventRemoveArg,\n MoreLinkContentArg,\n MoreLinkMountArg,\n MoreLinkAction,\n ButtonHintCompoundInput,\n CustomRenderingHandler,\n} from './api/structs.js'\n\n// base options\n// ------------\n\nexport const BASE_OPTION_REFINERS = {\n navLinkDayClick: identity as Identity<string | ((this: CalendarApi, date: Date, jsEvent: UIEvent) => void)>,\n navLinkWeekClick: identity as Identity<string | ((this: CalendarApi, weekStart: Date, jsEvent: UIEvent) => void)>,\n duration: createDuration,\n bootstrapFontAwesome: identity as Identity<ButtonIconsInput | false>, // TODO: move to bootstrap plugin\n buttonIcons: identity as Identity<ButtonIconsInput | false>,\n customButtons: identity as Identity<{ [name: string]: CustomButtonInput }>,\n defaultAllDayEventDuration: createDuration,\n defaultTimedEventDuration: createDuration,\n nextDayThreshold: createDuration,\n scrollTime: createDuration,\n scrollTimeReset: Boolean,\n slotMinTime: createDuration,\n slotMaxTime: createDuration,\n dayPopoverFormat: createFormatter,\n slotDuration: createDuration,\n snapDuration: createDuration,\n headerToolbar: identity as Identity<ToolbarInput | false>,\n footerToolbar: identity as Identity<ToolbarInput | false>,\n defaultRangeSeparator: String,\n titleRangeSeparator: String,\n forceEventDuration: Boolean,\n\n dayHeaders: Boolean,\n dayHeaderFormat: createFormatter,\n dayHeaderClassNames: identity as Identity<ClassNamesGenerator<DayHeaderContentArg>>,\n dayHeaderContent: identity as Identity<CustomContentGenerator<DayHeaderContentArg>>,\n dayHeaderDidMount: identity as Identity<DidMountHandler<DayHeaderMountArg>>,\n dayHeaderWillUnmount: identity as Identity<WillUnmountHandler<DayHeaderMountArg>>,\n\n dayCellClassNames: identity as Identity<ClassNamesGenerator<DayCellContentArg>>,\n dayCellContent: identity as Identity<CustomContentGenerator<DayCellContentArg>>,\n dayCellDidMount: identity as Identity<DidMountHandler<DayCellMountArg>>,\n dayCellWillUnmount: identity as Identity<WillUnmountHandler<DayCellMountArg>>,\n\n initialView: String,\n aspectRatio: Number,\n weekends: Boolean,\n\n weekNumberCalculation: identity as Identity<WeekNumberCalculation>,\n weekNumbers: Boolean,\n weekNumberClassNames: identity as Identity<ClassNamesGenerator<WeekNumberContentArg>>,\n weekNumberContent: identity as Identity<CustomContentGenerator<WeekNumberContentArg>>,\n weekNumberDidMount: identity as Identity<DidMountHandler<WeekNumberMountArg>>,\n weekNumberWillUnmount: identity as Identity<WillUnmountHandler<WeekNumberMountArg>>,\n\n editable: Boolean,\n\n viewClassNames: identity as Identity<ClassNamesGenerator<ViewContentArg>>,\n viewDidMount: identity as Identity<DidMountHandler<ViewMountArg>>,\n viewWillUnmount: identity as Identity<WillUnmountHandler<ViewMountArg>>,\n\n nowIndicator: Boolean,\n nowIndicatorClassNames: identity as Identity<ClassNamesGenerator<NowIndicatorContentArg>>,\n nowIndicatorContent: identity as Identity<CustomContentGenerator<NowIndicatorContentArg>>,\n nowIndicatorDidMount: identity as Identity<DidMountHandler<NowIndicatorMountArg>>,\n nowIndicatorWillUnmount: identity as Identity<WillUnmountHandler<NowIndicatorMountArg>>,\n\n showNonCurrentDates: Boolean,\n lazyFetching: Boolean,\n startParam: String,\n endParam: String,\n timeZoneParam: String,\n timeZone: String,\n locales: identity as Identity<LocaleInput[]>,\n locale: identity as Identity<LocaleSingularArg>,\n themeSystem: String as Identity<'standard' | string>,\n dragRevertDuration: Number,\n dragScroll: Boolean,\n allDayMaintainDuration: Boolean,\n unselectAuto: Boolean,\n dropAccept: identity as Identity<string | ((this: CalendarApi, draggable: any) => boolean)>, // TODO: type draggable\n eventOrder: parseFieldSpecs,\n eventOrderStrict: Boolean,\n\n handleWindowResize: Boolean,\n windowResizeDelay: Number,\n longPressDelay: Number,\n eventDragMinDistance: Number,\n expandRows: Boolean,\n height: identity as Identity<CssDimValue>,\n contentHeight: identity as Identity<CssDimValue>,\n direction: String as Identity<'ltr' | 'rtl'>,\n weekNumberFormat: createFormatter,\n eventResizableFromStart: Boolean,\n displayEventTime: Boolean,\n displayEventEnd: Boolean,\n weekText: String, // the short version\n weekTextLong: String, // falls back to weekText\n progressiveEventRendering: Boolean,\n businessHours: identity as Identity<BusinessHoursInput>,\n initialDate: identity as Identity<DateInput>,\n now: identity as Identity<DateInput | ((this: CalendarApi) => DateInput)>,\n eventDataTransform: identity as Identity<EventInputTransformer>,\n stickyHeaderDates: identity as Identity<boolean | 'auto'>,\n stickyFooterScrollbar: identity as Identity<boolean | 'auto'>,\n viewHeight: identity as Identity<CssDimValue>,\n defaultAllDay: Boolean,\n eventSourceFailure: identity as Identity<(this: CalendarApi, error: any) => void>,\n eventSourceSuccess: identity as Identity<(this: CalendarApi, eventsInput: EventInput[], response?: Response) => EventInput[] | void>,\n\n eventDisplay: String, // TODO: give more specific\n eventStartEditable: Boolean,\n eventDurationEditable: Boolean,\n eventOverlap: identity as Identity<boolean | OverlapFunc>,\n eventConstraint: identity as Identity<ConstraintInput>,\n eventAllow: identity as Identity<AllowFunc>,\n eventBackgroundColor: String,\n eventBorderColor: String,\n eventTextColor: String,\n eventColor: String,\n eventClassNames: identity as Identity<ClassNamesGenerator<EventContentArg>>,\n eventContent: identity as Identity<CustomContentGenerator<EventContentArg>>,\n eventDidMount: identity as Identity<DidMountHandler<EventMountArg>>,\n eventWillUnmount: identity as Identity<WillUnmountHandler<EventMountArg>>,\n\n selectConstraint: identity as Identity<ConstraintInput>,\n selectOverlap: identity as Identity<boolean | OverlapFunc>,\n selectAllow: identity as Identity<AllowFunc>,\n\n droppable: Boolean,\n unselectCancel: String,\n\n slotLabelFormat: identity as Identity<FormatterInput | FormatterInput[]>,\n\n slotLaneClassNames: identity as Identity<ClassNamesGenerator<SlotLaneContentArg>>,\n slotLaneContent: identity as Identity<CustomContentGenerator<SlotLaneContentArg>>,\n slotLaneDidMount: identity as Identity<DidMountHandler<SlotLaneMountArg>>,\n slotLaneWillUnmount: identity as Identity<WillUnmountHandler<SlotLaneMountArg>>,\n\n slotLabelClassNames: identity as Identity<ClassNamesGenerator<SlotLabelContentArg>>,\n slotLabelContent: identity as Identity<CustomContentGenerator<SlotLabelContentArg>>,\n slotLabelDidMount: identity as Identity<DidMountHandler<SlotLabelMountArg>>,\n slotLabelWillUnmount: identity as Identity<WillUnmountHandler<SlotLabelMountArg>>,\n\n dayMaxEvents: identity as Identity<boolean | number>,\n dayMaxEventRows: identity as Identity<boolean | number>,\n dayMinWidth: Number,\n slotLabelInterval: createDuration,\n\n allDayText: String,\n allDayClassNames: identity as Identity<ClassNamesGenerator<AllDayContentArg>>,\n allDayContent: identity as Identity<CustomContentGenerator<AllDayContentArg>>,\n allDayDidMount: identity as Identity<DidMountHandler<AllDayMountArg>>,\n allDayWillUnmount: identity as Identity<WillUnmountHandler<AllDayMountArg>>,\n\n slotMinWidth: Number, // move to timeline?\n navLinks: Boolean,\n eventTimeFormat: createFormatter,\n rerenderDelay: Number, // TODO: move to @fullcalendar/core right? nah keep here\n moreLinkText: identity as Identity<string | ((this: CalendarApi, num: number) => string)>, // this not enforced :( check others too\n moreLinkHint: identity as Identity<string | ((this: CalendarApi, num: number) => string)>,\n selectMinDistance: Number,\n selectable: Boolean,\n selectLongPressDelay: Number,\n eventLongPressDelay: Number,\n\n selectMirror: Boolean,\n eventMaxStack: Number,\n eventMinHeight: Number,\n eventMinWidth: Number,\n eventShortHeight: Number,\n slotEventOverlap: Boolean,\n plugins: identity as Identity<PluginDef[]>,\n firstDay: Number,\n dayCount: Number,\n dateAlignment: String,\n dateIncrement: createDuration,\n hiddenDays: identity as Identity<number[]>,\n monthMode: Boolean,\n fixedWeekCount: Boolean,\n validRange: identity as Identity<DateRangeInput | ((this: CalendarApi, nowDate: Date) => DateRangeInput)>, // `this` works?\n visibleRange: identity as Identity<DateRangeInput | ((this: CalendarApi, currentDate: Date) => DateRangeInput)>, // `this` works?\n titleFormat: identity as Identity<FormatterInput>, // DONT parse just yet. we need to inject titleSeparator\n\n eventInteractive: Boolean,\n\n // only used by list-view, but languages define the value, so we need it in base options\n noEventsText: String,\n\n viewHint: identity as Identity<string | ((...args: any[]) => string)>,\n navLinkHint: identity as Identity<string | ((...args: any[]) => string)>,\n closeHint: String,\n timeHint: String,\n eventHint: String,\n\n moreLinkClick: identity as Identity<MoreLinkAction>,\n moreLinkClassNames: identity as Identity<ClassNamesGenerator<MoreLinkContentArg>>,\n moreLinkContent: identity as Identity<CustomContentGenerator<MoreLinkContentArg>>,\n moreLinkDidMount: identity as Identity<DidMountHandler<MoreLinkMountArg>>,\n moreLinkWillUnmount: identity as Identity<WillUnmountHandler<MoreLinkMountArg>>,\n\n // for connectors\n // (can't be part of plugin system b/c must be provided at runtime)\n handleCustomRendering: identity as Identity<CustomRenderingHandler<any>>,\n customRenderingMetaMap: identity as Identity<{ [optionName: string]: any }>,\n customRenderingReplacesEl: Boolean,\n}\n\ntype BuiltInBaseOptionRefiners = typeof BASE_OPTION_REFINERS\n\nexport interface BaseOptionRefiners extends BuiltInBaseOptionRefiners {\n // for ambient-extending\n}\n\nexport type BaseOptions = RawOptionsFromRefiners< // as RawOptions\n Required<BaseOptionRefiners> // Required is a hack for \"Index signature is missing\"\n>\n\n// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.\n// raw values.\nexport const BASE_OPTION_DEFAULTS = {\n eventDisplay: 'auto',\n defaultRangeSeparator: ' - ',\n titleRangeSeparator: ' \\u2013 ', // en dash\n defaultTimedEventDuration: '01:00:00',\n defaultAllDayEventDuration: { day: 1 },\n forceEventDuration: false,\n nextDayThreshold: '00:00:00',\n dayHeaders: true,\n initialView: '',\n aspectRatio: 1.35,\n headerToolbar: {\n start: 'title',\n center: '',\n end: 'today prev,next',\n },\n weekends: true,\n weekNumbers: false,\n weekNumberCalculation: 'local' as WeekNumberCalculation,\n editable: false,\n nowIndicator: false,\n scrollTime: '06:00:00',\n scrollTimeReset: true,\n slotMinTime: '00:00:00',\n slotMaxTime: '24:00:00',\n showNonCurrentDates: true,\n lazyFetching: true,\n startParam: 'start',\n endParam: 'end',\n timeZoneParam: 'timeZone',\n timeZone: 'local', // TODO: throw error if given falsy value?\n locales: [],\n locale: '', // blank values means it will compute based off locales[]\n themeSystem: 'standard',\n dragRevertDuration: 500,\n dragScroll: true,\n allDayMaintainDuration: false,\n unselectAuto: true,\n dropAccept: '*',\n eventOrder: 'start,-duration,allDay,title',\n dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },\n handleWindowResize: true,\n windowResizeDelay: 100, // milliseconds before an updateSize happens\n longPressDelay: 1000,\n eventDragMinDistance: 5, // only applies to mouse\n expandRows: false,\n navLinks: false,\n selectable: false,\n eventMinHeight: 15,\n eventMinWidth: 30,\n eventShortHeight: 30,\n}\n\nexport type BaseOptionsRefined = DefaultedRefinedOptions<\n RefinedOptionsFromRefiners<Required<BaseOptionRefiners>>, // Required is a hack for \"Index signature is missing\"\n keyof typeof BASE_OPTION_DEFAULTS\n>\n\n// calendar listeners\n// ------------------\n\nexport const CALENDAR_LISTENER_REFINERS = {\n datesSet: identity as Identity<(arg: DatesSetArg) => void>,\n eventsSet: identity as Identity<(events: EventApi[]) => void>,\n eventAdd: identity as Identity<(arg: EventAddArg) => void>,\n eventChange: identity as Identity<(arg: EventChangeArg) => void>,\n eventRemove: identity as Identity<(arg: EventRemoveArg) => void>,\n windowResize: identity as Identity<(arg: { view: ViewApi }) => void>,\n eventClick: identity as Identity<(arg: EventClickArg) => void>, // TODO: resource for scheduler????\n eventMouseEnter: identity as Identity<(arg: EventHoveringArg) => void>,\n eventMouseLeave: identity as Identity<(arg: EventHoveringArg) => void>,\n select: identity as Identity<(arg: DateSelectArg) => void>, // resource for scheduler????\n unselect: identity as Identity<(arg: DateUnselectArg) => void>,\n loading: identity as Identity<(isLoading: boolean) => void>,\n\n // internal\n _unmount: identity as Identity<() => void>,\n _beforeprint: identity as Identity<() => void>,\n _afterprint: identity as Identity<() => void>,\n _noEventDrop: identity as Identity<() => void>,\n _noEventResize: identity as Identity<() => void>,\n _resize: identity as Identity<(forced: boolean) => void>,\n _scrollRequest: identity as Identity<(arg: any) => void>,\n}\n\ntype BuiltInCalendarListenerRefiners = typeof CALENDAR_LISTENER_REFINERS\n\nexport interface CalendarListenerRefiners extends BuiltInCalendarListenerRefiners {\n // for ambient extending\n}\n\ntype CalendarListenersLoose = RefinedOptionsFromRefiners<Required<CalendarListenerRefiners>> // Required hack\nexport type CalendarListeners = Required<CalendarListenersLoose> // much more convenient for Emitters and whatnot\n\n// calendar-specific options\n// -------------------------\n\nexport const CALENDAR_OPTION_REFINERS = { // does not include base nor calendar listeners\n buttonText: identity as Identity<ButtonTextCompoundInput>,\n buttonHints: identity as Identity<ButtonHintCompoundInput>,\n views: identity as Identity<{ [viewId: string]: ViewOptions }>,\n plugins: identity as Identity<PluginDef[]>,\n initialEvents: identity as Identity<EventSourceInput>,\n events: identity as Identity<EventSourceInput>,\n eventSources: identity as Identity<EventSourceInput[]>,\n}\n\ntype BuiltInCalendarOptionRefiners = typeof CALENDAR_OPTION_REFINERS\n\nexport interface CalendarOptionRefiners extends BuiltInCalendarOptionRefiners {\n // for ambient-extending\n}\n\nexport type CalendarOptions =\n BaseOptions &\n CalendarListenersLoose &\n RawOptionsFromRefiners<Required<CalendarOptionRefiners>> // Required hack https://github.com/microsoft/TypeScript/issues/15300\n\nexport type CalendarOptionsRefined =\n BaseOptionsRefined &\n CalendarListenersLoose &\n RefinedOptionsFromRefiners<Required<CalendarOptionRefiners>> // Required hack\n\nexport const COMPLEX_OPTION_COMPARATORS: {\n [optionName in keyof CalendarOptions]: (a: CalendarOptions[optionName], b: CalendarOptions[optionName]) => boolean\n} = {\n headerToolbar: isMaybeObjectsEqual,\n footerToolbar: isMaybeObjectsEqual,\n buttonText: isMaybeObjectsEqual,\n buttonHints: isMaybeObjectsEqual,\n buttonIcons: isMaybeObjectsEqual,\n dateIncrement: isMaybeObjectsEqual,\n}\n\nfunction isMaybeObjectsEqual(a, b) {\n if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects\n return isPropsEqual(a, b)\n }\n return a === b\n}\n\n// view-specific options\n// ---------------------\n\nexport const VIEW_OPTION_REFINERS: {\n [name: string]: any\n} = {\n type: String,\n component: identity as Identity<ViewComponentType>,\n buttonText: String,\n buttonTextKey: String, // internal only\n dateProfileGeneratorClass: identity as Identity<DateProfileGeneratorClass>,\n usesMinMaxTime: Boolean, // internal only\n classNames: identity as Identity<ClassNamesGenerator<SpecificViewContentArg>>,\n content: identity as Identity<CustomContentGenerator<SpecificViewContentArg>>,\n didMount: identity as Identity<DidMountHandler<SpecificViewMountArg>>,\n willUnmount: identity as Identity<WillUnmountHandler<SpecificViewMountArg>>,\n}\n\ntype BuiltInViewOptionRefiners = typeof VIEW_OPTION_REFINERS\n\nexport interface ViewOptionRefiners extends BuiltInViewOptionRefiners {\n // for ambient-extending\n}\n\nexport type ViewOptions =\n BaseOptions &\n CalendarListenersLoose &\n RawOptionsFromRefiners<Required<ViewOptionRefiners>> // Required hack\n\nexport type ViewOptionsRefined =\n BaseOptionsRefined &\n CalendarListenersLoose &\n RefinedOptionsFromRefiners<Required<ViewOptionRefiners>> // Required hack\n\n// util funcs\n// ----------------------------------------------------------------------------------------------------\n\nexport function mergeRawOptions(optionSets: Dictionary[]) {\n return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS)\n}\n\nexport function refineProps<Refiners extends GenericRefiners, Raw extends RawOptionsFromRefiners<Refiners>>(\n input: Raw,\n refiners: Refiners,\n): {\n refined: RefinedOptionsFromRefiners<Refiners>,\n extra: Dictionary,\n} {\n let refined = {} as any\n let extra = {} as any\n\n for (let propName in refiners) {\n if (propName in input) {\n refined[propName] = refiners[propName](input[propName])\n }\n }\n\n for (let propName in input) {\n if (!(propName in refiners)) {\n extra[propName] = input[propName]\n }\n }\n\n return { refined, extra }\n}\n\n// definition utils\n// ----------------------------------------------------------------------------------------------------\n\nexport type GenericRefiners = {\n [propName: string]: (input: any) => any\n}\n\nexport type GenericListenerRefiners = {\n [listenerName: string]: Identity<(this: CalendarApi, ...args: any[]) => void>\n}\n\nexport type RawOptionsFromRefiners<Refiners extends GenericRefiners> = {\n [Prop in keyof Refiners]?: // all optional\n Refiners[Prop] extends ((input: infer RawType) => infer RefinedType)\n ? (any extends RawType ? RefinedType : RawType) // if input type `any`, use output (for Boolean/Number/String)\n : never\n}\n\nexport type RefinedOptionsFromRefiners<Refiners extends GenericRefiners> = {\n [Prop in keyof Refiners]?: // all optional\n Refiners[Prop] extends ((input: any) => infer RefinedType) ? RefinedType : never\n}\n\nexport type DefaultedRefinedOptions<RefinedOptions extends Dictionary, DefaultKey extends keyof RefinedOptions> =\n Required<Pick<RefinedOptions, DefaultKey>> &\n Partial<Omit<RefinedOptions, DefaultKey>>\n\nexport type Dictionary = Record<string, any>\n\nexport type Identity<T = any> = (raw: T) => T\n\nexport function identity<T>(raw: T): T {\n return raw\n}\n","import * as preact from 'preact'\nexport * from 'preact'\nexport { createPortal } from 'preact/compat'\n\n/*\nNOTE: this can be a public API, especially createElement for hooks.\nSee examples/typescript-scheduler/src/index.ts\n*/\n\nexport function flushSync(runBeforeFlush) {\n runBeforeFlush()\n\n let oldDebounceRendering = preact.options.debounceRendering // orig\n let callbackQ = []\n\n function execCallbackSync(callback) {\n callbackQ.push(callback)\n }\n\n preact.options.debounceRendering = execCallbackSync\n preact.render(preact.createElement(FakeComponent, {}), document.createElement('div'))\n\n while (callbackQ.length) {\n callbackQ.shift()()\n }\n\n preact.options.debounceRendering = oldDebounceRendering\n}\n\nclass FakeComponent extends preact.Component {\n render() { return preact.createElement('div', {}) }\n componentDidMount() { this.setState({}) }\n}\n\n// TODO: use preact/compat instead?\nexport function createContext<T>(defaultValue: T) {\n let ContextType = preact.createContext<T>(defaultValue)\n let origProvider = ContextType.Provider\n\n ContextType.Provider = function () { // eslint-disable-line func-names\n let isNew = !this.getChildContext\n let children = origProvider.apply(this, arguments as any) // eslint-disable-line prefer-rest-params\n\n if (isNew) {\n let subs = []\n\n this.shouldComponentUpdate = (_props) => {\n if (this.props.value !== _props.value) {\n subs.forEach((c) => {\n c.context = _props.value\n c.forceUpdate()\n })\n }\n }\n\n this.sub = (c) => {\n subs.push(c)\n let old = c.componentWillUnmount\n c.componentWillUnmount = () => {\n subs.splice(subs.indexOf(c), 1)\n old && old.call(c)\n }\n }\n }\n\n return children\n }\n\n return ContextType\n}\n","import { Duration } from './datelib/duration.js'\nimport { Emitter } from './common/Emitter.js'\nimport { CalendarListeners } from './options.js'\n\nexport interface ScrollRequest {\n time?: Duration\n [otherProp: string]: any\n}\n\nexport type ScrollRequestHandler = (request: ScrollRequest) => boolean\n\nexport class ScrollResponder {\n queuedRequest: ScrollRequest\n\n constructor(\n private execFunc: ScrollRequestHandler,\n private emitter: Emitter<CalendarListeners>,\n private scrollTime: Duration,\n private scrollTimeReset: boolean,\n ) {\n emitter.on('_scrollRequest', this.handleScrollRequest)\n this.fireInitialScroll()\n }\n\n detach() {\n this.emitter.off('_scrollRequest', this.handleScrollRequest)\n }\n\n update(isDatesNew: boolean) {\n if (isDatesNew && this.scrollTimeReset) {\n this.fireInitialScroll() // will drain\n } else {\n this.drain()\n }\n }\n\n private fireInitialScroll() {\n this.handleScrollRequest({\n time: this.scrollTime,\n })\n }\n\n private handleScrollRequest = (request: ScrollRequest) => {\n this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request)\n this.drain()\n }\n\n private drain() {\n if (this.queuedRequest && this.execFunc(this.queuedRequest)) {\n this.queuedRequest = null\n }\n }\n}\n","import { CalendarImpl } from './api/CalendarImpl.js'\nimport { ViewImpl } from './api/ViewImpl.js'\nimport { Theme } from './theme/Theme.js'\nimport { DateEnv } from './datelib/env.js'\nimport { PluginHooks } from './plugin-system-struct.js'\nimport { createContext, Context } from './preact.js'\nimport { ScrollResponder, ScrollRequestHandler } from './ScrollResponder.js'\nimport { DateProfileGenerator } from './DateProfileGenerator.js'\nimport { ViewSpec } from './structs/view-spec.js'\nimport { CalendarData } from './reducers/data-types.js'\nimport { Action } from './reducers/Action.js'\nimport { Emitter } from './common/Emitter.js'\nimport { InteractionSettingsInput } from './interactions/interaction.js'\nimport { DateComponent } from './component/DateComponent.js'\nimport { CalendarContext } from './CalendarContext.js'\nimport { createDuration } from './datelib/duration.js'\nimport { ViewOptionsRefined, CalendarListeners } from './options.js'\n\nexport const ViewContextType: Context<any> = createContext<ViewContext>({} as any) // for Components\nexport type ResizeHandler = (force: boolean) => void\n\n/*\nit's important that ViewContext extends CalendarContext so that components that subscribe to ViewContext\ncan pass in their ViewContext to util functions that accept CalendarContext.\n*/\nexport interface ViewContext extends CalendarContext {\n options: ViewOptionsRefined // more specific than BaseOptionsRefined\n theme: Theme\n isRtl: boolean\n dateProfileGenerator: DateProfileGenerator\n viewSpec: ViewSpec\n viewApi: ViewImpl\n addResizeHandler: (handler: ResizeHandler) => void\n removeResizeHandler: (handler: ResizeHandler) => void\n createScrollResponder: (execFunc: ScrollRequestHandler) => ScrollResponder\n registerInteractiveComponent: (component: DateComponent<any>, settingsInput: InteractionSettingsInput) => void\n unregisterInteractiveComponent: (component: DateComponent<any>) => void\n}\n\nexport function buildViewContext(\n viewSpec: ViewSpec,\n viewApi: ViewImpl,\n viewOptions: ViewOptionsRefined,\n dateProfileGenerator: DateProfileGenerator,\n dateEnv: DateEnv,\n theme: Theme,\n pluginHooks: PluginHooks,\n dispatch: (action: Action) => void,\n getCurrentData: () => CalendarData,\n emitter: Emitter<CalendarListeners>,\n calendarApi: CalendarImpl,\n registerInteractiveComponent: (component: DateComponent<any>, settingsInput: InteractionSettingsInput) => void,\n unregisterInteractiveComponent: (component: DateComponent<any>) => void,\n): ViewContext {\n return {\n dateEnv,\n options: viewOptions,\n pluginHooks,\n emitter,\n dispatch,\n getCurrentData,\n calendarApi,\n viewSpec,\n viewApi,\n dateProfileGenerator,\n theme,\n isRtl: viewOptions.direction === 'rtl',\n addResizeHandler(handler: ResizeHandler) {\n emitter.on('_resize', handler)\n },\n removeResizeHandler(handler: ResizeHandler) {\n emitter.off('_resize', handler)\n },\n createScrollResponder(execFunc: ScrollRequestHandler) {\n return new ScrollResponder(\n execFunc,\n emitter,\n createDuration(viewOptions.scrollTime),\n viewOptions.scrollTimeReset,\n )\n },\n registerInteractiveComponent,\n unregisterInteractiveComponent,\n }\n}\n","/* eslint max-classes-per-file: off */\n\nimport { Component, Ref } from './preact.js'\nimport { ViewContextType, ViewContext } from './ViewContext.js'\nimport { compareObjs, EqualityFuncs, getUnequalProps } from './util/object.js'\nimport { Dictionary } from './options.js'\n\nexport abstract class PureComponent<Props=Dictionary, State=Dictionary> extends Component<Props, State> {\n static addPropsEquality = addPropsEquality\n static addStateEquality = addStateEquality\n static contextType: any = ViewContextType\n\n context: ViewContext\n propEquality: EqualityFuncs<Props>\n stateEquality: EqualityFuncs<State>\n\n debug: boolean\n\n shouldComponentUpdate(nextProps: Props, nextState: State) {\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state))\n }\n\n return !compareObjs(this.props, nextProps, this.propEquality) ||\n !compareObjs(this.state, nextState, this.stateEquality)\n }\n\n // HACK for freakin' React StrictMode\n safeSetState(newState: Partial<State>): void {\n if (!compareObjs(this.state, { ...this.state, ...newState }, this.stateEquality)) {\n this.setState(newState)\n }\n }\n}\n\nPureComponent.prototype.propEquality = {}\nPureComponent.prototype.stateEquality = {}\n\nexport abstract class BaseComponent<Props=Dictionary, State=Dictionary> extends PureComponent<Props, State> {\n static contextType: any = ViewContextType\n\n context: ViewContext\n}\n\nfunction addPropsEquality(this: { prototype: { propEquality: any } }, propEquality) {\n let hash = Object.create(this.prototype.propEquality)\n Object.assign(hash, propEquality)\n this.prototype.propEquality = hash\n}\n\nfunction addStateEquality(this: { prototype: { stateEquality: any } }, stateEquality) {\n let hash = Object.create(this.prototype.stateEquality)\n Object.assign(hash, stateEquality)\n this.prototype.stateEquality = hash\n}\n\n// use other one\nexport function setRef<RefType>(ref: Ref<RefType> | void, current: RefType) {\n if (typeof ref === 'function') {\n ref(current)\n } else if (ref) {\n // see https://github.com/facebook/react/issues/13029\n (ref as any).current = current\n }\n}\n","import { createElement, ComponentChild, isValidElement, JSX, Ref } from '../preact.js'\nimport { CustomContent, CustomContentGenerator, ObjCustomContent } from '../common/render-hook.js'\nimport { BaseComponent, setRef } from '../vdom-util.js'\nimport { guid } from '../util/misc.js'\nimport { isArraysEqual } from '../util/array.js'\nimport { removeElement } from '../util/dom-manip.js'\nimport { ViewOptions } from '../options.js'\nimport { isNonHandlerPropsEqual, isPropsEqual } from '../util/object.js'\n\nexport type ElRef = Ref<HTMLElement>\nexport type ElAttrs = JSX.HTMLAttributes & JSX.SVGAttributes & { ref?: ElRef } & Record<string, any>\n\nexport interface ElAttrsProps {\n elRef?: ElRef\n elClasses?: string[]\n elStyle?: JSX.CSSProperties\n elAttrs?: ElAttrs\n}\n\nexport interface ElProps extends ElAttrsProps {\n elTag: string\n}\n\nexport interface ContentGeneratorProps<RenderProps> {\n renderProps: RenderProps\n generatorName: string | undefined\n generator: CustomContentGenerator<RenderProps> | undefined\n}\n\nexport type ContentInjectorProps<RenderProps> =\n ElProps &\n ContentGeneratorProps<RenderProps> &\n { renderId: number }\n\nexport class ContentInjector<RenderProps> extends BaseComponent<ContentInjectorProps<RenderProps>> {\n private id = guid()\n private currentDomNodes: Node[] = []\n private queuedDomNodes: Node[] = []\n\n render() {\n const { props, context } = this\n const { options } = context\n const { generator, renderProps } = props\n const attrs = buildElAttrs(props)\n let innerContent: ComponentChild | undefined\n let queuedDomNodes: Node[] = []\n\n if (hasCustomRenderingHandler(props.generatorName, options)) {\n if (options.customRenderingReplacesEl) {\n delete attrs.elRef // because handleEl will be used\n }\n } else {\n const customContent: CustomContent = typeof generator === 'function' ?\n generator(renderProps, createElement) :\n generator\n\n if (\n typeof customContent === 'string' ||\n isValidElement(customContent) ||\n Array.isArray(customContent)\n ) {\n innerContent = customContent\n } else if (typeof customContent === 'object') {\n if ('html' in customContent) {\n attrs.dangerouslySetInnerHTML = { __html: customContent.html }\n } else if ('domNodes' in customContent) {\n queuedDomNodes = Array.prototype.slice.call(\n (customContent as ObjCustomContent).domNodes,\n )\n }\n }\n }\n\n this.queuedDomNodes = queuedDomNodes\n\n return createElement(props.elTag, attrs, innerContent)\n }\n\n componentDidMount(): void {\n this.applyQueueudDomNodes()\n this.triggerCustomRendering(true)\n }\n\n componentDidUpdate(): void {\n this.applyQueueudDomNodes()\n this.triggerCustomRendering(true)\n }\n\n componentWillUnmount(): void {\n this.triggerCustomRendering(false) // TODO: different API for removal?\n }\n\n private triggerCustomRendering(isActive: boolean) {\n const { props, context } = this\n const { handleCustomRendering, customRenderingMetaMap } = context.options\n\n if (handleCustomRendering) {\n const customRenderingMeta = customRenderingMetaMap?.[props.generatorName]\n\n if (customRenderingMeta) {\n handleCustomRendering({\n id: this.id,\n isActive,\n containerEl: this.base as HTMLElement,\n reportNewContainerEl: this.handleEl, // for customRenderingReplacesEl\n generatorMeta: customRenderingMeta,\n ...props,\n })\n }\n }\n }\n\n private handleEl = (el: HTMLElement | null) => {\n if (this.props.elRef) {\n setRef(this.props.elRef, el)\n }\n }\n\n private applyQueueudDomNodes() {\n const { queuedDomNodes, currentDomNodes } = this\n const el = this.base\n\n if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {\n currentDomNodes.forEach(removeElement)\n\n for (let newNode of queuedDomNodes) {\n el.appendChild(newNode)\n }\n\n this.currentDomNodes = queuedDomNodes\n }\n }\n}\n\nContentInjector.addPropsEquality({\n elClasses: isArraysEqual,\n elStyle: isPropsEqual,\n elAttrs: isNonHandlerPropsEqual,\n renderProps: isPropsEqual,\n})\n\n// Util\n\nexport function hasCustomRenderingHandler(\n generatorName: string | undefined,\n options: ViewOptions,\n): boolean {\n return Boolean(\n options.handleCustomRendering &&\n generatorName &&\n options.customRenderingMetaMap?.[generatorName],\n )\n}\n\nexport function buildElAttrs(props: ElAttrsProps, extraClassNames?: string[]): ElAttrs {\n const attrs: ElAttrs = {\n ...props.elAttrs,\n ref: props.elRef as any,\n }\n\n if (props.elClasses || extraClassNames) {\n attrs.className = (props.elClasses || [])\n .concat(extraClassNames || [])\n .concat((attrs.className as (string | undefined)) || [])\n .filter(Boolean)\n .join(' ')\n }\n\n if (props.elStyle) {\n attrs.style = props.elStyle\n }\n\n return attrs\n}\n","import { createContext } from '../preact.js'\n\nexport const RenderId = createContext<number>(0)\n","import { createElement, Component, FunctionalComponent, ComponentChildren } from '../preact.js'\nimport { ClassNamesGenerator } from '../common/render-hook.js'\nimport {\n ContentInjector,\n ContentGeneratorProps,\n ElAttrsProps,\n buildElAttrs,\n ElProps,\n ElAttrs,\n} from './ContentInjector.js'\nimport { RenderId } from './RenderId.js'\n\nexport type ContentContainerProps<RenderProps> =\n ElAttrsProps &\n ContentGeneratorProps<RenderProps> & {\n elTag?: string\n classNameGenerator: ClassNamesGenerator<RenderProps> | undefined\n didMount: ((renderProps: RenderProps & { el: HTMLElement }) => void) | undefined\n willUnmount: ((renderProps: RenderProps & { el: HTMLElement }) => void) | undefined\n children?: InnerContainerFunc<RenderProps>\n }\n\nexport class ContentContainer<RenderProps> extends Component<ContentContainerProps<RenderProps>> {\n static contextType = RenderId\n context: number\n\n InnerContent = InnerContentInjector.bind(undefined, this)\n\n render() {\n const { props } = this\n const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps)\n\n if (props.children) {\n const elAttrs = buildElAttrs(props, generatedClassNames)\n const children = props.children(this.InnerContent, props.renderProps, elAttrs)\n\n if (props.elTag) {\n return createElement(props.elTag, elAttrs, children)\n } else {\n return children\n }\n } else {\n return createElement(ContentInjector<RenderProps>, {\n ...props,\n elTag: props.elTag || 'div',\n elClasses: (props.elClasses || []).concat(generatedClassNames),\n renderId: this.context,\n })\n }\n }\n\n componentDidMount(): void {\n this.props.didMount?.({\n ...this.props.renderProps,\n el: this.base as HTMLElement,\n })\n }\n\n componentWillUnmount(): void {\n this.props.willUnmount?.({\n ...this.props.renderProps,\n el: this.base as HTMLElement,\n })\n }\n}\n\n// Inner\n\nexport type InnerContainerComponent = FunctionalComponent<ElProps>\nexport type InnerContainerFunc<RenderProps> = (\n InnerContainer: InnerContainerComponent,\n renderProps: RenderProps,\n elAttrs: ElAttrs,\n) => ComponentChildren\n\nfunction InnerContentInjector<RenderProps>(\n containerComponent: ContentContainer<RenderProps>,\n props: ElProps,\n) {\n const parentProps = containerComponent.props\n\n return createElement(ContentInjector<RenderProps>, {\n renderProps: parentProps.renderProps,\n generatorName: parentProps.generatorName,\n generator: parentProps.generator,\n renderId: containerComponent.context,\n ...props,\n })\n}\n\n// Utils\n\nfunction generateClassNames<RenderProps>(\n classNameGenerator: ClassNamesGenerator<RenderProps> | undefined,\n renderProps: RenderProps,\n): string[] {\n const classNames = typeof classNameGenerator === 'function' ?\n classNameGenerator(renderProps) :\n classNameGenerator || []\n\n return typeof classNames === 'string' ? [classNames] : classNames\n}\n","import { ViewSpec } from '../structs/view-spec.js'\nimport { MountArg } from './render-hook.js'\nimport { ComponentChildren, createElement } from '../preact.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { ViewApi } from '../api/ViewApi.js'\nimport { ContentContainer } from '../content-inject/ContentContainer.js'\nimport { ElProps } from '../content-inject/ContentInjector.js'\n\nexport interface ViewContainerProps extends Partial<ElProps> {\n viewSpec: ViewSpec\n children: ComponentChildren\n}\n\nexport interface ViewContentArg {\n view: ViewApi\n}\n\nexport type ViewMountArg = MountArg<ViewContentArg>\n\nexport class ViewContainer extends BaseComponent<ViewContainerProps> {\n render() {\n let { props, context } = this\n let { options } = context\n let renderProps: ViewContentArg = { view: context.viewApi }\n\n return (\n <ContentContainer\n {...props}\n elTag={props.elTag || 'div'}\n elClasses={[\n ...buildViewClassNames(props.viewSpec),\n ...(props.elClasses || []),\n ]}\n renderProps={renderProps}\n classNameGenerator={options.viewClassNames}\n generatorName={undefined}\n generator={undefined}\n didMount={options.viewDidMount}\n willUnmount={options.viewWillUnmount}\n >\n {() => props.children}\n </ContentContainer>\n )\n }\n}\n\nexport function buildViewClassNames(viewSpec: ViewSpec): string[] {\n return [\n `fc-${viewSpec.type}-view`,\n 'fc-view',\n ]\n}\n","import { DateMarker } from './marker.js'\nimport { DateEnv, DateInput } from './env.js'\n\nexport interface DateRangeInput {\n start?: DateInput\n end?: DateInput\n}\n\nexport interface OpenDateRange {\n start: DateMarker | null\n end: DateMarker | null\n}\n\nexport interface DateRange {\n start: DateMarker\n end: DateMarker\n}\n\nexport function parseRange(input: DateRangeInput, dateEnv: DateEnv): OpenDateRange {\n let start = null\n let end = null\n\n if (input.start) {\n start = dateEnv.createMarker(input.start)\n }\n\n if (input.end) {\n end = dateEnv.createMarker(input.end)\n }\n\n if (!start && !end) {\n return null\n }\n\n if (start && end && end < start) {\n return null\n }\n\n return { start, end }\n}\n\n// SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\nexport function invertRanges(ranges: DateRange[], constraintRange: DateRange): DateRange[] {\n let invertedRanges: DateRange[] = []\n let { start } = constraintRange // the end of the previous range. the start of the new range\n let i\n let dateRange\n\n // ranges need to be in order. required for our date-walking algorithm\n ranges.sort(compareRanges)\n\n for (i = 0; i < ranges.length; i += 1) {\n dateRange = ranges[i]\n\n // add the span of time before the event (if there is any)\n if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: dateRange.start })\n }\n\n if (dateRange.end > start) {\n start = dateRange.end\n }\n }\n\n // add the span of time after the last event (if there is any)\n if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)\n invertedRanges.push({ start, end: constraintRange.end })\n }\n\n return invertedRanges\n}\n\nfunction compareRanges(range0: DateRange, range1: DateRange) {\n return range0.start.valueOf() - range1.start.valueOf() // earlier ranges go first\n}\n\nexport function intersectRanges(range0: OpenDateRange, range1: OpenDateRange): OpenDateRange {\n let { start, end } = range0\n let newRange = null\n\n if (range1.start !== null) {\n if (start === null) {\n start = range1.start\n } else {\n start = new Date(Math.max(start.valueOf(), range1.start.valueOf()))\n }\n }\n\n if (range1.end != null) {\n if (end === null) {\n end = range1.end\n } else {\n end = new Date(Math.min(end.valueOf(), range1.end.valueOf()))\n }\n }\n\n if (start === null || end === null || start < end) {\n newRange = { start, end }\n }\n\n return newRange\n}\n\nexport function rangesEqual(range0: OpenDateRange, range1: OpenDateRange): boolean {\n return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&\n (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf())\n}\n\nexport function rangesIntersect(range0: OpenDateRange, range1: OpenDateRange): boolean {\n return (range0.end === null || range1.start === null || range0.end > range1.start) &&\n (range0.start === null || range1.end === null || range0.start < range1.end)\n}\n\nexport function rangeContainsRange(outerRange: OpenDateRange, innerRange: OpenDateRange): boolean {\n return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&\n (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end))\n}\n\nexport function rangeContainsMarker(range: OpenDateRange, date: DateMarker | number): boolean { // date can be a millisecond time\n return (range.start === null || date >= range.start) &&\n (range.end === null || date < range.end)\n}\n\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\nexport function constrainMarkerToRange(date: DateMarker, range: DateRange): DateMarker {\n if (range.start != null && date < range.start) {\n return range.start\n }\n\n if (range.end != null && date >= range.end) {\n return new Date(range.end.valueOf() - 1)\n }\n\n return date\n}\n","import { DateMarker, startOfDay, addDays, diffDays, diffDayAndTime } from '../datelib/marker.js'\nimport { Duration, asRoughMs, createDuration } from '../datelib/duration.js'\nimport { DateEnv } from '../datelib/env.js'\nimport { DateRange, OpenDateRange } from '../datelib/date-range.js'\n\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\nexport function computeAlignedDayRange(timedRange: DateRange): DateRange {\n let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1\n let start = startOfDay(timedRange.start)\n let end = addDays(start, dayCnt)\n return { start, end }\n}\n\n// given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\nexport function computeVisibleDayRange(timedRange: OpenDateRange, nextDayThreshold: Duration = createDuration(0)): OpenDateRange {\n let startDay: DateMarker = null\n let endDay: DateMarker = null\n\n if (timedRange.end) {\n endDay = startOfDay(timedRange.end)\n\n let endTimeMS: number = timedRange.end.valueOf() - endDay.valueOf() // # of milliseconds into `endDay`\n\n // If the end time is actually inclusively part of the next day and is equal to or\n // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n endDay = addDays(endDay, 1)\n }\n }\n\n if (timedRange.start) {\n startDay = startOfDay(timedRange.start) // the beginning of the day the range starts\n\n // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n if (endDay && endDay <= startDay) {\n endDay = addDays(startDay, 1)\n }\n }\n\n return { start: startDay, end: endDay }\n}\n\n// spans from one day into another?\nexport function isMultiDayRange(range: DateRange) {\n let visibleRange = computeVisibleDayRange(range)\n\n return diffDays(visibleRange.start, visibleRange.end) > 1\n}\n\nexport function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string) {\n if (largeUnit === 'year') {\n return createDuration(dateEnv.diffWholeYears(date0, date1), 'year')!\n }\n\n if (largeUnit === 'month') {\n return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month')!\n }\n\n return diffDayAndTime(date0, date1) // returns a duration\n}\n","import { DateEnv, DateInput } from '../datelib/env.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { Action } from './Action.js'\nimport { BaseOptionsRefined } from '../options.js'\n\nexport function reduceCurrentDate(currentDate: DateMarker, action: Action) {\n switch (action.type) {\n case 'CHANGE_DATE':\n return action.dateMarker\n default:\n return currentDate\n }\n}\n\nexport function getInitialDate(options: BaseOptionsRefined, dateEnv: DateEnv) {\n let initialDateInput = options.initialDate\n\n // compute the initial ambig-timezone date\n if (initialDateInput != null) {\n return dateEnv.createMarker(initialDateInput)\n }\n return getNow(options.now, dateEnv) // getNow already returns unzoned\n}\n\nexport function getNow(nowInput: DateInput | (() => DateInput), dateEnv: DateEnv) {\n if (typeof nowInput === 'function') {\n nowInput = nowInput()\n }\n\n if (nowInput == null) {\n return dateEnv.createNowMarker()\n }\n\n return dateEnv.createMarker(nowInput)\n}\n","import { DateMarker, startOfDay, addDays } from './datelib/marker.js'\nimport { Duration, createDuration, asRoughDays, asRoughMs, greatestDurationDenominator } from './datelib/duration.js'\nimport {\n DateRange,\n OpenDateRange,\n constrainMarkerToRange,\n intersectRanges,\n rangesIntersect,\n parseRange,\n DateRangeInput,\n} from './datelib/date-range.js'\nimport { DateEnv, DateInput } from './datelib/env.js'\nimport { computeVisibleDayRange } from './util/date.js'\nimport { getNow } from './reducers/current-date.js'\nimport { CalendarImpl } from './api/CalendarImpl.js'\n\nexport interface DateProfile {\n currentRange: DateRange // TODO: does this include slotMinTime/slotMaxTime?\n currentRangeUnit: string\n isRangeAllDay: boolean\n validRange: OpenDateRange\n activeRange: DateRange | null\n renderRange: DateRange\n slotMinTime: Duration\n slotMaxTime: Duration\n isValid: boolean\n dateIncrement: Duration\n}\n\nexport interface DateProfileGeneratorProps extends DateProfileOptions {\n dateProfileGeneratorClass: DateProfileGeneratorClass // not used by DateProfileGenerator itself\n duration: Duration\n durationUnit: string\n usesMinMaxTime: boolean\n dateEnv: DateEnv\n calendarApi: CalendarImpl\n}\n\nexport interface DateProfileOptions {\n slotMinTime: Duration\n slotMaxTime: Duration\n showNonCurrentDates?: boolean\n dayCount?: number\n dateAlignment?: string\n dateIncrement?: Duration\n hiddenDays?: number[]\n weekends?: boolean\n nowInput?: DateInput | (() => DateInput)\n validRangeInput?: DateRangeInput | ((this: CalendarImpl, nowDate: Date) => DateRangeInput)\n visibleRangeInput?: DateRangeInput | ((this: CalendarImpl, nowDate: Date) => DateRangeInput)\n monthMode?: boolean\n fixedWeekCount?: boolean\n}\n\nexport type DateProfileGeneratorClass = {\n new(props: DateProfileGeneratorProps): DateProfileGenerator\n}\n\nexport class DateProfileGenerator { // only publicly used for isHiddenDay :(\n nowDate: DateMarker\n\n isHiddenDayHash: boolean[]\n\n constructor(protected props: DateProfileGeneratorProps) {\n this.nowDate = getNow(props.nowInput, props.dateEnv)\n this.initHiddenDays()\n }\n\n /* Date Range Computation\n ------------------------------------------------------------------------------------------------------------------*/\n\n // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n buildPrev(currentDateProfile: DateProfile, currentDate: DateMarker, forceToValid?: boolean): DateProfile {\n let { dateEnv } = this.props\n\n let prevDate = dateEnv.subtract(\n dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement,\n )\n\n return this.build(prevDate, -1, forceToValid)\n }\n\n // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n buildNext(currentDateProfile: DateProfile, currentDate: DateMarker, forceToValid?: boolean): DateProfile {\n let { dateEnv } = this.props\n\n let nextDate = dateEnv.add(\n dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n currentDateProfile.dateIncrement,\n )\n\n return this.build(nextDate, 1, forceToValid)\n }\n\n // Builds a structure holding dates/ranges for rendering around the given date.\n // Optional direction param indicates whether the date is being incremented/decremented\n // from its previous value. decremented = -1, incremented = 1 (default).\n build(currentDate: DateMarker, direction?, forceToValid = true): DateProfile {\n let { props } = this\n let validRange: DateRange\n let currentInfo\n let isRangeAllDay\n let renderRange: DateRange\n let activeRange: DateRange\n let isValid\n\n validRange = this.buildValidRange()\n validRange = this.trimHiddenDays(validRange)\n\n if (forceToValid) {\n currentDate = constrainMarkerToRange(currentDate, validRange)\n }\n\n currentInfo = this.buildCurrentRangeInfo(currentDate, direction)\n isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit)\n renderRange = this.buildRenderRange(\n this.trimHiddenDays(currentInfo.range),\n currentInfo.unit,\n isRangeAllDay,\n )\n renderRange = this.trimHiddenDays(renderRange)\n activeRange = renderRange\n\n if (!props.showNonCurrentDates) {\n activeRange = intersectRanges(activeRange, currentInfo.range)\n }\n\n activeRange = this.adjustActiveRange(activeRange)\n activeRange = intersectRanges(activeRange, validRange) // might return null\n\n // it's invalid if the originally requested date is not contained,\n // or if the range is completely outside of the valid range.\n isValid = rangesIntersect(currentInfo.range, validRange)\n\n return {\n // constraint for where prev/next operations can go and where events can be dragged/resized to.\n // an object with optional start and end properties.\n validRange,\n\n // range the view is formally responsible for.\n // for example, a month view might have 1st-31st, excluding padded dates\n currentRange: currentInfo.range,\n\n // name of largest unit being displayed, like \"month\" or \"week\"\n currentRangeUnit: currentInfo.unit,\n\n isRangeAllDay,\n\n // dates that display events and accept drag-n-drop\n // will be `null` if no dates accept events\n activeRange,\n\n // date range with a rendered skeleton\n // includes not-active days that need some sort of DOM\n renderRange,\n\n // Duration object that denotes the first visible time of any given day\n slotMinTime: props.slotMinTime,\n\n // Duration object that denotes the exclusive visible end time of any given day\n slotMaxTime: props.slotMaxTime,\n\n isValid,\n\n // how far the current date will move for a prev/next operation\n dateIncrement: this.buildDateIncrement(currentInfo.duration),\n // pass a fallback (might be null) ^\n }\n }\n\n // Builds an object with optional start/end properties.\n // Indicates the minimum/maximum dates to display.\n // not responsible for trimming hidden days.\n buildValidRange(): OpenDateRange {\n let input = this.props.validRangeInput\n let simpleInput = typeof input === 'function'\n ? input.call(this.props.calendarApi, this.nowDate)\n : input\n\n return this.refineRange(simpleInput) ||\n { start: null, end: null } // completely open-ended\n }\n\n // Builds a structure with info about the \"current\" range, the range that is\n // highlighted as being the current month for example.\n // See build() for a description of `direction`.\n // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n buildCurrentRangeInfo(date: DateMarker, direction) {\n let { props } = this\n let duration = null\n let unit = null\n let range = null\n let dayCount\n\n if (props.duration) {\n duration = props.duration\n unit = props.durationUnit\n range = this.buildRangeFromDuration(date, direction, duration, unit)\n } else if ((dayCount = this.props.dayCount)) {\n unit = 'day'\n range = this.buildRangeFromDayCount(date, direction, dayCount)\n } else if ((range = this.buildCustomVisibleRange(date))) {\n unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit\n } else {\n duration = this.getFallbackDuration()\n unit = greatestDurationDenominator(duration).unit\n range = this.buildRangeFromDuration(date, direction, duration, unit)\n }\n\n return { duration, unit, range }\n }\n\n getFallbackDuration(): Duration {\n return createDuration({ day: 1 })\n }\n\n // Returns a new activeRange to have time values (un-ambiguate)\n // slotMinTime or slotMaxTime causes the range to expand.\n adjustActiveRange(range: DateRange) {\n let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props\n let { start, end } = range\n\n if (usesMinMaxTime) {\n // expand active range if slotMinTime is negative (why not when positive?)\n if (asRoughDays(slotMinTime) < 0) {\n start = startOfDay(start) // necessary?\n start = dateEnv.add(start, slotMinTime)\n }\n\n // expand active range if slotMaxTime is beyond one day (why not when negative?)\n if (asRoughDays(slotMaxTime) > 1) {\n end = startOfDay(end) // necessary?\n end = addDays(end, -1)\n end = dateEnv.add(end, slotMaxTime)\n }\n }\n\n return { start, end }\n }\n\n // Builds the \"current\" range when it is specified as an explicit duration.\n // `unit` is the already-computed greatestDurationDenominator unit of duration.\n buildRangeFromDuration(date: DateMarker, direction, duration: Duration, unit) {\n let { dateEnv, dateAlignment } = this.props\n let start: DateMarker\n let end: DateMarker\n let res\n\n // compute what the alignment should be\n if (!dateAlignment) {\n let { dateIncrement } = this.props\n\n if (dateIncrement) {\n // use the smaller of the two units\n if (asRoughMs(dateIncrement) < asRoughMs(duration)) {\n dateAlignment = greatestDurationDenominator(dateIncrement).unit\n } else {\n dateAlignment = unit\n }\n } else {\n dateAlignment = unit\n }\n }\n\n // if the view displays a single day or smaller\n if (asRoughDays(duration) <= 1) {\n if (this.isHiddenDay(start)) {\n start = this.skipHiddenDays(start, direction)\n start = startOfDay(start)\n }\n }\n\n function computeRes() {\n start = dateEnv.startOf(date, dateAlignment)\n end = dateEnv.add(start, duration)\n res = { start, end }\n }\n\n computeRes()\n\n // if range is completely enveloped by hidden days, go past the hidden days\n if (!this.trimHiddenDays(res)) {\n date = this.skipHiddenDays(date, direction)\n computeRes()\n }\n\n return res\n }\n\n // Builds the \"current\" range when a dayCount is specified.\n buildRangeFromDayCount(date: DateMarker, direction, dayCount) {\n let { dateEnv, dateAlignment } = this.props\n let runningCount = 0\n let start: DateMarker = date\n let end: DateMarker\n\n if (dateAlignment) {\n start = dateEnv.startOf(start, dateAlignment)\n }\n\n start = startOfDay(start)\n start = this.skipHiddenDays(start, direction)\n\n end = start\n do {\n end = addDays(end, 1)\n if (!this.isHiddenDay(end)) {\n runningCount += 1\n }\n } while (runningCount < dayCount)\n\n return { start, end }\n }\n\n // Builds a normalized range object for the \"visible\" range,\n // which is a way to define the currentRange and activeRange at the same time.\n buildCustomVisibleRange(date: DateMarker) {\n let { props } = this\n let input = props.visibleRangeInput\n let simpleInput = typeof input === 'function'\n ? input.call(props.calendarApi, props.dateEnv.toDate(date))\n : input\n\n let range = this.refineRange(simpleInput)\n\n if (range && (range.start == null || range.end == null)) {\n return null\n }\n\n return range\n }\n\n // Computes the range that will represent the element/cells for *rendering*,\n // but which may have voided days/times.\n // not responsible for trimming hidden days.\n buildRenderRange(currentRange: DateRange, currentRangeUnit, isRangeAllDay) {\n return currentRange\n }\n\n // Compute the duration value that should be added/substracted to the current date\n // when a prev/next operation happens.\n buildDateIncrement(fallback): Duration {\n let { dateIncrement } = this.props\n let customAlignment\n\n if (dateIncrement) {\n return dateIncrement\n }\n\n if ((customAlignment = this.props.dateAlignment)) {\n return createDuration(1, customAlignment)\n }\n\n if (fallback) {\n return fallback\n }\n\n return createDuration({ days: 1 })\n }\n\n refineRange(rangeInput: DateRangeInput | undefined): DateRange | null {\n if (rangeInput) {\n let range = parseRange(rangeInput, this.props.dateEnv)\n\n if (range) {\n range = computeVisibleDayRange(range)\n }\n\n return range\n }\n\n return null\n }\n\n /* Hidden Days\n ------------------------------------------------------------------------------------------------------------------*/\n\n // Initializes internal variables related to calculating hidden days-of-week\n initHiddenDays() {\n let hiddenDays = this.props.hiddenDays || [] // array of day-of-week indices that are hidden\n let isHiddenDayHash = [] // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n let dayCnt = 0\n let i\n\n if (this.props.weekends === false) {\n hiddenDays.push(0, 6) // 0=sunday, 6=saturday\n }\n\n for (i = 0; i < 7; i += 1) {\n if (\n !(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)\n ) {\n dayCnt += 1\n }\n }\n\n if (!dayCnt) {\n throw new Error('invalid hiddenDays') // all days were hidden? bad.\n }\n\n this.isHiddenDayHash = isHiddenDayHash\n }\n\n // Remove days from the beginning and end of the range that are computed as hidden.\n // If the whole range is trimmed off, returns null\n trimHiddenDays(range: DateRange): DateRange | null {\n let { start, end } = range\n\n if (start) {\n start = this.skipHiddenDays(start)\n }\n\n if (end) {\n end = this.skipHiddenDays(end, -1, true)\n }\n\n if (start == null || end == null || start < end) {\n return { start, end }\n }\n\n return null\n }\n\n // Is the current day hidden?\n // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n isHiddenDay(day) {\n if (day instanceof Date) {\n day = day.getUTCDay()\n }\n return this.isHiddenDayHash[day]\n }\n\n // Incrementing the current day until it is no longer a hidden day, returning a copy.\n // DOES NOT CONSIDER validRange!\n // If the initial value of `date` is not a hidden day, don't do anything.\n // Pass `isExclusive` as `true` if you are dealing with an end date.\n // `inc` defaults to `1` (increment one day forward each time)\n skipHiddenDays(date: DateMarker, inc = 1, isExclusive = false) {\n while (\n this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]\n ) {\n date = addDays(date, inc)\n }\n return date\n }\n}\n","import { DateRange } from '../datelib/date-range.js'\nimport { guid } from '../util/misc.js'\n\nexport interface EventInstance {\n instanceId: string\n defId: string\n range: DateRange\n forcedStartTzo: number | null\n forcedEndTzo: number | null\n}\n\nexport type EventInstanceHash = { [instanceId: string]: EventInstance }\n\nexport function createEventInstance(\n defId: string,\n range: DateRange,\n forcedStartTzo?: number,\n forcedEndTzo?: number,\n): EventInstance {\n return {\n instanceId: guid(),\n defId,\n range,\n forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,\n }\n}\n","import { EventDef } from './event-def.js'\nimport { EventInstance, createEventInstance } from './event-instance.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { DateEnv } from '../datelib/env.js'\nimport { Duration } from '../datelib/duration.js'\nimport { DateMarker, startOfDay } from '../datelib/marker.js'\nimport { EventStore } from './event-store.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { filterHash } from '../util/object.js'\nimport { EventRefined } from './event-parse.js'\n\n/*\nThe plugin system for defining how a recurring event is expanded into individual instances.\n*/\n\nexport interface ParsedRecurring<RecurringData> {\n typeData: RecurringData\n allDayGuess: boolean | null\n duration: Duration | null // signals hasEnd\n}\n\nexport interface RecurringType<RecurringData> {\n parse: (refined: EventRefined, dateEnv: DateEnv) => ParsedRecurring<RecurringData> | null // TODO: rename to post-process or something\n expand: (typeData: any, framingRange: DateRange, dateEnv: DateEnv) => DateMarker[]\n}\n\nexport function parseRecurring(\n refined: EventRefined,\n defaultAllDay: boolean | null,\n dateEnv: DateEnv,\n recurringTypes: RecurringType<any>[],\n) {\n for (let i = 0; i < recurringTypes.length; i += 1) {\n let parsed = recurringTypes[i].parse(refined, dateEnv)\n\n if (parsed) {\n let { allDay } = refined\n if (allDay == null) {\n allDay = defaultAllDay\n if (allDay == null) {\n allDay = parsed.allDayGuess\n if (allDay == null) {\n allDay = false\n }\n }\n }\n\n return {\n allDay,\n duration: parsed.duration,\n typeData: parsed.typeData,\n typeId: i,\n }\n }\n }\n\n return null\n}\n\nexport function expandRecurring(eventStore: EventStore, framingRange: DateRange, context: CalendarContext): EventStore {\n let { dateEnv, pluginHooks, options } = context\n let { defs, instances } = eventStore\n\n // remove existing recurring instances\n // TODO: bad. always expand events as a second step\n instances = filterHash(instances, (instance: EventInstance) => !defs[instance.defId].recurringDef)\n\n for (let defId in defs) {\n let def = defs[defId]\n\n if (def.recurringDef) {\n let { duration } = def.recurringDef\n\n if (!duration) {\n duration = def.allDay ?\n options.defaultAllDayEventDuration :\n options.defaultTimedEventDuration\n }\n\n let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes)\n\n for (let start of starts) {\n let instance = createEventInstance(defId, {\n start,\n end: dateEnv.add(start, duration),\n })\n instances[instance.instanceId] = instance\n }\n }\n }\n\n return { defs, instances }\n}\n\n/*\nEvent MUST have a recurringDef\n*/\nfunction expandRecurringRanges(\n eventDef: EventDef,\n duration: Duration,\n framingRange: DateRange,\n dateEnv: DateEnv,\n recurringTypes: RecurringType<any>[],\n): DateMarker[] {\n let typeDef = recurringTypes[eventDef.recurringDef.typeId]\n let markers = typeDef.expand(\n eventDef.recurringDef.typeData,\n {\n start: dateEnv.subtract(framingRange.start, duration), // for when event starts before framing range and goes into\n end: framingRange.end,\n },\n dateEnv,\n )\n\n // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n if (eventDef.allDay) {\n markers = markers.map(startOfDay)\n }\n\n return markers\n}\n","import { guid } from '../util/misc.js'\nimport { DateInput } from '../datelib/env.js'\nimport { startOfDay } from '../datelib/marker.js'\nimport { parseRecurring } from './recurring-event.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { EventDef } from './event-def.js'\nimport { createEventInstance, EventInstance } from './event-instance.js'\nimport { EventSource } from './event-source.js'\nimport { RefinedOptionsFromRefiners, RawOptionsFromRefiners, identity, Identity, Dictionary, refineProps, GenericRefiners } from '../options.js'\nimport { EVENT_UI_REFINERS, createEventUi, EventUiInput, EventUiRefined } from '../component/event-ui.js'\n\nexport const EVENT_NON_DATE_REFINERS = {\n id: String,\n groupId: String,\n title: String,\n url: String,\n interactive: Boolean,\n}\n\nexport const EVENT_DATE_REFINERS = {\n start: identity as Identity<DateInput>,\n end: identity as Identity<DateInput>,\n date: identity as Identity<DateInput>,\n allDay: Boolean,\n}\n\nconst EVENT_REFINERS = { // does NOT include EVENT_UI_REFINERS\n ...EVENT_NON_DATE_REFINERS,\n ...EVENT_DATE_REFINERS,\n extendedProps: identity as Identity<Dictionary>,\n}\n\ntype BuiltInEventRefiners = typeof EVENT_REFINERS\n\nexport interface EventRefiners extends BuiltInEventRefiners {\n // for ambient\n}\n\nexport type EventInput =\n EventUiInput &\n RawOptionsFromRefiners<Required<EventRefiners>> & // Required hack\n { [extendedProp: string]: any }\n\nexport type EventRefined =\n EventUiRefined &\n RefinedOptionsFromRefiners<Required<EventRefiners>> // Required hack\n\nexport interface EventTuple {\n def: EventDef\n instance: EventInstance | null\n}\n\nexport type EventInputTransformer = (input: EventInput) => EventInput\nexport type EventDefMemberAdder = (refined: EventRefined) => Partial<EventDef>\n\nexport function parseEvent(\n raw: EventInput,\n eventSource: EventSource<any> | null,\n context: CalendarContext,\n allowOpenRange: boolean,\n refiners = buildEventRefiners(context),\n): EventTuple | null {\n let { refined, extra } = refineEventDef(raw, context, refiners)\n\n let defaultAllDay = computeIsDefaultAllDay(eventSource, context)\n let recurringRes = parseRecurring(\n refined,\n defaultAllDay,\n context.dateEnv,\n context.pluginHooks.recurringTypes,\n )\n\n if (recurringRes) {\n let def = parseEventDef(\n refined,\n extra,\n eventSource ? eventSource.sourceId : '',\n recurringRes.allDay,\n Boolean(recurringRes.duration),\n context,\n )\n\n def.recurringDef = { // don't want all the props from recurringRes. TODO: more efficient way to do this\n typeId: recurringRes.typeId,\n typeData: recurringRes.typeData,\n duration: recurringRes.duration,\n }\n\n return { def, instance: null }\n }\n let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange)\n\n if (singleRes) {\n let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context)\n let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo)\n\n return { def, instance }\n }\n\n return null\n}\n\nexport function refineEventDef(raw: EventInput, context: CalendarContext, refiners = buildEventRefiners(context)): {\n refined: RefinedOptionsFromRefiners<GenericRefiners>,\n extra: Dictionary,\n} {\n return refineProps(raw, refiners)\n}\n\nexport function buildEventRefiners(context: CalendarContext): GenericRefiners {\n return { ...EVENT_UI_REFINERS, ...EVENT_REFINERS, ...context.pluginHooks.eventRefiners }\n}\n\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\n*/\nexport function parseEventDef(\n refined: EventRefined,\n extra: Dictionary,\n sourceId: string,\n allDay: boolean,\n hasEnd: boolean,\n context: CalendarContext,\n): EventDef {\n let def: EventDef = {\n title: refined.title || '',\n groupId: refined.groupId || '',\n publicId: refined.id || '',\n url: refined.url || '',\n recurringDef: null,\n defId: guid(),\n sourceId,\n allDay,\n hasEnd,\n interactive: refined.interactive,\n ui: createEventUi(refined, context),\n extendedProps: {\n ...(refined.extendedProps || {}),\n ...extra,\n },\n }\n\n for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {\n Object.assign(def, memberAdder(refined))\n }\n\n // help out EventImpl from having user modify props\n Object.freeze(def.ui.classNames)\n Object.freeze(def.extendedProps)\n\n return def\n}\n\nfunction parseSingle(refined: EventRefined, defaultAllDay: boolean | null, context: CalendarContext, allowOpenRange?: boolean) {\n let { allDay } = refined\n let startMeta\n let startMarker = null\n let hasEnd = false\n let endMeta\n let endMarker = null\n\n let startInput = refined.start != null ? refined.start : refined.date\n startMeta = context.dateEnv.createMarkerMeta(startInput)\n\n if (startMeta) {\n startMarker = startMeta.marker\n } else if (!allowOpenRange) {\n return null\n }\n\n if (refined.end != null) {\n endMeta = context.dateEnv.createMarkerMeta(refined.end)\n }\n\n if (allDay == null) {\n if (defaultAllDay != null) {\n allDay = defaultAllDay\n } else {\n // fall back to the date props LAST\n allDay = (!startMeta || startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified)\n }\n }\n\n if (allDay && startMarker) {\n startMarker = startOfDay(startMarker)\n }\n\n if (endMeta) {\n endMarker = endMeta.marker\n\n if (allDay) {\n endMarker = startOfDay(endMarker)\n }\n\n if (startMarker && endMarker <= startMarker) {\n endMarker = null\n }\n }\n\n if (endMarker) {\n hasEnd = true\n } else if (!allowOpenRange) {\n hasEnd = context.options.forceEventDuration || false\n\n endMarker = context.dateEnv.add(\n startMarker,\n allDay ?\n context.options.defaultAllDayEventDuration :\n context.options.defaultTimedEventDuration,\n )\n }\n\n return {\n allDay,\n hasEnd,\n range: { start: startMarker, end: endMarker },\n forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n forcedEndTzo: endMeta ? endMeta.forcedTzo : null,\n }\n}\n\nfunction computeIsDefaultAllDay(eventSource: EventSource<any> | null, context: CalendarContext): boolean | null {\n let res = null\n\n if (eventSource) {\n res = eventSource.defaultAllDay\n }\n\n if (res == null) {\n res = context.options.defaultAllDay\n }\n\n return res\n}\n","import { EventDef, EventDefHash } from './event-def.js'\nimport { EventInstance, EventInstanceHash } from './event-instance.js'\nimport { EventInput, parseEvent, EventTuple, buildEventRefiners } from './event-parse.js'\nimport { filterHash } from '../util/object.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { EventSource } from './event-source.js'\n\n/*\nA data structure that encapsulates EventDefs and EventInstances.\nUtils for parsing this data from raw EventInputs.\nUtils for manipulating an EventStore.\n*/\n\nexport interface EventStore {\n defs: EventDefHash\n instances: EventInstanceHash\n}\n\nexport function parseEvents(\n rawEvents: EventInput[],\n eventSource: EventSource<any> | null,\n context: CalendarContext,\n allowOpenRange?: boolean,\n): EventStore {\n let eventStore = createEmptyEventStore()\n let eventRefiners = buildEventRefiners(context)\n\n for (let rawEvent of rawEvents) {\n let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners)\n\n if (tuple) {\n eventTupleToStore(tuple, eventStore)\n }\n }\n\n return eventStore\n}\n\nexport function eventTupleToStore(tuple: EventTuple, eventStore: EventStore = createEmptyEventStore()) {\n eventStore.defs[tuple.def.defId] = tuple.def\n\n if (tuple.instance) {\n eventStore.instances[tuple.instance.instanceId] = tuple.instance\n }\n\n return eventStore\n}\n\n// retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\nexport function getRelevantEvents(eventStore: EventStore, instanceId: string): EventStore {\n let instance = eventStore.instances[instanceId]\n\n if (instance) {\n let def = eventStore.defs[instance.defId]\n\n // get events/instances with same group\n let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef))\n\n // add the original\n // TODO: wish we could use eventTupleToStore or something like it\n newStore.defs[def.defId] = def\n newStore.instances[instance.instanceId] = instance\n\n return newStore\n }\n\n return createEmptyEventStore()\n}\n\nfunction isEventDefsGrouped(def0: EventDef, def1: EventDef): boolean {\n return Boolean(def0.groupId && def0.groupId === def1.groupId)\n}\n\nexport function createEmptyEventStore(): EventStore {\n return { defs: {}, instances: {} }\n}\n\nexport function mergeEventStores(store0: EventStore, store1: EventStore): EventStore {\n return {\n defs: { ...store0.defs, ...store1.defs },\n instances: { ...store0.instances, ...store1.instances },\n }\n}\n\nexport function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore {\n let defs = filterHash(eventStore.defs, filterFunc)\n let instances = filterHash(eventStore.instances, (instance: EventInstance) => (\n defs[instance.defId] // still exists?\n ))\n return { defs, instances }\n}\n\nexport function excludeSubEventStore(master: EventStore, sub: EventStore): EventStore {\n let { defs, instances } = master\n let filteredDefs: { [defId: string]: EventDef } = {}\n let filteredInstances: { [instanceId: string]: EventInstance } = {}\n\n for (let defId in defs) {\n if (!sub.defs[defId]) { // not explicitly excluded\n filteredDefs[defId] = defs[defId]\n }\n }\n\n for (let instanceId in instances) {\n if (\n !sub.instances[instanceId] && // not explicitly excluded\n filteredDefs[instances[instanceId].defId] // def wasn't filtered away\n ) {\n filteredInstances[instanceId] = instances[instanceId]\n }\n }\n\n return {\n defs: filteredDefs,\n instances: filteredInstances,\n }\n}\n","import { EventStore, parseEvents } from './event-store.js'\nimport { EventInput } from './event-parse.js'\nimport { DateSpanApi } from './date-span.js'\nimport { EventImpl } from '../api/EventImpl.js'\nimport { SplittableProps } from '../component/event-splitting.js'\nimport { CalendarContext } from '../CalendarContext.js'\n\n// TODO: rename to \"criteria\" ?\nexport type ConstraintInput = 'businessHours' | string | EventInput | EventInput[]\nexport type Constraint = 'businessHours' | string | EventStore | false // false means won't pass at all\nexport type OverlapFunc = ((stillEvent: EventImpl, movingEvent: EventImpl | null) => boolean)\nexport type AllowFunc = (span: DateSpanApi, movingEvent: EventImpl | null) => boolean\nexport type isPropsValidTester = (props: SplittableProps, context: CalendarContext) => boolean\n\nexport function normalizeConstraint(input: ConstraintInput, context: CalendarContext): Constraint | null {\n if (Array.isArray(input)) {\n return parseEvents(input, null, context, true) // allowOpenRange=true\n } if (typeof input === 'object' && input) { // non-null object\n return parseEvents([input], null, context, true) // allowOpenRange=true\n } if (input != null) {\n return String(input)\n }\n return null\n}\n","export type ClassNamesInput = string | string[]\n\nexport function parseClassNames(raw: ClassNamesInput) {\n if (Array.isArray(raw)) {\n return raw\n }\n\n if (typeof raw === 'string') {\n return raw.split(/\\s+/)\n }\n\n return []\n}\n","import { Constraint, AllowFunc, normalizeConstraint } from '../structs/constraint.js'\nimport { parseClassNames } from '../util/html.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { RawOptionsFromRefiners, RefinedOptionsFromRefiners, identity, Identity } from '../options.js'\n\n// TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\n\nexport const EVENT_UI_REFINERS = {\n display: String,\n editable: Boolean,\n startEditable: Boolean,\n durationEditable: Boolean,\n constraint: identity as Identity<any>, // Identity<ConstraintInput>, // circular reference. ts dies. event->constraint->event\n overlap: identity as Identity<boolean>,\n allow: identity as Identity<AllowFunc>,\n className: parseClassNames, // will both end up as array of strings\n classNames: parseClassNames, // \"\n color: String,\n backgroundColor: String,\n borderColor: String,\n textColor: String,\n}\n\nconst EMPTY_EVENT_UI: EventUi = {\n display: null,\n startEditable: null,\n durationEditable: null,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n}\n\ntype BuiltInEventUiRefiners = typeof EVENT_UI_REFINERS\n\ninterface EventUiRefiners extends BuiltInEventUiRefiners {\n // to prevent circular reference (and give is the option for ambient modification for later)\n}\n\nexport type EventUiInput = RawOptionsFromRefiners<Required<EventUiRefiners>> // Required hack\nexport type EventUiRefined = RefinedOptionsFromRefiners<Required<EventUiRefiners>> // Required hack\n\nexport interface EventUi {\n display: string | null\n startEditable: boolean | null\n durationEditable: boolean | null\n constraints: Constraint[]\n overlap: boolean | null\n allows: AllowFunc[] // crappy name to indicate plural\n backgroundColor: string\n borderColor: string\n textColor: string,\n classNames: string[]\n}\n\nexport type EventUiHash = { [defId: string]: EventUi }\n\nexport function createEventUi(refined: EventUiRefined, context: CalendarContext): EventUi {\n let constraint = normalizeConstraint(refined.constraint, context)\n\n return {\n display: refined.display || null,\n startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,\n durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,\n constraints: constraint != null ? [constraint] : [],\n overlap: refined.overlap != null ? refined.overlap : null,\n allows: refined.allow != null ? [refined.allow] : [],\n backgroundColor: refined.backgroundColor || refined.color || '',\n borderColor: refined.borderColor || refined.color || '',\n textColor: refined.textColor || '',\n classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural\n }\n}\n\n// TODO: prevent against problems with <2 args!\nexport function combineEventUis(uis: EventUi[]): EventUi {\n return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI)\n}\n\nfunction combineTwoEventUis(item0: EventUi, item1: EventUi): EventUi { // hash1 has higher precedence\n return {\n display: item1.display != null ? item1.display : item0.display,\n startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n constraints: item0.constraints.concat(item1.constraints),\n overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n allows: item0.allows.concat(item1.allows),\n backgroundColor: item1.backgroundColor || item0.backgroundColor,\n borderColor: item1.borderColor || item0.borderColor,\n textColor: item1.textColor || item0.textColor,\n classNames: item0.classNames.concat(item1.classNames),\n }\n}\n","import { EventInput, EventInputTransformer } from './event-parse.js'\nimport { EventSourceFunc } from '../event-sources/func-event-source.js'\nimport { EventSource, EventSourceSuccessResponseHandler, EventSourceErrorResponseHandler } from './event-source.js'\nimport { JSON_FEED_EVENT_SOURCE_REFINERS } from '../event-sources/json-feed-event-source-refiners.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { guid } from '../util/misc.js'\nimport { EVENT_UI_REFINERS, createEventUi, EventUiInput, EventUiRefined } from '../component/event-ui.js'\nimport { identity, Identity, RawOptionsFromRefiners, refineProps, RefinedOptionsFromRefiners } from '../options.js'\n\nconst EVENT_SOURCE_REFINERS = { // does NOT include EVENT_UI_REFINERS\n id: String,\n defaultAllDay: Boolean,\n url: String,\n format: String,\n events: identity as Identity<EventInput[] | EventSourceFunc>, // array or function\n eventDataTransform: identity as Identity<EventInputTransformer>,\n\n // for any network-related sources\n success: identity as Identity<EventSourceSuccessResponseHandler>,\n failure: identity as Identity<EventSourceErrorResponseHandler>,\n}\n\ntype BuiltInEventSourceRefiners = typeof EVENT_SOURCE_REFINERS &\n typeof JSON_FEED_EVENT_SOURCE_REFINERS\n\nexport interface EventSourceRefiners extends BuiltInEventSourceRefiners {\n // for extending\n}\n\nexport type EventSourceInputObject =\n EventUiInput &\n RawOptionsFromRefiners<Required<EventSourceRefiners>> // Required hack\n\nexport type EventSourceInput =\n EventSourceInputObject | // object in extended form\n EventInput[] |\n EventSourceFunc | // just a function\n string // a URL for a JSON feed\n\nexport type EventSourceRefined =\n EventUiRefined &\n RefinedOptionsFromRefiners<Required<EventSourceRefiners>> // Required hack\n\nexport function parseEventSource(\n raw: EventSourceInput,\n context: CalendarContext,\n refiners = buildEventSourceRefiners(context),\n): EventSource<any> | null {\n let rawObj: EventSourceInputObject\n\n if (typeof raw === 'string') {\n rawObj = { url: raw }\n } else if (typeof raw === 'function' || Array.isArray(raw)) {\n rawObj = { events: raw }\n } else if (typeof raw === 'object' && raw) { // not null\n rawObj = raw\n }\n\n if (rawObj) {\n let { refined, extra } = refineProps(rawObj, refiners)\n let metaRes = buildEventSourceMeta(refined, context)\n\n if (metaRes) {\n return {\n _raw: raw,\n isFetching: false,\n latestFetchId: '',\n fetchRange: null,\n defaultAllDay: refined.defaultAllDay,\n eventDataTransform: refined.eventDataTransform,\n success: refined.success,\n failure: refined.failure,\n publicId: refined.id || '',\n sourceId: guid(),\n sourceDefId: metaRes.sourceDefId,\n meta: metaRes.meta,\n ui: createEventUi(refined, context),\n extendedProps: extra,\n }\n }\n }\n\n return null\n}\n\nexport function buildEventSourceRefiners(context: CalendarContext) {\n return { ...EVENT_UI_REFINERS, ...EVENT_SOURCE_REFINERS, ...context.pluginHooks.eventSourceRefiners }\n}\n\nfunction buildEventSourceMeta(raw: EventSourceRefined, context: CalendarContext) {\n let defs = context.pluginHooks.eventSourceDefs\n\n for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence\n let def = defs[i]\n let meta = def.parseMeta(raw)\n\n if (meta) {\n return { sourceDefId: i, meta }\n }\n }\n\n return null\n}\n","import { filterHash, mapHash } from '../util/object.js'\nimport { EventDef } from '../structs/event-def.js'\nimport { EventInstance, EventInstanceHash } from '../structs/event-instance.js'\nimport { EventInput } from '../structs/event-parse.js'\nimport {\n EventStore,\n mergeEventStores,\n createEmptyEventStore,\n filterEventStoreDefs,\n excludeSubEventStore,\n parseEvents,\n} from '../structs/event-store.js'\nimport { Action } from './Action.js'\nimport { EventSourceHash, EventSource } from '../structs/event-source.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { DateEnv } from '../datelib/env.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { expandRecurring } from '../structs/recurring-event.js'\n\nexport function reduceEventStore(\n eventStore: EventStore,\n action: Action,\n eventSources: EventSourceHash,\n dateProfile: DateProfile,\n context: CalendarContext,\n): EventStore {\n switch (action.type) {\n case 'RECEIVE_EVENTS': // raw\n return receiveRawEvents(\n eventStore,\n eventSources[action.sourceId],\n action.fetchId,\n action.fetchRange,\n action.rawEvents,\n context,\n )\n\n case 'ADD_EVENTS': // already parsed, but not expanded\n return addEvent(\n eventStore,\n action.eventStore, // new ones\n dateProfile ? dateProfile.activeRange : null,\n context,\n )\n\n case 'RESET_EVENTS':\n return action.eventStore\n\n case 'MERGE_EVENTS': // already parsed and expanded\n return mergeEventStores(eventStore, action.eventStore)\n\n case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n case 'NEXT':\n case 'CHANGE_DATE':\n case 'CHANGE_VIEW_TYPE':\n if (dateProfile) {\n return expandRecurring(eventStore, dateProfile.activeRange, context)\n }\n return eventStore\n\n case 'REMOVE_EVENTS':\n return excludeSubEventStore(eventStore, action.eventStore)\n\n case 'REMOVE_EVENT_SOURCE':\n return excludeEventsBySourceId(eventStore, action.sourceId)\n\n case 'REMOVE_ALL_EVENT_SOURCES':\n return filterEventStoreDefs(eventStore, (eventDef: EventDef) => (\n !eventDef.sourceId // only keep events with no source id\n ))\n\n case 'REMOVE_ALL_EVENTS':\n return createEmptyEventStore()\n\n default:\n return eventStore\n }\n}\n\nfunction receiveRawEvents(\n eventStore: EventStore,\n eventSource: EventSource<any>,\n fetchId: string,\n fetchRange: DateRange | null,\n rawEvents: EventInput[],\n context: CalendarContext,\n): EventStore {\n if (\n eventSource && // not already removed\n fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n ) {\n let subset = parseEvents(\n transformRawEvents(rawEvents, eventSource, context),\n eventSource,\n context,\n )\n\n if (fetchRange) {\n subset = expandRecurring(subset, fetchRange, context)\n }\n\n return mergeEventStores(\n excludeEventsBySourceId(eventStore, eventSource.sourceId),\n subset,\n )\n }\n\n return eventStore\n}\n\nfunction transformRawEvents(rawEvents, eventSource: EventSource<any>, context: CalendarContext) {\n let calEachTransform = context.options.eventDataTransform\n let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null\n\n if (sourceEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform)\n }\n\n if (calEachTransform) {\n rawEvents = transformEachRawEvent(rawEvents, calEachTransform)\n }\n\n return rawEvents\n}\n\nfunction transformEachRawEvent(rawEvents, func) {\n let refinedEvents\n\n if (!func) {\n refinedEvents = rawEvents\n } else {\n refinedEvents = []\n\n for (let rawEvent of rawEvents) {\n let refinedEvent = func(rawEvent)\n\n if (refinedEvent) {\n refinedEvents.push(refinedEvent)\n } else if (refinedEvent == null) {\n refinedEvents.push(rawEvent)\n } // if a different falsy value, do nothing\n }\n }\n\n return refinedEvents\n}\n\nfunction addEvent(eventStore: EventStore, subset: EventStore, expandRange: DateRange | null, context: CalendarContext): EventStore {\n if (expandRange) {\n subset = expandRecurring(subset, expandRange, context)\n }\n\n return mergeEventStores(eventStore, subset)\n}\n\nexport function rezoneEventStoreDates(eventStore: EventStore, oldDateEnv: DateEnv, newDateEnv: DateEnv): EventStore {\n let { defs } = eventStore\n\n let instances = mapHash(eventStore.instances, (instance: EventInstance): EventInstance => {\n let def = defs[instance.defId]\n\n if (def.allDay || def.recurringDef) {\n return instance // isn't dependent on timezone\n }\n return {\n ...instance,\n range: {\n start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),\n },\n forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,\n forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo,\n }\n })\n\n return { defs, instances }\n}\n\nfunction excludeEventsBySourceId(eventStore: EventStore, sourceId: string) {\n return filterEventStoreDefs(eventStore, (eventDef: EventDef) => eventDef.sourceId !== sourceId)\n}\n\n// QUESTION: why not just return instances? do a general object-property-exclusion util\nexport function excludeInstances(eventStore: EventStore, removals: EventInstanceHash): EventStore {\n return {\n defs: eventStore.defs,\n instances: filterHash(eventStore.instances, (instance: EventInstance) => !removals[instance.instanceId]),\n }\n}\n","export interface HandlerFuncTypeHash {\n [eventName: string]: (...args: any[]) => any // with all properties required\n}\n\nexport class Emitter<HandlerFuncs extends HandlerFuncTypeHash> {\n private handlers: { [Prop in keyof HandlerFuncs]?: HandlerFuncs[Prop][] } = {}\n\n private options: Partial<HandlerFuncs>\n\n private thisContext: any = null\n\n setThisContext(thisContext) {\n this.thisContext = thisContext\n }\n\n setOptions(options: Partial<HandlerFuncs>) {\n this.options = options\n }\n\n on<Prop extends keyof HandlerFuncs>(type: Prop, handler: HandlerFuncs[Prop]) {\n addToHash(this.handlers, type, handler)\n }\n\n off<Prop extends keyof HandlerFuncs>(type: Prop, handler?: HandlerFuncs[Prop]) {\n removeFromHash(this.handlers, type, handler)\n }\n\n trigger<Prop extends keyof HandlerFuncs>(type: Prop, ...args: Parameters<HandlerFuncs[Prop]>) {\n let attachedHandlers = this.handlers[type] || []\n let optionHandler = this.options && this.options[type]\n let handlers = [].concat(optionHandler || [], attachedHandlers)\n\n for (let handler of handlers) {\n handler.apply(this.thisContext, args)\n }\n }\n\n hasHandlers(type: keyof HandlerFuncs): boolean {\n return Boolean(\n (this.handlers[type] && this.handlers[type].length) ||\n (this.options && this.options[type]),\n )\n }\n}\n\nfunction addToHash(hash, type, handler) {\n (hash[type] || (hash[type] = []))\n .push(handler)\n}\n\nfunction removeFromHash(hash, type, handler?) {\n if (handler) {\n if (hash[type]) {\n hash[type] = hash[type].filter((func) => func !== handler)\n }\n } else {\n delete hash[type] // remove all handler funcs for this type\n }\n}\n","import { EventInput } from './event-parse.js'\nimport { EventStore, parseEvents } from './event-store.js'\nimport { CalendarContext } from '../CalendarContext.js'\n\n/*\nUtils for converting raw business hour input into an EventStore,\nfor both rendering and the constraint system.\n*/\n\nexport type BusinessHoursInput = boolean | EventInput | EventInput[]\n\nconst DEF_DEFAULTS = {\n startTime: '09:00',\n endTime: '17:00',\n daysOfWeek: [1, 2, 3, 4, 5], // monday - friday\n display: 'inverse-background',\n classNames: 'fc-non-business',\n groupId: '_businessHours', // so multiple defs get grouped\n}\n\n/*\nTODO: pass around as EventDefHash!!!\n*/\nexport function parseBusinessHours(input: BusinessHoursInput, context: CalendarContext): EventStore {\n return parseEvents(\n refineInputs(input),\n null,\n context,\n )\n}\n\nfunction refineInputs(input: BusinessHoursInput) {\n let rawDefs\n\n if (input === true) {\n rawDefs = [{}] // will get DEF_DEFAULTS verbatim\n } else if (Array.isArray(input)) {\n // if specifying an array, every sub-definition NEEDS a day-of-week\n rawDefs = input.filter((rawDef) => rawDef.daysOfWeek)\n } else if (typeof input === 'object' && input) { // non-null object\n rawDefs = [input]\n } else { // is probably false\n rawDefs = []\n }\n\n rawDefs = rawDefs.map((rawDef) => ({ ...DEF_DEFAULTS, ...rawDef }))\n\n return rawDefs\n}\n","import { PointerDragEvent } from './interactions/pointer.js'\nimport { buildDateSpanApi, DateSpanApi, DatePointApi, DateSpan } from './structs/date-span.js'\nimport { CalendarContext } from './CalendarContext.js'\nimport { ViewApi } from './api/ViewApi.js'\nimport { ViewImpl } from './api/ViewImpl.js'\nimport { DateMarker, startOfDay } from './datelib/marker.js'\n\nexport interface DateClickApi extends DatePointApi {\n dayEl: HTMLElement\n jsEvent: UIEvent\n view: ViewApi\n}\n\nexport interface DateSelectionApi extends DateSpanApi {\n jsEvent: UIEvent\n view: ViewApi\n}\n\nexport type DatePointTransform = (dateSpan: DateSpan, context: CalendarContext) => any\nexport type DateSpanTransform = (dateSpan: DateSpan, context: CalendarContext) => any\n\nexport type CalendarInteraction = { destroy: () => void }\nexport type CalendarInteractionClass = { new(context: CalendarContext): CalendarInteraction }\n\nexport type OptionChangeHandler = (propValue: any, context: CalendarContext) => void\nexport type OptionChangeHandlerMap = { [propName: string]: OptionChangeHandler }\n\nexport interface DateSelectArg extends DateSpanApi {\n jsEvent: MouseEvent | null\n view: ViewApi\n}\n\nexport function triggerDateSelect(selection: DateSpan, pev: PointerDragEvent | null, context: CalendarContext & { viewApi?: ViewImpl }) {\n context.emitter.trigger('select', {\n ...buildDateSpanApiWithContext(selection, context),\n jsEvent: pev ? pev.origEvent as MouseEvent : null, // Is this always a mouse event? See #4655\n view: context.viewApi || context.calendarApi.view,\n } as DateSelectArg)\n}\n\nexport interface DateUnselectArg {\n jsEvent: MouseEvent\n view: ViewApi\n}\n\nexport function triggerDateUnselect(pev: PointerDragEvent | null, context: CalendarContext & { viewApi?: ViewImpl }) {\n context.emitter.trigger('unselect', {\n jsEvent: pev ? pev.origEvent as MouseEvent : null, // Is this always a mouse event? See #4655\n view: context.viewApi || context.calendarApi.view,\n } as DateUnselectArg)\n}\n\nexport function buildDateSpanApiWithContext(dateSpan: DateSpan, context: CalendarContext) {\n let props = {} as DateSpanApi\n\n for (let transform of context.pluginHooks.dateSpanTransforms) {\n Object.assign(props, transform(dateSpan, context))\n }\n\n Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv))\n\n return props\n}\n\n// Given an event's allDay status and start date, return what its fallback end date should be.\n// TODO: rename to computeDefaultEventEnd\nexport function getDefaultEventEnd(allDay: boolean, marker: DateMarker, context: CalendarContext): DateMarker {\n let { dateEnv, options } = context\n let end = marker\n\n if (allDay) {\n end = startOfDay(end)\n end = dateEnv.add(end, options.defaultAllDayEventDuration)\n } else {\n end = dateEnv.add(end, options.defaultTimedEventDuration)\n }\n\n return end\n}\n","import { Duration } from '../datelib/duration.js'\nimport { EventStore, createEmptyEventStore } from './event-store.js'\nimport { EventDef } from './event-def.js'\nimport { EventInstance } from './event-instance.js'\nimport { computeAlignedDayRange } from '../util/date.js'\nimport { startOfDay } from '../datelib/marker.js'\nimport { EventUiHash, EventUi } from '../component/event-ui.js'\nimport { compileEventUis } from '../component/event-rendering.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { getDefaultEventEnd } from '../calendar-utils.js'\n\n/*\nA data structure for how to modify an EventDef/EventInstance within an EventStore\n*/\n\nexport interface EventMutation {\n datesDelta?: Duration // body start+end moving together. for dragging\n startDelta?: Duration // for resizing\n endDelta?: Duration // for resizing\n standardProps?: any // for the def. should not include extendedProps\n extendedProps?: any // for the def\n}\n\n// applies the mutation to ALL defs/instances within the event store\nexport function applyMutationToEventStore(\n eventStore: EventStore,\n eventConfigBase: EventUiHash,\n mutation: EventMutation,\n context: CalendarContext,\n): EventStore {\n let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase)\n let dest = createEmptyEventStore()\n\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId]\n\n dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context)\n }\n\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId]\n let def = dest.defs[instance.defId] // important to grab the newly modified def\n\n dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context)\n }\n\n return dest\n}\n\nexport type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutation, context: CalendarContext) => void\n\nfunction applyMutationToEventDef(eventDef: EventDef, eventConfig: EventUi, mutation: EventMutation, context: CalendarContext): EventDef {\n let standardProps = mutation.standardProps || {}\n\n // if hasEnd has not been specified, guess a good value based on deltas.\n // if duration will change, there's no way the default duration will persist,\n // and thus, we need to mark the event as having a real end\n if (\n standardProps.hasEnd == null &&\n eventConfig.durationEditable &&\n (mutation.startDelta || mutation.endDelta)\n ) {\n standardProps.hasEnd = true // TODO: is this mutation okay?\n }\n\n let copy: EventDef = {\n ...eventDef,\n ...standardProps,\n ui: { ...eventDef.ui, ...standardProps.ui }, // the only prop we want to recursively overlay\n }\n\n if (mutation.extendedProps) {\n copy.extendedProps = { ...copy.extendedProps, ...mutation.extendedProps }\n }\n\n for (let applier of context.pluginHooks.eventDefMutationAppliers) {\n applier(copy, mutation, context)\n }\n\n if (!copy.hasEnd && context.options.forceEventDuration) {\n copy.hasEnd = true\n }\n\n return copy\n}\n\nfunction applyMutationToEventInstance(\n eventInstance: EventInstance,\n eventDef: EventDef, // must first be modified by applyMutationToEventDef\n eventConfig: EventUi,\n mutation: EventMutation,\n context: CalendarContext,\n): EventInstance {\n let { dateEnv } = context\n let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true\n let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false\n let copy = { ...eventInstance } as EventInstance\n\n if (forceAllDay) {\n copy.range = computeAlignedDayRange(copy.range)\n }\n\n if (mutation.datesDelta && eventConfig.startEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.datesDelta),\n end: dateEnv.add(copy.range.end, mutation.datesDelta),\n }\n }\n\n if (mutation.startDelta && eventConfig.durationEditable) {\n copy.range = {\n start: dateEnv.add(copy.range.start, mutation.startDelta),\n end: copy.range.end,\n }\n }\n\n if (mutation.endDelta && eventConfig.durationEditable) {\n copy.range = {\n start: copy.range.start,\n end: dateEnv.add(copy.range.end, mutation.endDelta),\n }\n }\n\n if (clearEnd) {\n copy.range = {\n start: copy.range.start,\n end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),\n }\n }\n\n // in case event was all-day but the supplied deltas were not\n // better util for this?\n if (eventDef.allDay) {\n copy.range = {\n start: startOfDay(copy.range.start),\n end: startOfDay(copy.range.end),\n }\n }\n\n // handle invalid durations\n if (copy.range.end < copy.range.start) {\n copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context)\n }\n\n return copy\n}\n","import { EventSource } from '../structs/event-source.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { EventSourceApi } from './EventSourceApi.js'\n\nexport class EventSourceImpl implements EventSourceApi {\n constructor(\n private context: CalendarContext,\n public internalEventSource: EventSource<any>, // rename?\n ) {\n }\n\n remove(): void {\n this.context.dispatch({\n type: 'REMOVE_EVENT_SOURCE',\n sourceId: this.internalEventSource.sourceId,\n })\n }\n\n refetch(): void {\n this.context.dispatch({\n type: 'FETCH_EVENT_SOURCES',\n sourceIds: [this.internalEventSource.sourceId],\n isRefetch: true,\n })\n }\n\n get id(): string {\n return this.internalEventSource.publicId\n }\n\n get url(): string {\n return this.internalEventSource.meta.url\n }\n\n get format(): string {\n return this.internalEventSource.meta.format // TODO: bad. not guaranteed\n }\n}\n","import { EventDef } from '../structs/event-def.js'\nimport { EVENT_NON_DATE_REFINERS, EVENT_DATE_REFINERS } from '../structs/event-parse.js'\nimport { EventInstance } from '../structs/event-instance.js'\nimport { EVENT_UI_REFINERS, EventUiHash } from '../component/event-ui.js'\nimport { EventMutation, applyMutationToEventStore } from '../structs/event-mutation.js'\nimport { diffDates, computeAlignedDayRange } from '../util/date.js'\nimport { createDuration, durationsEqual } from '../datelib/duration.js'\nimport { createFormatter } from '../datelib/formatting.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { getRelevantEvents, EventStore } from '../structs/event-store.js'\nimport { Dictionary } from '../options.js'\nimport { EventApi } from './EventApi.js'\nimport { EventSourceImpl } from './EventSourceImpl.js'\nimport {\n DateInput,\n DurationInput,\n FormatterInput,\n} from './structs.js'\n\nexport class EventImpl implements EventApi {\n _context: CalendarContext\n _def: EventDef\n _instance: EventInstance | null\n // instance will be null if expressing a recurring event that has no current instances,\n // OR if trying to validate an incoming external event that has no dates assigned\n\n constructor(context: CalendarContext, def: EventDef, instance?: EventInstance) {\n this._context = context\n this._def = def\n this._instance = instance || null\n }\n\n /*\n TODO: make event struct more responsible for this\n */\n setProp(name: string, val: any): void {\n if (name in EVENT_DATE_REFINERS) {\n console.warn('Could not set date-related prop \\'name\\'. Use one of the date-related methods instead.')\n // TODO: make proper aliasing system?\n } else if (name === 'id') {\n val = EVENT_NON_DATE_REFINERS[name](val)\n\n this.mutate({\n standardProps: { publicId: val }, // hardcoded internal name\n })\n } else if (name in EVENT_NON_DATE_REFINERS) {\n val = EVENT_NON_DATE_REFINERS[name](val)\n\n this.mutate({\n standardProps: { [name]: val },\n })\n } else if (name in EVENT_UI_REFINERS) {\n let ui = EVENT_UI_REFINERS[name](val)\n\n if (name === 'color') {\n ui = { backgroundColor: val, borderColor: val }\n } else if (name === 'editable') {\n ui = { startEditable: val, durationEditable: val }\n } else {\n ui = { [name]: val }\n }\n\n this.mutate({\n standardProps: { ui },\n })\n } else {\n console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`)\n }\n }\n\n setExtendedProp(name: string, val: any): void {\n this.mutate({\n extendedProps: { [name]: val },\n })\n }\n\n setStart(startInput: DateInput, options: { granularity?: string, maintainDuration?: boolean } = {}): void {\n let { dateEnv } = this._context\n let start = dateEnv.createMarker(startInput)\n\n if (start && this._instance) { // TODO: warning if parsed bad\n let instanceRange = this._instance.range\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity) // what if parsed bad!?\n\n if (options.maintainDuration) {\n this.mutate({ datesDelta: startDelta })\n } else {\n this.mutate({ startDelta })\n }\n }\n }\n\n setEnd(endInput: DateInput | null, options: { granularity?: string } = {}): void {\n let { dateEnv } = this._context\n let end\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput)\n\n if (!end) {\n return // TODO: warning if parsed bad\n }\n }\n\n if (this._instance) {\n if (end) {\n let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity)\n this.mutate({ endDelta })\n } else {\n this.mutate({ standardProps: { hasEnd: false } })\n }\n }\n }\n\n setDates(startInput: DateInput, endInput: DateInput | null, options: { allDay?: boolean, granularity?: string } = {}): void {\n let { dateEnv } = this._context\n let standardProps = { allDay: options.allDay } as any\n let start = dateEnv.createMarker(startInput)\n let end\n\n if (!start) {\n return // TODO: warning if parsed bad\n }\n\n if (endInput != null) {\n end = dateEnv.createMarker(endInput)\n\n if (!end) { // TODO: warning if parsed bad\n return\n }\n }\n\n if (this._instance) {\n let instanceRange = this._instance.range\n\n // when computing the diff for an event being converted to all-day,\n // compute diff off of the all-day values the way event-mutation does.\n if (options.allDay === true) {\n instanceRange = computeAlignedDayRange(instanceRange)\n }\n\n let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity)\n\n if (end) {\n let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity)\n\n if (durationsEqual(startDelta, endDelta)) {\n this.mutate({ datesDelta: startDelta, standardProps })\n } else {\n this.mutate({ startDelta, endDelta, standardProps })\n }\n } else { // means \"clear the end\"\n standardProps.hasEnd = false\n this.mutate({ datesDelta: startDelta, standardProps })\n }\n }\n }\n\n moveStart(deltaInput: DurationInput): void {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ startDelta: delta })\n }\n }\n\n moveEnd(deltaInput: DurationInput): void {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ endDelta: delta })\n }\n }\n\n moveDates(deltaInput: DurationInput): void {\n let delta = createDuration(deltaInput)\n\n if (delta) { // TODO: warning if parsed bad\n this.mutate({ datesDelta: delta })\n }\n }\n\n setAllDay(allDay: boolean, options: { maintainDuration?: boolean } = {}): void {\n let standardProps = { allDay } as any\n let { maintainDuration } = options\n\n if (maintainDuration == null) {\n maintainDuration = this._context.options.allDayMaintainDuration\n }\n\n if (this._def.allDay !== allDay) {\n standardProps.hasEnd = maintainDuration\n }\n\n this.mutate({ standardProps })\n }\n\n formatRange(formatInput: FormatterInput): string {\n let { dateEnv } = this._context\n let instance = this._instance\n let formatter = createFormatter(formatInput)\n\n if (this._def.hasEnd) {\n return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n forcedStartTzo: instance.forcedStartTzo,\n forcedEndTzo: instance.forcedEndTzo,\n })\n }\n return dateEnv.format(instance.range.start, formatter, {\n forcedTzo: instance.forcedStartTzo,\n })\n }\n\n mutate(mutation: EventMutation): void { // meant to be private. but plugins need access\n let instance = this._instance\n\n if (instance) {\n let def = this._def\n let context = this._context\n let { eventStore } = context.getCurrentData()\n let relevantEvents = getRelevantEvents(eventStore, instance.instanceId)\n let eventConfigBase = {\n '': { // HACK. always allow API to mutate events\n display: '',\n startEditable: true,\n durationEditable: true,\n constraints: [],\n overlap: null,\n allows: [],\n backgroundColor: '',\n borderColor: '',\n textColor: '',\n classNames: [],\n },\n } as EventUiHash\n\n relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context)\n\n let oldEvent = new EventImpl(context, def, instance) // snapshot\n this._def = relevantEvents.defs[def.defId]\n this._instance = relevantEvents.instances[instance.instanceId]\n\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents,\n })\n\n context.emitter.trigger('eventChange', {\n oldEvent,\n event: this,\n relatedEvents: buildEventApis(relevantEvents, context, instance),\n revert() {\n context.dispatch({\n type: 'RESET_EVENTS',\n eventStore, // the ORIGINAL store\n })\n },\n })\n }\n }\n\n remove(): void {\n let context = this._context\n let asStore = eventApiToStore(this)\n\n context.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: asStore,\n })\n\n context.emitter.trigger('eventRemove', {\n event: this,\n relatedEvents: [],\n revert() {\n context.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: asStore,\n })\n },\n })\n }\n\n get source(): EventSourceImpl | null {\n let { sourceId } = this._def\n\n if (sourceId) {\n return new EventSourceImpl(\n this._context,\n this._context.getCurrentData().eventSources[sourceId],\n )\n }\n return null\n }\n\n get start(): Date | null {\n return this._instance ?\n this._context.dateEnv.toDate(this._instance.range.start) :\n null\n }\n\n get end(): Date | null {\n return (this._instance && this._def.hasEnd) ?\n this._context.dateEnv.toDate(this._instance.range.end) :\n null\n }\n\n get startStr(): string {\n let instance = this._instance\n if (instance) {\n return this._context.dateEnv.formatIso(instance.range.start, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedStartTzo,\n })\n }\n return ''\n }\n\n get endStr(): string {\n let instance = this._instance\n if (instance && this._def.hasEnd) {\n return this._context.dateEnv.formatIso(instance.range.end, {\n omitTime: this._def.allDay,\n forcedTzo: instance.forcedEndTzo,\n })\n }\n return ''\n }\n\n // computable props that all access the def\n // TODO: find a TypeScript-compatible way to do this at scale\n get id() { return this._def.publicId }\n get groupId() { return this._def.groupId }\n get allDay() { return this._def.allDay }\n get title() { return this._def.title }\n get url() { return this._def.url }\n get display() { return this._def.ui.display || 'auto' } // bad. just normalize the type earlier\n get startEditable() { return this._def.ui.startEditable }\n get durationEditable() { return this._def.ui.durationEditable }\n get constraint() { return this._def.ui.constraints[0] || null }\n get overlap() { return this._def.ui.overlap }\n get allow() { return this._def.ui.allows[0] || null }\n get backgroundColor() { return this._def.ui.backgroundColor }\n get borderColor() { return this._def.ui.borderColor }\n get textColor() { return this._def.ui.textColor }\n\n // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n get classNames() { return this._def.ui.classNames }\n get extendedProps() { return this._def.extendedProps }\n\n toPlainObject(settings: { collapseExtendedProps?: boolean, collapseColor?: boolean } = {}): Dictionary {\n let def = this._def\n let { ui } = def\n let { startStr, endStr } = this\n let res: Dictionary = {}\n\n if (def.title) {\n res.title = def.title\n }\n\n if (startStr) {\n res.start = startStr\n }\n\n if (endStr) {\n res.end = endStr\n }\n\n if (def.publicId) {\n res.id = def.publicId\n }\n\n if (def.groupId) {\n res.groupId = def.groupId\n }\n\n if (def.url) {\n res.url = def.url\n }\n\n if (ui.display && ui.display !== 'auto') {\n res.display = ui.display\n }\n\n // TODO: what about recurring-event properties???\n // TODO: include startEditable/durationEditable/constraint/overlap/allow\n\n if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {\n res.color = ui.backgroundColor\n } else {\n if (ui.backgroundColor) {\n res.backgroundColor = ui.backgroundColor\n }\n if (ui.borderColor) {\n res.borderColor = ui.borderColor\n }\n }\n\n if (ui.textColor) {\n res.textColor = ui.textColor\n }\n\n if (ui.classNames.length) {\n res.classNames = ui.classNames\n }\n\n if (Object.keys(def.extendedProps).length) {\n if (settings.collapseExtendedProps) {\n Object.assign(res, def.extendedProps)\n } else {\n res.extendedProps = def.extendedProps\n }\n }\n\n return res\n }\n\n toJSON(): Dictionary {\n return this.toPlainObject()\n }\n}\n\nexport function eventApiToStore(eventApi: EventImpl): EventStore {\n let def = eventApi._def\n let instance = eventApi._instance\n\n return {\n defs: { [def.defId]: def },\n instances: instance\n ? { [instance.instanceId]: instance }\n : {},\n }\n}\n\nexport function buildEventApis(eventStore: EventStore, context: CalendarContext, excludeInstance?: EventInstance): EventImpl[] {\n let { defs, instances } = eventStore\n let eventApis: EventImpl[] = []\n let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : ''\n\n for (let id in instances) {\n let instance = instances[id]\n let def = defs[instance.defId]\n\n if (instance.instanceId !== excludeInstanceId) {\n eventApis.push(new EventImpl(context, def, instance))\n }\n }\n\n return eventApis\n}\n","import { EventDef, EventDefHash } from '../structs/event-def.js'\nimport { EventTuple } from '../structs/event-parse.js'\nimport { EventStore } from '../structs/event-store.js'\nimport { DateRange, invertRanges, intersectRanges, rangeContainsMarker } from '../datelib/date-range.js'\nimport { Duration } from '../datelib/duration.js'\nimport { compareByFieldSpecs, OrderSpec } from '../util/misc.js'\nimport { computeVisibleDayRange } from '../util/date.js'\nimport { Seg } from './DateComponent.js'\nimport { EventImpl } from '../api/EventImpl.js'\nimport { EventUi, EventUiHash, combineEventUis } from './event-ui.js'\nimport { mapHash } from '../util/object.js'\nimport { ViewContext } from '../ViewContext.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\nimport { addMs, DateMarker, startOfDay } from '../datelib/marker.js'\nimport { ViewApi } from '../api/ViewApi.js'\nimport { MountArg } from '../common/render-hook.js'\nimport { createAriaKeyboardAttrs } from '../util/dom-event.js'\n\nexport interface EventRenderRange extends EventTuple {\n ui: EventUi\n range: DateRange\n isStart: boolean\n isEnd: boolean\n}\n\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\nexport function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHash, framingRange: DateRange, nextDayThreshold?: Duration) {\n let inverseBgByGroupId: { [groupId: string]: DateRange[] } = {}\n let inverseBgByDefId: { [defId: string]: DateRange[] } = {}\n let defByGroupId: { [groupId: string]: EventDef } = {}\n let bgRanges: EventRenderRange[] = []\n let fgRanges: EventRenderRange[] = []\n let eventUis = compileEventUis(eventStore.defs, eventUiBases)\n\n for (let defId in eventStore.defs) {\n let def = eventStore.defs[defId]\n let ui = eventUis[def.defId]\n\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId] = []\n\n if (!defByGroupId[def.groupId]) {\n defByGroupId[def.groupId] = def\n }\n } else {\n inverseBgByDefId[defId] = []\n }\n }\n }\n\n for (let instanceId in eventStore.instances) {\n let instance = eventStore.instances[instanceId]\n let def = eventStore.defs[instance.defId]\n let ui = eventUis[def.defId]\n let origRange = instance.range\n\n let normalRange = (!def.allDay && nextDayThreshold) ?\n computeVisibleDayRange(origRange, nextDayThreshold) :\n origRange\n\n let slicedRange = intersectRanges(normalRange, framingRange)\n\n if (slicedRange) {\n if (ui.display === 'inverse-background') {\n if (def.groupId) {\n inverseBgByGroupId[def.groupId].push(slicedRange)\n } else {\n inverseBgByDefId[instance.defId].push(slicedRange)\n }\n } else if (ui.display !== 'none') {\n (ui.display === 'background' ? bgRanges : fgRanges).push({\n def,\n ui,\n instance,\n range: slicedRange,\n isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),\n })\n }\n }\n }\n\n for (let groupId in inverseBgByGroupId) { // BY GROUP\n let ranges = inverseBgByGroupId[groupId]\n let invertedRanges = invertRanges(ranges, framingRange)\n\n for (let invertedRange of invertedRanges) {\n let def = defByGroupId[groupId]\n let ui = eventUis[def.defId]\n\n bgRanges.push({\n def,\n ui,\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n })\n }\n }\n\n for (let defId in inverseBgByDefId) {\n let ranges = inverseBgByDefId[defId]\n let invertedRanges = invertRanges(ranges, framingRange)\n\n for (let invertedRange of invertedRanges) {\n bgRanges.push({\n def: eventStore.defs[defId],\n ui: eventUis[defId],\n instance: null,\n range: invertedRange,\n isStart: false,\n isEnd: false,\n })\n }\n }\n\n return { bg: bgRanges, fg: fgRanges }\n}\n\nexport function hasBgRendering(def: EventDef) {\n return def.ui.display === 'background' || def.ui.display === 'inverse-background'\n}\n\nexport function setElSeg(el: HTMLElement, seg: Seg) {\n (el as any).fcSeg = seg\n}\n\nexport function getElSeg(el: HTMLElement): Seg | null {\n return (el as any).fcSeg ||\n (el.parentNode as any).fcSeg || // for the harness\n null\n}\n\n// event ui computation\n\nexport function compileEventUis(eventDefs: EventDefHash, eventUiBases: EventUiHash) {\n return mapHash(eventDefs, (eventDef: EventDef) => compileEventUi(eventDef, eventUiBases))\n}\n\nexport function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash) {\n let uis = []\n\n if (eventUiBases['']) {\n uis.push(eventUiBases[''])\n }\n\n if (eventUiBases[eventDef.defId]) {\n uis.push(eventUiBases[eventDef.defId])\n }\n\n uis.push(eventDef.ui)\n\n return combineEventUis(uis)\n}\n\nexport function sortEventSegs(segs, eventOrderSpecs: OrderSpec<EventImpl>[]): Seg[] {\n let objs = segs.map(buildSegCompareObj)\n\n objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs))\n\n return objs.map((c) => c._seg)\n}\n\n// returns a object with all primitive props that can be compared\nexport function buildSegCompareObj(seg: Seg) {\n let { eventRange } = seg\n let eventDef = eventRange.def\n let range = eventRange.instance ? eventRange.instance.range : eventRange.range\n let start = range.start ? range.start.valueOf() : 0 // TODO: better support for open-range events\n let end = range.end ? range.end.valueOf() : 0 // \"\n\n return {\n ...eventDef.extendedProps,\n ...eventDef,\n id: eventDef.publicId,\n start,\n end,\n duration: end - start,\n allDay: Number(eventDef.allDay),\n _seg: seg, // for later retrieval\n }\n}\n\n// other stuff\n\nexport interface EventContentArg { // for *Content handlers\n event: EventImpl\n timeText: string\n backgroundColor: string // TODO: add other EventUi props?\n borderColor: string //\n textColor: string //\n isDraggable: boolean\n isStartResizable: boolean\n isEndResizable: boolean\n isMirror: boolean\n isStart: boolean\n isEnd: boolean\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n isSelected: boolean\n isDragging: boolean\n isResizing: boolean\n view: ViewApi // specifically for the API\n}\n\nexport type EventMountArg = MountArg<EventContentArg>\n\nexport function computeSegDraggable(seg: Seg, context: ViewContext) {\n let { pluginHooks } = context\n let transformers = pluginHooks.isDraggableTransformers\n let { def, ui } = seg.eventRange\n let val = ui.startEditable\n\n for (let transformer of transformers) {\n val = transformer(val, def, ui, context)\n }\n\n return val\n}\n\nexport function computeSegStartResizable(seg: Seg, context: ViewContext) {\n return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart\n}\n\nexport function computeSegEndResizable(seg: Seg, context: ViewContext) {\n return seg.isEnd && seg.eventRange.ui.durationEditable\n}\n\nexport function buildSegTimeText(\n seg: Seg,\n timeFormat: DateFormatter,\n context: ViewContext,\n defaultDisplayEventTime?: boolean, // defaults to true\n defaultDisplayEventEnd?: boolean, // defaults to true\n startOverride?: DateMarker,\n endOverride?: DateMarker,\n) {\n let { dateEnv, options } = context\n let { displayEventTime, displayEventEnd } = options\n let eventDef = seg.eventRange.def\n let eventInstance = seg.eventRange.instance\n\n if (displayEventTime == null) { displayEventTime = defaultDisplayEventTime !== false }\n if (displayEventEnd == null) { displayEventEnd = defaultDisplayEventEnd !== false }\n\n let wholeEventStart = eventInstance.range.start\n let wholeEventEnd = eventInstance.range.end\n let segStart = startOverride || seg.start || seg.eventRange.range.start\n let segEnd = endOverride || seg.end || seg.eventRange.range.end\n let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf()\n let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf()\n\n if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {\n segStart = isStartDay ? wholeEventStart : segStart\n segEnd = isEndDay ? wholeEventEnd : segEnd\n\n if (displayEventEnd && eventDef.hasEnd) {\n return dateEnv.formatRange(segStart, segEnd, timeFormat, {\n forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooooooooooo, give tzo if same date\n forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,\n })\n }\n return dateEnv.format(segStart, timeFormat, {\n forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same\n })\n }\n\n return ''\n}\n\nexport function getSegMeta(seg: Seg, todayRange: DateRange, nowDate?: DateMarker) { // TODO: make arg order consistent with date util\n let segRange = seg.eventRange.range\n\n return {\n isPast: segRange.end < (nowDate || todayRange.start),\n isFuture: segRange.start >= (nowDate || todayRange.end),\n isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),\n }\n}\n\nexport function getEventClassNames(props: EventContentArg) { // weird that we use this interface, but convenient\n let classNames: string[] = ['fc-event']\n\n if (props.isMirror) {\n classNames.push('fc-event-mirror')\n }\n\n if (props.isDraggable) {\n classNames.push('fc-event-draggable')\n }\n\n if (props.isStartResizable || props.isEndResizable) {\n classNames.push('fc-event-resizable')\n }\n\n if (props.isDragging) {\n classNames.push('fc-event-dragging')\n }\n\n if (props.isResizing) {\n classNames.push('fc-event-resizing')\n }\n\n if (props.isSelected) {\n classNames.push('fc-event-selected')\n }\n\n if (props.isStart) {\n classNames.push('fc-event-start')\n }\n\n if (props.isEnd) {\n classNames.push('fc-event-end')\n }\n\n if (props.isPast) {\n classNames.push('fc-event-past')\n }\n\n if (props.isToday) {\n classNames.push('fc-event-today')\n }\n\n if (props.isFuture) {\n classNames.push('fc-event-future')\n }\n\n return classNames\n}\n\nexport function buildEventRangeKey(eventRange: EventRenderRange) {\n return eventRange.instance\n ? eventRange.instance.instanceId\n : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`\n // inverse-background events don't have specific instances. TODO: better solution\n}\n\nexport function getSegAnchorAttrs(seg: Seg, context: ViewContext) {\n let { def, instance } = seg.eventRange\n let { url } = def\n\n if (url) {\n return { href: url }\n }\n\n let { emitter, options } = context\n let { eventInteractive } = options\n\n if (eventInteractive == null) {\n eventInteractive = def.interactive\n if (eventInteractive == null) {\n eventInteractive = Boolean(emitter.hasHandlers('eventClick'))\n }\n }\n\n // mock what happens in EventClicking\n if (eventInteractive) {\n // only attach keyboard-related handlers because click handler is already done in EventClicking\n return createAriaKeyboardAttrs((ev: UIEvent) => {\n emitter.trigger('eventClick', {\n el: ev.target as HTMLElement,\n event: new EventImpl(context, def, instance),\n jsEvent: ev as MouseEvent,\n view: context.viewApi,\n })\n })\n }\n\n return {}\n}\n","import { DateRange, rangesEqual, OpenDateRange } from '../datelib/date-range.js'\nimport { DateInput, DateEnv } from '../datelib/env.js'\nimport { Duration } from '../datelib/duration.js'\nimport { createEventInstance } from './event-instance.js'\nimport { parseEventDef, refineEventDef } from './event-parse.js'\nimport { EventRenderRange, compileEventUi } from '../component/event-rendering.js'\nimport { EventUiHash } from '../component/event-ui.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { refineProps, identity, Identity } from '../options.js'\n\n/*\nA data-structure for a date-range that will be visually displayed.\nContains other metadata like allDay, and anything else Components might like to store.\n\nTODO: in future, put otherProps in own object.\n*/\n\nexport interface OpenDateSpanInput {\n start?: DateInput\n end?: DateInput\n allDay?: boolean\n [otherProp: string]: any\n}\n\nexport interface DateSpanInput extends OpenDateSpanInput {\n start: DateInput\n end: DateInput\n}\n\nexport interface OpenDateSpan {\n range: OpenDateRange\n allDay: boolean\n [otherProp: string]: any\n}\n\nexport interface DateSpan extends OpenDateSpan {\n range: DateRange\n}\n\nexport interface RangeApi {\n start: Date\n end: Date\n startStr: string\n endStr: string\n}\n\nexport interface DateSpanApi extends RangeApi {\n allDay: boolean\n}\n\nexport interface RangeApiWithTimeZone extends RangeApi {\n timeZone: string\n}\n\nexport interface DatePointApi {\n date: Date\n dateStr: string\n allDay: boolean\n}\n\nconst STANDARD_PROPS = {\n start: identity as Identity<DateInput>,\n end: identity as Identity<DateInput>,\n allDay: Boolean,\n}\n\nexport function parseDateSpan(raw: DateSpanInput, dateEnv: DateEnv, defaultDuration?: Duration): DateSpan | null {\n let span = parseOpenDateSpan(raw, dateEnv)\n let { range } = span\n\n if (!range.start) {\n return null\n }\n\n if (!range.end) {\n if (defaultDuration == null) {\n return null\n }\n range.end = dateEnv.add(range.start, defaultDuration)\n }\n\n return span as DateSpan\n}\n\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\nexport function parseOpenDateSpan(raw: OpenDateSpanInput, dateEnv: DateEnv): OpenDateSpan | null {\n let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS)\n let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null\n let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null\n let { allDay } = standardProps\n\n if (allDay == null) {\n allDay = (startMeta && startMeta.isTimeUnspecified) &&\n (!endMeta || endMeta.isTimeUnspecified)\n }\n\n return {\n range: {\n start: startMeta ? startMeta.marker : null,\n end: endMeta ? endMeta.marker : null,\n },\n allDay,\n ...extra,\n }\n}\n\nexport function isDateSpansEqual(span0: DateSpan, span1: DateSpan): boolean {\n return rangesEqual(span0.range, span1.range) &&\n span0.allDay === span1.allDay &&\n isSpanPropsEqual(span0, span1)\n}\n\n// the NON-DATE-RELATED props\nfunction isSpanPropsEqual(span0: DateSpan, span1: DateSpan): boolean {\n for (let propName in span1) {\n if (propName !== 'range' && propName !== 'allDay') {\n if (span0[propName] !== span1[propName]) {\n return false\n }\n }\n }\n\n // are there any props that span0 has that span1 DOESN'T have?\n // both have range/allDay, so no need to special-case.\n for (let propName in span0) {\n if (!(propName in span1)) {\n return false\n }\n }\n\n return true\n}\n\nexport function buildDateSpanApi(span: DateSpan, dateEnv: DateEnv): DateSpanApi {\n return {\n ...buildRangeApi(span.range, dateEnv, span.allDay),\n allDay: span.allDay,\n }\n}\n\nexport function buildRangeApiWithTimeZone(range: DateRange, dateEnv: DateEnv, omitTime?: boolean): RangeApiWithTimeZone {\n return {\n ...buildRangeApi(range, dateEnv, omitTime),\n timeZone: dateEnv.timeZone,\n }\n}\n\nexport function buildRangeApi(range: DateRange, dateEnv: DateEnv, omitTime?: boolean): RangeApi {\n return {\n start: dateEnv.toDate(range.start),\n end: dateEnv.toDate(range.end),\n startStr: dateEnv.formatIso(range.start, { omitTime }),\n endStr: dateEnv.formatIso(range.end, { omitTime }),\n }\n}\n\nexport function fabricateEventRange(dateSpan: DateSpan, eventUiBases: EventUiHash, context: CalendarContext): EventRenderRange {\n let res = refineEventDef({ editable: false }, context)\n let def = parseEventDef(\n res.refined,\n res.extra,\n '', // sourceId\n dateSpan.allDay,\n true, // hasEnd\n context,\n )\n\n return {\n def,\n ui: compileEventUi(def, eventUiBases),\n instance: createEventInstance(def.defId, dateSpan.range),\n range: dateSpan.range,\n isStart: true,\n isEnd: true,\n }\n}\n","/*\ngiven a function that resolves a result asynchronously.\nthe function can either call passed-in success and failure callbacks,\nor it can return a promise.\nif you need to pass additional params to func, bind them first.\n*/\nexport function unpromisify<Res>(\n func: (\n successCallback: (res: Res) => void,\n failureCallback: (error: Error) => void,\n ) => Promise<Res> | void,\n normalizedSuccessCallback: (res: Res) => void,\n normalizedFailureCallback: (error: Error) => void,\n) {\n // guard against success/failure callbacks being called more than once\n // and guard against a promise AND callback being used together.\n let isResolved = false\n let wrappedSuccess = function(res: Res) {\n if (!isResolved) {\n isResolved = true\n normalizedSuccessCallback(res)\n }\n }\n let wrappedFailure = function(error: Error) {\n if (!isResolved) {\n isResolved = true\n normalizedFailureCallback(error)\n }\n }\n\n let res = func(wrappedSuccess, wrappedFailure)\n if (res && typeof res.then === 'function') {\n res.then(wrappedSuccess, wrappedFailure)\n }\n}\n","import { Dictionary } from '../options.js'\n\nexport class JsonRequestError extends Error {\n constructor(\n message: string,\n public response: Response,\n ) {\n super(message)\n }\n}\n\nexport function requestJson<ParsedResponse>(\n method: string,\n url: string,\n params: Dictionary,\n): Promise<[ParsedResponse, Response]> {\n method = method.toUpperCase()\n const fetchOptions: RequestInit = {\n method,\n }\n\n if (method === 'GET') {\n url += (url.indexOf('?') === -1 ? '?' : '&') +\n new URLSearchParams(params)\n } else {\n fetchOptions.body = new URLSearchParams(params)\n fetchOptions.headers = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n }\n }\n\n return fetch(url, fetchOptions).then((fetchRes) => {\n if (fetchRes.ok) {\n return fetchRes.json().then((parsedResponse: ParsedResponse) => {\n return [parsedResponse, fetchRes]\n }, () => {\n throw new JsonRequestError('Failure parsing JSON', fetchRes)\n })\n } else {\n throw new JsonRequestError('Request failed', fetchRes)\n }\n })\n}\n","let canVGrowWithinCell: boolean\n\nexport function getCanVGrowWithinCell() {\n if (canVGrowWithinCell == null) {\n canVGrowWithinCell = computeCanVGrowWithinCell()\n }\n return canVGrowWithinCell\n}\n\nfunction computeCanVGrowWithinCell() {\n // for SSR, because this function is call immediately at top-level\n // TODO: just make this logic execute top-level, immediately, instead of doing lazily\n if (typeof document === 'undefined') {\n return true\n }\n\n let el = document.createElement('div')\n el.style.position = 'absolute'\n el.style.top = '0px'\n el.style.left = '0px'\n el.innerHTML = '<table><tr><td><div></div></td></tr></table>'\n el.querySelector('table').style.height = '100px'\n el.querySelector('div').style.height = '100%'\n\n document.body.appendChild(el)\n\n let div = el.querySelector('div')\n let possible = div.offsetHeight > 0\n document.body.removeChild(el)\n return possible\n}\n","import { ComponentChildren } from './preact.js'\nimport { BaseComponent } from './vdom-util.js'\nimport { CssDimValue } from './scrollgrid/util.js'\nimport { CalendarOptions, CalendarListeners } from './options.js'\nimport { Theme } from './theme/Theme.js'\nimport { getCanVGrowWithinCell } from './util/table-styling.js'\nimport { Emitter } from './common/Emitter.js'\n\nexport interface CalendarRootProps {\n options: CalendarOptions\n theme: Theme\n emitter: Emitter<CalendarListeners>\n children: (classNames: string[], height: CssDimValue, isHeightAuto: boolean, forPrint: boolean) => ComponentChildren\n}\n\ninterface CalendarRootState {\n forPrint: boolean\n}\n\nexport class CalendarRoot extends BaseComponent<CalendarRootProps, CalendarRootState> {\n state = {\n forPrint: false,\n }\n\n render() {\n let { props } = this\n let { options } = props\n let { forPrint } = this.state\n\n let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto'\n let height = (!isHeightAuto && options.height != null) ? options.height : ''\n\n let classNames: string[] = [\n 'fc',\n forPrint ? 'fc-media-print' : 'fc-media-screen',\n `fc-direction-${options.direction}`,\n props.theme.getClass('root'),\n ]\n\n if (!getCanVGrowWithinCell()) {\n classNames.push('fc-liquid-hack')\n }\n\n return props.children(classNames, height, isHeightAuto, forPrint)\n }\n\n componentDidMount() {\n let { emitter } = this.props\n emitter.on('_beforeprint', this.handleBeforePrint)\n emitter.on('_afterprint', this.handleAfterPrint)\n }\n\n componentWillUnmount() {\n let { emitter } = this.props\n emitter.off('_beforeprint', this.handleBeforePrint)\n emitter.off('_afterprint', this.handleAfterPrint)\n }\n\n handleBeforePrint = () => {\n this.setState({ forPrint: true })\n }\n\n handleAfterPrint = () => {\n this.setState({ forPrint: false })\n }\n}\n","import { DateComponent } from '../component/DateComponent.js'\nimport { Hit } from './hit.js'\n\nexport abstract class Interaction {\n component: DateComponent<any>\n isHitComboAllowed: ((hit0: Hit, hit1: Hit) => boolean) | null\n\n constructor(settings: InteractionSettings) {\n this.component = settings.component\n this.isHitComboAllowed = settings.isHitComboAllowed || null\n }\n\n destroy() {\n }\n}\n\nexport type InteractionClass = { new(settings: InteractionSettings): Interaction }\n\nexport interface InteractionSettingsInput {\n el: HTMLElement\n useEventCenter?: boolean\n isHitComboAllowed?: (hit0: Hit, hit1: Hit) => boolean\n}\n\nexport interface InteractionSettings {\n component: DateComponent<any>\n el: HTMLElement\n useEventCenter: boolean\n isHitComboAllowed: ((hit0: Hit, hit1: Hit) => boolean) | null\n}\n\nexport type InteractionSettingsStore = { [componenUid: string]: InteractionSettings }\n\nexport function parseInteractionSettings(component: DateComponent<any>, input: InteractionSettingsInput): InteractionSettings {\n return {\n component,\n el: input.el,\n useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,\n isHitComboAllowed: input.isHitComboAllowed || null,\n }\n}\n\nexport function interactionSettingsToStore(settings: InteractionSettings) {\n return {\n [settings.component.uid]: settings,\n }\n}\n\n// global state\nexport const interactionSettingsStore: InteractionSettingsStore = {}\n","import { createFormatter, FormatterInput } from '../datelib/formatting.js'\nimport { createDuration } from '../datelib/duration.js'\nimport { parseDateSpan } from '../structs/date-span.js'\nimport { parseEventSource } from '../structs/event-source-parse.js'\nimport { parseEvent } from '../structs/event-parse.js'\nimport { eventTupleToStore } from '../structs/event-store.js'\nimport { ViewSpec } from '../structs/view-spec.js'\nimport { PointerDragEvent } from '../interactions/pointer.js'\nimport { getNow } from '../reducers/current-date.js'\nimport { triggerDateSelect, triggerDateUnselect } from '../calendar-utils.js'\nimport { hashValuesToArray } from '../util/object.js'\nimport { CalendarDataManager } from '../reducers/CalendarDataManager.js'\nimport { Action } from '../reducers/Action.js'\nimport { EventSource } from '../structs/event-source.js'\nimport { eventApiToStore, buildEventApis, EventImpl } from './EventImpl.js'\nimport { CalendarData } from '../reducers/data-types.js'\nimport { CalendarApi } from './CalendarApi.js'\nimport { ViewImpl } from './ViewImpl.js'\nimport { EventSourceImpl } from './EventSourceImpl.js'\nimport {\n CalendarOptions,\n CalendarListeners,\n DateInput,\n DurationInput,\n DateSpanInput,\n DateRangeInput,\n EventSourceInput,\n EventInput,\n} from './structs.js'\n\nexport class CalendarImpl implements CalendarApi {\n currentDataManager?: CalendarDataManager // will be set by CalendarDataManager\n\n getCurrentData(): CalendarData {\n return this.currentDataManager!.getCurrentData()\n }\n\n dispatch(action: Action): void {\n this.currentDataManager!.dispatch(action)\n }\n\n get view(): ViewImpl { return this.getCurrentData().viewApi }\n\n batchRendering(callback: () => void): void { // subclasses should implement\n callback()\n }\n\n updateSize(): void {\n this.trigger('_resize', true)\n }\n\n // Options\n // -----------------------------------------------------------------------------------------------------------------\n\n setOption<OptionName extends keyof CalendarOptions>(name: OptionName, val: CalendarOptions[OptionName]): void {\n this.dispatch({\n type: 'SET_OPTION',\n optionName: name,\n rawOptionValue: val,\n })\n }\n\n getOption<OptionName extends keyof CalendarOptions>(name: OptionName): CalendarOptions[OptionName] {\n return this.currentDataManager!.currentCalendarOptionsInput[name]\n }\n\n getAvailableLocaleCodes(): string[] {\n return Object.keys(this.getCurrentData().availableRawLocales)\n }\n\n // Trigger\n // -----------------------------------------------------------------------------------------------------------------\n\n on<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, handler: CalendarListeners[ListenerName]): void {\n let { currentDataManager } = this\n\n if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {\n currentDataManager.emitter.on(handlerName, handler)\n } else {\n console.warn(`Unknown listener name '${handlerName}'`)\n }\n }\n\n off<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, handler: CalendarListeners[ListenerName]): void {\n this.currentDataManager!.emitter.off(handlerName, handler)\n }\n\n // not meant for public use\n trigger<ListenerName extends keyof CalendarListeners>(handlerName: ListenerName, ...args: Parameters<CalendarListeners[ListenerName]>): void {\n this.currentDataManager!.emitter.trigger(handlerName, ...args)\n }\n\n // View\n // -----------------------------------------------------------------------------------------------------------------\n\n changeView(viewType: string, dateOrRange?: DateRangeInput | DateInput): void {\n this.batchRendering(() => {\n this.unselect()\n\n if (dateOrRange) {\n if ((dateOrRange as DateRangeInput).start && (dateOrRange as DateRangeInput).end) { // a range\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n })\n this.dispatch({ // not very efficient to do two dispatches\n type: 'SET_OPTION',\n optionName: 'visibleRange',\n rawOptionValue: dateOrRange,\n })\n } else {\n let { dateEnv } = this.getCurrentData()\n\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n dateMarker: dateEnv.createMarker(dateOrRange as DateInput),\n })\n }\n } else {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType,\n })\n }\n })\n }\n\n // Forces navigation to a view for the given date.\n // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n // needs to change\n zoomTo(dateMarker: Date, viewType?: string): void {\n let state = this.getCurrentData()\n let spec\n\n viewType = viewType || 'day' // day is default zoom\n spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType)\n\n this.unselect()\n\n if (spec) {\n this.dispatch({\n type: 'CHANGE_VIEW_TYPE',\n viewType: spec.type,\n dateMarker,\n })\n } else {\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker,\n })\n }\n }\n\n // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n // Preference is given to views that have corresponding buttons.\n private getUnitViewSpec(unit: string): ViewSpec | null {\n let { viewSpecs, toolbarConfig } = this.getCurrentData()\n let viewTypes = [].concat(\n toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [],\n toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : [],\n )\n let i\n let spec\n\n for (let viewType in viewSpecs) {\n viewTypes.push(viewType)\n }\n\n for (i = 0; i < viewTypes.length; i += 1) {\n spec = viewSpecs[viewTypes[i]]\n if (spec) {\n if (spec.singleUnit === unit) {\n return spec\n }\n }\n }\n\n return null\n }\n\n // Current Date\n // -----------------------------------------------------------------------------------------------------------------\n\n prev(): void {\n this.unselect()\n this.dispatch({ type: 'PREV' })\n }\n\n next(): void {\n this.unselect()\n this.dispatch({ type: 'NEXT' })\n }\n\n prevYear(): void {\n let state = this.getCurrentData()\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, -1),\n })\n }\n\n nextYear(): void {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.addYears(state.currentDate, 1),\n })\n }\n\n today(): void {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: getNow(state.calendarOptions.now, state.dateEnv),\n })\n }\n\n gotoDate(zonedDateInput: DateInput): void {\n let state = this.getCurrentData()\n\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.createMarker(zonedDateInput),\n })\n }\n\n incrementDate(deltaInput: DurationInput): void {\n let state = this.getCurrentData()\n let delta = createDuration(deltaInput)\n\n if (delta) { // else, warn about invalid input?\n this.unselect()\n this.dispatch({\n type: 'CHANGE_DATE',\n dateMarker: state.dateEnv.add(state.currentDate, delta),\n })\n }\n }\n\n getDate(): Date {\n let state = this.getCurrentData()\n return state.dateEnv.toDate(state.currentDate)\n }\n\n // Date Formatting Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n formatDate(d: DateInput, formatter: FormatterInput): string {\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.format(\n dateEnv.createMarker(d),\n createFormatter(formatter),\n )\n }\n\n // `settings` is for formatter AND isEndExclusive\n formatRange(d0: DateInput, d1: DateInput, settings: any): string { // TODO: settings type\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.formatRange(\n dateEnv.createMarker(d0),\n dateEnv.createMarker(d1),\n createFormatter(settings),\n settings,\n )\n }\n\n formatIso(d: DateInput, omitTime?: boolean): string {\n let { dateEnv } = this.getCurrentData()\n\n return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime })\n }\n\n // Date Selection / Event Selection / DayClick\n // -----------------------------------------------------------------------------------------------------------------\n\n select(dateOrObj: DateInput | any, endDate?: DateInput): void {\n let selectionInput: DateSpanInput\n\n if (endDate == null) {\n if (dateOrObj.start != null) {\n selectionInput = dateOrObj as DateSpanInput\n } else {\n selectionInput = {\n start: dateOrObj,\n end: null,\n }\n }\n } else {\n selectionInput = {\n start: dateOrObj,\n end: endDate,\n } as DateSpanInput\n }\n\n let state = this.getCurrentData()\n let selection = parseDateSpan(\n selectionInput,\n state.dateEnv,\n createDuration({ days: 1 }), // TODO: cache this?\n )\n\n if (selection) { // throw parse error otherwise?\n this.dispatch({ type: 'SELECT_DATES', selection })\n triggerDateSelect(selection, null, state)\n }\n }\n\n unselect(pev?: PointerDragEvent): void {\n let state = this.getCurrentData()\n\n if (state.dateSelection) {\n this.dispatch({ type: 'UNSELECT_DATES' })\n triggerDateUnselect(pev, state)\n }\n }\n\n // Public Events API\n // -----------------------------------------------------------------------------------------------------------------\n\n addEvent(eventInput: EventInput, sourceInput?: EventSourceImpl | string | boolean): EventImpl | null {\n if (eventInput instanceof EventImpl) {\n let def = eventInput._def\n let instance = eventInput._instance\n let currentData = this.getCurrentData()\n\n // not already present? don't want to add an old snapshot\n if (!currentData.eventStore.defs[def.defId]) {\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?\n })\n this.triggerEventAdd(eventInput)\n }\n\n return eventInput\n }\n\n let state = this.getCurrentData()\n let eventSource: EventSource<any>\n\n if (sourceInput instanceof EventSourceImpl) {\n eventSource = sourceInput.internalEventSource\n } else if (typeof sourceInput === 'boolean') {\n if (sourceInput) { // true. part of the first event source\n [eventSource] = hashValuesToArray(state.eventSources)\n }\n } else if (sourceInput != null) { // an ID. accepts a number too\n let sourceApi = this.getEventSourceById(sourceInput) // TODO: use an internal function\n\n if (!sourceApi) {\n console.warn(`Could not find an event source with ID \"${sourceInput}\"`) // TODO: test\n return null\n }\n eventSource = sourceApi.internalEventSource\n }\n\n let tuple = parseEvent(eventInput, eventSource, state, false)\n\n if (tuple) {\n let newEventApi = new EventImpl(\n state,\n tuple.def,\n tuple.def.recurringDef ? null : tuple.instance,\n )\n this.dispatch({\n type: 'ADD_EVENTS',\n eventStore: eventTupleToStore(tuple),\n })\n this.triggerEventAdd(newEventApi)\n\n return newEventApi\n }\n\n return null\n }\n\n private triggerEventAdd(eventApi: EventImpl): void {\n let { emitter } = this.getCurrentData()\n\n emitter.trigger('eventAdd', {\n event: eventApi,\n relatedEvents: [],\n revert: () => {\n this.dispatch({\n type: 'REMOVE_EVENTS',\n eventStore: eventApiToStore(eventApi),\n })\n },\n })\n }\n\n // TODO: optimize\n getEventById(id: string): EventImpl | null {\n let state = this.getCurrentData()\n let { defs, instances } = state.eventStore\n id = String(id)\n\n for (let defId in defs) {\n let def = defs[defId]\n\n if (def.publicId === id) {\n if (def.recurringDef) {\n return new EventImpl(state, def, null)\n }\n\n for (let instanceId in instances) {\n let instance = instances[instanceId]\n\n if (instance.defId === def.defId) {\n return new EventImpl(state, def, instance)\n }\n }\n }\n }\n\n return null\n }\n\n getEvents(): EventImpl[] {\n let currentData = this.getCurrentData()\n\n return buildEventApis(currentData.eventStore, currentData)\n }\n\n removeAllEvents(): void {\n this.dispatch({ type: 'REMOVE_ALL_EVENTS' })\n }\n\n // Public Event Sources API\n // -----------------------------------------------------------------------------------------------------------------\n\n getEventSources(): EventSourceImpl[] {\n let state = this.getCurrentData()\n let sourceHash = state.eventSources\n let sourceApis: EventSourceImpl[] = []\n\n for (let internalId in sourceHash) {\n sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]))\n }\n\n return sourceApis\n }\n\n getEventSourceById(id: string): EventSourceImpl | null {\n let state = this.getCurrentData()\n let sourceHash = state.eventSources\n id = String(id)\n\n for (let sourceId in sourceHash) {\n if (sourceHash[sourceId].publicId === id) {\n return new EventSourceImpl(state, sourceHash[sourceId])\n }\n }\n\n return null\n }\n\n addEventSource(sourceInput: EventSourceInput): EventSourceImpl {\n let state = this.getCurrentData()\n\n if (sourceInput instanceof EventSourceImpl) {\n // not already present? don't want to add an old snapshot\n if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {\n this.dispatch({\n type: 'ADD_EVENT_SOURCES',\n sources: [sourceInput.internalEventSource],\n })\n }\n\n return sourceInput\n }\n\n let eventSource = parseEventSource(sourceInput, state)\n\n if (eventSource) { // TODO: error otherwise?\n this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] })\n\n return new EventSourceImpl(state, eventSource)\n }\n\n return null\n }\n\n removeAllEventSources(): void {\n this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' })\n }\n\n refetchEvents(): void {\n this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true })\n }\n\n // Scroll\n // -----------------------------------------------------------------------------------------------------------------\n\n scrollToTime(timeInput: DurationInput): void {\n let time = createDuration(timeInput)\n\n if (time) {\n this.trigger('_scrollRequest', { time })\n }\n }\n}\n","export interface Point {\n left: number\n top: number\n}\n\nexport interface Rect {\n left: number\n right: number\n top: number\n bottom: number\n}\n\nexport function pointInsideRect(point: Point, rect: Rect): boolean {\n return point.left >= rect.left &&\n point.left < rect.right &&\n point.top >= rect.top &&\n point.top < rect.bottom\n}\n\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nexport function intersectRects(rect1: Rect, rect2: Rect): Rect | false {\n let res = {\n left: Math.max(rect1.left, rect2.left),\n right: Math.min(rect1.right, rect2.right),\n top: Math.max(rect1.top, rect2.top),\n bottom: Math.min(rect1.bottom, rect2.bottom),\n }\n\n if (res.left < res.right && res.top < res.bottom) {\n return res\n }\n\n return false\n}\n\nexport function translateRect(rect: Rect, deltaX: number, deltaY: number): Rect {\n return {\n left: rect.left + deltaX,\n right: rect.right + deltaX,\n top: rect.top + deltaY,\n bottom: rect.bottom + deltaY,\n }\n}\n\n// Returns a new point that will have been moved to reside within the given rectangle\nexport function constrainPoint(point: Point, rect: Rect): Point {\n return {\n left: Math.min(Math.max(point.left, rect.left), rect.right),\n top: Math.min(Math.max(point.top, rect.top), rect.bottom),\n }\n}\n\n// Returns a point that is the center of the given rectangle\nexport function getRectCenter(rect: Rect): Point {\n return {\n left: (rect.left + rect.right) / 2,\n top: (rect.top + rect.bottom) / 2,\n }\n}\n\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nexport function diffPoints(point1: Point, point2: Point): Point {\n return {\n left: point1.left - point2.left,\n top: point1.top - point2.top,\n }\n}\n","import { EventStore, createEmptyEventStore } from '../structs/event-store.js'\nimport { EventDef } from '../structs/event-def.js'\nimport { EventInteractionState } from '../interactions/event-interaction-state.js'\nimport { mapHash } from '../util/object.js'\nimport { memoize } from '../util/memoize.js'\nimport { EventUiHash, EventUi, combineEventUis } from './event-ui.js'\nimport { DateSpan } from '../structs/date-span.js'\n\nexport interface SplittableProps {\n businessHours: EventStore | null // is this really allowed to be null?\n dateSelection: DateSpan | null\n eventStore: EventStore\n eventUiBases: EventUiHash\n eventSelection: string\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n}\n\nconst EMPTY_EVENT_STORE = createEmptyEventStore() // for purecomponents. TODO: keep elsewhere\n\nexport abstract class Splitter<PropsType extends SplittableProps = SplittableProps> {\n private getKeysForEventDefs = memoize(this._getKeysForEventDefs)\n private splitDateSelection = memoize(this._splitDateSpan)\n private splitEventStore = memoize(this._splitEventStore)\n private splitIndividualUi = memoize(this._splitIndividualUi)\n private splitEventDrag = memoize(this._splitInteraction)\n private splitEventResize = memoize(this._splitInteraction)\n private eventUiBuilders = {} // TODO: typescript protection\n\n abstract getKeyInfo(props: PropsType): { [key: string]: { ui?: EventUi, businessHours?: EventStore } }\n abstract getKeysForDateSpan(dateSpan: DateSpan): string[]\n abstract getKeysForEventDef(eventDef: EventDef): string[]\n\n splitProps(props: PropsType): { [key: string]: SplittableProps } {\n let keyInfos = this.getKeyInfo(props)\n let defKeys = this.getKeysForEventDefs(props.eventStore)\n let dateSelections = this.splitDateSelection(props.dateSelection)\n let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys) // the individual *bases*\n let eventStores = this.splitEventStore(props.eventStore, defKeys)\n let eventDrags = this.splitEventDrag(props.eventDrag)\n let eventResizes = this.splitEventResize(props.eventResize)\n let splitProps: { [key: string]: SplittableProps } = {}\n\n this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey))\n\n for (let key in keyInfos) {\n let keyInfo = keyInfos[key]\n let eventStore = eventStores[key] || EMPTY_EVENT_STORE\n let buildEventUi = this.eventUiBuilders[key]\n\n splitProps[key] = {\n businessHours: keyInfo.businessHours || props.businessHours,\n dateSelection: dateSelections[key] || null,\n eventStore,\n eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n eventDrag: eventDrags[key] || null,\n eventResize: eventResizes[key] || null,\n }\n }\n\n return splitProps\n }\n\n private _splitDateSpan(dateSpan: DateSpan | null) {\n let dateSpans = {}\n\n if (dateSpan) {\n let keys = this.getKeysForDateSpan(dateSpan)\n\n for (let key of keys) {\n dateSpans[key] = dateSpan\n }\n }\n\n return dateSpans\n }\n\n private _getKeysForEventDefs(eventStore: EventStore) {\n return mapHash(eventStore.defs, (eventDef: EventDef) => this.getKeysForEventDef(eventDef))\n }\n\n private _splitEventStore(eventStore: EventStore, defKeys): { [key: string]: EventStore } {\n let { defs, instances } = eventStore\n let splitStores = {}\n\n for (let defId in defs) {\n for (let key of defKeys[defId]) {\n if (!splitStores[key]) {\n splitStores[key] = createEmptyEventStore()\n }\n\n splitStores[key].defs[defId] = defs[defId]\n }\n }\n\n for (let instanceId in instances) {\n let instance = instances[instanceId]\n\n for (let key of defKeys[instance.defId]) {\n if (splitStores[key]) { // must have already been created\n splitStores[key].instances[instanceId] = instance\n }\n }\n }\n\n return splitStores\n }\n\n private _splitIndividualUi(eventUiBases: EventUiHash, defKeys): { [key: string]: EventUiHash } {\n let splitHashes: { [key: string]: EventUiHash } = {}\n\n for (let defId in eventUiBases) {\n if (defId) { // not the '' key\n for (let key of defKeys[defId]) {\n if (!splitHashes[key]) {\n splitHashes[key] = {}\n }\n\n splitHashes[key][defId] = eventUiBases[defId]\n }\n }\n }\n\n return splitHashes\n }\n\n private _splitInteraction(interaction: EventInteractionState | null): { [key: string]: EventInteractionState } {\n let splitStates: { [key: string]: EventInteractionState } = {}\n\n if (interaction) {\n let affectedStores = this._splitEventStore(\n interaction.affectedEvents,\n this._getKeysForEventDefs(interaction.affectedEvents), // can't use cached. might be events from other calendar\n )\n\n // can't rely on defKeys because event data is mutated\n let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents)\n let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId)\n\n let populate = (key) => {\n if (!splitStates[key]) {\n splitStates[key] = {\n affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n isEvent: interaction.isEvent,\n }\n }\n }\n\n for (let key in affectedStores) {\n populate(key)\n }\n\n for (let key in mutatedStores) {\n populate(key)\n }\n }\n\n return splitStates\n }\n}\n\nfunction buildEventUiForKey(allUi: EventUi | null, eventUiForKey: EventUi | null, individualUi: EventUiHash | null) {\n let baseParts = []\n\n if (allUi) {\n baseParts.push(allUi)\n }\n\n if (eventUiForKey) {\n baseParts.push(eventUiForKey)\n }\n\n let stuff = {\n '': combineEventUis(baseParts),\n }\n\n if (individualUi) {\n Object.assign(stuff, individualUi)\n }\n\n return stuff\n}\n","import { DateMarker, DAY_IDS } from '../datelib/marker.js'\nimport { rangeContainsMarker, DateRange } from '../datelib/date-range.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { Theme } from '../theme/Theme.js'\n\nexport interface DateMeta {\n dow: number\n isDisabled: boolean\n isOther: boolean // like, is it in the non-current \"other\" month\n isToday: boolean\n isPast: boolean\n isFuture: boolean\n}\n\nexport function getDateMeta(date: DateMarker, todayRange?: DateRange, nowDate?: DateMarker, dateProfile?: DateProfile): DateMeta {\n return {\n dow: date.getUTCDay(),\n isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),\n isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),\n isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),\n isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),\n isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),\n }\n}\n\nexport function getDayClassNames(meta: DateMeta, theme: Theme) {\n let classNames: string[] = [\n 'fc-day',\n `fc-day-${DAY_IDS[meta.dow]}`,\n ]\n\n if (meta.isDisabled) {\n classNames.push('fc-day-disabled')\n } else {\n if (meta.isToday) {\n classNames.push('fc-day-today')\n classNames.push(theme.getClass('today'))\n }\n\n if (meta.isPast) {\n classNames.push('fc-day-past')\n }\n\n if (meta.isFuture) {\n classNames.push('fc-day-future')\n }\n\n if (meta.isOther) {\n classNames.push('fc-day-other')\n }\n }\n\n return classNames\n}\n\nexport function getSlotClassNames(meta: DateMeta, theme: Theme) {\n let classNames: string[] = [\n 'fc-slot',\n `fc-slot-${DAY_IDS[meta.dow]}`,\n ]\n\n if (meta.isDisabled) {\n classNames.push('fc-slot-disabled')\n } else {\n if (meta.isToday) {\n classNames.push('fc-slot-today')\n classNames.push(theme.getClass('today'))\n }\n\n if (meta.isPast) {\n classNames.push('fc-slot-past')\n }\n\n if (meta.isFuture) {\n classNames.push('fc-slot-future')\n }\n }\n\n return classNames\n}\n","import { createFormatter } from '../datelib/formatting.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { createAriaClickAttrs } from '../util/dom-event.js'\nimport { formatWithOrdinals } from '../util/misc.js'\nimport { ViewContext } from '../ViewContext.js'\n\nconst DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' })\nconst WEEK_FORMAT = createFormatter({ week: 'long' })\n\nexport function buildNavLinkAttrs(\n context: ViewContext,\n dateMarker: DateMarker,\n viewType = 'day',\n isTabbable = true,\n) {\n const { dateEnv, options, calendarApi } = context\n let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT)\n\n if (options.navLinks) {\n let zonedDate = dateEnv.toDate(dateMarker)\n\n const handleInteraction = (ev: UIEvent) => {\n let customAction =\n viewType === 'day' ? options.navLinkDayClick :\n viewType === 'week' ? options.navLinkWeekClick : null\n\n if (typeof customAction === 'function') {\n customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev)\n } else {\n if (typeof customAction === 'string') {\n viewType = customAction\n }\n calendarApi.zoomTo(dateMarker, viewType)\n }\n }\n\n return {\n title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr),\n 'data-navlink': '', // for legacy selectors. TODO: use className?\n ...(isTabbable\n ? createAriaClickAttrs(handleInteraction)\n : { onClick: handleInteraction }\n ),\n }\n }\n\n return { 'aria-label': dateStr }\n}\n","import { removeElement, applyStyle } from './dom-manip.js'\n\nlet _isRtlScrollbarOnLeft: boolean | null = null\n\nexport function getIsRtlScrollbarOnLeft() { // responsible for caching the computation\n if (_isRtlScrollbarOnLeft === null) {\n _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft()\n }\n return _isRtlScrollbarOnLeft\n}\n\nfunction computeIsRtlScrollbarOnLeft() { // creates an offscreen test element, then removes it\n let outerEl = document.createElement('div')\n applyStyle(outerEl, {\n position: 'absolute',\n top: -1000,\n left: 0,\n border: 0,\n padding: 0,\n overflow: 'scroll',\n direction: 'rtl',\n })\n outerEl.innerHTML = '<div></div>'\n\n document.body.appendChild(outerEl)\n let innerEl = outerEl.firstChild as HTMLElement\n let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left\n\n removeElement(outerEl)\n return res\n}\n","export interface ScrollbarWidths {\n x: number\n y: number // TODO: rename to vertical. less confusing when dealing with width/height verbage\n}\n\nlet _scrollbarWidths: ScrollbarWidths | undefined\n\nexport function getScrollbarWidths() { // TODO: way to force recompute?\n if (!_scrollbarWidths) {\n _scrollbarWidths = computeScrollbarWidths()\n }\n\n return _scrollbarWidths\n}\n\nfunction computeScrollbarWidths(): ScrollbarWidths {\n let el = document.createElement('div')\n el.style.overflow = 'scroll'\n el.style.position = 'absolute'\n el.style.top = '-9999px'\n el.style.left = '-9999px'\n document.body.appendChild(el)\n let res = computeScrollbarWidthsForEl(el)\n document.body.removeChild(el)\n return res\n}\n\n// WARNING: will include border\nexport function computeScrollbarWidthsForEl(el: HTMLElement): ScrollbarWidths {\n return {\n x: el.offsetHeight - el.clientHeight,\n y: el.offsetWidth - el.clientWidth,\n }\n}\n","import { intersectRects, Rect } from './geom.js'\nimport { getIsRtlScrollbarOnLeft } from './scrollbar-side.js'\nimport { computeScrollbarWidthsForEl } from './scrollbar-width.js'\n\nexport interface EdgeInfo {\n borderLeft: number\n borderRight: number\n borderTop: number\n borderBottom: number\n scrollbarLeft: number\n scrollbarRight: number\n scrollbarBottom: number\n paddingLeft?: number\n paddingRight?: number\n paddingTop?: number\n paddingBottom?: number\n}\n\nexport function computeEdges(el: HTMLElement, getPadding = false): EdgeInfo { // cache somehow?\n let computedStyle = window.getComputedStyle(el)\n let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0\n let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0\n let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0\n let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0\n let badScrollbarWidths = computeScrollbarWidthsForEl(el) // includes border!\n let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight\n let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom\n\n let res: EdgeInfo = {\n borderLeft,\n borderRight,\n borderTop,\n borderBottom,\n scrollbarBottom,\n scrollbarLeft: 0,\n scrollbarRight: 0,\n }\n\n if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?\n res.scrollbarLeft = scrollbarLeftRight\n } else {\n res.scrollbarRight = scrollbarLeftRight\n }\n\n if (getPadding) {\n res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0\n res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0\n res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0\n res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0\n }\n\n return res\n}\n\nexport function computeInnerRect(el, goWithinPadding = false, doFromWindowViewport?: boolean) {\n let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el)\n let edges = computeEdges(el, goWithinPadding)\n let res = {\n left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n top: outerRect.top + edges.borderTop,\n bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,\n }\n\n if (goWithinPadding) {\n res.left += edges.paddingLeft\n res.right -= edges.paddingRight\n res.top += edges.paddingTop\n res.bottom -= edges.paddingBottom\n }\n\n return res\n}\n\nexport function computeRect(el): Rect {\n let rect = el.getBoundingClientRect()\n\n return {\n left: rect.left + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n right: rect.right + window.pageXOffset,\n bottom: rect.bottom + window.pageYOffset,\n }\n}\n\nexport function computeClippedClientRect(el: HTMLElement): Rect | null {\n let clippingParents = getClippingParents(el)\n let rect: Rect = el.getBoundingClientRect()\n\n for (let clippingParent of clippingParents) {\n let intersection = intersectRects(rect, clippingParent.getBoundingClientRect())\n if (intersection) {\n rect = intersection\n } else {\n return null\n }\n }\n\n return rect\n}\n\nexport function computeHeightAndMargins(el: HTMLElement) {\n return el.getBoundingClientRect().height + computeVMargins(el)\n}\n\nexport function computeVMargins(el: HTMLElement) {\n let computed = window.getComputedStyle(el)\n\n return parseInt(computed.marginTop, 10) +\n parseInt(computed.marginBottom, 10)\n}\n\n// does not return window\nexport function getClippingParents(el: HTMLElement): HTMLElement[] {\n let parents: HTMLElement[] = []\n\n while (el instanceof HTMLElement) { // will stop when gets to document or null\n let computedStyle = window.getComputedStyle(el)\n\n if (computedStyle.position === 'fixed') {\n break\n }\n\n if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n parents.push(el)\n }\n\n el = el.parentNode as HTMLElement\n }\n\n return parents\n}\n","/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\nexport class PositionCache {\n els: HTMLElement[] // assumed to be siblings\n originClientRect: ClientRect\n\n // arrays of coordinates (from topleft of originEl)\n // caller can access these directly\n lefts: any\n rights: any\n tops: any\n bottoms: any\n\n constructor(originEl: HTMLElement, els: HTMLElement[], isHorizontal: boolean, isVertical: boolean) {\n this.els = els\n\n let originClientRect = this.originClientRect = originEl.getBoundingClientRect() // relative to viewport top-left\n\n if (isHorizontal) {\n this.buildElHorizontals(originClientRect.left)\n }\n\n if (isVertical) {\n this.buildElVerticals(originClientRect.top)\n }\n }\n\n // Populates the left/right internal coordinate arrays\n buildElHorizontals(originClientLeft: number) {\n let lefts = []\n let rights = []\n\n for (let el of this.els) {\n let rect = el.getBoundingClientRect()\n lefts.push(rect.left - originClientLeft)\n rights.push(rect.right - originClientLeft)\n }\n\n this.lefts = lefts\n this.rights = rights\n }\n\n // Populates the top/bottom internal coordinate arrays\n buildElVerticals(originClientTop: number) {\n let tops = []\n let bottoms = []\n\n for (let el of this.els) {\n let rect = el.getBoundingClientRect()\n tops.push(rect.top - originClientTop)\n bottoms.push(rect.bottom - originClientTop)\n }\n\n this.tops = tops\n this.bottoms = bottoms\n }\n\n // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n // If no intersection is made, returns undefined.\n leftToIndex(leftPosition: number) {\n let { lefts, rights } = this\n let len = lefts.length\n let i\n\n for (i = 0; i < len; i += 1) {\n if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n return i\n }\n }\n\n return undefined // TODO: better\n }\n\n // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n // If no intersection is made, returns undefined.\n topToIndex(topPosition: number) {\n let { tops, bottoms } = this\n let len = tops.length\n let i\n\n for (i = 0; i < len; i += 1) {\n if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n return i\n }\n }\n\n return undefined // TODO: better\n }\n\n // Gets the width of the element at the given index\n getWidth(leftIndex: number) {\n return this.rights[leftIndex] - this.lefts[leftIndex]\n }\n\n // Gets the height of the element at the given index\n getHeight(topIndex: number) {\n return this.bottoms[topIndex] - this.tops[topIndex]\n }\n}\n","/* eslint max-classes-per-file: \"off\" */\n\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\nexport abstract class ScrollController {\n abstract getScrollTop(): number\n abstract getScrollLeft(): number\n abstract setScrollTop(top: number): void\n abstract setScrollLeft(left: number): void\n abstract getClientWidth(): number\n abstract getClientHeight(): number\n abstract getScrollWidth(): number\n abstract getScrollHeight(): number\n\n getMaxScrollTop() {\n return this.getScrollHeight() - this.getClientHeight()\n }\n\n getMaxScrollLeft() {\n return this.getScrollWidth() - this.getClientWidth()\n }\n\n canScrollVertically() {\n return this.getMaxScrollTop() > 0\n }\n\n canScrollHorizontally() {\n return this.getMaxScrollLeft() > 0\n }\n\n canScrollUp() {\n return this.getScrollTop() > 0\n }\n\n canScrollDown() {\n return this.getScrollTop() < this.getMaxScrollTop()\n }\n\n canScrollLeft() {\n return this.getScrollLeft() > 0\n }\n\n canScrollRight() {\n return this.getScrollLeft() < this.getMaxScrollLeft()\n }\n}\n\nexport class ElementScrollController extends ScrollController {\n el: HTMLElement\n\n constructor(el: HTMLElement) {\n super()\n this.el = el\n }\n\n getScrollTop() {\n return this.el.scrollTop\n }\n\n getScrollLeft() {\n return this.el.scrollLeft\n }\n\n setScrollTop(top: number) {\n this.el.scrollTop = top\n }\n\n setScrollLeft(left: number) {\n this.el.scrollLeft = left\n }\n\n getScrollWidth() {\n return this.el.scrollWidth\n }\n\n getScrollHeight() {\n return this.el.scrollHeight\n }\n\n getClientHeight() {\n return this.el.clientHeight\n }\n\n getClientWidth() {\n return this.el.clientWidth\n }\n}\n\nexport class WindowScrollController extends ScrollController {\n getScrollTop() {\n return window.pageYOffset\n }\n\n getScrollLeft() {\n return window.pageXOffset\n }\n\n setScrollTop(n: number) {\n window.scroll(window.pageXOffset, n)\n }\n\n setScrollLeft(n: number) {\n window.scroll(n, window.pageYOffset)\n }\n\n getScrollWidth() {\n return document.documentElement.scrollWidth\n }\n\n getScrollHeight() {\n return document.documentElement.scrollHeight\n }\n\n getClientHeight() {\n return document.documentElement.clientHeight\n }\n\n getClientWidth() {\n return document.documentElement.clientWidth\n }\n}\n","import { BaseComponent } from '../vdom-util.js'\nimport { EventRenderRange } from './event-rendering.js'\nimport { EventInstanceHash } from '../structs/event-instance.js'\nimport { Hit } from '../interactions/hit.js'\nimport { elementClosest } from '../util/dom-manip.js'\nimport { guid } from '../util/misc.js'\nimport { Dictionary } from '../options.js'\n\nexport type DateComponentHash = { [uid: string]: DateComponent<any, any> }\n\n// NOTE: for fg-events, eventRange.range is NOT sliced,\n// thus, we need isStart/isEnd\nexport interface Seg {\n component?: DateComponent<any, any>\n isStart: boolean\n isEnd: boolean\n eventRange?: EventRenderRange\n [otherProp: string]: any // TODO: remove this. extending Seg will handle this\n el?: never\n // NOTE: can sometimes have start/end, which are important values :(\n}\n\nexport interface EventSegUiInteractionState {\n affectedInstances: EventInstanceHash\n segs: Seg[]\n isEvent: boolean\n}\n\n/*\nan INTERACTABLE date component\n\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\nexport abstract class DateComponent<Props=Dictionary, State=Dictionary> extends BaseComponent<Props, State> {\n uid = guid()\n\n // Hit System\n // -----------------------------------------------------------------------------------------------------------------\n\n prepareHits() {\n }\n\n queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null {\n return null // this should be abstract\n }\n\n // Pointer Interaction Utils\n // -----------------------------------------------------------------------------------------------------------------\n\n isValidSegDownEl(el: HTMLElement) {\n return !(this.props as any).eventDrag && // HACK\n !(this.props as any).eventResize && // HACK\n !elementClosest(el, '.fc-event-mirror')\n }\n\n isValidDateDownEl(el: HTMLElement) {\n return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&\n !elementClosest(el, '.fc-more-link') && // a \"more..\" link\n !elementClosest(el, 'a[data-navlink]') && // a clickable nav link\n !elementClosest(el, '.fc-popover') // hack\n }\n}\n","export abstract class NamedTimeZoneImpl {\n timeZoneName: string\n\n constructor(timeZoneName: string) {\n this.timeZoneName = timeZoneName\n }\n\n abstract offsetForArray(a: number[]): number\n\n abstract timestampToArray(ms: number): number[]\n}\n\nexport type NamedTimeZoneImplClass = { new(timeZoneName: string): NamedTimeZoneImpl }\n","export interface SegSpan {\n start: number\n end: number\n}\n\nexport interface SegEntry {\n index: number\n thickness: number // should be an integer\n span: SegSpan\n}\n\n// used internally. exposed for subclasses of SegHierarchy\nexport interface SegInsertion {\n level: number // will have an equal coord, or slightly before, entries in existing level\n levelCoord: number\n lateral: number // where to insert in the existing level. -1 if creating a new level\n touchingLevel: number // -1 if no touching\n touchingLateral: number // -1 if no touching\n touchingEntry: SegEntry // the last touching entry in the level\n stackCnt: number\n}\n\nexport interface SegRect extends SegEntry {\n levelCoord: number\n}\n\nexport interface SegEntryGroup {\n entries: SegEntry[]\n span: SegSpan\n}\n\nexport class SegHierarchy {\n // settings\n strictOrder: boolean = false\n allowReslicing: boolean = false\n maxCoord: number = -1 // -1 means no max\n maxStackCnt: number = -1 // -1 means no max\n\n levelCoords: number[] = [] // ordered\n entriesByLevel: SegEntry[][] = [] // parallel with levelCoords\n stackCnts: { [entryId: string]: number } = {} // TODO: use better technique!?\n\n addSegs(inputs: SegEntry[]): SegEntry[] {\n let hiddenEntries: SegEntry[] = []\n\n for (let input of inputs) {\n this.insertEntry(input, hiddenEntries)\n }\n\n return hiddenEntries\n }\n\n insertEntry(entry: SegEntry, hiddenEntries: SegEntry[]): number {\n let insertion = this.findInsertion(entry)\n\n if (this.isInsertionValid(insertion, entry)) {\n this.insertEntryAt(entry, insertion)\n return 1\n }\n\n return this.handleInvalidInsertion(insertion, entry, hiddenEntries)\n }\n\n isInsertionValid(insertion: SegInsertion, entry: SegEntry): boolean {\n return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&\n (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt)\n }\n\n // returns number of new entries inserted\n handleInvalidInsertion(insertion: SegInsertion, entry: SegEntry, hiddenEntries: SegEntry[]): number {\n if (this.allowReslicing && insertion.touchingEntry) {\n return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries)\n }\n\n hiddenEntries.push(entry)\n return 0\n }\n\n splitEntry(entry: SegEntry, barrier: SegEntry, hiddenEntries: SegEntry[]): number {\n let partCnt = 0\n let splitHiddenEntries: SegEntry[] = []\n let entrySpan = entry.span\n let barrierSpan = barrier.span\n\n if (entrySpan.start < barrierSpan.start) {\n partCnt += this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: entrySpan.start, end: barrierSpan.start },\n }, splitHiddenEntries)\n }\n\n if (entrySpan.end > barrierSpan.end) {\n partCnt += this.insertEntry({\n index: entry.index,\n thickness: entry.thickness,\n span: { start: barrierSpan.end, end: entrySpan.end },\n }, splitHiddenEntries)\n }\n\n if (partCnt) {\n hiddenEntries.push({\n index: entry.index,\n thickness: entry.thickness,\n span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect\n }, ...splitHiddenEntries)\n return partCnt\n }\n\n hiddenEntries.push(entry)\n return 0\n }\n\n insertEntryAt(entry: SegEntry, insertion: SegInsertion): void {\n let { entriesByLevel, levelCoords } = this\n\n if (insertion.lateral === -1) {\n // create a new level\n insertAt(levelCoords, insertion.level, insertion.levelCoord)\n insertAt(entriesByLevel, insertion.level, [entry])\n } else {\n // insert into existing level\n insertAt(entriesByLevel[insertion.level], insertion.lateral, entry)\n }\n\n this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt\n }\n\n findInsertion(newEntry: SegEntry): SegInsertion {\n let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this\n let levelCnt = levelCoords.length\n let candidateCoord = 0\n let touchingLevel: number = -1\n let touchingLateral: number = -1\n let touchingEntry: SegEntry = null\n let stackCnt = 0\n\n for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {\n let trackingCoord = levelCoords[trackingLevel]\n\n // if the current level is past the placed entry, we have found a good empty space and can stop.\n // if strictOrder, keep finding more lateral intersections.\n if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {\n break\n }\n\n let trackingEntries = entriesByLevel[trackingLevel]\n let trackingEntry: SegEntry\n let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd) // find first entry after newEntry's end\n let lateralIndex = searchRes[0] + searchRes[1] // if exact match (which doesn't collide), go to next one\n\n while ( // loop through entries that horizontally intersect\n (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list\n trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry\n ) {\n let trackingEntryBottom = trackingCoord + trackingEntry.thickness\n // intersects into the top of the candidate?\n if (trackingEntryBottom > candidateCoord) {\n candidateCoord = trackingEntryBottom\n touchingEntry = trackingEntry\n touchingLevel = trackingLevel\n touchingLateral = lateralIndex\n }\n // butts up against top of candidate? (will happen if just intersected as well)\n if (trackingEntryBottom === candidateCoord) {\n // accumulate the highest possible stackCnt of the trackingEntries that butt up\n stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1)\n }\n lateralIndex += 1\n }\n }\n\n // the destination level will be after touchingEntry's level. find it\n let destLevel = 0\n if (touchingEntry) {\n destLevel = touchingLevel + 1\n while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {\n destLevel += 1\n }\n }\n\n // if adding to an existing level, find where to insert\n let destLateral = -1\n if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {\n destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0]\n }\n\n return {\n touchingLevel,\n touchingLateral,\n touchingEntry,\n stackCnt,\n levelCoord: candidateCoord,\n level: destLevel,\n lateral: destLateral,\n }\n }\n\n // sorted by levelCoord (lowest to highest)\n toRects(): SegRect[] {\n let { entriesByLevel, levelCoords } = this\n let levelCnt = entriesByLevel.length\n let rects: SegRect[] = []\n\n for (let level = 0; level < levelCnt; level += 1) {\n let entries = entriesByLevel[level]\n let levelCoord = levelCoords[level]\n\n for (let entry of entries) {\n rects.push({ ...entry, levelCoord })\n }\n }\n\n return rects\n }\n}\n\nexport function getEntrySpanEnd(entry: SegEntry) {\n return entry.span.end\n}\n\nexport function buildEntryKey(entry: SegEntry) { // TODO: use Map instead?\n return entry.index + ':' + entry.span.start\n}\n\n// returns groups with entries sorted by input order\nexport function groupIntersectingEntries(entries: SegEntry[]): SegEntryGroup[] {\n let merges: SegEntryGroup[] = []\n\n for (let entry of entries) {\n let filteredMerges: SegEntryGroup[] = []\n let hungryMerge: SegEntryGroup = { // the merge that will eat what it collides with\n span: entry.span,\n entries: [entry],\n }\n\n for (let merge of merges) {\n if (intersectSpans(merge.span, hungryMerge.span)) {\n hungryMerge = {\n entries: merge.entries.concat(hungryMerge.entries), // keep preexisting merge's items first. maintains order\n span: joinSpans(merge.span, hungryMerge.span),\n }\n } else {\n filteredMerges.push(merge)\n }\n }\n\n filteredMerges.push(hungryMerge)\n merges = filteredMerges\n }\n\n return merges\n}\n\nexport function joinSpans(span0: SegSpan, span1: SegSpan): SegSpan {\n return {\n start: Math.min(span0.start, span1.start),\n end: Math.max(span0.end, span1.end),\n }\n}\n\nexport function intersectSpans(span0: SegSpan, span1: SegSpan): SegSpan | null {\n let start = Math.max(span0.start, span1.start)\n let end = Math.min(span0.end, span1.end)\n\n if (start < end) {\n return { start, end }\n }\n\n return null\n}\n\n// general util\n// ---------------------------------------------------------------------------------------------------------------------\n\nfunction insertAt<Item>(arr: Item[], index: number, item: Item) {\n arr.splice(index, 0, item)\n}\n\nexport function binarySearch<Item>(\n a: Item[],\n searchVal: number,\n getItemVal: (item: Item) => number,\n): [number, number] { // returns [level, isExactMatch ? 1 : 0]\n let startIndex = 0\n let endIndex = a.length // exclusive\n\n if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item\n return [0, 0]\n }\n if (searchVal > getItemVal(a[endIndex - 1])) { // after last item\n return [endIndex, 0]\n }\n\n while (startIndex < endIndex) {\n let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2)\n let middleVal = getItemVal(a[middleIndex])\n\n if (searchVal < middleVal) {\n endIndex = middleIndex\n } else if (searchVal > middleVal) {\n startIndex = middleIndex + 1\n } else { // equal!\n return [middleIndex, 1]\n }\n }\n\n return [startIndex, 0]\n}\n","import { Emitter } from '../common/Emitter.js'\n\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\nexport abstract class ElementDragging { // TODO: rename to *Interface?\n emitter: Emitter<any>\n\n constructor(el: HTMLElement, selector?: string) {\n this.emitter = new Emitter()\n }\n\n destroy() {\n }\n\n // if given true, should prevent dragstart+dragmove+dragend from firing\n abstract setIgnoreMove(bool: boolean): void\n\n setMirrorIsVisible(bool: boolean) {\n // optional if subclass doesn't want to support a mirror\n }\n\n setMirrorNeedsRevert(bool: boolean) {\n // optional if subclass doesn't want to support a mirror\n }\n\n setAutoScrollEnabled(bool: boolean) {\n // optional\n }\n}\n\nexport type ElementDraggingClass = { new(el: HTMLElement, selector?: string): ElementDragging }\n","// TODO: get rid of this in favor of options system,\n// tho it's really easy to access this globally rather than pass thru options.\nexport const config = {} as any\n","import { createDuration, Duration } from '../datelib/duration.js'\nimport { refineProps, RawOptionsFromRefiners, Dictionary } from '../options.js'\n\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\n\nconst DRAG_META_REFINERS = {\n startTime: createDuration,\n duration: createDuration,\n create: Boolean,\n sourceId: String,\n}\n\nexport type DragMetaInput =\n RawOptionsFromRefiners<typeof DRAG_META_REFINERS> &\n { [otherProp: string]: any } // for leftoverProps\n\nexport interface DragMeta {\n startTime: Duration | null\n duration: Duration | null\n create: boolean // create an event when dropped?\n sourceId: string // similar to addEvent's parameter\n leftoverProps: Dictionary\n}\n\nexport function parseDragMeta(raw: DragMetaInput): DragMeta {\n let { refined, extra } = refineProps(raw, DRAG_META_REFINERS)\n\n return {\n startTime: refined.startTime || null,\n duration: refined.duration || null,\n create: refined.create != null ? refined.create : true,\n sourceId: refined.sourceId,\n leftoverProps: extra,\n }\n}\n","import { createFormatter } from '../datelib/formatting.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\n\n// Computes a default column header formatting string if `colFormat` is not explicitly defined\nexport function computeFallbackHeaderFormat(datesRepDistinctDays: boolean, dayCnt: number): DateFormatter {\n // if more than one week row, or if there are a lot of columns with not much space,\n // put just the day numbers will be in each cell\n if (!datesRepDistinctDays || dayCnt > 10) {\n return createFormatter({ weekday: 'short' }) // \"Sat\"\n }\n\n if (dayCnt > 1) {\n return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }) // \"Sat 11/12\"\n }\n\n return createFormatter({ weekday: 'long' }) // \"Saturday\"\n}\n","import { ComponentChild } from '../preact.js'\nimport { DayHeaderContentArg } from '../render-hook-misc.js'\n\nexport const CLASS_NAME = 'fc-col-header-cell' // do the cushion too? no\n\nexport function renderInner(renderProps: DayHeaderContentArg): ComponentChild {\n return renderProps.text\n}\n","import { DateRange } from '../datelib/date-range.js'\nimport { getDayClassNames, getDateMeta } from '../component/date-rendering.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { createElement } from '../preact.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\nimport { formatDayString } from '../datelib/formatting-utils.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { buildNavLinkAttrs } from './nav-link.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { DayHeaderContentArg } from '../render-hook-misc.js'\nimport { Dictionary } from '../options.js'\nimport { CLASS_NAME, renderInner } from './table-cell-util.js'\nimport { ContentContainer } from '../content-inject/ContentContainer.js'\n\nexport interface TableDateCellProps {\n date: DateMarker\n dateProfile: DateProfile\n todayRange: DateRange\n colCnt: number\n dayHeaderFormat: DateFormatter\n colSpan?: number\n isSticky?: boolean // TODO: get this outta here somehow\n extraDataAttrs?: Dictionary\n extraRenderProps?: Dictionary\n}\n\n// BAD name for this class now. used in the Header\nexport class TableDateCell extends BaseComponent<TableDateCellProps> {\n render() {\n let { dateEnv, options, theme, viewApi } = this.context\n let { props } = this\n let { date, dateProfile } = props\n let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile)\n\n let classNames = [CLASS_NAME].concat(\n getDayClassNames(dayMeta, theme),\n )\n let text = dateEnv.format(date, props.dayHeaderFormat)\n\n // if colCnt is 1, we are already in a day-view and don't need a navlink\n let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)\n ? buildNavLinkAttrs(this.context, date)\n : {}\n\n let renderProps: DayHeaderContentArg = {\n date: dateEnv.toDate(date),\n view: viewApi,\n ...props.extraRenderProps,\n text,\n ...dayMeta,\n }\n\n return (\n <ContentContainer\n elTag=\"th\"\n elClasses={classNames}\n elAttrs={{\n role: 'columnheader',\n colSpan: props.colSpan,\n 'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined,\n ...props.extraDataAttrs,\n }}\n renderProps={renderProps}\n generatorName=\"dayHeaderContent\"\n generator={options.dayHeaderContent || renderInner}\n classNameGenerator={options.dayHeaderClassNames}\n didMount={options.dayHeaderDidMount}\n willUnmount={options.dayHeaderWillUnmount}\n >\n {(InnerContainer) => (\n <div className=\"fc-scrollgrid-sync-inner\">\n {!dayMeta.isDisabled && (\n <InnerContainer\n elTag=\"a\"\n elAttrs={navLinkAttrs}\n elClasses={[\n 'fc-col-header-cell-cushion',\n props.isSticky && 'fc-sticky',\n ]}\n />\n )}\n </div>\n )}\n </ContentContainer>\n )\n }\n}\n","import { getDayClassNames, DateMeta } from '../component/date-rendering.js'\nimport { addDays } from '../datelib/marker.js'\nimport { createElement } from '../preact.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { Dictionary } from '../options.js'\nimport { CLASS_NAME, renderInner } from './table-cell-util.js'\nimport { DayHeaderContentArg } from '../render-hook-misc.js'\nimport { createFormatter } from '../datelib/formatting.js'\nimport { ContentContainer } from '../content-inject/ContentContainer.js'\n\nexport interface TableDowCellProps {\n dow: number\n dayHeaderFormat: DateFormatter\n colSpan?: number\n isSticky?: boolean // TODO: get this outta here somehow\n extraRenderProps?: Dictionary\n extraDataAttrs?: Dictionary\n extraClassNames?: string[]\n}\n\nconst WEEKDAY_FORMAT = createFormatter({ weekday: 'long' })\n\nexport class TableDowCell extends BaseComponent<TableDowCellProps> {\n render() {\n let { props } = this\n let { dateEnv, theme, viewApi, options } = this.context\n let date = addDays(new Date(259200000), props.dow) // start with Sun, 04 Jan 1970 00:00:00 GMT\n let dateMeta: DateMeta = {\n dow: props.dow,\n isDisabled: false,\n isFuture: false,\n isPast: false,\n isToday: false,\n isOther: false,\n }\n let text = dateEnv.format(date, props.dayHeaderFormat)\n let renderProps: DayHeaderContentArg = { // TODO: make this public?\n date,\n ...dateMeta,\n view: viewApi,\n ...props.extraRenderProps,\n text,\n }\n\n return (\n <ContentContainer\n elTag=\"th\"\n elClasses={[\n CLASS_NAME,\n ...getDayClassNames(dateMeta, theme),\n ...(props.extraClassNames || []),\n ]}\n elAttrs={{\n role: 'columnheader',\n colSpan: props.colSpan,\n ...props.extraDataAttrs,\n }}\n renderProps={renderProps}\n generatorName=\"dayHeaderContent\"\n generator={options.dayHeaderContent || renderInner}\n classNameGenerator={options.dayHeaderClassNames}\n didMount={options.dayHeaderDidMount}\n willUnmount={options.dayHeaderWillUnmount}\n >\n {(InnerContent) => (\n <div className=\"fc-scrollgrid-sync-inner\">\n <InnerContent\n elTag=\"a\"\n elClasses={[\n 'fc-col-header-cell-cushion',\n props.isSticky && 'fc-sticky',\n ]}\n elAttrs={{\n 'aria-label': dateEnv.format(date, WEEKDAY_FORMAT),\n }}\n />\n </div>\n )}\n </ContentContainer>\n )\n }\n}\n","import { DateMarker, addMs, startOfDay, addDays } from './datelib/marker.js'\nimport { createDuration } from './datelib/duration.js'\nimport { ViewContext, ViewContextType } from './ViewContext.js'\nimport { ComponentChildren, Component } from './preact.js'\nimport { DateRange } from './datelib/date-range.js'\nimport { getNow } from './reducers/current-date.js'\n\nexport interface NowTimerProps {\n unit: string // TODO: add type of unit\n children: (now: DateMarker, todayRange: DateRange) => ComponentChildren\n}\n\ninterface NowTimerState {\n nowDate: DateMarker\n todayRange: DateRange\n}\n\nexport class NowTimer extends Component<NowTimerProps, NowTimerState> {\n static contextType: any = ViewContextType\n context: ViewContext // do this for all components that use the context!!!\n initialNowDate: DateMarker\n initialNowQueriedMs: number\n timeoutId: any\n\n constructor(props: NowTimerProps, context: ViewContext) {\n super(props, context)\n\n this.initialNowDate = getNow(context.options.now, context.dateEnv)\n this.initialNowQueriedMs = new Date().valueOf()\n\n this.state = this.computeTiming().currentState\n }\n\n render() {\n let { props, state } = this\n return props.children(state.nowDate, state.todayRange)\n }\n\n componentDidMount() {\n this.setTimeout()\n }\n\n componentDidUpdate(prevProps: NowTimerProps) {\n if (prevProps.unit !== this.props.unit) {\n this.clearTimeout()\n this.setTimeout()\n }\n }\n\n componentWillUnmount() {\n this.clearTimeout()\n }\n\n private computeTiming() {\n let { props, context } = this\n let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs)\n let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit)\n let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit))\n let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf()\n\n // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)\n // ensure no longer than a day\n waitMs = Math.min(1000 * 60 * 60 * 24, waitMs)\n\n return {\n currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) } as NowTimerState,\n nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) } as NowTimerState,\n waitMs,\n }\n }\n\n private setTimeout() {\n let { nextState, waitMs } = this.computeTiming()\n\n this.timeoutId = setTimeout(() => {\n this.setState(nextState, () => {\n this.setTimeout()\n })\n }, waitMs)\n }\n\n private clearTimeout() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n }\n }\n}\n\nfunction buildDayRange(date: DateMarker): DateRange { // TODO: make this a general util\n let start = startOfDay(date)\n let end = addDays(start, 1)\n\n return { start, end }\n}\n","import { BaseComponent } from '../vdom-util.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { computeFallbackHeaderFormat } from './table-utils.js'\nimport { VNode, createElement } from '../preact.js'\nimport { TableDateCell } from './TableDateCell.js'\nimport { TableDowCell } from './TableDowCell.js'\nimport { NowTimer } from '../NowTimer.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { memoize } from '../util/memoize.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\n\nexport interface DayHeaderProps {\n dateProfile: DateProfile\n dates: DateMarker[]\n datesRepDistinctDays: boolean\n renderIntro?: (rowKey: string) => VNode\n}\n\nexport class DayHeader extends BaseComponent<DayHeaderProps> { // TODO: rename to DayHeaderTr?\n createDayHeaderFormatter = memoize(createDayHeaderFormatter)\n\n render() {\n let { context } = this\n let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props\n\n let dayHeaderFormat = this.createDayHeaderFormatter(\n context.options.dayHeaderFormat,\n datesRepDistinctDays,\n dates.length,\n )\n\n return (\n <NowTimer unit=\"day\">\n {(nowDate: DateMarker, todayRange: DateRange) => (\n <tr role=\"row\">\n {renderIntro && renderIntro('day')}\n {dates.map((date) => (\n datesRepDistinctDays ? (\n <TableDateCell\n key={date.toISOString()}\n date={date}\n dateProfile={dateProfile}\n todayRange={todayRange}\n colCnt={dates.length}\n dayHeaderFormat={dayHeaderFormat}\n />\n ) : (\n <TableDowCell\n key={date.getUTCDay()}\n dow={date.getUTCDay()}\n dayHeaderFormat={dayHeaderFormat}\n />\n )\n ))}\n </tr>\n )}\n </NowTimer>\n )\n }\n}\n\nfunction createDayHeaderFormatter(explicitFormat: DateFormatter, datesRepDistinctDays, dateCnt) {\n return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt)\n}\n","import { DateProfileGenerator } from '../DateProfileGenerator.js'\nimport { DateMarker, addDays, diffDays } from '../datelib/marker.js'\nimport { DateRange } from '../datelib/date-range.js'\n\nexport interface DaySeriesSeg {\n firstIndex: number\n lastIndex: number\n isStart: boolean\n isEnd: boolean\n}\n\nexport class DaySeriesModel {\n cnt: number\n dates: DateMarker[] // whole-day dates for each column. left to right\n indices: number[] // for each day from start, the offset\n\n constructor(range: DateRange, dateProfileGenerator: DateProfileGenerator) {\n let date: DateMarker = range.start\n let { end } = range\n let indices: number[] = []\n let dates: DateMarker[] = []\n let dayIndex = -1\n\n while (date < end) { // loop each day from start to end\n if (dateProfileGenerator.isHiddenDay(date)) {\n indices.push(dayIndex + 0.5) // mark that it's between indices\n } else {\n dayIndex += 1\n indices.push(dayIndex)\n dates.push(date)\n }\n date = addDays(date, 1)\n }\n\n this.dates = dates\n this.indices = indices\n this.cnt = dates.length\n }\n\n sliceRange(range: DateRange): DaySeriesSeg | null {\n let firstIndex = this.getDateDayIndex(range.start) // inclusive first index\n let lastIndex = this.getDateDayIndex(addDays(range.end, -1)) // inclusive last index\n\n let clippedFirstIndex = Math.max(0, firstIndex)\n let clippedLastIndex = Math.min(this.cnt - 1, lastIndex)\n\n // deal with in-between indices\n clippedFirstIndex = Math.ceil(clippedFirstIndex) // in-between starts round to next cell\n clippedLastIndex = Math.floor(clippedLastIndex) // in-between ends round to prev cell\n\n if (clippedFirstIndex <= clippedLastIndex) {\n return {\n firstIndex: clippedFirstIndex,\n lastIndex: clippedLastIndex,\n isStart: firstIndex === clippedFirstIndex,\n isEnd: lastIndex === clippedLastIndex,\n }\n }\n return null\n }\n\n // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n // If before the first offset, returns a negative number.\n // If after the last offset, returns an offset past the last cell offset.\n // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n private getDateDayIndex(date: DateMarker) {\n let { indices } = this\n let dayOffset = Math.floor(diffDays(this.dates[0], date))\n\n if (dayOffset < 0) {\n return indices[0] - 1\n }\n\n if (dayOffset >= indices.length) {\n return indices[indices.length - 1] + 1\n }\n\n return indices[dayOffset]\n }\n}\n","import { DaySeriesModel } from './DaySeriesModel.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { Seg } from '../component/DateComponent.js'\nimport { Dictionary } from '../options.js'\n\nexport interface DayTableSeg extends Seg {\n row: number\n firstCol: number\n lastCol: number\n}\n\nexport interface DayTableCell {\n key: string // probably just the serialized date, but could be other metadata if this col is specific to another entity\n date: DateMarker\n extraRenderProps?: Dictionary\n extraDataAttrs?: Dictionary\n extraClassNames?: string[]\n extraDateSpan?: Dictionary\n}\n\nexport class DayTableModel {\n rowCnt: number\n colCnt: number\n cells: DayTableCell[][]\n headerDates: DateMarker[]\n\n private daySeries: DaySeriesModel\n\n constructor(daySeries: DaySeriesModel, breakOnWeeks: boolean) {\n let { dates } = daySeries\n let daysPerRow\n let firstDay\n let rowCnt\n\n if (breakOnWeeks) {\n // count columns until the day-of-week repeats\n firstDay = dates[0].getUTCDay()\n for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {\n if (dates[daysPerRow].getUTCDay() === firstDay) {\n break\n }\n }\n rowCnt = Math.ceil(dates.length / daysPerRow)\n } else {\n rowCnt = 1\n daysPerRow = dates.length\n }\n\n this.rowCnt = rowCnt\n this.colCnt = daysPerRow\n this.daySeries = daySeries\n this.cells = this.buildCells()\n this.headerDates = this.buildHeaderDates()\n }\n\n private buildCells() {\n let rows = []\n\n for (let row = 0; row < this.rowCnt; row += 1) {\n let cells = []\n\n for (let col = 0; col < this.colCnt; col += 1) {\n cells.push(\n this.buildCell(row, col),\n )\n }\n\n rows.push(cells)\n }\n\n return rows\n }\n\n private buildCell(row, col): DayTableCell {\n let date = this.daySeries.dates[row * this.colCnt + col]\n return {\n key: date.toISOString(),\n date,\n }\n }\n\n private buildHeaderDates() {\n let dates = []\n\n for (let col = 0; col < this.colCnt; col += 1) {\n dates.push(this.cells[0][col].date)\n }\n\n return dates\n }\n\n sliceRange(range: DateRange): DayTableSeg[] {\n let { colCnt } = this\n let seriesSeg = this.daySeries.sliceRange(range)\n let segs: DayTableSeg[] = []\n\n if (seriesSeg) {\n let { firstIndex, lastIndex } = seriesSeg\n let index = firstIndex\n\n while (index <= lastIndex) {\n let row = Math.floor(index / colCnt)\n let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1)\n\n segs.push({\n row,\n firstCol: index % colCnt,\n lastCol: (nextIndex - 1) % colCnt,\n isStart: seriesSeg.isStart && index === firstIndex,\n isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,\n })\n\n index = nextIndex\n }\n }\n\n return segs\n }\n}\n","import { DateRange } from '../datelib/date-range.js'\nimport { EventStore } from '../structs/event-store.js'\nimport { EventUiHash } from '../component/event-ui.js'\nimport { sliceEventStore, EventRenderRange } from '../component/event-rendering.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { Seg, EventSegUiInteractionState } from '../component/DateComponent.js' // TODO: rename EventSegUiInteractionState, move here\nimport { DateSpan, fabricateEventRange } from '../structs/date-span.js'\nimport { EventInteractionState } from '../interactions/event-interaction-state.js'\nimport { Duration } from '../datelib/duration.js'\nimport { memoize } from '../util/memoize.js'\nimport { DateMarker, addMs, addDays } from '../datelib/marker.js'\nimport { CalendarContext } from '../CalendarContext.js'\nimport { expandRecurring } from '../structs/recurring-event.js'\n\nexport interface SliceableProps {\n dateSelection: DateSpan\n businessHours: EventStore\n eventStore: EventStore\n eventDrag: EventInteractionState | null\n eventResize: EventInteractionState | null\n eventSelection: string\n eventUiBases: EventUiHash\n}\n\nexport interface SlicedProps<SegType extends Seg> {\n dateSelectionSegs: SegType[]\n businessHourSegs: SegType[]\n fgEventSegs: SegType[]\n bgEventSegs: SegType[]\n eventDrag: EventSegUiInteractionState | null\n eventResize: EventSegUiInteractionState | null\n eventSelection: string\n}\n\nexport abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {\n private sliceBusinessHours = memoize(this._sliceBusinessHours)\n private sliceDateSelection = memoize(this._sliceDateSpan)\n private sliceEventStore = memoize(this._sliceEventStore)\n private sliceEventDrag = memoize(this._sliceInteraction)\n private sliceEventResize = memoize(this._sliceInteraction)\n\n abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[]\n protected forceDayIfListItem = false // hack\n\n sliceProps(\n props: SliceableProps,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SlicedProps<SegType> {\n let { eventUiBases } = props\n let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs)\n\n return {\n dateSelectionSegs: this.sliceDateSelection(props.dateSelection, eventUiBases, context, ...extraArgs),\n businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),\n fgEventSegs: eventSegs.fg,\n bgEventSegs: eventSegs.bg,\n eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),\n eventSelection: props.eventSelection,\n } // TODO: give interactionSegs?\n }\n\n sliceNowDate( // does not memoize\n date: DateMarker,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n return this._sliceDateSpan(\n { range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range\n {},\n context,\n ...extraArgs,\n )\n }\n\n private _sliceBusinessHours(\n businessHours: EventStore,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n if (!businessHours) {\n return []\n }\n\n return this._sliceEventStore(\n expandRecurring(\n businessHours,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n context,\n ),\n {},\n dateProfile,\n nextDayThreshold,\n ...extraArgs,\n ).bg\n }\n\n private _sliceEventStore(\n eventStore: EventStore,\n eventUiBases: EventUiHash,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n ...extraArgs: ExtraArgs\n ): { bg: SegType[], fg: SegType[] } {\n if (eventStore) {\n let rangeRes = sliceEventStore(\n eventStore,\n eventUiBases,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n nextDayThreshold,\n )\n\n return {\n bg: this.sliceEventRanges(rangeRes.bg, extraArgs),\n fg: this.sliceEventRanges(rangeRes.fg, extraArgs),\n }\n }\n return { bg: [], fg: [] }\n }\n\n private _sliceInteraction(\n interaction: EventInteractionState,\n eventUiBases: EventUiHash,\n dateProfile: DateProfile,\n nextDayThreshold: Duration | null,\n ...extraArgs: ExtraArgs\n ): EventSegUiInteractionState {\n if (!interaction) {\n return null\n }\n\n let rangeRes = sliceEventStore(\n interaction.mutatedEvents,\n eventUiBases,\n computeActiveRange(dateProfile, Boolean(nextDayThreshold)),\n nextDayThreshold,\n )\n\n return {\n segs: this.sliceEventRanges(rangeRes.fg, extraArgs),\n affectedInstances: interaction.affectedEvents.instances,\n isEvent: interaction.isEvent,\n }\n }\n\n private _sliceDateSpan(\n dateSpan: DateSpan,\n eventUiBases: EventUiHash,\n context: CalendarContext,\n ...extraArgs: ExtraArgs\n ): SegType[] {\n if (!dateSpan) {\n return []\n }\n\n let eventRange = fabricateEventRange(dateSpan, eventUiBases, context)\n let segs = this.sliceRange(dateSpan.range, ...extraArgs)\n\n for (let seg of segs) {\n seg.eventRange = eventRange\n }\n\n return segs\n }\n\n /*\n \"complete\" seg means it has component and eventRange\n */\n private sliceEventRanges(\n eventRanges: EventRenderRange[],\n extraArgs: ExtraArgs,\n ): SegType[] {\n let segs: SegType[] = []\n\n for (let eventRange of eventRanges) {\n segs.push(...this.sliceEventRange(eventRange, extraArgs))\n }\n\n return segs\n }\n\n /*\n \"complete\" seg means it has component and eventRange\n */\n private sliceEventRange(\n eventRange: EventRenderRange,\n extraArgs: ExtraArgs,\n ): SegType[] {\n let dateRange = eventRange.range\n\n // hack to make multi-day events that are being force-displayed as list-items to take up only one day\n if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {\n dateRange = {\n start: dateRange.start,\n end: addDays(dateRange.start, 1),\n }\n }\n\n let segs = this.sliceRange(dateRange, ...extraArgs)\n\n for (let seg of segs) {\n seg.eventRange = eventRange\n seg.isStart = eventRange.isStart && seg.isStart\n seg.isEnd = eventRange.isEnd && seg.isEnd\n }\n\n return segs\n }\n}\n\n/*\nfor incorporating slotMinTime/slotMaxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\nfunction computeActiveRange(dateProfile: DateProfile, isComponentAllDay: boolean): DateRange {\n let range = dateProfile.activeRange\n\n if (isComponentAllDay) {\n return range\n }\n\n return {\n start: addMs(range.start, dateProfile.slotMinTime.milliseconds),\n end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day\n }\n}\n","import { EventStore, filterEventStoreDefs } from './structs/event-store.js'\nimport { DateSpan } from './structs/date-span.js'\nimport { rangeContainsRange, rangesIntersect, DateRange, OpenDateRange } from './datelib/date-range.js'\nimport { EventImpl } from './api/EventImpl.js'\nimport { compileEventUis } from './component/event-rendering.js'\nimport { excludeInstances } from './reducers/eventStore.js'\nimport { EventInteractionState } from './interactions/event-interaction-state.js'\nimport { SplittableProps } from './component/event-splitting.js'\nimport { mapHash } from './util/object.js'\nimport { CalendarContext } from './CalendarContext.js'\nimport { buildDateSpanApiWithContext } from './calendar-utils.js'\nimport { Constraint } from './structs/constraint.js'\nimport { expandRecurring } from './structs/recurring-event.js'\nimport { DateProfile } from './DateProfileGenerator.js'\n\n// high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport function isInteractionValid(\n interaction: EventInteractionState,\n dateProfile: DateProfile,\n context: CalendarContext,\n) {\n let { instances } = interaction.mutatedEvents\n for (let instanceId in instances) {\n if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n return false\n }\n }\n return isNewPropsValid({ eventDrag: interaction }, context) // HACK: the eventDrag props is used for ALL interactions\n}\n\nexport function isDateSelectionValid(\n dateSelection: DateSpan,\n dateProfile: DateProfile,\n context: CalendarContext,\n) {\n if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {\n return false\n }\n return isNewPropsValid({ dateSelection }, context)\n}\n\nfunction isNewPropsValid(newProps, context: CalendarContext) {\n let calendarState = context.getCurrentData()\n\n let props = {\n businessHours: calendarState.businessHours,\n dateSelection: '',\n eventStore: calendarState.eventStore,\n eventUiBases: calendarState.eventUiBases,\n eventSelection: '',\n eventDrag: null,\n eventResize: null,\n ...newProps,\n }\n\n return (context.pluginHooks.isPropsValid || isPropsValid)(props, context)\n}\n\nexport function isPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta = {}, filterConfig?): boolean {\n if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false\n }\n\n if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n return false\n }\n\n return true\n}\n\n// Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isInteractionPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta: any, filterConfig): boolean {\n let currentState = context.getCurrentData()\n let interaction = state.eventDrag // HACK: the eventDrag props is used for ALL interactions\n\n let subjectEventStore = interaction.mutatedEvents\n let subjectDefs = subjectEventStore.defs\n let subjectInstances = subjectEventStore.instances\n let subjectConfigs = compileEventUis(\n subjectDefs,\n interaction.isEvent ?\n state.eventUiBases :\n { '': currentState.selectionConfig }, // if not a real event, validate as a selection\n )\n\n if (filterConfig) {\n subjectConfigs = mapHash(subjectConfigs, filterConfig)\n }\n\n // exclude the subject events. TODO: exclude defs too?\n let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances)\n\n let otherDefs = otherEventStore.defs\n let otherInstances = otherEventStore.instances\n let otherConfigs = compileEventUis(otherDefs, state.eventUiBases)\n\n for (let subjectInstanceId in subjectInstances) {\n let subjectInstance = subjectInstances[subjectInstanceId]\n let subjectRange = subjectInstance.range\n let subjectConfig = subjectConfigs[subjectInstance.defId]\n let subjectDef = subjectDefs[subjectInstance.defId]\n\n // constraint\n if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {\n return false\n }\n\n // overlap\n\n let { eventOverlap } = context.options\n let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null\n\n for (let otherInstanceId in otherInstances) {\n let otherInstance = otherInstances[otherInstanceId]\n\n // intersect! evaluate\n if (rangesIntersect(subjectRange, otherInstance.range)) {\n let otherOverlap = otherConfigs[otherInstance.defId].overlap\n\n // consider the other event's overlap. only do this if the subject event is a \"real\" event\n if (otherOverlap === false && interaction.isEvent) {\n return false\n }\n\n if (subjectConfig.overlap === false) {\n return false\n }\n\n if (eventOverlapFunc && !eventOverlapFunc(\n new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event\n new EventImpl(context, subjectDef, subjectInstance), // moving event\n )) {\n return false\n }\n }\n }\n\n // allow (a function)\n\n let calendarEventStore = currentState.eventStore // need global-to-calendar, not local to component (splittable)state\n\n for (let subjectAllow of subjectConfig.allows) {\n let subjectDateSpan: DateSpan = {\n ...dateSpanMeta,\n range: subjectInstance.range,\n allDay: subjectDef.allDay,\n }\n\n let origDef = calendarEventStore.defs[subjectDef.defId]\n let origInstance = calendarEventStore.instances[subjectInstanceId]\n let eventApi\n\n if (origDef) { // was previously in the calendar\n eventApi = new EventImpl(context, origDef, origInstance)\n } else { // was an external event\n eventApi = new EventImpl(context, subjectDef) // no instance, because had no dates\n }\n\n if (!subjectAllow(\n buildDateSpanApiWithContext(subjectDateSpan, context),\n eventApi,\n )) {\n return false\n }\n }\n }\n\n return true\n}\n\n// Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction isDateSelectionPropsValid(state: SplittableProps, context: CalendarContext, dateSpanMeta: any, filterConfig): boolean {\n let relevantEventStore = state.eventStore\n let relevantDefs = relevantEventStore.defs\n let relevantInstances = relevantEventStore.instances\n\n let selection = state.dateSelection\n let selectionRange = selection.range\n let { selectionConfig } = context.getCurrentData()\n\n if (filterConfig) {\n selectionConfig = filterConfig(selectionConfig)\n }\n\n // constraint\n if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {\n return false\n }\n\n // overlap\n\n let { selectOverlap } = context.options\n let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null\n\n for (let relevantInstanceId in relevantInstances) {\n let relevantInstance = relevantInstances[relevantInstanceId]\n\n // intersect! evaluate\n if (rangesIntersect(selectionRange, relevantInstance.range)) {\n if (selectionConfig.overlap === false) {\n return false\n }\n\n if (selectOverlapFunc && !selectOverlapFunc(\n new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance),\n null,\n )) {\n return false\n }\n }\n }\n\n // allow (a function)\n for (let selectionAllow of selectionConfig.allows) {\n let fullDateSpan = { ...dateSpanMeta, ...selection }\n\n if (!selectionAllow(\n buildDateSpanApiWithContext(fullDateSpan, context),\n null,\n )) {\n return false\n }\n }\n\n return true\n}\n\n// Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\n\nfunction allConstraintsPass(\n constraints: Constraint[],\n subjectRange: DateRange,\n otherEventStore: EventStore,\n businessHoursUnexpanded: EventStore,\n context: CalendarContext,\n): boolean {\n for (let constraint of constraints) {\n if (!anyRangesContainRange(\n constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context),\n subjectRange,\n )) {\n return false\n }\n }\n\n return true\n}\n\nfunction constraintToRanges(\n constraint: Constraint,\n subjectRange: DateRange, // for expanding a recurring constraint, or expanding business hours\n otherEventStore: EventStore, // for if constraint is an even group ID\n businessHoursUnexpanded: EventStore, // for if constraint is 'businessHours'\n context: CalendarContext, // for expanding businesshours\n): OpenDateRange[] {\n if (constraint === 'businessHours') {\n return eventStoreToRanges(\n expandRecurring(businessHoursUnexpanded, subjectRange, context),\n )\n }\n\n if (typeof constraint === 'string') { // an group ID\n return eventStoreToRanges(\n filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint),\n )\n }\n\n if (typeof constraint === 'object' && constraint) { // non-null object\n return eventStoreToRanges(\n expandRecurring(constraint, subjectRange, context),\n )\n }\n\n return [] // if it's false\n}\n\n// TODO: move to event-store file?\nfunction eventStoreToRanges(eventStore: EventStore): DateRange[] {\n let { instances } = eventStore\n let ranges: DateRange[] = []\n\n for (let instanceId in instances) {\n ranges.push(instances[instanceId].range)\n }\n\n return ranges\n}\n\n// TODO: move to geom file?\nfunction anyRangesContainRange(outerRanges: DateRange[], innerRange: DateRange): boolean {\n for (let outerRange of outerRanges) {\n if (rangeContainsRange(outerRange, innerRange)) {\n return true\n }\n }\n\n return false\n}\n","import { createElement, ComponentChildren, Ref } from '../preact.js'\nimport { BaseComponent, setRef } from '../vdom-util.js'\nimport { CssDimValue, ScrollerLike } from './util.js'\n\nexport type OverflowValue = 'auto' | 'hidden' | 'scroll' | 'visible'\n\nexport interface ScrollerProps {\n elRef?: Ref<HTMLElement>\n overflowX: OverflowValue\n overflowY: OverflowValue\n overcomeLeft?: number\n overcomeRight?: number\n overcomeBottom?: number\n maxHeight?: CssDimValue\n liquid?: boolean\n liquidIsAbsolute?: boolean\n children?: ComponentChildren\n}\n\nconst VISIBLE_HIDDEN_RE = /^(visible|hidden)$/\n\nexport class Scroller extends BaseComponent<ScrollerProps> implements ScrollerLike {\n private el: HTMLElement // TODO: just use this.base?\n\n render() {\n let { props } = this\n let { liquid, liquidIsAbsolute } = props\n let isAbsolute = liquid && liquidIsAbsolute\n let className = ['fc-scroller']\n\n if (liquid) {\n if (liquidIsAbsolute) {\n className.push('fc-scroller-liquid-absolute')\n } else {\n className.push('fc-scroller-liquid')\n }\n }\n\n return (\n <div\n ref={this.handleEl}\n className={className.join(' ')}\n style={{\n overflowX: props.overflowX,\n overflowY: props.overflowY,\n left: (isAbsolute && -(props.overcomeLeft || 0)) || '',\n right: (isAbsolute && -(props.overcomeRight || 0)) || '',\n bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',\n marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',\n marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',\n marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',\n maxHeight: props.maxHeight || '',\n }}\n >\n {props.children}\n </div>\n )\n }\n\n handleEl = (el: HTMLElement) => {\n this.el = el\n setRef(this.props.elRef, el)\n }\n\n needsXScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return false\n }\n\n // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n\n let { el } = this\n let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth()\n let { children } = el\n\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i]\n\n if (childEl.getBoundingClientRect().width > realClientWidth) {\n return true\n }\n }\n\n return false\n }\n\n needsYScrolling() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return false\n }\n\n // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.\n // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n // inner-child margins and absolute positioning\n\n let { el } = this\n let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth()\n let { children } = el\n\n for (let i = 0; i < children.length; i += 1) {\n let childEl = children[i]\n\n if (childEl.getBoundingClientRect().height > realClientHeight) {\n return true\n }\n }\n\n return false\n }\n\n getXScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n return 0\n }\n return this.el.offsetHeight - this.el.clientHeight // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n\n getYScrollbarWidth() {\n if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n return 0\n }\n return this.el.offsetWidth - this.el.clientWidth // only works because we guarantee no borders. TODO: add to CSS with important?\n }\n}\n","import { hashValuesToArray, collectFromHash } from './object.js'\n\n/*\nTODO: somehow infer OtherArgs from masterCallback?\nTODO: infer RefType from masterCallback if provided\n*/\nexport class RefMap<RefType> {\n public currentMap: { [key: string]: RefType } = {}\n private depths: { [key: string]: number } = {}\n private callbackMap: { [key: string]: (val: RefType | null) => void } = {}\n\n constructor(public masterCallback?: (val: RefType | null, key: string) => void) {\n }\n\n createRef(key: string | number) {\n let refCallback = this.callbackMap[key]\n\n if (!refCallback) {\n refCallback = this.callbackMap[key] = (val: RefType | null) => {\n this.handleValue(val, String(key))\n }\n }\n\n return refCallback\n }\n\n handleValue = (val: RefType | null, key: string) => { // bind in case users want to pass it around\n let { depths, currentMap } = this\n let removed = false\n let added = false\n\n if (val !== null) {\n // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore\n removed = (key in currentMap)\n\n currentMap[key] = val\n depths[key] = (depths[key] || 0) + 1\n added = true\n } else {\n depths[key] -= 1\n\n if (!depths[key]) {\n delete currentMap[key]\n delete this.callbackMap[key]\n removed = true\n }\n }\n\n if (this.masterCallback) {\n if (removed) {\n this.masterCallback(null, String(key))\n }\n if (added) {\n this.masterCallback(val, String(key))\n }\n }\n }\n\n // TODO: check callers that don't care about order. should use getAll instead\n // NOTE: this method has become less valuable now that we are encouraged to map order by some other index\n // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and \"collect\"\n collect(\n startIndex?: number,\n endIndex?: number,\n step?: number,\n ) {\n return collectFromHash(this.currentMap, startIndex, endIndex, step)\n }\n\n getAll(): RefType[] { // returns in no partical order!\n return hashValuesToArray(this.currentMap)\n }\n}\n","import { VNode, createElement, Ref } from '../preact.js'\nimport { findElements } from '../util/dom-manip.js'\nimport { ViewContext } from '../ViewContext.js'\nimport { computeSmallestCellWidth } from '../util/misc.js'\nimport { isPropsEqual } from '../util/object.js'\nimport { isArraysEqual } from '../util/array.js'\nimport { BaseOptionsRefined } from '../options.js'\n\nexport type CssDimValue = string | number // TODO: move to more general file\n\nexport interface ColProps {\n width?: CssDimValue\n minWidth?: CssDimValue\n span?: number\n}\n\nexport interface SectionConfig {\n outerContent?: VNode\n type: 'body' | 'header' | 'footer'\n className?: string\n maxHeight?: number\n liquid?: boolean\n expandRows?: boolean // TODO: how to get a bottom rule?\n syncRowHeights?: boolean // yuck\n isSticky?: boolean\n}\n\nexport type ChunkConfigContent = (contentProps: ChunkContentCallbackArgs) => VNode\nexport type ChunkConfigRowContent = VNode | ChunkConfigContent\n\nexport interface ChunkConfig {\n elRef?: Ref<HTMLTableCellElement>\n outerContent?: VNode\n content?: ChunkConfigContent\n rowContent?: ChunkConfigRowContent\n scrollerElRef?: Ref<HTMLDivElement>\n tableClassName?: string\n}\n\nexport interface ChunkContentCallbackArgs { // TODO: util for wrapping tables!?\n tableColGroupNode: VNode\n tableMinWidth: CssDimValue\n clientWidth: number | null // important to know whether 0 or not-yet-determined. for headless testing\n clientHeight: number | null //\n expandRows: boolean\n syncRowHeights: boolean\n rowSyncHeights: number[]\n reportRowHeightChange: (rowEl: HTMLElement, isStable: boolean) => void\n}\n\nexport function computeShrinkWidth(chunkEls: HTMLElement[]) { // all in same COL!\n let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink')\n let largestWidth = 0\n\n for (let shrinkCell of shrinkCells) {\n largestWidth = Math.max(\n largestWidth,\n computeSmallestCellWidth(shrinkCell),\n )\n }\n\n return Math.ceil(largestWidth) // <table> elements work best with integers. round up to ensure contents fits\n}\n\nexport interface ScrollerLike { // have scrollers implement?\n needsYScrolling(): boolean\n needsXScrolling(): boolean\n}\n\nexport function getSectionHasLiquidHeight(props: { liquid: boolean }, sectionConfig: SectionConfig) {\n return props.liquid && sectionConfig.liquid // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)\n}\n\nexport function getAllowYScrolling(props: { liquid: boolean }, sectionConfig: SectionConfig) {\n return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars\n getSectionHasLiquidHeight(props, sectionConfig) // if the section is liquid height, it might condense enough to require scrollbars\n}\n\n// TODO: ONLY use `arg`. force out internal function to use same API\nexport function renderChunkContent(\n sectionConfig: SectionConfig,\n chunkConfig: ChunkConfig,\n arg: ChunkContentCallbackArgs,\n isHeader: boolean,\n) {\n let { expandRows } = arg\n\n let content: VNode = typeof chunkConfig.content === 'function' ?\n chunkConfig.content(arg) :\n createElement(\n 'table',\n {\n role: 'presentation',\n className: [\n chunkConfig.tableClassName,\n sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',\n ].join(' '),\n style: {\n minWidth: arg.tableMinWidth, // because colMinWidths arent enough\n width: arg.clientWidth,\n height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height\n },\n },\n arg.tableColGroupNode,\n createElement(\n isHeader ? 'thead' : 'tbody',\n {\n role: 'presentation',\n },\n typeof chunkConfig.rowContent === 'function'\n ? chunkConfig.rowContent(arg)\n : chunkConfig.rowContent,\n ),\n )\n\n return content\n}\n\nexport function isColPropsEqual(cols0: ColProps[], cols1: ColProps[]) {\n return isArraysEqual(cols0, cols1, isPropsEqual)\n}\n\nexport function renderMicroColGroup(cols: ColProps[], shrinkWidth?: number): VNode {\n let colNodes: VNode[] = []\n\n /*\n for ColProps with spans, it would have been great to make a single <col span=\"\">\n HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.\n SOLUTION: making individual <col> elements makes Chrome behave.\n */\n for (let colProps of cols) {\n let span = colProps.span || 1\n\n for (let i = 0; i < span; i += 1) {\n colNodes.push(\n <col\n style={{\n width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),\n minWidth: colProps.minWidth || '',\n }}\n />,\n )\n }\n }\n\n return createElement('colgroup', {}, ...colNodes)\n}\n\nexport function sanitizeShrinkWidth(shrinkWidth?: number) {\n /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth\n 4 accounts for 2 2-pixel borders. TODO: better solution? */\n return shrinkWidth == null ? 4 : shrinkWidth\n}\n\nexport function hasShrinkWidth(cols: ColProps[]) {\n for (let col of cols) {\n if (col.width === 'shrink') {\n return true\n }\n }\n\n return false\n}\n\nexport function getScrollGridClassNames(liquid: boolean, context: ViewContext) {\n let classNames = [\n 'fc-scrollgrid',\n context.theme.getClass('table'),\n ]\n\n if (liquid) {\n classNames.push('fc-scrollgrid-liquid')\n }\n\n return classNames\n}\n\nexport function getSectionClassNames(sectionConfig: SectionConfig, wholeTableVGrow: boolean) {\n let classNames = [\n 'fc-scrollgrid-section',\n `fc-scrollgrid-section-${sectionConfig.type}`,\n sectionConfig.className, // used?\n ]\n\n if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {\n classNames.push('fc-scrollgrid-section-liquid')\n }\n\n if (sectionConfig.isSticky) {\n classNames.push('fc-scrollgrid-section-sticky')\n }\n\n return classNames\n}\n\nexport function renderScrollShim(arg: ChunkContentCallbackArgs) {\n return (\n <div\n className=\"fc-scrollgrid-sticky-shim\"\n style={{\n width: arg.clientWidth,\n minWidth: arg.tableMinWidth,\n }}\n />\n )\n}\n\nexport function getStickyHeaderDates(options: BaseOptionsRefined) {\n let { stickyHeaderDates } = options\n\n if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {\n stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto'\n }\n\n return stickyHeaderDates\n}\n\nexport function getStickyFooterScrollbar(options: BaseOptionsRefined) {\n let { stickyFooterScrollbar } = options\n\n if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {\n stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto'\n }\n\n return stickyFooterScrollbar\n}\n","import { VNode, createElement, Fragment } from '../preact.js'\nimport { BaseComponent, setRef } from '../vdom-util.js'\nimport { Scroller, OverflowValue } from './Scroller.js'\nimport { RefMap } from '../util/RefMap.js'\nimport {\n ColProps, SectionConfig, renderMicroColGroup, computeShrinkWidth, getScrollGridClassNames, getSectionClassNames, getAllowYScrolling,\n renderChunkContent, getSectionHasLiquidHeight, ChunkConfig, hasShrinkWidth, CssDimValue,\n isColPropsEqual,\n} from './util.js'\nimport { getCanVGrowWithinCell } from '../util/table-styling.js'\nimport { memoize } from '../util/memoize.js'\nimport { isPropsEqual } from '../util/object.js'\nimport { getScrollbarWidths } from '../util/scrollbar-width.js'\n\nexport interface SimpleScrollGridProps {\n cols: ColProps[]\n sections: SimpleScrollGridSection[]\n liquid: boolean // liquid *height*\n collapsibleWidth: boolean // can ALL sections be fully collapsed in width?\n height?: CssDimValue // TODO: give to real ScrollGrid\n}\n\nexport interface SimpleScrollGridSection extends SectionConfig {\n key: string\n chunk?: ChunkConfig\n}\n\ninterface SimpleScrollGridState {\n shrinkWidth: number | null\n forceYScrollbars: boolean\n scrollerClientWidths: { [key: string]: number }\n scrollerClientHeights: { [key: string]: number }\n}\n\nexport class SimpleScrollGrid extends BaseComponent<SimpleScrollGridProps, SimpleScrollGridState> {\n processCols = memoize((a) => a, isColPropsEqual) // so we get same `cols` props every time\n\n // yucky to memoize VNodes, but much more efficient for consumers\n renderMicroColGroup: typeof renderMicroColGroup = memoize(renderMicroColGroup)\n\n scrollerRefs = new RefMap<Scroller>()\n scrollerElRefs = new RefMap<HTMLElement>(this._handleScrollerEl.bind(this))\n\n state: SimpleScrollGridState = {\n shrinkWidth: null,\n forceYScrollbars: false,\n scrollerClientWidths: {},\n scrollerClientHeights: {},\n }\n\n render(): VNode {\n let { props, state, context } = this\n let sectionConfigs = props.sections || []\n let cols = this.processCols(props.cols)\n\n let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth)\n let classNames = getScrollGridClassNames(props.liquid, context)\n\n if (props.collapsibleWidth) {\n classNames.push('fc-scrollgrid-collapsible')\n }\n\n // TODO: make DRY\n let configCnt = sectionConfigs.length\n let configI = 0\n let currentConfig: SimpleScrollGridSection\n let headSectionNodes: VNode[] = []\n let bodySectionNodes: VNode[] = []\n let footSectionNodes: VNode[] = []\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false))\n configI += 1\n }\n\n while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true))\n configI += 1\n }\n\n // firefox bug: when setting height on table and there is a thead or tfoot,\n // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)\n // use getCanVGrowWithinCell as a way to detect table-stupid firefox.\n // if so, use a simpler dom structure, jam everything into a lone tbody.\n let isBuggy = !getCanVGrowWithinCell()\n\n const roleAttrs = { role: 'rowgroup' }\n\n return createElement(\n 'table',\n {\n role: 'grid',\n className: classNames.join(' '),\n style: { height: props.height },\n },\n Boolean(!isBuggy && headSectionNodes.length) && createElement('thead', roleAttrs, ...headSectionNodes),\n Boolean(!isBuggy && bodySectionNodes.length) && createElement('tbody', roleAttrs, ...bodySectionNodes),\n Boolean(!isBuggy && footSectionNodes.length) && createElement('tfoot', roleAttrs, ...footSectionNodes),\n isBuggy && createElement('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes),\n )\n }\n\n renderSection(sectionConfig: SimpleScrollGridSection, microColGroupNode: VNode, isHeader: boolean) {\n if ('outerContent' in sectionConfig) {\n return (\n <Fragment key={sectionConfig.key}>\n {sectionConfig.outerContent}\n </Fragment>\n )\n }\n\n return (\n <tr\n key={sectionConfig.key}\n role=\"presentation\"\n className={getSectionClassNames(sectionConfig, this.props.liquid).join(' ')}\n >\n {this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)}\n </tr>\n )\n }\n\n renderChunkTd(\n sectionConfig: SimpleScrollGridSection,\n microColGroupNode: VNode,\n chunkConfig: ChunkConfig,\n isHeader: boolean,\n ): createElement.JSX.Element {\n if ('outerContent' in chunkConfig) {\n return chunkConfig.outerContent\n }\n\n let { props } = this\n let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state\n\n let needsYScrolling = getAllowYScrolling(props, sectionConfig) // TODO: do lazily. do in section config?\n let isLiquid = getSectionHasLiquidHeight(props, sectionConfig)\n\n // for `!props.liquid` - is WHOLE scrollgrid natural height?\n // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars\n let overflowY: OverflowValue =\n !props.liquid ? 'visible' :\n forceYScrollbars ? 'scroll' :\n !needsYScrolling ? 'hidden' :\n 'auto'\n\n let sectionKey = sectionConfig.key\n let content = renderChunkContent(sectionConfig, chunkConfig, {\n tableColGroupNode: microColGroupNode,\n tableMinWidth: '',\n clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,\n clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,\n expandRows: sectionConfig.expandRows,\n syncRowHeights: false,\n rowSyncHeights: [],\n reportRowHeightChange: () => {},\n }, isHeader)\n\n return createElement(\n isHeader ? 'th' : 'td',\n {\n ref: chunkConfig.elRef as any,\n role: 'presentation',\n },\n <div className={`fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}`}>\n <Scroller\n ref={this.scrollerRefs.createRef(sectionKey)}\n elRef={this.scrollerElRefs.createRef(sectionKey)}\n overflowY={overflowY}\n overflowX={!props.liquid ? 'visible' : 'hidden' /* natural height? */}\n maxHeight={sectionConfig.maxHeight}\n liquid={isLiquid}\n liquidIsAbsolute // because its within a harness\n >\n {content}\n </Scroller>\n </div>,\n )\n }\n\n _handleScrollerEl(scrollerEl: HTMLElement | null, key: string) {\n let section = getSectionByKey(this.props.sections, key)\n\n if (section) {\n setRef(section.chunk.scrollerElRef, scrollerEl)\n }\n }\n\n // TODO: can do a really simple print-view. dont need to join rows\n handleSizing = () => {\n this.safeSetState({\n shrinkWidth: this.computeShrinkWidth(), // will create each chunk's <colgroup>. TODO: precompute hasShrinkWidth\n ...this.computeScrollerDims(),\n })\n }\n\n componentDidMount() {\n this.handleSizing()\n this.context.addResizeHandler(this.handleSizing)\n }\n\n componentDidUpdate() {\n // TODO: need better solution when state contains non-sizing things\n this.handleSizing()\n }\n\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleSizing)\n }\n\n computeShrinkWidth() {\n return hasShrinkWidth(this.props.cols)\n ? computeShrinkWidth(this.scrollerElRefs.getAll())\n : 0\n }\n\n computeScrollerDims() {\n let scrollbarWidth = getScrollbarWidths()\n let { scrollerRefs, scrollerElRefs } = this\n\n let forceYScrollbars = false\n let scrollerClientWidths: { [index: string]: number } = {}\n let scrollerClientHeights: { [index: string]: number } = {}\n\n for (let sectionKey in scrollerRefs.currentMap) {\n let scroller = scrollerRefs.currentMap[sectionKey]\n\n if (scroller && scroller.needsYScrolling()) {\n forceYScrollbars = true\n break\n }\n }\n\n for (let section of this.props.sections) {\n let sectionKey = section.key\n let scrollerEl = scrollerElRefs.currentMap[sectionKey]\n\n if (scrollerEl) {\n let harnessEl = scrollerEl.parentNode as HTMLElement // TODO: weird way to get this. need harness b/c doesn't include table borders\n\n scrollerClientWidths[sectionKey] = Math.floor(\n harnessEl.getBoundingClientRect().width - (\n forceYScrollbars\n ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n : 0\n ),\n )\n\n scrollerClientHeights[sectionKey] = Math.floor(\n harnessEl.getBoundingClientRect().height, // never has horizontal scrollbars\n )\n }\n }\n\n return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights }\n }\n}\n\nSimpleScrollGrid.addStateEquality({\n scrollerClientWidths: isPropsEqual,\n scrollerClientHeights: isPropsEqual,\n})\n\nfunction getSectionByKey(sections: SimpleScrollGridSection[], key: string): SimpleScrollGridSection | null {\n for (let section of sections) {\n if (section.key === key) {\n return section\n }\n }\n\n return null\n}\n","import { createElement } from '../preact.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { Seg } from '../component/DateComponent.js'\nimport { EventImpl } from '../api/EventImpl.js'\nimport {\n computeSegDraggable,\n computeSegStartResizable,\n computeSegEndResizable,\n EventContentArg,\n getEventClassNames,\n setElSeg,\n} from '../component/event-rendering.js'\nimport { ContentContainer, InnerContainerFunc } from '../content-inject/ContentContainer.js'\nimport { ElProps } from '../content-inject/ContentInjector.js'\nimport { CustomContentGenerator } from './render-hook.js'\n\nexport interface MinimalEventProps {\n seg: Seg\n isDragging: boolean // rename to isMirrorDragging? make optional?\n isResizing: boolean // rename to isMirrorResizing? make optional?\n isDateSelecting: boolean // rename to isMirrorDateSelecting? make optional?\n isSelected: boolean\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n}\n\nexport type EventContainerProps = ElProps & MinimalEventProps & {\n defaultGenerator: CustomContentGenerator<EventContentArg>\n disableDragging?: boolean\n disableResizing?: boolean\n timeText: string\n children?: InnerContainerFunc<EventContentArg>\n}\n\nexport class EventContainer extends BaseComponent<EventContainerProps> {\n el: HTMLElement\n\n render() {\n const { props, context } = this\n const { options } = context\n const { seg } = props\n const { eventRange } = seg\n const { ui } = eventRange\n\n const renderProps: EventContentArg = {\n event: new EventImpl(context, eventRange.def, eventRange.instance),\n view: context.viewApi,\n timeText: props.timeText,\n textColor: ui.textColor,\n backgroundColor: ui.backgroundColor,\n borderColor: ui.borderColor,\n isDraggable: !props.disableDragging && computeSegDraggable(seg, context),\n isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),\n isEndResizable: !props.disableResizing && computeSegEndResizable(seg, context),\n isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),\n isStart: Boolean(seg.isStart),\n isEnd: Boolean(seg.isEnd),\n isPast: Boolean(props.isPast), // TODO: don't cast. getDateMeta does it\n isFuture: Boolean(props.isFuture), // TODO: don't cast. getDateMeta does it\n isToday: Boolean(props.isToday), // TODO: don't cast. getDateMeta does it\n isSelected: Boolean(props.isSelected),\n isDragging: Boolean(props.isDragging),\n isResizing: Boolean(props.isResizing),\n }\n\n return (\n <ContentContainer\n {...props /* contains children */}\n elRef={this.handleEl}\n elClasses={[\n ...getEventClassNames(renderProps),\n ...seg.eventRange.ui.classNames,\n ...(props.elClasses || []),\n ]}\n renderProps={renderProps}\n generatorName=\"eventContent\"\n generator={options.eventContent || props.defaultGenerator}\n classNameGenerator={options.eventClassNames}\n didMount={options.eventDidMount}\n willUnmount={options.eventWillUnmount}\n />\n )\n }\n\n handleEl = (el: HTMLElement | null) => {\n this.el = el\n\n if (el) {\n setElSeg(el, this.props.seg)\n }\n }\n\n componentDidUpdate(prevProps: EventContainerProps): void {\n if (this.el && this.props.seg !== prevProps.seg) {\n setElSeg(this.el, this.props.seg)\n }\n }\n}\n","import { createElement, Fragment } from '../preact.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { buildSegTimeText, EventContentArg, getSegAnchorAttrs } from '../component/event-rendering.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\nimport { EventContainer } from './EventContainer.js'\nimport { Seg } from '../component/DateComponent.js'\nimport { ElRef } from '../content-inject/ContentInjector.js'\n\nexport interface StandardEventProps {\n elRef?: ElRef\n elClasses?: string[]\n seg: Seg\n isDragging: boolean // rename to isMirrorDragging? make optional?\n isResizing: boolean // rename to isMirrorResizing? make optional?\n isDateSelecting: boolean // rename to isMirrorDateSelecting? make optional?\n isSelected: boolean\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n disableDragging?: boolean // defaults false\n disableResizing?: boolean // defaults false\n defaultTimeFormat: DateFormatter\n defaultDisplayEventTime?: boolean // default true\n defaultDisplayEventEnd?: boolean // default true\n}\n\n// should not be a purecomponent\nexport class StandardEvent extends BaseComponent<StandardEventProps> {\n render() {\n let { props, context } = this\n let { options } = context\n let { seg } = props\n let { ui } = seg.eventRange\n let timeFormat = options.eventTimeFormat || props.defaultTimeFormat\n let timeText = buildSegTimeText(\n seg,\n timeFormat,\n context,\n props.defaultDisplayEventTime,\n props.defaultDisplayEventEnd,\n )\n\n return (\n <EventContainer\n {...props /* includes elRef */}\n elTag=\"a\"\n elStyle={{\n borderColor: ui.borderColor,\n backgroundColor: ui.backgroundColor,\n }}\n elAttrs={getSegAnchorAttrs(seg, context)}\n defaultGenerator={renderInnerContent}\n timeText={timeText}\n >\n {(InnerContent, eventContentArg) => (\n <Fragment>\n <InnerContent\n elTag=\"div\"\n elClasses={['fc-event-main']}\n elStyle={{ color: eventContentArg.textColor }}\n />\n {Boolean(eventContentArg.isStartResizable) && (\n <div className=\"fc-event-resizer fc-event-resizer-start\" />\n )}\n {Boolean(eventContentArg.isEndResizable) && (\n <div className=\"fc-event-resizer fc-event-resizer-end\" />\n )}\n </Fragment>\n )}\n </EventContainer>\n )\n }\n}\n\nfunction renderInnerContent(innerProps: EventContentArg) {\n return (\n <div className=\"fc-event-main-frame\">\n {innerProps.timeText && (\n <div className=\"fc-event-time\">{innerProps.timeText}</div>\n )}\n <div className=\"fc-event-title-container\">\n <div className=\"fc-event-title fc-sticky\">\n {innerProps.event.title || <Fragment> </Fragment>}\n </div>\n </div>\n </div>\n )\n}\n","import { MountArg } from './render-hook.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { ViewContext, ViewContextType } from '../ViewContext.js'\nimport { createElement } from '../preact.js'\nimport { ViewApi } from '../api/ViewApi.js'\nimport { ElProps } from '../content-inject/ContentInjector.js'\nimport { InnerContainerFunc, ContentContainer } from '../content-inject/ContentContainer.js'\n\nexport interface NowIndicatorContainerProps extends Partial<ElProps> {\n isAxis: boolean\n date: DateMarker\n children?: InnerContainerFunc<NowIndicatorContentArg>\n}\n\nexport interface NowIndicatorContentArg {\n isAxis: boolean\n date: Date\n view: ViewApi\n}\n\nexport type NowIndicatorMountArg = MountArg<NowIndicatorContentArg>\n\nexport const NowIndicatorContainer = (props: NowIndicatorContainerProps) => (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { options } = context\n let renderProps: NowIndicatorContentArg = {\n isAxis: props.isAxis,\n date: context.dateEnv.toDate(props.date),\n view: context.viewApi,\n }\n\n return (\n <ContentContainer\n {...props /* includes children */}\n elTag={props.elTag || 'div'}\n renderProps={renderProps}\n generatorName=\"nowIndicatorContent\"\n generator={options.nowIndicatorContent}\n classNameGenerator={options.nowIndicatorClassNames}\n didMount={options.nowIndicatorDidMount}\n willUnmount={options.nowIndicatorWillUnmount}\n />\n )\n }}\n </ViewContextType.Consumer>\n)\n","import { ComponentChild, createElement } from '../preact.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { getDateMeta, DateMeta, getDayClassNames } from '../component/date-rendering.js'\nimport { createFormatter } from '../datelib/formatting.js'\nimport { formatDayString } from '../datelib/formatting-utils.js'\nimport { MountArg } from './render-hook.js'\nimport { ViewApi } from '../api/ViewApi.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { memoizeObjArg } from '../util/memoize.js'\nimport { Dictionary, ViewOptions } from '../options.js'\nimport { DateEnv } from '../datelib/env.js'\nimport { ContentContainer, InnerContainerFunc } from '../content-inject/ContentContainer.js'\nimport { ElProps, hasCustomRenderingHandler } from '../content-inject/ContentInjector.js'\n\nexport interface DayCellContentArg extends DateMeta {\n date: DateMarker // localized\n view: ViewApi\n dayNumberText: string\n [extraProp: string]: any // so can include a resource\n}\n\nexport type DayCellMountArg = MountArg<DayCellContentArg>\n\nexport interface DayCellContainerProps extends Partial<ElProps> {\n date: DateMarker\n dateProfile: DateProfile\n todayRange: DateRange\n showDayNumber?: boolean // defaults to false\n extraRenderProps?: Dictionary\n defaultGenerator?: (renderProps: DayCellContentArg) => ComponentChild\n children?: InnerContainerFunc<DayCellContentArg>\n}\n\nconst DAY_NUM_FORMAT = createFormatter({ day: 'numeric' })\n\nexport class DayCellContainer extends BaseComponent<DayCellContainerProps> {\n refineRenderProps = memoizeObjArg(refineRenderProps)\n\n render() {\n let { props, context } = this\n let { options } = context\n let renderProps = this.refineRenderProps({\n date: props.date,\n dateProfile: props.dateProfile,\n todayRange: props.todayRange,\n showDayNumber: props.showDayNumber,\n extraRenderProps: props.extraRenderProps,\n viewApi: context.viewApi,\n dateEnv: context.dateEnv,\n })\n\n return (\n <ContentContainer\n {...props /* includes children */}\n elClasses={[\n ...getDayClassNames(renderProps, context.theme),\n ...(props.elClasses || []),\n ]}\n elAttrs={{\n ...props.elAttrs,\n ...(renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) }),\n }}\n renderProps={renderProps}\n generatorName=\"dayCellContent\"\n generator={options.dayCellContent || props.defaultGenerator}\n classNameGenerator={\n // don't use custom classNames if disabled\n renderProps.isDisabled ? undefined : options.dayCellClassNames\n }\n didMount={options.dayCellDidMount}\n willUnmount={options.dayCellWillUnmount}\n />\n )\n }\n}\n\nexport function hasCustomDayCellContent(options: ViewOptions): boolean {\n return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options))\n}\n\n// Render Props\n\ninterface DayCellRenderPropsInput {\n date: DateMarker // generic\n dateProfile: DateProfile\n todayRange: DateRange\n dateEnv: DateEnv\n viewApi: ViewApi\n showDayNumber?: boolean // defaults to false\n extraRenderProps?: Dictionary // so can include a resource\n}\n\nfunction refineRenderProps(raw: DayCellRenderPropsInput): DayCellContentArg {\n let { date, dateEnv } = raw\n let dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile)\n\n return {\n date: dateEnv.toDate(date),\n view: raw.viewApi,\n ...dayMeta,\n dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '',\n ...raw.extraRenderProps,\n }\n}\n","import { createElement } from '../preact.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { Seg } from '../component/DateComponent.js'\nimport { EventContentArg } from '../component/event-rendering.js'\nimport { EventContainer } from './EventContainer.js'\n\nexport interface BgEventProps {\n seg: Seg\n isPast: boolean\n isFuture: boolean\n isToday: boolean\n}\n\nexport class BgEvent extends BaseComponent<BgEventProps> {\n render() {\n let { props } = this\n let { seg } = props\n\n return (\n <EventContainer\n elTag=\"div\"\n elClasses={['fc-bg-event']}\n elStyle={{ backgroundColor: seg.eventRange.ui.backgroundColor }}\n defaultGenerator={renderInnerContent}\n seg={seg}\n timeText=\"\"\n isDragging={false}\n isResizing={false}\n isDateSelecting={false}\n isSelected={false}\n isPast={props.isPast}\n isFuture={props.isFuture}\n isToday={props.isToday}\n disableDragging={true}\n disableResizing={true}\n />\n )\n }\n}\n\nfunction renderInnerContent(props: EventContentArg) {\n let { title } = props.event\n\n return title && (\n <div className=\"fc-event-title\">{props.event.title}</div>\n )\n}\n\nexport function renderFill(fillType: string) {\n return (\n <div className={`fc-${fillType}`} />\n )\n}\n","import { ViewContext, ViewContextType } from '../ViewContext.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { MountArg } from './render-hook.js'\nimport { createElement } from '../preact.js'\nimport { DateFormatter } from '../datelib/DateFormatter.js'\nimport { ElProps } from '../content-inject/ContentInjector.js'\nimport { ContentContainer, InnerContainerFunc } from '../content-inject/ContentContainer.js'\n\nexport interface WeekNumberContainerProps extends ElProps {\n date: DateMarker\n defaultFormat: DateFormatter\n children?: InnerContainerFunc<WeekNumberContentArg>\n}\n\nexport interface WeekNumberContentArg {\n num: number\n text: string\n date: Date\n}\n\nexport type WeekNumberMountArg = MountArg<WeekNumberContentArg>\n\nexport const WeekNumberContainer = (props: WeekNumberContainerProps) => (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { dateEnv, options } = context\n let { date } = props\n let format = options.weekNumberFormat || props.defaultFormat\n let num = dateEnv.computeWeekNumber(date) // TODO: somehow use for formatting as well?\n let text = dateEnv.format(date, format)\n let renderProps: WeekNumberContentArg = { num, text, date }\n\n return (\n <ContentContainer // why isn't WeekNumberContentArg being auto-detected?\n {...props /* includes children */}\n renderProps={renderProps}\n generatorName=\"weekNumberContent\"\n generator={options.weekNumberContent || renderInner}\n classNameGenerator={options.weekNumberClassNames}\n didMount={options.weekNumberDidMount}\n willUnmount={options.weekNumberWillUnmount}\n />\n )\n }}\n </ViewContextType.Consumer>\n)\n\nfunction renderInner(innerProps) {\n return innerProps.text\n}\n","import { Dictionary } from '../options.js'\nimport { computeClippedClientRect } from '../util/dom-geom.js'\nimport { applyStyle, elementClosest, getEventTargetViaRoot, getUniqueDomId } from '../util/dom-manip.js'\nimport { createElement, ComponentChildren, Ref, createPortal } from '../preact.js'\nimport { BaseComponent, setRef } from '../vdom-util.js'\n\nexport interface PopoverProps {\n elRef?: Ref<HTMLElement>\n id: string\n title: string\n extraClassNames?: string[]\n extraAttrs?: Dictionary\n parentEl: HTMLElement\n alignmentEl: HTMLElement\n alignGridTop?: boolean\n children?: ComponentChildren\n onClose?: () => void\n}\n\nconst PADDING_FROM_VIEWPORT = 10\n\nexport class Popover extends BaseComponent<PopoverProps> {\n private rootEl: HTMLElement\n state = {\n titleId: getUniqueDomId(),\n }\n\n render(): any {\n let { theme, options } = this.context\n let { props, state } = this\n let classNames = [\n 'fc-popover',\n theme.getClass('popover'),\n ].concat(\n props.extraClassNames || [],\n )\n\n return createPortal(\n <div\n {...props.extraAttrs}\n id={props.id}\n className={classNames.join(' ')}\n aria-labelledby={state.titleId}\n ref={this.handleRootEl}\n >\n <div className={'fc-popover-header ' + theme.getClass('popoverHeader')}>\n <span className=\"fc-popover-title\" id={state.titleId}>\n {props.title}\n </span>\n <span\n className={'fc-popover-close ' + theme.getIconClass('close')}\n title={options.closeHint}\n onClick={this.handleCloseClick}\n />\n </div>\n <div className={'fc-popover-body ' + theme.getClass('popoverContent')}>\n {props.children}\n </div>\n </div>,\n props.parentEl,\n )\n }\n\n componentDidMount() {\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n document.addEventListener('keydown', this.handleDocumentKeyDown)\n this.updateSize()\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n document.removeEventListener('keydown', this.handleDocumentKeyDown)\n }\n\n handleRootEl = (el: HTMLElement | null) => {\n this.rootEl = el\n\n if (this.props.elRef) {\n setRef(this.props.elRef, el)\n }\n }\n\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n handleDocumentMouseDown = (ev) => {\n // only hide the popover if the click happened outside the popover\n const target = getEventTargetViaRoot(ev) as HTMLElement\n if (!this.rootEl.contains(target)) {\n this.handleCloseClick()\n }\n }\n\n handleDocumentKeyDown = (ev) => {\n if (ev.key === 'Escape') {\n this.handleCloseClick()\n }\n }\n\n handleCloseClick = () => {\n let { onClose } = this.props\n if (onClose) {\n onClose()\n }\n }\n\n private updateSize() {\n let { isRtl } = this.context\n let { alignmentEl, alignGridTop } = this.props\n let { rootEl } = this\n\n let alignmentRect = computeClippedClientRect(alignmentEl)\n if (alignmentRect) {\n let popoverDims = rootEl.getBoundingClientRect()\n\n // position relative to viewport\n let popoverTop = alignGridTop\n ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top\n : alignmentRect.top\n let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left\n\n // constrain\n popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT)\n popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width)\n popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT)\n\n let origin = rootEl.offsetParent.getBoundingClientRect()\n applyStyle(rootEl, {\n top: popoverTop - origin.top,\n left: popoverLeft - origin.left,\n })\n }\n }\n}\n","import { DateComponent } from '../component/DateComponent.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { DateMarker } from '../datelib/marker.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { Hit } from '../interactions/hit.js'\nimport { Dictionary } from '../options.js'\nimport { createElement, ComponentChildren } from '../preact.js'\nimport { DayCellContainer, hasCustomDayCellContent } from './DayCellContainer.js'\nimport { Popover } from './Popover.js'\n\nexport interface MorePopoverProps {\n id: string\n startDate: DateMarker\n endDate: DateMarker\n dateProfile: DateProfile\n parentEl: HTMLElement\n alignmentEl: HTMLElement\n alignGridTop?: boolean\n todayRange: DateRange\n extraDateSpan: Dictionary\n children: ComponentChildren\n onClose?: () => void\n}\n\nexport class MorePopover extends DateComponent<MorePopoverProps> {\n rootEl: HTMLElement\n\n render() {\n let { options, dateEnv } = this.context\n let { props } = this\n let { startDate, todayRange, dateProfile } = props\n let title = dateEnv.format(startDate, options.dayPopoverFormat)\n\n return (\n <DayCellContainer\n elRef={this.handleRootEl}\n date={startDate}\n dateProfile={dateProfile}\n todayRange={todayRange}\n >\n {(InnerContent, renderProps, elAttrs) => (\n <Popover\n elRef={elAttrs.ref}\n id={props.id}\n title={title}\n extraClassNames={\n ['fc-more-popover'].concat(\n (elAttrs.className as (string | undefined)) || [],\n )\n }\n extraAttrs={elAttrs /* TODO: make these time-based when not whole-day? */}\n parentEl={props.parentEl}\n alignmentEl={props.alignmentEl}\n alignGridTop={props.alignGridTop}\n onClose={props.onClose}\n >\n {hasCustomDayCellContent(options) && (\n <InnerContent\n elTag=\"div\"\n elClasses={['fc-more-popover-misc']}\n />\n )}\n {props.children}\n </Popover>\n )}\n </DayCellContainer>\n )\n }\n\n handleRootEl = (rootEl: HTMLElement | null) => {\n this.rootEl = rootEl\n\n if (rootEl) {\n this.context.registerInteractiveComponent(this, {\n el: rootEl,\n useEventCenter: false,\n })\n } else {\n this.context.unregisterInteractiveComponent(this)\n }\n }\n\n queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit {\n let { rootEl, props } = this\n\n if (\n positionLeft >= 0 && positionLeft < elWidth &&\n positionTop >= 0 && positionTop < elHeight\n ) {\n return {\n dateProfile: props.dateProfile,\n dateSpan: {\n allDay: true,\n range: {\n start: props.startDate,\n end: props.endDate,\n },\n ...props.extraDateSpan,\n },\n dayEl: rootEl,\n rect: {\n left: 0,\n top: 0,\n right: elWidth,\n bottom: elHeight,\n },\n layer: 1, // important when comparing with hits from other components\n }\n }\n\n return null\n }\n}\n","import { EventImpl } from '../api/EventImpl.js'\nimport { Seg } from '../component/DateComponent.js'\nimport { DateRange } from '../datelib/date-range.js'\nimport { addDays, DateMarker } from '../datelib/marker.js'\nimport { DateProfile } from '../DateProfileGenerator.js'\nimport { Dictionary } from '../options.js'\nimport { elementClosest, getUniqueDomId } from '../util/dom-manip.js'\nimport { formatWithOrdinals } from '../util/misc.js'\nimport { createElement, createRef, Fragment, ComponentChild, RefObject } from '../preact.js'\nimport { BaseComponent } from '../vdom-util.js'\nimport { ViewApi } from '../api/ViewApi.js'\nimport { ViewContext, ViewContextType } from '../ViewContext.js'\nimport { MorePopover } from './MorePopover.js'\nimport { CustomContentGenerator, MountArg } from './render-hook.js'\nimport { ContentContainer, InnerContainerFunc } from '../content-inject/ContentContainer.js'\nimport { ElProps } from '../content-inject/ContentInjector.js'\nimport { createAriaClickAttrs } from '../util/dom-event.js'\n\nexport interface MoreLinkContainerProps extends Partial<ElProps> {\n dateProfile: DateProfile\n todayRange: DateRange\n allDayDate: DateMarker | null\n moreCnt: number // can't always derive from hiddenSegs. some hiddenSegs might be due to lack of dimensions\n allSegs: Seg[]\n hiddenSegs: Seg[]\n extraDateSpan?: Dictionary\n alignmentElRef?: RefObject<HTMLElement> // will use internal <a> if unspecified\n alignGridTop?: boolean // for popover\n popoverContent: () => ComponentChild\n defaultGenerator?: CustomContentGenerator<MoreLinkContentArg>\n children?: InnerContainerFunc<MoreLinkContentArg>\n}\n\nexport interface MoreLinkContentArg {\n num: number\n text: string\n shortText: string\n view: ViewApi\n}\n\nexport type MoreLinkMountArg = MountArg<MoreLinkContentArg>\n\ninterface MoreLinkContainerState {\n isPopoverOpen: boolean\n popoverId: string\n}\n\nexport class MoreLinkContainer extends BaseComponent<MoreLinkContainerProps, MoreLinkContainerState> {\n private linkElRef = createRef<HTMLElement>()\n private parentEl: HTMLElement\n\n state = {\n isPopoverOpen: false,\n popoverId: getUniqueDomId(),\n }\n\n render() {\n let { props, state } = this\n return (\n <ViewContextType.Consumer>\n {(context: ViewContext) => {\n let { viewApi, options, calendarApi } = context\n let { moreLinkText } = options\n let { moreCnt } = props\n let range = computeRange(props)\n\n let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals\n ? moreLinkText.call(calendarApi, moreCnt)\n : `+${moreCnt} ${moreLinkText}`\n let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text)\n\n let renderProps: MoreLinkContentArg = {\n num: moreCnt,\n shortText: `+${moreCnt}`, // TODO: offer hook or i18n?\n text,\n view: viewApi,\n }\n\n return (\n <Fragment>\n {Boolean(props.moreCnt) && (\n <ContentContainer\n elTag={props.elTag || 'a'}\n elRef={this.linkElRef}\n elClasses={[\n ...(props.elClasses || []),\n 'fc-more-link',\n ]}\n elAttrs={{\n ...props.elAttrs,\n ...createAriaClickAttrs(this.handleClick),\n title: hint,\n 'aria-expanded': state.isPopoverOpen,\n 'aria-controls': state.isPopoverOpen ? state.popoverId : '',\n }}\n renderProps={renderProps}\n generatorName=\"moreLinkContent\"\n generator={options.moreLinkContent || props.defaultGenerator || renderMoreLinkInner}\n classNameGenerator={options.moreLinkClassNames}\n didMount={options.moreLinkDidMount}\n willUnmount={options.moreLinkWillUnmount}\n >{props.children}</ContentContainer>\n )}\n {state.isPopoverOpen && (\n <MorePopover\n id={state.popoverId}\n startDate={range.start}\n endDate={range.end}\n dateProfile={props.dateProfile}\n todayRange={props.todayRange}\n extraDateSpan={props.extraDateSpan}\n parentEl={this.parentEl}\n alignmentEl={\n props.alignmentElRef ?\n props.alignmentElRef.current :\n this.linkElRef.current\n }\n alignGridTop={props.alignGridTop}\n onClose={this.handlePopoverClose}\n >\n {props.popoverContent()}\n </MorePopover>\n )}\n </Fragment>\n )\n }}\n </ViewContextType.Consumer>\n )\n }\n\n componentDidMount() {\n this.updateParentEl()\n }\n\n componentDidUpdate() {\n this.updateParentEl()\n }\n\n updateParentEl() {\n if (this.linkElRef.current) {\n this.parentEl = elementClosest(this.linkElRef.current, '.fc-view-harness')\n }\n }\n\n handleClick = (ev: MouseEvent) => {\n let { props, context } = this\n let { moreLinkClick } = context.options\n let date = computeRange(props).start\n\n function buildPublicSeg(seg: Seg) {\n let { def, instance, range } = seg.eventRange\n return {\n event: new EventImpl(context, def, instance),\n start: context.dateEnv.toDate(range.start),\n end: context.dateEnv.toDate(range.end),\n isStart: seg.isStart,\n isEnd: seg.isEnd,\n }\n }\n\n if (typeof moreLinkClick === 'function') {\n moreLinkClick = moreLinkClick({\n date,\n allDay: Boolean(props.allDayDate),\n allSegs: props.allSegs.map(buildPublicSeg),\n hiddenSegs: props.hiddenSegs.map(buildPublicSeg),\n jsEvent: ev,\n view: context.viewApi,\n }) as string | undefined\n }\n\n if (!moreLinkClick || moreLinkClick === 'popover') {\n this.setState({ isPopoverOpen: true })\n } else if (typeof moreLinkClick === 'string') { // a view name\n context.calendarApi.zoomTo(date, moreLinkClick)\n }\n }\n\n handlePopoverClose = () => {\n this.setState({ isPopoverOpen: false })\n }\n}\n\nfunction renderMoreLinkInner(props: MoreLinkContentArg) {\n return props.text\n}\n\nfunction computeRange(props: MoreLinkContainerProps): DateRange {\n if (props.allDayDate) {\n return {\n start: props.allDayDate,\n end: addDays(props.allDayDate, 1),\n }\n }\n\n let { hiddenSegs } = props\n return {\n start: computeEarliestSegStart(hiddenSegs),\n end: computeLatestSegEnd(hiddenSegs),\n }\n}\n\nexport function computeEarliestSegStart(segs: Seg[]): DateMarker {\n return segs.reduce(pickEarliestStart).eventRange.range.start\n}\n\nfunction pickEarliestStart(seg0: Seg, seg1: Seg): Seg {\n return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1\n}\n\nfunction computeLatestSegEnd(segs: Seg[]): DateMarker {\n return segs.reduce(pickLatestEnd).eventRange.range.end\n}\n\nfunction pickLatestEnd(seg0: Seg, seg1: Seg): Seg {\n return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1\n}\n","\nexport class Store<Value> {\n private handlers: ((value: Value) => void)[] = []\n private currentValue: Value | undefined\n\n set(value: Value): void {\n this.currentValue = value\n\n for (let handler of this.handlers) {\n handler(value)\n }\n }\n\n subscribe(handler: (value: Value) => void) {\n this.handlers.push(handler)\n\n if (this.currentValue !== undefined) {\n handler(this.currentValue)\n }\n }\n}\n","import { Store } from './Store.js'\nimport { ElProps } from './ContentInjector.js'\n\nexport type CustomRenderingHandler<RenderProps> = (customRender: CustomRendering<RenderProps>) => void\n\nexport interface CustomRendering<RenderProps> extends ElProps {\n id: string // TODO: need this? Map can be responsible for storing key?\n isActive: boolean\n containerEl: HTMLElement\n reportNewContainerEl: (el: HTMLElement | null) => void\n generatorName: string\n generatorMeta: any // could be as simple as boolean\n renderProps: RenderProps\n}\n\n/*\nSubscribers will get a LIST of CustomRenderings\n*/\nexport class CustomRenderingStore<RenderProps> extends Store<Map<string, CustomRendering<RenderProps>>> {\n private map = new Map<string, CustomRendering<RenderProps>>()\n // for consistent order\n\n handle(customRendering: CustomRendering<RenderProps>): void {\n const { map } = this\n let updated = false\n\n if (customRendering.isActive) {\n map.set(customRendering.id, customRendering as CustomRendering<RenderProps>)\n updated = true\n } else if (map.has(customRendering.id)) {\n map.delete(customRendering.id)\n updated = true\n }\n\n if (updated) {\n this.set(map)\n }\n }\n}\n"],"names":["guid","renderInner","renderInnerContent"],"mappings":"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"}
|