primevue 2.4.2 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/accordion/Accordion.vue +8 -1
  2. package/accordion/accordion.common.js +9 -3
  3. package/accordion/accordion.umd.js +9 -3
  4. package/accordion/accordion.umd.min.js +1 -1
  5. package/accordiontab/AccordionTab.vue +2 -2
  6. package/accordiontab/accordiontab.common.js +9 -4
  7. package/accordiontab/accordiontab.umd.js +9 -4
  8. package/accordiontab/accordiontab.umd.min.js +1 -1
  9. package/autocomplete/AutoComplete.d.ts +1 -0
  10. package/autocomplete/AutoComplete.vue +8 -0
  11. package/autocomplete/autocomplete.common.js +21 -3
  12. package/autocomplete/autocomplete.umd.js +21 -3
  13. package/autocomplete/autocomplete.umd.min.js +1 -1
  14. package/avatar/avatar.common.js +1 -1
  15. package/avatar/avatar.umd.js +1 -1
  16. package/avatargroup/avatargroup.common.js +1 -1
  17. package/avatargroup/avatargroup.umd.js +1 -1
  18. package/badge/badge.common.js +1 -1
  19. package/badge/badge.umd.js +1 -1
  20. package/badgedirective/badgedirective.common.js +5 -0
  21. package/badgedirective/badgedirective.umd.js +5 -0
  22. package/badgedirective/badgedirective.umd.min.js +1 -1
  23. package/blockui/BlockUI.vue +6 -16
  24. package/blockui/blockui.common.js +16 -16
  25. package/blockui/blockui.umd.js +16 -16
  26. package/blockui/blockui.umd.min.js +1 -1
  27. package/breadcrumb/Breadcrumb.d.ts +1 -0
  28. package/breadcrumb/Breadcrumb.vue +11 -3
  29. package/breadcrumb/BreadcrumbItem.vue +30 -11
  30. package/breadcrumb/breadcrumb.common.js +45 -17
  31. package/breadcrumb/breadcrumb.umd.js +45 -17
  32. package/breadcrumb/breadcrumb.umd.min.js +1 -1
  33. package/breadcrumb/breadcrumbitem.common.js +34 -10
  34. package/breadcrumb/breadcrumbitem.umd.js +34 -10
  35. package/breadcrumb/breadcrumbitem.umd.min.js +1 -1
  36. package/button/button.common.js +6 -1
  37. package/button/button.umd.js +6 -1
  38. package/button/button.umd.min.js +1 -1
  39. package/calendar/Calendar.d.ts +5 -0
  40. package/calendar/Calendar.vue +321 -69
  41. package/calendar/calendar.common.js +340 -42
  42. package/calendar/calendar.umd.js +340 -42
  43. package/calendar/calendar.umd.min.js +1 -1
  44. package/card/card.common.js +1 -1
  45. package/card/card.umd.js +1 -1
  46. package/carousel/Carousel.vue +2 -2
  47. package/carousel/carousel.common.js +8 -3
  48. package/carousel/carousel.umd.js +8 -3
  49. package/carousel/carousel.umd.min.js +1 -1
  50. package/cascadeselect/CascadeSelect.d.ts +6 -4
  51. package/cascadeselect/CascadeSelect.vue +3 -1
  52. package/cascadeselect/cascadeselect.common.js +15 -4
  53. package/cascadeselect/cascadeselect.umd.js +15 -4
  54. package/cascadeselect/cascadeselect.umd.min.js +1 -1
  55. package/cascadeselect/cascadeselectsub.common.js +10 -1
  56. package/cascadeselect/cascadeselectsub.umd.js +10 -1
  57. package/cascadeselect/cascadeselectsub.umd.min.js +1 -1
  58. package/cascadeselect/demo.html +3 -4
  59. package/chart/Chart.vue +22 -13
  60. package/chart/chart.common.1.js +12825 -0
  61. package/chart/chart.common.js +1040 -37026
  62. package/chart/chart.umd.1.js +12825 -0
  63. package/chart/chart.umd.js +1040 -37026
  64. package/chart/chart.umd.min.1.js +7 -0
  65. package/chart/chart.umd.min.js +1 -278
  66. package/checkbox/Checkbox.css +1 -0
  67. package/checkbox/Checkbox.d.ts +2 -0
  68. package/checkbox/Checkbox.vue +11 -3
  69. package/checkbox/checkbox.common.js +17 -5
  70. package/checkbox/checkbox.umd.js +17 -5
  71. package/checkbox/checkbox.umd.min.js +1 -1
  72. package/chip/chip.common.js +1 -1
  73. package/chip/chip.umd.js +1 -1
  74. package/chips/chips.common.js +1 -1
  75. package/chips/chips.umd.js +1 -1
  76. package/colorpicker/colorpicker.common.js +6 -1
  77. package/colorpicker/colorpicker.umd.js +6 -1
  78. package/colorpicker/colorpicker.umd.min.js +1 -1
  79. package/columngroup/columngroup.common.js +1 -1
  80. package/columngroup/columngroup.umd.js +1 -1
  81. package/common/Common.css +13 -4
  82. package/config/primevue.common.js +4 -0
  83. package/config/primevue.umd.js +4 -0
  84. package/config/primevue.umd.min.js +1 -1
  85. package/{confirmationservice → confirmationeventbus}/ConfirmationEventBus.js +3 -3
  86. package/confirmationeventbus/confirmationeventbus.common.js +1777 -0
  87. package/confirmationeventbus/confirmationeventbus.umd.js +1787 -0
  88. package/confirmationeventbus/confirmationeventbus.umd.min.js +1 -0
  89. package/confirmationeventbus/demo.html +8 -0
  90. package/confirmationeventbus/index.d.ts +1 -0
  91. package/confirmationeventbus/index.js +2 -0
  92. package/confirmationservice/ConfirmationService.js +1 -1
  93. package/confirmationservice/confirmationservice.common.js +1609 -6
  94. package/confirmationservice/confirmationservice.umd.js +1609 -6
  95. package/confirmationservice/confirmationservice.umd.min.js +1 -1
  96. package/confirmdialog/ConfirmDialog.vue +9 -3
  97. package/confirmdialog/confirmdialog.common.js +437 -38
  98. package/confirmdialog/confirmdialog.umd.js +437 -38
  99. package/confirmdialog/confirmdialog.umd.min.js +1 -1
  100. package/confirmpopup/ConfirmPopup.d.ts +4 -1
  101. package/confirmpopup/ConfirmPopup.vue +9 -6
  102. package/confirmpopup/confirmpopup.common.js +513 -13
  103. package/confirmpopup/confirmpopup.umd.js +513 -13
  104. package/confirmpopup/confirmpopup.umd.min.js +1 -1
  105. package/contextmenu/ContextMenu.d.ts +1 -0
  106. package/contextmenu/ContextMenu.vue +5 -1
  107. package/contextmenu/ContextMenuSub.vue +33 -13
  108. package/contextmenu/contextmenu.common.js +46 -14
  109. package/contextmenu/contextmenu.umd.js +46 -14
  110. package/contextmenu/contextmenu.umd.min.js +1 -1
  111. package/contextmenu/contextmenusub.common.js +36 -8
  112. package/contextmenu/contextmenusub.umd.js +36 -8
  113. package/contextmenu/contextmenusub.umd.min.js +1 -1
  114. package/contextmenu/demo.html +4 -3
  115. package/datatable/BodyCell.vue +9 -5
  116. package/datatable/DataTable.d.ts +10 -9
  117. package/datatable/DataTable.vue +27 -19
  118. package/datatable/TableBody.vue +18 -5
  119. package/datatable/bodycell.common.js +21 -9
  120. package/datatable/bodycell.umd.js +21 -9
  121. package/datatable/bodycell.umd.min.js +1 -1
  122. package/datatable/datatable.common.js +1993 -89
  123. package/datatable/datatable.umd.js +1993 -89
  124. package/datatable/datatable.umd.min.js +1 -1
  125. package/datatable/headercheckbox.common.js +1 -1
  126. package/datatable/headercheckbox.umd.js +1 -1
  127. package/datatable/rowcheckbox.common.js +1 -1
  128. package/datatable/rowcheckbox.umd.js +1 -1
  129. package/datatable/rowradiobutton.common.js +1 -1
  130. package/datatable/rowradiobutton.umd.js +1 -1
  131. package/datatable/scrollableview.common.js +7 -2
  132. package/datatable/scrollableview.umd.js +7 -2
  133. package/datatable/scrollableview.umd.min.js +1 -1
  134. package/datatable/tablebody.common.js +44 -15
  135. package/datatable/tablebody.umd.js +44 -15
  136. package/datatable/tablebody.umd.min.js +1 -1
  137. package/datatable/tablefooter.common.js +1 -1
  138. package/datatable/tablefooter.umd.js +1 -1
  139. package/datatable/tableheader.common.js +7 -2
  140. package/datatable/tableheader.umd.js +7 -2
  141. package/datatable/tableheader.umd.min.js +1 -1
  142. package/datatable/tableloadingbody.common.js +1 -1
  143. package/datatable/tableloadingbody.umd.js +1 -1
  144. package/dataview/DataView.d.ts +2 -2
  145. package/dataview/DataView.vue +10 -10
  146. package/dataview/dataview.common.js +1937 -65
  147. package/dataview/dataview.umd.js +1937 -65
  148. package/dataview/dataview.umd.min.js +1 -1
  149. package/dataviewlayoutoptions/dataviewlayoutoptions.common.js +1 -1
  150. package/dataviewlayoutoptions/dataviewlayoutoptions.umd.js +1 -1
  151. package/deferredcontent/DeferredContent.vue +1 -7
  152. package/deferredcontent/deferredcontent.common.js +2 -2
  153. package/deferredcontent/deferredcontent.umd.js +2 -2
  154. package/dialog/Dialog.vue +35 -21
  155. package/dialog/dialog.common.js +42 -18
  156. package/dialog/dialog.umd.js +42 -18
  157. package/dialog/dialog.umd.min.js +1 -1
  158. package/divider/divider.common.js +1 -1
  159. package/divider/divider.umd.js +1 -1
  160. package/dock/Dock.d.ts +15 -0
  161. package/dock/Dock.vue +173 -0
  162. package/dock/DockSub.vue +132 -0
  163. package/dock/demo.html +17 -0
  164. package/dock/dock.common.js +917 -0
  165. package/dock/dock.umd.js +927 -0
  166. package/dock/dock.umd.min.js +1 -0
  167. package/dock/docksub.common.js +428 -0
  168. package/dock/docksub.umd.js +438 -0
  169. package/dock/docksub.umd.min.js +1 -0
  170. package/dock/index.d.ts +1 -0
  171. package/dock/index.js +2 -0
  172. package/dock/plugin.js +4 -0
  173. package/dropdown/Dropdown.d.ts +5 -3
  174. package/dropdown/Dropdown.vue +31 -5
  175. package/dropdown/dropdown.common.js +44 -6
  176. package/dropdown/dropdown.umd.js +44 -6
  177. package/dropdown/dropdown.umd.min.js +1 -1
  178. package/editor/editor.common.js +1 -1
  179. package/editor/editor.umd.js +1 -1
  180. package/fieldset/fieldset.common.js +6 -1
  181. package/fieldset/fieldset.umd.js +6 -1
  182. package/fieldset/fieldset.umd.min.js +1 -1
  183. package/fileupload/FileUpload.d.ts +2 -0
  184. package/fileupload/FileUpload.vue +12 -7
  185. package/fileupload/fileupload.common.js +42 -23
  186. package/fileupload/fileupload.umd.js +42 -23
  187. package/fileupload/fileupload.umd.min.js +1 -1
  188. package/fullcalendar/fullcalendar.common.js +1573 -777
  189. package/fullcalendar/fullcalendar.umd.js +1573 -777
  190. package/fullcalendar/fullcalendar.umd.min.js +5 -5
  191. package/galleria/Galleria.vue +3 -8
  192. package/galleria/GalleriaContent.vue +9 -0
  193. package/galleria/galleria.common.js +31 -13
  194. package/galleria/galleria.umd.js +31 -13
  195. package/galleria/galleria.umd.min.js +1 -1
  196. package/galleria/galleriacontent.common.js +18 -4
  197. package/galleria/galleriacontent.umd.js +18 -4
  198. package/galleria/galleriacontent.umd.min.js +1 -1
  199. package/galleria/galleriaitem.common.js +6 -1
  200. package/galleria/galleriaitem.umd.js +6 -1
  201. package/galleria/galleriaitem.umd.min.js +1 -1
  202. package/galleria/galleriathumbnails.common.js +6 -1
  203. package/galleria/galleriathumbnails.umd.js +6 -1
  204. package/galleria/galleriathumbnails.umd.min.js +1 -1
  205. package/imagepreview/ImagePreview.d.ts +10 -0
  206. package/imagepreview/ImagePreview.vue +205 -0
  207. package/imagepreview/demo.html +17 -0
  208. package/imagepreview/imagepreview.common.js +4083 -0
  209. package/imagepreview/imagepreview.umd.js +4093 -0
  210. package/imagepreview/imagepreview.umd.min.js +1 -0
  211. package/imagepreview/index.d.ts +1 -0
  212. package/imagepreview/index.js +2 -0
  213. package/imagepreview/plugin.js +4 -0
  214. package/inlinemessage/inlinemessage.common.js +1 -1
  215. package/inlinemessage/inlinemessage.umd.js +1 -1
  216. package/inplace/inplace.common.js +7 -2
  217. package/inplace/inplace.umd.js +7 -2
  218. package/inplace/inplace.umd.min.js +1 -1
  219. package/inputmask/InputMask.vue +7 -5
  220. package/inputmask/inputmask.common.js +19 -6
  221. package/inputmask/inputmask.umd.js +19 -6
  222. package/inputmask/inputmask.umd.min.js +1 -1
  223. package/inputnumber/InputNumber.vue +183 -62
  224. package/inputnumber/inputnumber.common.js +228 -104
  225. package/inputnumber/inputnumber.umd.js +228 -104
  226. package/inputnumber/inputnumber.umd.min.js +1 -1
  227. package/inputswitch/InputSwitch.d.ts +2 -0
  228. package/inputswitch/InputSwitch.vue +15 -3
  229. package/inputswitch/inputswitch.common.js +17 -5
  230. package/inputswitch/inputswitch.umd.js +17 -5
  231. package/inputswitch/inputswitch.umd.min.js +1 -1
  232. package/inputtext/inputtext.common.js +5 -1
  233. package/inputtext/inputtext.umd.js +5 -1
  234. package/inputtext/inputtext.umd.min.js +1 -1
  235. package/knob/knob.common.js +1 -1
  236. package/knob/knob.umd.js +1 -1
  237. package/listbox/Listbox.d.ts +3 -3
  238. package/listbox/listbox.common.js +10 -1
  239. package/listbox/listbox.umd.js +10 -1
  240. package/listbox/listbox.umd.min.js +1 -1
  241. package/megamenu/MegaMenu.d.ts +6 -1
  242. package/megamenu/MegaMenu.vue +51 -22
  243. package/megamenu/megamenu.common.js +52 -10
  244. package/megamenu/megamenu.umd.js +52 -10
  245. package/megamenu/megamenu.umd.min.js +1 -1
  246. package/menu/Menu.d.ts +1 -0
  247. package/menu/Menu.vue +11 -4
  248. package/menu/Menuitem.vue +25 -11
  249. package/menu/menu.common.js +46 -17
  250. package/menu/menu.umd.js +46 -17
  251. package/menu/menu.umd.min.js +1 -1
  252. package/menu/menuitem.common.js +33 -11
  253. package/menu/menuitem.umd.js +33 -11
  254. package/menu/menuitem.umd.min.js +1 -1
  255. package/menubar/Menubar.d.ts +1 -0
  256. package/menubar/Menubar.vue +5 -1
  257. package/menubar/MenubarSub.vue +34 -14
  258. package/menubar/menubar.common.js +46 -14
  259. package/menubar/menubar.umd.js +46 -14
  260. package/menubar/menubar.umd.min.js +1 -1
  261. package/menubar/menubarsub.common.js +36 -8
  262. package/menubar/menubarsub.umd.js +36 -8
  263. package/menubar/menubarsub.umd.min.js +1 -1
  264. package/message/Message.d.ts +1 -0
  265. package/message/Message.vue +5 -1
  266. package/message/message.common.js +12 -3
  267. package/message/message.umd.js +12 -3
  268. package/message/message.umd.min.js +1 -1
  269. package/multiselect/MultiSelect.d.ts +4 -3
  270. package/multiselect/MultiSelect.vue +8 -1
  271. package/multiselect/multiselect.common.js +20 -5
  272. package/multiselect/multiselect.umd.js +20 -5
  273. package/multiselect/multiselect.umd.min.js +1 -1
  274. package/orderlist/OrderList.d.ts +2 -0
  275. package/orderlist/OrderList.vue +2 -0
  276. package/orderlist/orderlist.common.js +15 -4
  277. package/orderlist/orderlist.umd.js +15 -4
  278. package/orderlist/orderlist.umd.min.js +1 -1
  279. package/organizationchart/organizationchart.common.js +11 -2
  280. package/organizationchart/organizationchart.umd.js +11 -2
  281. package/organizationchart/organizationchart.umd.min.js +1 -1
  282. package/organizationchart/organizationchartnode.common.js +6 -1
  283. package/organizationchart/organizationchartnode.umd.js +6 -1
  284. package/organizationchart/organizationchartnode.umd.min.js +1 -1
  285. package/overlaypanel/overlaypanel.common.js +6 -1
  286. package/overlaypanel/overlaypanel.umd.js +6 -1
  287. package/overlaypanel/overlaypanel.umd.min.js +1 -1
  288. package/package.json +5 -1
  289. package/paginator/CurrentPageReport.vue +6 -2
  290. package/paginator/JumpToPageDropdown.vue +33 -0
  291. package/paginator/JumpToPageInput.vue +25 -0
  292. package/paginator/Paginator.d.ts +2 -2
  293. package/paginator/Paginator.vue +24 -11
  294. package/paginator/RowsPerPageDropdown.vue +3 -2
  295. package/paginator/currentpagereport.common.js +7 -3
  296. package/paginator/currentpagereport.umd.js +7 -3
  297. package/paginator/currentpagereport.umd.min.js +1 -1
  298. package/paginator/demo.html +3 -3
  299. package/paginator/firstpagelink.common.js +6 -1
  300. package/paginator/firstpagelink.umd.js +6 -1
  301. package/paginator/firstpagelink.umd.min.js +1 -1
  302. package/paginator/jumptopagedropdown.common.js +6476 -0
  303. package/paginator/jumptopagedropdown.umd.js +6486 -0
  304. package/paginator/jumptopagedropdown.umd.min.js +1 -0
  305. package/paginator/jumptopageinput.common.js +7421 -0
  306. package/paginator/jumptopageinput.umd.js +7431 -0
  307. package/paginator/jumptopageinput.umd.min.js +1 -0
  308. package/paginator/lastpagelink.common.js +6 -1
  309. package/paginator/lastpagelink.umd.js +6 -1
  310. package/paginator/lastpagelink.umd.min.js +1 -1
  311. package/paginator/nextpagelink.common.js +6 -1
  312. package/paginator/nextpagelink.umd.js +6 -1
  313. package/paginator/nextpagelink.umd.min.js +1 -1
  314. package/paginator/pagelinks.common.js +6 -1
  315. package/paginator/pagelinks.umd.js +6 -1
  316. package/paginator/pagelinks.umd.min.js +1 -1
  317. package/paginator/paginator.common.js +2264 -125
  318. package/paginator/paginator.umd.js +2264 -125
  319. package/paginator/paginator.umd.min.js +1 -1
  320. package/paginator/prevpagelink.common.js +6 -1
  321. package/paginator/prevpagelink.umd.js +6 -1
  322. package/paginator/prevpagelink.umd.min.js +1 -1
  323. package/paginator/rowsperpagedropdown.common.js +52 -13
  324. package/paginator/rowsperpagedropdown.umd.js +52 -13
  325. package/paginator/rowsperpagedropdown.umd.min.js +1 -1
  326. package/panel/Panel.d.ts +1 -0
  327. package/panel/Panel.vue +1 -1
  328. package/panel/panel.common.js +7 -2
  329. package/panel/panel.umd.js +7 -2
  330. package/panel/panel.umd.min.js +1 -1
  331. package/panelmenu/PanelMenu.d.ts +1 -0
  332. package/panelmenu/PanelMenu.vue +32 -6
  333. package/panelmenu/PanelMenuSub.vue +32 -13
  334. package/panelmenu/panelmenu.common.js +69 -16
  335. package/panelmenu/panelmenu.umd.js +69 -16
  336. package/panelmenu/panelmenu.umd.min.js +1 -1
  337. package/panelmenu/panelmenusub.common.js +29 -7
  338. package/panelmenu/panelmenusub.umd.js +29 -7
  339. package/panelmenu/panelmenusub.umd.min.js +1 -1
  340. package/password/password.common.js +11 -2
  341. package/password/password.umd.js +11 -2
  342. package/password/password.umd.min.js +1 -1
  343. package/picklist/PickList.d.ts +8 -0
  344. package/picklist/PickList.vue +13 -4
  345. package/picklist/picklist.common.js +22 -4
  346. package/picklist/picklist.umd.js +22 -4
  347. package/picklist/picklist.umd.min.js +1 -1
  348. package/progressbar/ProgressBar.vue +20 -13
  349. package/progressbar/progressbar.common.js +11 -6
  350. package/progressbar/progressbar.umd.js +11 -6
  351. package/progressbar/progressbar.umd.min.js +1 -1
  352. package/progressspinner/progressspinner.common.js +1 -1
  353. package/progressspinner/progressspinner.umd.js +1 -1
  354. package/radiobutton/radiobutton.common.js +5 -1
  355. package/radiobutton/radiobutton.umd.js +5 -1
  356. package/radiobutton/radiobutton.umd.min.js +1 -1
  357. package/rating/Rating.vue +1 -1
  358. package/rating/rating.common.js +3 -3
  359. package/rating/rating.umd.js +3 -3
  360. package/rating/rating.umd.min.js +1 -1
  361. package/resources/primevue.css +15 -4
  362. package/resources/primevue.min.css +1 -1
  363. package/resources/themes/arya-blue/theme.css +503 -83
  364. package/resources/themes/arya-green/theme.css +503 -83
  365. package/resources/themes/arya-orange/theme.css +503 -83
  366. package/resources/themes/arya-purple/theme.css +503 -83
  367. package/resources/themes/bootstrap4-dark-blue/theme.css +500 -87
  368. package/resources/themes/bootstrap4-dark-purple/theme.css +500 -87
  369. package/resources/themes/bootstrap4-light-blue/theme.css +490 -77
  370. package/resources/themes/bootstrap4-light-purple/theme.css +490 -77
  371. package/resources/themes/fluent-light/theme.css +497 -77
  372. package/resources/themes/lara-dark-blue/fonts/Inter-Bold.woff +0 -0
  373. package/resources/themes/lara-dark-blue/fonts/Inter-Bold.woff2 +0 -0
  374. package/resources/themes/lara-dark-blue/fonts/Inter-Light.woff +0 -0
  375. package/resources/themes/lara-dark-blue/fonts/Inter-Light.woff2 +0 -0
  376. package/resources/themes/lara-dark-blue/fonts/Inter-Medium.woff +0 -0
  377. package/resources/themes/lara-dark-blue/fonts/Inter-Medium.woff2 +0 -0
  378. package/resources/themes/lara-dark-blue/fonts/Inter-Regular.woff +0 -0
  379. package/resources/themes/lara-dark-blue/fonts/Inter-Regular.woff2 +0 -0
  380. package/resources/themes/lara-dark-blue/fonts/Inter-SemiBold.woff +0 -0
  381. package/resources/themes/lara-dark-blue/fonts/Inter-SemiBold.woff2 +0 -0
  382. package/resources/themes/lara-dark-blue/theme.css +5418 -0
  383. package/resources/themes/lara-dark-indigo/fonts/Inter-Bold.woff +0 -0
  384. package/resources/themes/lara-dark-indigo/fonts/Inter-Bold.woff2 +0 -0
  385. package/resources/themes/lara-dark-indigo/fonts/Inter-Light.woff +0 -0
  386. package/resources/themes/lara-dark-indigo/fonts/Inter-Light.woff2 +0 -0
  387. package/resources/themes/lara-dark-indigo/fonts/Inter-Medium.woff +0 -0
  388. package/resources/themes/lara-dark-indigo/fonts/Inter-Medium.woff2 +0 -0
  389. package/resources/themes/lara-dark-indigo/fonts/Inter-Regular.woff +0 -0
  390. package/resources/themes/lara-dark-indigo/fonts/Inter-Regular.woff2 +0 -0
  391. package/resources/themes/lara-dark-indigo/fonts/Inter-SemiBold.woff +0 -0
  392. package/resources/themes/lara-dark-indigo/fonts/Inter-SemiBold.woff2 +0 -0
  393. package/resources/themes/lara-dark-indigo/theme.css +5418 -0
  394. package/resources/themes/lara-dark-purple/fonts/Inter-Bold.woff +0 -0
  395. package/resources/themes/lara-dark-purple/fonts/Inter-Bold.woff2 +0 -0
  396. package/resources/themes/lara-dark-purple/fonts/Inter-Light.woff +0 -0
  397. package/resources/themes/lara-dark-purple/fonts/Inter-Light.woff2 +0 -0
  398. package/resources/themes/lara-dark-purple/fonts/Inter-Medium.woff +0 -0
  399. package/resources/themes/lara-dark-purple/fonts/Inter-Medium.woff2 +0 -0
  400. package/resources/themes/lara-dark-purple/fonts/Inter-Regular.woff +0 -0
  401. package/resources/themes/lara-dark-purple/fonts/Inter-Regular.woff2 +0 -0
  402. package/resources/themes/lara-dark-purple/fonts/Inter-SemiBold.woff +0 -0
  403. package/resources/themes/lara-dark-purple/fonts/Inter-SemiBold.woff2 +0 -0
  404. package/resources/themes/lara-dark-purple/theme.css +5418 -0
  405. package/resources/themes/lara-dark-teal/fonts/Inter-Bold.woff +0 -0
  406. package/resources/themes/lara-dark-teal/fonts/Inter-Bold.woff2 +0 -0
  407. package/resources/themes/lara-dark-teal/fonts/Inter-Light.woff +0 -0
  408. package/resources/themes/lara-dark-teal/fonts/Inter-Light.woff2 +0 -0
  409. package/resources/themes/lara-dark-teal/fonts/Inter-Medium.woff +0 -0
  410. package/resources/themes/lara-dark-teal/fonts/Inter-Medium.woff2 +0 -0
  411. package/resources/themes/lara-dark-teal/fonts/Inter-Regular.woff +0 -0
  412. package/resources/themes/lara-dark-teal/fonts/Inter-Regular.woff2 +0 -0
  413. package/resources/themes/lara-dark-teal/fonts/Inter-SemiBold.woff +0 -0
  414. package/resources/themes/lara-dark-teal/fonts/Inter-SemiBold.woff2 +0 -0
  415. package/resources/themes/lara-dark-teal/theme.css +5418 -0
  416. package/resources/themes/lara-light-blue/fonts/Inter-Bold.woff +0 -0
  417. package/resources/themes/lara-light-blue/fonts/Inter-Bold.woff2 +0 -0
  418. package/resources/themes/lara-light-blue/fonts/Inter-Light.woff +0 -0
  419. package/resources/themes/lara-light-blue/fonts/Inter-Light.woff2 +0 -0
  420. package/resources/themes/lara-light-blue/fonts/Inter-Medium.woff +0 -0
  421. package/resources/themes/lara-light-blue/fonts/Inter-Medium.woff2 +0 -0
  422. package/resources/themes/lara-light-blue/fonts/Inter-Regular.woff +0 -0
  423. package/resources/themes/lara-light-blue/fonts/Inter-Regular.woff2 +0 -0
  424. package/resources/themes/lara-light-blue/fonts/Inter-SemiBold.woff +0 -0
  425. package/resources/themes/lara-light-blue/fonts/Inter-SemiBold.woff2 +0 -0
  426. package/resources/themes/lara-light-blue/theme.css +5418 -0
  427. package/resources/themes/lara-light-indigo/fonts/Inter-Bold.woff +0 -0
  428. package/resources/themes/lara-light-indigo/fonts/Inter-Bold.woff2 +0 -0
  429. package/resources/themes/lara-light-indigo/fonts/Inter-Light.woff +0 -0
  430. package/resources/themes/lara-light-indigo/fonts/Inter-Light.woff2 +0 -0
  431. package/resources/themes/lara-light-indigo/fonts/Inter-Medium.woff +0 -0
  432. package/resources/themes/lara-light-indigo/fonts/Inter-Medium.woff2 +0 -0
  433. package/resources/themes/lara-light-indigo/fonts/Inter-Regular.woff +0 -0
  434. package/resources/themes/lara-light-indigo/fonts/Inter-Regular.woff2 +0 -0
  435. package/resources/themes/lara-light-indigo/fonts/Inter-SemiBold.woff +0 -0
  436. package/resources/themes/lara-light-indigo/fonts/Inter-SemiBold.woff2 +0 -0
  437. package/resources/themes/lara-light-indigo/theme.css +5418 -0
  438. package/resources/themes/lara-light-purple/fonts/Inter-Bold.woff +0 -0
  439. package/resources/themes/lara-light-purple/fonts/Inter-Bold.woff2 +0 -0
  440. package/resources/themes/lara-light-purple/fonts/Inter-Light.woff +0 -0
  441. package/resources/themes/lara-light-purple/fonts/Inter-Light.woff2 +0 -0
  442. package/resources/themes/lara-light-purple/fonts/Inter-Medium.woff +0 -0
  443. package/resources/themes/lara-light-purple/fonts/Inter-Medium.woff2 +0 -0
  444. package/resources/themes/lara-light-purple/fonts/Inter-Regular.woff +0 -0
  445. package/resources/themes/lara-light-purple/fonts/Inter-Regular.woff2 +0 -0
  446. package/resources/themes/lara-light-purple/fonts/Inter-SemiBold.woff +0 -0
  447. package/resources/themes/lara-light-purple/fonts/Inter-SemiBold.woff2 +0 -0
  448. package/resources/themes/lara-light-purple/theme.css +5418 -0
  449. package/resources/themes/lara-light-teal/fonts/Inter-Bold.woff +0 -0
  450. package/resources/themes/lara-light-teal/fonts/Inter-Bold.woff2 +0 -0
  451. package/resources/themes/lara-light-teal/fonts/Inter-Light.woff +0 -0
  452. package/resources/themes/lara-light-teal/fonts/Inter-Light.woff2 +0 -0
  453. package/resources/themes/lara-light-teal/fonts/Inter-Medium.woff +0 -0
  454. package/resources/themes/lara-light-teal/fonts/Inter-Medium.woff2 +0 -0
  455. package/resources/themes/lara-light-teal/fonts/Inter-Regular.woff +0 -0
  456. package/resources/themes/lara-light-teal/fonts/Inter-Regular.woff2 +0 -0
  457. package/resources/themes/lara-light-teal/fonts/Inter-SemiBold.woff +0 -0
  458. package/resources/themes/lara-light-teal/fonts/Inter-SemiBold.woff2 +0 -0
  459. package/resources/themes/lara-light-teal/theme.css +5418 -0
  460. package/resources/themes/luna-amber/theme.css +500 -87
  461. package/resources/themes/luna-blue/theme.css +500 -87
  462. package/resources/themes/luna-green/theme.css +500 -87
  463. package/resources/themes/luna-pink/theme.css +500 -87
  464. package/resources/themes/md-dark-deeppurple/theme.css +801 -128
  465. package/resources/themes/md-dark-indigo/theme.css +801 -128
  466. package/resources/themes/md-light-deeppurple/theme.css +791 -118
  467. package/resources/themes/md-light-indigo/theme.css +791 -118
  468. package/resources/themes/mdc-dark-deeppurple/theme.css +1087 -414
  469. package/resources/themes/mdc-dark-indigo/theme.css +1035 -362
  470. package/resources/themes/mdc-light-deeppurple/theme.css +791 -118
  471. package/resources/themes/mdc-light-indigo/theme.css +791 -118
  472. package/resources/themes/nova/theme.css +490 -77
  473. package/resources/themes/nova-accent/theme.css +490 -77
  474. package/resources/themes/nova-alt/theme.css +490 -77
  475. package/resources/themes/nova-vue/theme.css +490 -77
  476. package/resources/themes/rhea/theme.css +490 -77
  477. package/resources/themes/saga-blue/theme.css +493 -73
  478. package/resources/themes/saga-green/theme.css +493 -73
  479. package/resources/themes/saga-orange/theme.css +493 -73
  480. package/resources/themes/saga-purple/theme.css +493 -73
  481. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff +0 -0
  482. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff2 +0 -0
  483. package/resources/themes/tailwind-light/fonts/Inter-Light.woff +0 -0
  484. package/resources/themes/tailwind-light/fonts/Inter-Light.woff2 +0 -0
  485. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff +0 -0
  486. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff2 +0 -0
  487. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff +0 -0
  488. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff2 +0 -0
  489. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff +0 -0
  490. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff2 +0 -0
  491. package/resources/themes/tailwind-light/theme.css +5493 -0
  492. package/resources/themes/vela-blue/theme.css +503 -83
  493. package/resources/themes/vela-green/theme.css +503 -83
  494. package/resources/themes/vela-orange/theme.css +503 -83
  495. package/resources/themes/vela-purple/theme.css +503 -83
  496. package/ripple/ripple.common.js +5 -0
  497. package/ripple/ripple.umd.js +5 -0
  498. package/ripple/ripple.umd.min.js +1 -1
  499. package/row/row.common.js +1 -1
  500. package/row/row.umd.js +1 -1
  501. package/scrollpanel/scrollpanel.common.js +6 -1
  502. package/scrollpanel/scrollpanel.umd.js +6 -1
  503. package/scrollpanel/scrollpanel.umd.min.js +1 -1
  504. package/scrolltop/scrolltop.common.js +6 -1
  505. package/scrolltop/scrolltop.umd.js +6 -1
  506. package/scrolltop/scrolltop.umd.min.js +1 -1
  507. package/selectbutton/SelectButton.d.ts +3 -3
  508. package/selectbutton/SelectButton.vue +6 -1
  509. package/selectbutton/selectbutton.common.js +17 -3
  510. package/selectbutton/selectbutton.umd.js +17 -3
  511. package/selectbutton/selectbutton.umd.min.js +1 -1
  512. package/sidebar/Sidebar.vue +3 -16
  513. package/sidebar/sidebar.common.js +15 -15
  514. package/sidebar/sidebar.umd.js +15 -15
  515. package/sidebar/sidebar.umd.min.js +1 -1
  516. package/skeleton/skeleton.common.js +1 -1
  517. package/skeleton/skeleton.umd.js +1 -1
  518. package/slider/slider.common.js +6 -1
  519. package/slider/slider.umd.js +6 -1
  520. package/slider/slider.umd.min.js +1 -1
  521. package/speeddial/SpeedDial.d.ts +31 -0
  522. package/speeddial/SpeedDial.vue +341 -0
  523. package/speeddial/demo.html +17 -0
  524. package/speeddial/index.d.ts +1 -0
  525. package/speeddial/index.js +2 -0
  526. package/speeddial/plugin.js +4 -0
  527. package/speeddial/speeddial.common.js +4741 -0
  528. package/speeddial/speeddial.umd.js +4751 -0
  529. package/speeddial/speeddial.umd.min.js +1 -0
  530. package/splitbutton/splitbutton.common.js +51 -22
  531. package/splitbutton/splitbutton.umd.js +51 -22
  532. package/splitbutton/splitbutton.umd.min.js +1 -1
  533. package/splitter/splitter.common.js +5 -0
  534. package/splitter/splitter.umd.js +5 -0
  535. package/splitter/splitter.umd.min.js +1 -1
  536. package/steps/Steps.d.ts +1 -0
  537. package/steps/Steps.vue +30 -8
  538. package/steps/steps.common.js +33 -6
  539. package/steps/steps.umd.js +33 -6
  540. package/steps/steps.umd.min.js +1 -1
  541. package/styleclass/StyleClass.d.ts +5 -0
  542. package/styleclass/StyleClass.js +179 -0
  543. package/styleclass/demo.html +8 -0
  544. package/styleclass/index.d.ts +1 -0
  545. package/styleclass/index.js +2 -0
  546. package/styleclass/plugin.js +4 -0
  547. package/styleclass/styleclass.common.js +3576 -0
  548. package/styleclass/styleclass.umd.js +3586 -0
  549. package/styleclass/styleclass.umd.min.js +1 -0
  550. package/tabmenu/TabMenu.d.ts +1 -0
  551. package/tabmenu/TabMenu.vue +44 -11
  552. package/tabmenu/tabmenu.common.js +171 -9
  553. package/tabmenu/tabmenu.umd.js +171 -9
  554. package/tabmenu/tabmenu.umd.min.js +1 -1
  555. package/tabpanel/tabpanel.common.js +1 -1
  556. package/tabpanel/tabpanel.umd.js +1 -1
  557. package/tabview/TabView.d.ts +1 -0
  558. package/tabview/TabView.vue +111 -11
  559. package/tabview/tabview.common.js +86 -5
  560. package/tabview/tabview.umd.js +86 -5
  561. package/tabview/tabview.umd.min.js +1 -1
  562. package/tag/tag.common.js +1 -1
  563. package/tag/tag.umd.js +1 -1
  564. package/terminal/terminal.common.js +1 -1
  565. package/terminal/terminal.umd.js +1 -1
  566. package/textarea/textarea.common.js +5 -1
  567. package/textarea/textarea.umd.js +5 -1
  568. package/textarea/textarea.umd.min.js +1 -1
  569. package/tieredmenu/TieredMenu.d.ts +1 -0
  570. package/tieredmenu/TieredMenu.vue +5 -1
  571. package/tieredmenu/TieredMenuSub.vue +30 -14
  572. package/tieredmenu/demo.html +4 -3
  573. package/tieredmenu/tieredmenu.common.js +41 -13
  574. package/tieredmenu/tieredmenu.umd.js +41 -13
  575. package/tieredmenu/tieredmenu.umd.min.js +1 -1
  576. package/tieredmenu/tieredmenusub.common.js +31 -7
  577. package/tieredmenu/tieredmenusub.umd.js +31 -7
  578. package/tieredmenu/tieredmenusub.umd.min.js +1 -1
  579. package/timeline/timeline.common.js +5 -1
  580. package/timeline/timeline.umd.js +5 -1
  581. package/timeline/timeline.umd.min.js +1 -1
  582. package/toast/Toast.d.ts +7 -1
  583. package/toast/Toast.vue +51 -4
  584. package/toast/ToastMessage.vue +44 -10
  585. package/toast/toast.common.js +103 -14
  586. package/toast/toast.umd.js +103 -14
  587. package/toast/toast.umd.min.js +1 -1
  588. package/toast/toastmessage.common.js +44 -7
  589. package/toast/toastmessage.umd.js +44 -7
  590. package/toast/toastmessage.umd.min.js +1 -1
  591. package/togglebutton/togglebutton.common.js +6 -1
  592. package/togglebutton/togglebutton.umd.js +6 -1
  593. package/togglebutton/togglebutton.umd.min.js +1 -1
  594. package/toolbar/Toolbar.d.ts +1 -1
  595. package/toolbar/Toolbar.vue +2 -2
  596. package/toolbar/toolbar.common.js +3 -3
  597. package/toolbar/toolbar.umd.js +3 -3
  598. package/toolbar/toolbar.umd.min.js +1 -1
  599. package/tooltip/Tooltip.css +1 -0
  600. package/tooltip/Tooltip.js +59 -6
  601. package/tooltip/tooltip.common.js +1763 -70
  602. package/tooltip/tooltip.umd.js +1763 -70
  603. package/tooltip/tooltip.umd.min.js +1 -1
  604. package/tree/TreeNode.vue +5 -1
  605. package/tree/tree.common.js +23 -8
  606. package/tree/tree.umd.js +23 -8
  607. package/tree/tree.umd.min.js +1 -1
  608. package/tree/treenode.common.js +16 -3
  609. package/tree/treenode.umd.js +16 -3
  610. package/tree/treenode.umd.min.js +1 -1
  611. package/treetable/TreeTable.d.ts +2 -2
  612. package/treetable/TreeTable.vue +8 -8
  613. package/treetable/treetable.common.js +1900 -90
  614. package/treetable/treetable.umd.js +1900 -90
  615. package/treetable/treetable.umd.min.js +1 -1
  616. package/treetable/treetablerow.common.js +11 -1
  617. package/treetable/treetablerow.umd.js +11 -1
  618. package/treetable/treetablerow.umd.min.js +1 -1
  619. package/treetable/treetablerowloader.common.js +12 -1
  620. package/treetable/treetablerowloader.umd.js +12 -1
  621. package/treetable/treetablerowloader.umd.min.js +1 -1
  622. package/tristatecheckbox/tristatecheckbox.common.js +1 -1
  623. package/tristatecheckbox/tristatecheckbox.umd.js +1 -1
  624. package/utils/DomHandler.js +5 -0
  625. package/utils/EventBus.js +33 -0
  626. package/utils/connectedoverlayscrollhandler.common.js +5 -0
  627. package/utils/connectedoverlayscrollhandler.umd.js +5 -0
  628. package/utils/connectedoverlayscrollhandler.umd.min.js +1 -1
  629. package/utils/domhandler.common.js +5 -0
  630. package/utils/domhandler.umd.js +5 -0
  631. package/utils/domhandler.umd.min.js +1 -1
  632. package/utils/eventbus.common.js +1774 -0
  633. package/utils/eventbus.umd.js +1784 -0
  634. package/utils/eventbus.umd.min.js +1 -0
  635. package/utils/filterutils.common.js +4 -0
  636. package/utils/filterutils.umd.js +4 -0
  637. package/utils/filterutils.umd.min.js +1 -1
  638. package/utils/objectutils.common.js +4 -0
  639. package/utils/objectutils.umd.js +4 -0
  640. package/utils/objectutils.umd.min.js +1 -1
  641. package/vetur-attributes.json +236 -16
  642. package/vetur-tags.json +88 -18
  643. package/web-types.json +2042 -1266
  644. package/confirmationservice/confirmationeventbus.common.js +0 -174
  645. package/confirmationservice/confirmationeventbus.umd.js +0 -184
  646. package/confirmationservice/confirmationeventbus.umd.min.js +0 -1
@@ -575,7 +575,7 @@ exports = module.exports = __webpack_require__("2350")(false);
575
575
 
576
576
 
577
577
  // module
578
- exports.push([module.i, ".fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.fc{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{-webkit-box-sizing:border-box;box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{vertical-align:top;padding:0}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\");font-weight:400;font-style:normal}.fc-icon{display:inline-block;width:1em;height:1em;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:fcicons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fc-icon-chevron-left:before{content:\"\\E900\"}.fc-icon-chevron-right:before{content:\"\\E901\"}.fc-icon-chevrons-left:before{content:\"\\E902\"}.fc-icon-chevrons-right:before{content:\"\\E903\"}.fc-icon-minus-square:before{content:\"\\E904\"}.fc-icon-plus-square:before{content:\"\\E905\"}.fc-icon-x:before{content:\"\\E906\"}.fc .fc-button{border-radius:0;overflow:visible;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{padding:0;border-style:none}.fc .fc-button{display:inline-block;font-weight:400;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2c3e50;background-color:var(--fc-button-bg-color,#2c3e50);border-color:#2c3e50;border-color:var(--fc-button-border-color,#2c3e50)}.fc .fc-button-primary:hover{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1e2b37;background-color:var(--fc-button-hover-bg-color,#1e2b37);border-color:#1a252f;border-color:var(--fc-button-hover-border-color,#1a252f)}.fc .fc-button-primary:disabled{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2c3e50;background-color:var(--fc-button-bg-color,#2c3e50);border-color:#2c3e50;border-color:var(--fc-button-border-color,#2c3e50)}.fc .fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1a252f;background-color:var(--fc-button-active-bg-color,#1a252f);border-color:#151e27;border-color:var(--fc-button-active-border-color,#151e27)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{vertical-align:middle;font-size:1.5em}.fc .fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc .fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.fc .fc-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{position:absolute;top:0;right:0;left:0;bottom:0}.fc .fc-scroller-harness{position:relative;overflow:hidden;direction:ltr}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{width:100%;table-layout:fixed}.fc .fc-scrollgrid table{border-top-style:hidden;border-left-style:hidden;border-right-style:hidden}.fc .fc-scrollgrid{border-collapse:separate;border-right-width:0;border-bottom-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section>td,.fc .fc-scrollgrid-section table{height:1px}.fc .fc-scrollgrid-section-liquid{height:auto}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-top-width:0;border-left-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:#fff;background:var(--fc-page-bg-color,#fff);position:sticky;z-index:2}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{position:absolute;top:0;right:0;bottom:0;left:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{position:absolute;top:0;left:0;right:0;bottom:0}.fc .fc-non-business{background:hsla(0,0%,84.3%,.3);background:var(--fc-non-business-color,hsla(0,0%,84.3%,.3))}.fc .fc-bg-event{background:#8fdf82;background:var(--fc-bg-event-color,#8fdf82);opacity:.3;opacity:var(--fc-bg-event-opacity,.3)}.fc .fc-bg-event .fc-event-title{margin:.5em;font-size:.85em;font-size:var(--fc-small-font-size,.85em);font-style:italic}.fc .fc-highlight{background:rgba(188,232,241,.3);background:var(--fc-highlight-color,rgba(188,232,241,.3))}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:hsla(0,0%,81.6%,.3);background:var(--fc-neutral-bg-color,hsla(0,0%,81.6%,.3))}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{-webkit-box-shadow:0 2px 7px rgba(0,0,0,.3);box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{border-radius:4px;border-radius:calc(var(--fc-event-resizer-dot-total-width, 8px)/2);border-width:1px;border-width:var(--fc-event-resizer-dot-border-width,1px);width:8px;width:var(--fc-event-resizer-dot-total-width,8px);height:8px;height:var(--fc-event-resizer-dot-total-width,8px);border-style:solid;border-color:inherit;background:#fff;background:var(--fc-page-bg-color,#fff)}.fc-event-selected .fc-event-resizer:before{content:\"\";position:absolute;top:-20px;left:-20px;right:-20px;bottom:-20px}.fc-event-selected{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before{content:\"\";position:absolute;z-index:3;top:0;left:0;right:0;bottom:0}.fc-event-selected:after{content:\"\";background:rgba(0,0,0,.25);background:var(--fc-event-selected-overlay-color,rgba(0,0,0,.25));position:absolute;z-index:1;top:-1px;left:-1px;right:-1px;bottom:-1px}.fc-h-event{display:block;border:1px solid #3788d8;border:1px solid var(--fc-event-border-color,#3788d8);background-color:#3788d8;background-color:var(--fc-event-bg-color,#3788d8)}.fc-h-event .fc-event-main{color:#fff;color:var(--fc-event-text-color,#fff)}.fc-h-event .fc-event-main-frame{display:-webkit-box;display:-ms-flexbox;display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;vertical-align:top;left:0;right:0;max-width:100%;overflow:hidden}.fc-h-event.fc-event-selected:before{top:-10px;bottom:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-top-right-radius:0;border-bottom-right-radius:0;border-right-width:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{top:0;bottom:0;width:8px;width:var(--fc-event-resizer-thickness,8px)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:-4px;left:calc(var(--fc-event-resizer-thickness, 8px)/-2)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:-4px;right:calc(var(--fc-event-resizer-thickness, 8px)/-2)}.fc-h-event.fc-event-selected .fc-event-resizer{top:50%;margin-top:-4px;margin-top:calc(var(--fc-event-resizer-dot-total-width, 8px)/-2)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:-4px;left:calc(var(--fc-event-resizer-dot-total-width, 8px)/-2)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:-4px;right:calc(var(--fc-event-resizer-dot-total-width, 8px)/-2)}", ""]);
578
+ exports.push([module.i, ".fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.fc{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{-webkit-box-sizing:border-box;box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{vertical-align:top;padding:0}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\");font-weight:400;font-style:normal}.fc-icon{display:inline-block;width:1em;height:1em;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:fcicons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fc-icon-chevron-left:before{content:\"\\E900\"}.fc-icon-chevron-right:before{content:\"\\E901\"}.fc-icon-chevrons-left:before{content:\"\\E902\"}.fc-icon-chevrons-right:before{content:\"\\E903\"}.fc-icon-minus-square:before{content:\"\\E904\"}.fc-icon-plus-square:before{content:\"\\E905\"}.fc-icon-x:before{content:\"\\E906\"}.fc .fc-button{border-radius:0;overflow:visible;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{padding:0;border-style:none}.fc .fc-button{display:inline-block;font-weight:400;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2c3e50;background-color:var(--fc-button-bg-color,#2c3e50);border-color:#2c3e50;border-color:var(--fc-button-border-color,#2c3e50)}.fc .fc-button-primary:hover{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1e2b37;background-color:var(--fc-button-hover-bg-color,#1e2b37);border-color:#1a252f;border-color:var(--fc-button-hover-border-color,#1a252f)}.fc .fc-button-primary:disabled{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2c3e50;background-color:var(--fc-button-bg-color,#2c3e50);border-color:#2c3e50;border-color:var(--fc-button-border-color,#2c3e50)}.fc .fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1a252f;background-color:var(--fc-button-active-bg-color,#1a252f);border-color:#151e27;border-color:var(--fc-button-active-border-color,#151e27)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{vertical-align:middle;font-size:1.5em}.fc .fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc .fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.fc .fc-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{position:absolute;top:0;right:0;left:0;bottom:0}.fc .fc-scroller-harness{position:relative;overflow:hidden;direction:ltr}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{width:100%;table-layout:fixed}.fc .fc-scrollgrid table{border-top-style:hidden;border-left-style:hidden;border-right-style:hidden}.fc .fc-scrollgrid{border-collapse:separate;border-right-width:0;border-bottom-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section>td,.fc .fc-scrollgrid-section table{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-top-width:0;border-left-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:#fff;background:var(--fc-page-bg-color,#fff);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{position:absolute;top:0;right:0;bottom:0;left:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{position:absolute;top:0;left:0;right:0;bottom:0}.fc .fc-non-business{background:hsla(0,0%,84.3%,.3);background:var(--fc-non-business-color,hsla(0,0%,84.3%,.3))}.fc .fc-bg-event{background:#8fdf82;background:var(--fc-bg-event-color,#8fdf82);opacity:.3;opacity:var(--fc-bg-event-opacity,.3)}.fc .fc-bg-event .fc-event-title{margin:.5em;font-size:.85em;font-size:var(--fc-small-font-size,.85em);font-style:italic}.fc .fc-highlight{background:rgba(188,232,241,.3);background:var(--fc-highlight-color,rgba(188,232,241,.3))}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:hsla(0,0%,81.6%,.3);background:var(--fc-neutral-bg-color,hsla(0,0%,81.6%,.3))}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{-webkit-box-shadow:0 2px 7px rgba(0,0,0,.3);box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{border-radius:4px;border-radius:calc(var(--fc-event-resizer-dot-total-width, 8px)/2);border-width:1px;border-width:var(--fc-event-resizer-dot-border-width,1px);width:8px;width:var(--fc-event-resizer-dot-total-width,8px);height:8px;height:var(--fc-event-resizer-dot-total-width,8px);border-style:solid;border-color:inherit;background:#fff;background:var(--fc-page-bg-color,#fff)}.fc-event-selected .fc-event-resizer:before{content:\"\";position:absolute;top:-20px;left:-20px;right:-20px;bottom:-20px}.fc-event-selected,.fc-event:focus{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{content:\"\";position:absolute;z-index:3;top:0;left:0;right:0;bottom:0}.fc-event-selected:after,.fc-event:focus:after{content:\"\";background:rgba(0,0,0,.25);background:var(--fc-event-selected-overlay-color,rgba(0,0,0,.25));position:absolute;z-index:1;top:-1px;left:-1px;right:-1px;bottom:-1px}.fc-h-event{display:block;border:1px solid #3788d8;border:1px solid var(--fc-event-border-color,#3788d8);background-color:#3788d8;background-color:var(--fc-event-bg-color,#3788d8)}.fc-h-event .fc-event-main{color:#fff;color:var(--fc-event-text-color,#fff)}.fc-h-event .fc-event-main-frame{display:-webkit-box;display:-ms-flexbox;display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;vertical-align:top;left:0;right:0;max-width:100%;overflow:hidden}.fc-h-event.fc-event-selected:before{top:-10px;bottom:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-top-right-radius:0;border-bottom-right-radius:0;border-right-width:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{top:0;bottom:0;width:8px;width:var(--fc-event-resizer-thickness,8px)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:-4px;left:calc(var(--fc-event-resizer-thickness, 8px)*-0.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:-4px;right:calc(var(--fc-event-resizer-thickness, 8px)*-0.5)}.fc-h-event.fc-event-selected .fc-event-resizer{top:50%;margin-top:-4px;margin-top:calc(var(--fc-event-resizer-dot-total-width, 8px)*-0.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:-4px;left:calc(var(--fc-event-resizer-dot-total-width, 8px)*-0.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:-4px;right:calc(var(--fc-event-resizer-dot-total-width, 8px)*-0.5)}.fc .fc-popover{position:absolute;z-index:9999;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.15);box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc .fc-popover-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;opacity:.65;font-size:1.1em}.fc-theme-standard .fc-popover{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd);background:#fff;background:var(--fc-page-bg-color,#fff)}.fc-theme-standard .fc-popover-header{background:hsla(0,0%,81.6%,.3);background:var(--fc-neutral-bg-color,hsla(0,0%,81.6%,.3))}", ""]);
579
579
 
580
580
  // exports
581
581
 
@@ -1911,7 +1911,7 @@ if (typeof window !== 'undefined') {
1911
1911
  // Indicate to webpack that this file can be concatenated
1912
1912
  /* harmony default export */ var setPublicPath = (null);
1913
1913
 
1914
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"271bee23-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/fullcalendar/FullCalendar.vue?vue&type=template&id=351cede2&
1914
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"9d50adc0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/fullcalendar/FullCalendar.vue?vue&type=template&id=351cede2&
1915
1915
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div')}
1916
1916
  var staticRenderFns = []
1917
1917
 
@@ -1924,6 +1924,9 @@ var es7_object_get_own_property_descriptors = __webpack_require__("8e6e");
1924
1924
  // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
1925
1925
  var web_dom_iterable = __webpack_require__("ac6a");
1926
1926
 
1927
+ // EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
1928
+ var es6_array_iterator = __webpack_require__("cadf");
1929
+
1927
1930
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
1928
1931
  var es6_object_keys = __webpack_require__("456d");
1929
1932
 
@@ -2112,10 +2115,14 @@ function __spreadArrays() {
2112
2115
  return r;
2113
2116
  }
2114
2117
 
2115
- function __spreadArray(to, from) {
2116
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
2117
- to[j] = from[i];
2118
- return to;
2118
+ function __spreadArray(to, from, pack) {
2119
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
2120
+ if (ar || !(i in from)) {
2121
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
2122
+ ar[i] = from[i];
2123
+ }
2124
+ }
2125
+ return to.concat(ar || Array.prototype.slice.call(from));
2119
2126
  }
2120
2127
 
2121
2128
  function __await(v) {
@@ -2185,25 +2192,35 @@ function __classPrivateFieldSet(receiver, state, value, kind, f) {
2185
2192
  }
2186
2193
 
2187
2194
  // CONCATENATED MODULE: ./node_modules/preact/dist/preact.module.js
2188
- var n,l,u,preact_module_i,t,o,r={},f=[],e=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function c(n,l){for(var u in l)n[u]=l[u];return n}function s(n){var l=n.parentNode;l&&l.removeChild(n)}function a(n,l,u){var i,t,o,r=arguments,f={};for(o in l)"key"==o?i=l[o]:"ref"==o?t=l[o]:f[o]=l[o];if(arguments.length>3)for(u=[u],o=3;o<arguments.length;o++)u.push(r[o]);if(null!=u&&(f.children=u),"function"==typeof n&&null!=n.defaultProps)for(o in n.defaultProps)void 0===f[o]&&(f[o]=n.defaultProps[o]);return v(n,f,i,t,null)}function v(l,u,i,t,o){var r={type:l,props:u,key:i,ref:t,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++n.__v:o};return null!=n.vnode&&n.vnode(r),r}function h(){return{current:null}}function y(n){return n.children}function p(n,l){this.props=n,this.context=l}function d(n,l){if(null==l)return n.__?d(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return"function"==typeof n.type?d(n):null}function _(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return _(n)}}function k(l){(!l.__d&&(l.__d=!0)&&u.push(l)&&!b.__r++||t!==n.debounceRendering)&&((t=n.debounceRendering)||preact_module_i)(b)}function b(){for(var n;b.__r=u.length;)n=u.sort(function(n,l){return n.__v.__b-l.__v.__b}),u=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=c({},t)).__v=t.__v+1,I(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?d(t):o,t.__h),T(u,t),t.__e!=o&&_(t)))})}function m(n,l,u,i,t,o,e,c,s,a){var h,p,_,k,b,m,w,A=i&&i.__k||f,P=A.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v(null,k,null,null,k):Array.isArray(k)?v(y,{children:k},null,null,null):k.__b>0?v(k.type,k.props,k.key,null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(_=A[h])||_&&k.key==_.key&&k.type===_.type)A[h]=void 0;else for(p=0;p<P;p++){if((_=A[p])&&k.key==_.key&&k.type===_.type){A[p]=void 0;break}_=null}I(n,k,_=_||r,t,o,e,c,s,a),b=k.__e,(p=k.ref)&&_.ref!=p&&(w||(w=[]),_.ref&&w.push(_.ref,null,k),w.push(p,k.__c||b,k)),null!=b?(null==m&&(m=b),"function"==typeof k.type&&null!=k.__k&&k.__k===_.__k?k.__d=s=g(k,s,n):s=x(n,k,_,A,b,s),a||"option"!==u.type?"function"==typeof u.type&&(u.__d=s):n.value=""):s&&_.__e==s&&s.parentNode!=n&&(s=d(_))}for(u.__e=m,h=P;h--;)null!=A[h]&&("function"==typeof u.type&&null!=A[h].__e&&A[h].__e==u.__d&&(u.__d=d(i,h+1)),L(A[h],A[h]));if(w)for(h=0;h<w.length;h++)z(w[h],w[++h],w[++h])}function g(n,l,u){var i,t;for(i=0;i<n.__k.length;i++)(t=n.__k[i])&&(t.__=n,l="function"==typeof t.type?g(t,l,u):x(u,t,t,n.__k,t.__e,l));return l}function w(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){w(n,l)}):l.push(n)),l}function x(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else{for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,o),r=o}return void 0!==r?r:t.nextSibling}function A(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||C(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||C(n,o,l[o],u[o],i)}function P(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||e.test(l)?u:u+"px"}function C(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else{if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||P(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||P(n.style,l,u[l])}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?H:$,o):n.removeEventListener(l,o?H:$,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null!=u&&(!1!==u||"a"===l[0]&&"r"===l[1])?n.setAttribute(l,u):n.removeAttribute(l))}}function $(l){this.l[l.type+!1](n.event?n.event(l):l)}function H(l){this.l[l.type+!0](n.event?n.event(l):l)}function I(l,u,i,t,o,r,f,e,s){var a,v,h,d,_,k,b,g,w,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(s=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=n.__b)&&a(u);try{n:if("function"==typeof P){if(g=u.props,w=(a=P.contextType)&&t[a.__c],x=a?w?w.props.value:a.__:t,i.__c?b=(v=u.__c=i.__c).__=v.__E:("prototype"in P&&P.prototype.render?u.__c=v=new P(g,x):(u.__c=v=new p(g,x),v.constructor=P,v.render=M),w&&w.sub(v),v.props=g,v.state||(v.state={}),v.context=x,v.__n=t,h=v.__d=!0,v.__h=[]),null==v.__s&&(v.__s=v.state),null!=P.getDerivedStateFromProps&&(v.__s==v.state&&(v.__s=c({},v.__s)),c(v.__s,P.getDerivedStateFromProps(g,v.__s))),d=v.props,_=v.state,h)null==P.getDerivedStateFromProps&&null!=v.componentWillMount&&v.componentWillMount(),null!=v.componentDidMount&&v.__h.push(v.componentDidMount);else{if(null==P.getDerivedStateFromProps&&g!==d&&null!=v.componentWillReceiveProps&&v.componentWillReceiveProps(g,x),!v.__e&&null!=v.shouldComponentUpdate&&!1===v.shouldComponentUpdate(g,v.__s,x)||u.__v===i.__v){v.props=g,v.state=v.__s,u.__v!==i.__v&&(v.__d=!1),v.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),v.__h.length&&f.push(v);break n}null!=v.componentWillUpdate&&v.componentWillUpdate(g,v.__s,x),null!=v.componentDidUpdate&&v.__h.push(function(){v.componentDidUpdate(d,_,k)})}v.context=x,v.props=g,v.state=v.__s,(a=n.__r)&&a(u),v.__d=!1,v.__v=u,v.__P=l,a=v.render(v.props,v.state,v.context),v.state=v.__s,null!=v.getChildContext&&(t=c(c({},t),v.getChildContext())),h||null==v.getSnapshotBeforeUpdate||(k=v.getSnapshotBeforeUpdate(d,_)),A=null!=a&&a.type===y&&null==a.key?a.props.children:a,m(l,Array.isArray(A)?A:[A],u,i,t,o,r,f,e,s),v.base=u.__e,u.__h=null,v.__h.length&&f.push(v),b&&(v.__E=v.__=null),v.__e=!1}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=j(i.__e,u,i,t,o,r,f,s);(a=n.diffed)&&a(u)}catch(l){u.__v=null,(s||null!=r)&&(u.__e=e,u.__h=!!s,r[r.indexOf(e)]=null),n.__e(l,u,i)}}function T(l,u){n.__c&&n.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u)})}catch(l){n.__e(l,u.__v)}})}function j(n,l,u,i,t,o,e,c){var a,v,h,y,p=u.props,d=l.props,_=l.type,k=0;if("svg"===_&&(t=!0),null!=o)for(;k<o.length;k++)if((a=o[k])&&(a===n||(_?a.localName==_:3==a.nodeType))){n=a,o[k]=null;break}if(null==n){if(null===_)return document.createTextNode(d);n=t?document.createElementNS("http://www.w3.org/2000/svg",_):document.createElement(_,d.is&&d),o=null,c=!1}if(null===_)p===d||c&&n.data===d||(n.data=d);else{if(o=o&&f.slice.call(n.childNodes),v=(p=u.props||r).dangerouslySetInnerHTML,h=d.dangerouslySetInnerHTML,!c){if(null!=o)for(p={},y=0;y<n.attributes.length;y++)p[n.attributes[y].name]=n.attributes[y].value;(h||v)&&(h&&(v&&h.__html==v.__html||h.__html===n.innerHTML)||(n.innerHTML=h&&h.__html||""))}if(A(n,d,p,t,c),h)l.__k=[];else if(k=l.props.children,m(n,Array.isArray(k)?k:[k],l,u,i,t&&"foreignObject"!==_,o,e,n.firstChild,c),null!=o)for(k=o.length;k--;)null!=o[k]&&s(o[k]);c||("value"in d&&void 0!==(k=d.value)&&(k!==n.value||"progress"===_&&!k)&&C(n,"value",k,p.value,!1),"checked"in d&&void 0!==(k=d.checked)&&k!==n.checked&&C(n,"checked",k,p.checked,!1))}return n}function z(l,u,i){try{"function"==typeof l?l(u):l.current=u}catch(l){n.__e(l,i)}}function L(l,u,i){var t,o,r;if(n.unmount&&n.unmount(l),(t=l.ref)&&(t.current&&t.current!==l.__e||z(t,null,u)),i||"function"==typeof l.type||(i=null!=(o=l.__e)),l.__e=l.__d=void 0,null!=(t=l.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount()}catch(l){n.__e(l,u)}t.base=t.__P=null}if(t=l.__k)for(r=0;r<t.length;r++)t[r]&&L(t[r],u,i);null!=o&&s(o)}function M(n,l,u){return this.constructor(n,u)}function N(l,u,i){var t,o,e;n.__&&n.__(l,u),o=(t="function"==typeof i)?null:i&&i.__k||u.__k,e=[],I(u,l=(!t&&i||u).__k=a(y,null,[l]),o||r,r,void 0!==u.ownerSVGElement,!t&&i?[i]:o?null:u.firstChild?f.slice.call(u.childNodes):null,e,!t&&i?i:o?o.__e:u.firstChild,t),T(e,l)}function O(n,l){N(n,l,O)}function S(n,l,u){var i,t,o,r=arguments,f=c({},n.props);for(o in l)"key"==o?i=l[o]:"ref"==o?t=l[o]:f[o]=l[o];if(arguments.length>3)for(u=[u],o=3;o<arguments.length;o++)u.push(r[o]);return null!=u&&(f.children=u),v(n.type,f,i||n.key,t||n.ref,null)}function q(n,l){var u={__c:l="__cC"+o++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(k)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n},__v:0},l=function(n){return null!=n&&void 0===n.constructor},p.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=c({},this.state),"function"==typeof n&&(n=n(c({},u),this.props)),n&&c(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),k(this))},p.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),k(this))},p.prototype.render=y,u=[],preact_module_i="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,b.__r=0,o=0;
2195
+ var preact_module_n,l,preact_module_u,preact_module_i,preact_module_t,preact_module_o,preact_module_r,f,preact_module_e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,o,r,f={};for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?preact_module_n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return y(l,f,t,o,null)}function y(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++preact_module_u:r};return null==r&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return"function"==typeof n.type?k(n):null}function b(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return b(n)}}function m(n){(!n.__d&&(n.__d=!0)&&preact_module_t.push(n)&&!g.__r++||preact_module_r!==l.debounceRendering)&&((preact_module_r=l.debounceRendering)||preact_module_o)(g)}function g(){for(var n;g.__r=preact_module_t.length;)n=preact_module_t.sort(function(n,l){return n.__v.__b-l.__v.__b}),preact_module_t=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=a({},t)).__v=t.__v+1,T(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?k(t):o,t.__h),j(u,t),t.__e!=o&&b(t)))})}function w(n,l,u,i,t,o,r,f,s,a){var h,v,p,_,b,m,g,w=i&&i.__k||c,A=w.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(_=u.__k[h]=null==(_=l[h])||"boolean"==typeof _?null:"string"==typeof _||"number"==typeof _||"bigint"==typeof _?y(null,_,null,null,_):Array.isArray(_)?y(d,{children:_},null,null,null):_.__b>0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v<A;v++){if((p=w[v])&&_.key==p.key&&_.type===p.type){w[v]=void 0;break}p=null}T(n,_,p=p||preact_module_e,t,o,r,f,s,a),b=_.__e,(v=_.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,_),g.push(v,_.__c||b,_)),null!=b?(null==m&&(m=b),"function"==typeof _.type&&_.__k===p.__k?_.__d=s=x(_,s,n):s=P(n,_,p,w,b,s),"function"==typeof u.type&&(u.__d=s)):s&&p.__e==s&&s.parentNode!=n&&(s=k(p))}for(u.__e=m,h=A;h--;)null!=w[h]&&("function"==typeof u.type&&null!=w[h].__e&&w[h].__e==u.__d&&(u.__d=k(i,h+1)),M(w[h],w[h]));if(g)for(h=0;h<g.length;h++)L(g[h],g[++h],g[++h])}function x(n,l,u){for(var i,t=n.__k,o=0;t&&o<t.length;o++)(i=t[o])&&(i.__=n,l="function"==typeof i.type?x(i,l,u):P(u,i,i,t,i.__e,l));return l}function A(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){A(n,l)}):l.push(n)),l}function P(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else{for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,o),r=o}return void 0!==r?r:t.nextSibling}function C(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||H(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||H(n,o,l[o],u[o],i)}function $(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||s.test(l)?u:u+"px"}function H(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else{if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||$(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||$(n.style,l,u[l])}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?N:I,o):n.removeEventListener(l,o?N:I,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null!=u&&(!1!==u||"a"===l[0]&&"r"===l[1])?n.setAttribute(l,u):n.removeAttribute(l))}}function I(n){this.l[n.type+!1](l.event?l.event(n):n)}function N(n){this.l[n.type+!0](l.event?l.event(n):n)}function T(n,u,i,t,o,r,f,e,c){var s,h,v,y,p,k,b,m,g,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(s=l.__b)&&s(u);try{n:if("function"==typeof P){if(m=u.props,g=(s=P.contextType)&&t[s.__c],x=s?g?g.props.value:s.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:("prototype"in P&&P.prototype.render?u.__c=h=new P(m,x):(u.__c=h=new _(m,x),h.constructor=P,h.render=O),g&&g.sub(h),h.props=m,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=a({},h.__s)),a(h.__s,P.getDerivedStateFromProps(m,h.__s))),y=h.props,p=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&m!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,x)||u.__v===i.__v){h.props=m,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,p,k)})}h.context=x,h.props=m,h.state=h.__s,(s=l.__r)&&s(u),h.__d=!1,h.__v=u,h.__P=n,s=h.render(h.props,h.state,h.context),h.state=h.__s,null!=h.getChildContext&&(t=a(a({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,p)),A=null!=s&&s.type===d&&null==s.key?s.props.children:s,w(n,Array.isArray(A)?A:[A],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=z(i.__e,u,i,t,o,r,f,c);(s=l.diffed)&&s(u)}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l.__e(n,u,i)}}function j(n,u){l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function z(l,u,i,t,o,r,f,c){var s,a,v,y=i.props,p=u.props,d=u.type,_=0;if("svg"===d&&(o=!0),null!=r)for(;_<r.length;_++)if((s=r[_])&&"localName"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,r[_]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=o?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),r=null,c=!1}if(null===d)y===p||c&&l.data===p||(l.data=p);else{if(r=r&&preact_module_n.call(l.childNodes),a=(y=i.props||preact_module_e).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=r)for(y={},_=0;_<l.attributes.length;_++)y[l.attributes[_].name]=l.attributes[_].value;(v||a)&&(v&&(a&&v.__html==a.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||""))}if(C(l,p,y,o,c),v)u.__k=[];else if(_=u.props.children,w(l,Array.isArray(_)?_:[_],u,i,t,o&&"foreignObject"!==d,r,f,r?r[0]:i.__k&&k(i,0),c),null!=r)for(_=r.length;_--;)null!=r[_]&&h(r[_]);c||("value"in p&&void 0!==(_=p.value)&&(_!==y.value||_!==l.value||"progress"===d&&!_)&&H(l,"value",_,y.value,!1),"checked"in p&&void 0!==(_=p.checked)&&_!==l.checked&&H(l,"checked",_,y.checked,!1))}return l}function L(n,u,i){try{"function"==typeof n?n(u):n.current=u}catch(n){l.__e(n,i)}}function M(n,u,i){var t,o;if(l.unmount&&l.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||L(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount()}catch(n){l.__e(n,u)}t.base=t.__P=null}if(t=n.__k)for(o=0;o<t.length;o++)t[o]&&M(t[o],u,"function"!=typeof n.type);i||null==n.__e||h(n.__e),n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function S(u,i,t){var o,r,f;l.__&&l.__(u,i),r=(o="function"==typeof t)?null:t&&t.__k||i.__k,f=[],T(i,u=(!o&&t||i).__k=v(d,null,[u]),r||preact_module_e,preact_module_e,void 0!==i.ownerSVGElement,!o&&t?[t]:r?null:i.firstChild?preact_module_n.call(i.childNodes):null,f,!o&&t?t:r?r.__e:i.firstChild,o),j(f,u)}function q(n,l){S(n,l,q)}function B(l,u,i){var t,o,r,f=a({},l.props);for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];return arguments.length>2&&(f.children=arguments.length>3?preact_module_n.call(arguments,2):i),y(l.type,f,t||l.key,o||l.ref,null)}function D(n,l){var u={__c:l="__cC"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}preact_module_n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},preact_module_u=0,preact_module_i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),"function"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,preact_module_t=[],preact_module_o="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;
2189
2196
  //# sourceMappingURL=preact.module.js.map
2190
2197
 
2198
+ // CONCATENATED MODULE: ./node_modules/preact/hooks/dist/hooks.module.js
2199
+ var hooks_module_t,hooks_module_u,hooks_module_r,hooks_module_o=0,hooks_module_i=[],hooks_module_c=l.__b,hooks_module_f=l.__r,hooks_module_e=l.diffed,hooks_module_a=l.__c,hooks_module_v=l.unmount;function hooks_module_m(t,r){l.__h&&l.__h(hooks_module_u,t,hooks_module_o||r),hooks_module_o=0;var i=hooks_module_u.__H||(hooks_module_u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function hooks_module_l(n){return hooks_module_o=1,hooks_module_p(hooks_module_w,n)}function hooks_module_p(n,r,o){var i=hooks_module_m(hooks_module_t++,2);return i.t=n,i.__c||(i.__=[o?o(r):hooks_module_w(void 0,r),function(n){var t=i.t(i.__[0],n);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=hooks_module_u),i.__}function hooks_module_y(r,o){var i=hooks_module_m(hooks_module_t++,3);!l.__s&&hooks_module_k(i.__H,o)&&(i.__=r,i.__H=o,hooks_module_u.__H.__h.push(i))}function hooks_module_h(r,o){var i=hooks_module_m(hooks_module_t++,4);!l.__s&&hooks_module_k(i.__H,o)&&(i.__=r,i.__H=o,hooks_module_u.__h.push(i))}function hooks_module_s(n){return hooks_module_o=5,hooks_module_A(function(){return{current:n}},[])}function hooks_module_(n,t,u){hooks_module_o=6,hooks_module_h(function(){"function"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function hooks_module_A(n,u){var r=hooks_module_m(hooks_module_t++,7);return hooks_module_k(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function F(n,t){return hooks_module_o=8,hooks_module_A(function(){return n},t)}function hooks_module_T(n){var r=hooks_module_u.context[n.__c],o=hooks_module_m(hooks_module_t++,9);return o.c=n,r?(null==o.__&&(o.__=!0,r.sub(hooks_module_u)),r.props.value):n.__}function hooks_module_d(t,u){l.useDebugValue&&l.useDebugValue(u?u(t):t)}function hooks_module_q(n){var r=hooks_module_m(hooks_module_t++,10),o=hooks_module_l();return r.__=n,hooks_module_u.componentDidCatch||(hooks_module_u.componentDidCatch=function(n){r.__&&r.__(n),o[1](n)}),[o[0],function(){o[1](void 0)}]}function hooks_module_x(){hooks_module_i.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(hooks_module_g),t.__H.__h.forEach(hooks_module_j),t.__H.__h=[]}catch(u){t.__H.__h=[],l.__e(u,t.__v)}}),hooks_module_i=[]}l.__b=function(n){hooks_module_u=null,hooks_module_c&&hooks_module_c(n)},l.__r=function(n){hooks_module_f&&hooks_module_f(n),hooks_module_t=0;var r=(hooks_module_u=n.__c).__H;r&&(r.__h.forEach(hooks_module_g),r.__h.forEach(hooks_module_j),r.__h=[])},l.diffed=function(t){hooks_module_e&&hooks_module_e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==hooks_module_i.push(o)&&hooks_module_r===l.requestAnimationFrame||((hooks_module_r=l.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),hooks_module_b&&cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);hooks_module_b&&(t=requestAnimationFrame(u))})(hooks_module_x)),hooks_module_u=null},l.__c=function(t,u){u.some(function(t){try{t.__h.forEach(hooks_module_g),t.__h=t.__h.filter(function(n){return!n.__||hooks_module_j(n)})}catch(r){u.some(function(n){n.__h&&(n.__h=[])}),u=[],l.__e(r,t.__v)}}),hooks_module_a&&hooks_module_a(t,u)},l.unmount=function(t){hooks_module_v&&hooks_module_v(t);var u=t.__c;if(u&&u.__H)try{u.__H.__.forEach(hooks_module_g)}catch(t){l.__e(t,u.__v)}};var hooks_module_b="function"==typeof requestAnimationFrame;function hooks_module_g(n){var t=hooks_module_u;"function"==typeof n.__c&&n.__c(),hooks_module_u=t}function hooks_module_j(n){var t=hooks_module_u;n.__c=n.__(),hooks_module_u=t}function hooks_module_k(n,t){return!n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function hooks_module_w(n,t){return"function"==typeof t?t(n):t}
2200
+ //# sourceMappingURL=hooks.module.js.map
2201
+
2202
+ // CONCATENATED MODULE: ./node_modules/preact/compat/dist/compat.module.js
2203
+ function compat_module_S(n,t){for(var e in t)n[e]=t[e];return n}function compat_module_C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return!0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function compat_module_g(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return!r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:compat_module_C(this.props,n)}function r(t){return this.shouldComponentUpdate=e,v(n,t)}return r.displayName="Memo("+(n.displayName||n.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(E.prototype=new _).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return compat_module_C(this.props,n)||compat_module_C(this.state,t)};var compat_module_w=l.__b;l.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),compat_module_w&&compat_module_w(n)};var R="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function compat_module_x(n){function t(t,e){var r=compat_module_S({},t);return delete r.ref,n(r,(e=t.ref||e)&&("object"!=typeof e||"current"in e)?e:null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(n.displayName||n.name)+")",t}var compat_module_N=function(n,t){return null==n?null:A(A(n).map(t))},compat_module_k={map:compat_module_N,forEach:compat_module_N,count:function(n){return n?A(n).length:0},only:function(n){var t=A(n);if(1!==t.length)throw"Children.only";return t[0]},toArray:A},compat_module_A=l.__e;l.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);compat_module_A(n,t,e)};var compat_module_O=l.unmount;function compat_module_L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function compat_module_F(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n},function(n){r=n}),r)throw r;if(!e)throw t;return v(e,u)}return u.displayName="Lazy",u.__f=!0,u}function compat_module_M(){this.u=null,this.o=null}l.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),compat_module_O&&compat_module_O(n)},(compat_module_L.prototype=new _).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i)},compat_module_L.prototype.componentWillUnmount=function(){this.t=[]},compat_module_L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c()}),t.__c.__H=null),null!=(t=compat_module_S({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P)}this.__b=null}var u=t.__e&&v(d,null,n.fallback);return u&&(u.__h=null),[v(d,null,t.__e?null:n.children),u]};var compat_module_T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function compat_module_D(n){return this.getChildContext=function(){return n.context},n.children}function compat_module_I(n){var t=this,e=n.i;t.componentWillUnmount=function(){S(null,t.l),t.l=null,t.i=null},t.i&&t.i!==e&&t.componentWillUnmount(),n.__v?(t.l||(t.i=e,t.l={nodeType:1,parentNode:e,childNodes:[],appendChild:function(n){this.childNodes.push(n),t.i.appendChild(n)},insertBefore:function(n,e){this.childNodes.push(n),t.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),t.i.removeChild(n)}}),S(v(compat_module_D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount()}function W(n,t){return v(compat_module_I,{__v:n,i:t})}(compat_module_M.prototype=new _).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),compat_module_T(t,n,r)):u()};e?e(o):o()}},compat_module_M.prototype.render=function(n){this.u=null,this.o=new Map;var t=A(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},compat_module_M.prototype.componentDidUpdate=compat_module_M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){compat_module_T(n,e,t)})};var compat_module_j="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,compat_module_P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V="undefined"!=typeof document,compat_module_z=function(n){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function compat_module_B(n,t,e){return null==t.__k&&(t.textContent=""),S(n,t),"function"==typeof e&&e(),n?n.__c:null}function compat_module_H(n,t,e){return q(n,t),"function"==typeof e&&e(),n?n.__c:null}_.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(_.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t})}})});var Z=l.event;function Y(){}function compat_module_$(){return this.cancelBubble}function compat_module_q(){return this.defaultPrevented}l.event=function(n){return Z&&(n=Z(n)),n.persist=Y,n.isPropagationStopped=compat_module_$,n.isDefaultPrevented=compat_module_q,n.nativeEvent=n};var G,J={configurable:!0,get:function(){return this.class}},K=l.vnode;l.vnode=function(n){var t=n.type,e=n.props,r=e;if("string"==typeof t){var u=-1===t.indexOf("-");for(var o in r={},e){var i=e[o];V&&"children"===o&&"noscript"===t||"value"===o&&"defaultValue"in e&&null==i||("defaultValue"===o&&"value"in e&&null==e.value?o="value":"download"===o&&!0===i?i="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!compat_module_z(e.type)?o="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():u&&compat_module_P.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===i&&(i=void 0),r[o]=i)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=A(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value)})),"select"==t&&null!=r.defaultValue&&(r.value=A(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value})),n.props=r,e.class!=e.className&&(J.enumerable="className"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,"className",J))}n.$$typeof=compat_module_j,K&&K(n)};var Q=l.__r;l.__r=function(n){Q&&Q(n),G=n.__c};var X={ReactCurrentDispatcher:{current:{readContext:function(n){return G.__n[n.__c].props.value}}}},nn="17.0.2";function tn(n){return v.bind(null,n)}function en(n){return!!n&&n.$$typeof===compat_module_j}function rn(n){return en(n)?B.apply(null,arguments):n}function un(n){return!!n.__k&&(S(null,n),!0)}function on(n){return n&&(n.base||1===n.nodeType&&n)||null}var ln=function(n,t){return n(t)},cn=function(n,t){return n(t)},fn=d;/* harmony default export */ var compat_module = ({useState:hooks_module_l,useReducer:hooks_module_p,useEffect:hooks_module_y,useLayoutEffect:hooks_module_h,useRef:hooks_module_s,useImperativeHandle:hooks_module_,useMemo:hooks_module_A,useCallback:F,useContext:hooks_module_T,useDebugValue:hooks_module_d,version:"17.0.2",Children:compat_module_k,render:compat_module_B,hydrate:compat_module_H,unmountComponentAtNode:un,createPortal:W,createElement:v,createContext:D,createFactory:tn,cloneElement:rn,createRef:p,Fragment:d,isValidElement:en,findDOMNode:on,Component:_,PureComponent:E,memo:compat_module_g,forwardRef:compat_module_x,flushSync:cn,unstable_batchedUpdates:ln,StrictMode:d,Suspense:compat_module_L,SuspenseList:compat_module_M,lazy:compat_module_F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:X});
2204
+ //# sourceMappingURL=compat.module.js.map
2205
+
2191
2206
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/core/vdom.js
2192
2207
 
2193
2208
 
2194
2209
 
2210
+
2195
2211
  var globalObj = typeof globalThis !== 'undefined' ? globalThis : window; // // TODO: streamline when killing IE11 support
2196
2212
  if (globalObj.FullCalendarVDom) {
2197
2213
  console.warn('FullCalendar VDOM already loaded');
2198
2214
  }
2199
2215
  else {
2200
2216
  globalObj.FullCalendarVDom = {
2201
- Component: p,
2202
- createElement: a,
2203
- render: N,
2204
- createRef: h,
2205
- Fragment: y,
2217
+ Component: _,
2218
+ createElement: v,
2219
+ render: S,
2220
+ createRef: p,
2221
+ Fragment: d,
2206
2222
  createContext: createContext,
2223
+ createPortal: W,
2207
2224
  flushToDom: flushToDom,
2208
2225
  unmountComponentAtNode: unmountComponentAtNode,
2209
2226
  };
@@ -2212,29 +2229,29 @@ else {
2212
2229
  // TODO: lock version
2213
2230
  // TODO: link gh issues
2214
2231
  function flushToDom() {
2215
- var oldDebounceRendering = n.debounceRendering; // orig
2232
+ var oldDebounceRendering = l.debounceRendering; // orig
2216
2233
  var callbackQ = [];
2217
2234
  function execCallbackSync(callback) {
2218
2235
  callbackQ.push(callback);
2219
2236
  }
2220
- n.debounceRendering = execCallbackSync;
2221
- N(a(vdom_FakeComponent, {}), document.createElement('div'));
2237
+ l.debounceRendering = execCallbackSync;
2238
+ S(v(vdom_FakeComponent, {}), document.createElement('div'));
2222
2239
  while (callbackQ.length) {
2223
2240
  callbackQ.shift()();
2224
2241
  }
2225
- n.debounceRendering = oldDebounceRendering;
2242
+ l.debounceRendering = oldDebounceRendering;
2226
2243
  }
2227
2244
  var vdom_FakeComponent = /** @class */ (function (_super) {
2228
2245
  __extends(FakeComponent, _super);
2229
2246
  function FakeComponent() {
2230
2247
  return _super !== null && _super.apply(this, arguments) || this;
2231
2248
  }
2232
- FakeComponent.prototype.render = function () { return a('div', {}); };
2249
+ FakeComponent.prototype.render = function () { return v('div', {}); };
2233
2250
  FakeComponent.prototype.componentDidMount = function () { this.setState({}); };
2234
2251
  return FakeComponent;
2235
- }(p));
2252
+ }(_));
2236
2253
  function createContext(defaultValue) {
2237
- var ContextType = q(defaultValue);
2254
+ var ContextType = D(defaultValue);
2238
2255
  var origProvider = ContextType.Provider;
2239
2256
  ContextType.Provider = function () {
2240
2257
  var _this = this;
@@ -2264,7 +2281,7 @@ function createContext(defaultValue) {
2264
2281
  return ContextType;
2265
2282
  }
2266
2283
  function unmountComponentAtNode(node) {
2267
- N(null, node);
2284
+ S(null, node);
2268
2285
  }
2269
2286
 
2270
2287
  // EXTERNAL MODULE: ./node_modules/@fullcalendar/common/main.css
@@ -2281,16 +2298,18 @@ var vdom_render = FullCalendarVDom.render;
2281
2298
  var createRef = FullCalendarVDom.createRef;
2282
2299
  var Fragment = FullCalendarVDom.Fragment;
2283
2300
  var vdom_createContext = FullCalendarVDom.createContext;
2301
+ var createPortal = FullCalendarVDom.createPortal;
2284
2302
  var vdom_flushToDom = FullCalendarVDom.flushToDom;
2285
2303
  var vdom_unmountComponentAtNode = FullCalendarVDom.unmountComponentAtNode;
2304
+ /* eslint-enable */
2286
2305
 
2287
2306
 
2288
2307
 
2289
2308
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/common/main.js
2290
2309
  /*!
2291
- FullCalendar v5.3.2
2310
+ FullCalendar v5.10.1
2292
2311
  Docs & License: https://fullcalendar.io/
2293
- (c) 2020 Adam Shaw
2312
+ (c) 2021 Adam Shaw
2294
2313
  */
2295
2314
 
2296
2315
 
@@ -2315,6 +2334,7 @@ var EventSourceApi = /** @class */ (function () {
2315
2334
  this.context.dispatch({
2316
2335
  type: 'FETCH_EVENT_SOURCES',
2317
2336
  sourceIds: [this.internalEventSource.sourceId],
2337
+ isRefetch: true,
2318
2338
  });
2319
2339
  };
2320
2340
  Object.defineProperty(EventSourceApi.prototype, "id", {
@@ -2325,13 +2345,19 @@ var EventSourceApi = /** @class */ (function () {
2325
2345
  configurable: true
2326
2346
  });
2327
2347
  Object.defineProperty(EventSourceApi.prototype, "url", {
2328
- // only relevant to json-feed event sources
2329
2348
  get: function () {
2330
2349
  return this.internalEventSource.meta.url;
2331
2350
  },
2332
2351
  enumerable: false,
2333
2352
  configurable: true
2334
2353
  });
2354
+ Object.defineProperty(EventSourceApi.prototype, "format", {
2355
+ get: function () {
2356
+ return this.internalEventSource.meta.format; // TODO: bad. not guaranteed
2357
+ },
2358
+ enumerable: false,
2359
+ configurable: true
2360
+ });
2335
2361
  return EventSourceApi;
2336
2362
  }());
2337
2363
 
@@ -2412,6 +2438,26 @@ function applyStyleProp(el, name, val) {
2412
2438
  el.style[name] = val;
2413
2439
  }
2414
2440
  }
2441
+ // Event Handling
2442
+ // ----------------------------------------------------------------------------------------------------------------
2443
+ // if intercepting bubbled events at the document/window/body level,
2444
+ // and want to see originating element (the 'target'), use this util instead
2445
+ // of `ev.target` because it goes within web-component boundaries.
2446
+ function getEventTargetViaRoot(ev) {
2447
+ var _a, _b;
2448
+ return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
2449
+ }
2450
+ // Shadow DOM consuderations
2451
+ // ----------------------------------------------------------------------------------------------------------------
2452
+ function getElRoot(el) {
2453
+ return el.getRootNode ? el.getRootNode() : document;
2454
+ }
2455
+ // Unique ID for DOM attribute
2456
+ var guid$1 = 0;
2457
+ function getUniqueDomId() {
2458
+ guid$1 += 1;
2459
+ return 'fc-dom-' + guid$1;
2460
+ }
2415
2461
 
2416
2462
  // Stops a mouse/touch event from doing it's native browser action
2417
2463
  function preventDefault(ev) {
@@ -2471,6 +2517,22 @@ function whenTransitionDone(el, callback) {
2471
2517
  el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
2472
2518
  });
2473
2519
  }
2520
+ // ARIA workarounds
2521
+ // ----------------------------------------------------------------------------------------------------------------
2522
+ function createAriaClickAttrs(handler) {
2523
+ return __assign({ onClick: handler }, createAriaKeyboardAttrs(handler));
2524
+ }
2525
+ function createAriaKeyboardAttrs(handler) {
2526
+ return {
2527
+ tabIndex: 0,
2528
+ onKeyDown: function (ev) {
2529
+ if (ev.key === 'Enter' || ev.key === ' ') {
2530
+ handler(ev);
2531
+ ev.preventDefault(); // if space, don't scroll down page
2532
+ }
2533
+ },
2534
+ };
2535
+ }
2474
2536
 
2475
2537
  var guidNumber = 0;
2476
2538
  function guid() {
@@ -2571,6 +2633,15 @@ function padStart(val, len) {
2571
2633
  var s = String(val);
2572
2634
  return '000'.substr(0, len - s.length) + s;
2573
2635
  }
2636
+ function formatWithOrdinals(formatter, args, fallbackText) {
2637
+ if (typeof formatter === 'function') {
2638
+ return formatter.apply(void 0, args);
2639
+ }
2640
+ if (typeof formatter === 'string') { // non-blank string
2641
+ return args.reduce(function (str, arg, index) { return (str.replace('$' + index, arg || '')); }, formatter);
2642
+ }
2643
+ return fallbackText;
2644
+ }
2574
2645
  /* Number Utilities
2575
2646
  ----------------------------------------------------------------------------------------------------------------------*/
2576
2647
  function compareNumbers(a, b) {
@@ -3039,7 +3110,7 @@ function parseObject(obj) {
3039
3110
  milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
3040
3111
  (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
3041
3112
  (obj.seconds || obj.second || 0) * 1000 + // seconds
3042
- (obj.milliseconds || obj.millisecond || obj.ms || 0),
3113
+ (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms
3043
3114
  };
3044
3115
  var weeks = obj.weeks || obj.week;
3045
3116
  if (weeks) {
@@ -3443,7 +3514,7 @@ function buildFormattingFunc(standardDateProps, extendedSettings, context) {
3443
3514
  return function (date) { return (formatTimeZoneOffset(date.timeZoneOffset)); };
3444
3515
  }
3445
3516
  if (standardDatePropCnt === 0 && extendedSettings.week) {
3446
- return function (date) { return (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.locale, extendedSettings.week)); };
3517
+ return function (date) { return (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week)); };
3447
3518
  }
3448
3519
  return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
3449
3520
  }
@@ -3535,15 +3606,17 @@ function injectTzoStr(s, tzoStr) {
3535
3606
  }
3536
3607
  return s;
3537
3608
  }
3538
- function formatWeekNumber(num, weekText, locale, display) {
3609
+ function formatWeekNumber(num, weekText, weekTextLong, locale, display) {
3539
3610
  var parts = [];
3540
- if (display === 'narrow') {
3611
+ if (display === 'long') {
3612
+ parts.push(weekTextLong);
3613
+ }
3614
+ else if (display === 'short' || display === 'narrow') {
3541
3615
  parts.push(weekText);
3542
3616
  }
3543
- else if (display === 'short') {
3544
- parts.push(weekText, ' ');
3617
+ if (display === 'long' || display === 'short') {
3618
+ parts.push(' ');
3545
3619
  }
3546
- // otherwise, considered 'numeric'
3547
3620
  parts.push(locale.simpleNumberFormat.format(num));
3548
3621
  if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
3549
3622
  parts.reverse();
@@ -3697,6 +3770,7 @@ var BASE_OPTION_REFINERS = {
3697
3770
  defaultTimedEventDuration: createDuration,
3698
3771
  nextDayThreshold: createDuration,
3699
3772
  scrollTime: createDuration,
3773
+ scrollTimeReset: Boolean,
3700
3774
  slotMinTime: createDuration,
3701
3775
  slotMaxTime: createDuration,
3702
3776
  dayPopoverFormat: createFormatter,
@@ -3750,6 +3824,7 @@ var BASE_OPTION_REFINERS = {
3750
3824
  unselectAuto: Boolean,
3751
3825
  dropAccept: identity,
3752
3826
  eventOrder: parseFieldSpecs,
3827
+ eventOrderStrict: Boolean,
3753
3828
  handleWindowResize: Boolean,
3754
3829
  windowResizeDelay: Number,
3755
3830
  longPressDelay: Number,
@@ -3763,6 +3838,7 @@ var BASE_OPTION_REFINERS = {
3763
3838
  displayEventTime: Boolean,
3764
3839
  displayEventEnd: Boolean,
3765
3840
  weekText: String,
3841
+ weekTextLong: String,
3766
3842
  progressiveEventRendering: Boolean,
3767
3843
  businessHours: identity,
3768
3844
  initialDate: identity,
@@ -3816,12 +3892,16 @@ var BASE_OPTION_REFINERS = {
3816
3892
  eventTimeFormat: createFormatter,
3817
3893
  rerenderDelay: Number,
3818
3894
  moreLinkText: identity,
3895
+ moreLinkHint: identity,
3819
3896
  selectMinDistance: Number,
3820
3897
  selectable: Boolean,
3821
3898
  selectLongPressDelay: Number,
3822
3899
  eventLongPressDelay: Number,
3823
3900
  selectMirror: Boolean,
3901
+ eventMaxStack: Number,
3824
3902
  eventMinHeight: Number,
3903
+ eventMinWidth: Number,
3904
+ eventShortHeight: Number,
3825
3905
  slotEventOverlap: Boolean,
3826
3906
  plugins: identity,
3827
3907
  firstDay: Number,
@@ -3834,8 +3914,19 @@ var BASE_OPTION_REFINERS = {
3834
3914
  validRange: identity,
3835
3915
  visibleRange: identity,
3836
3916
  titleFormat: identity,
3917
+ eventInteractive: Boolean,
3837
3918
  // only used by list-view, but languages define the value, so we need it in base options
3838
3919
  noEventsText: String,
3920
+ viewHint: identity,
3921
+ navLinkHint: identity,
3922
+ closeHint: String,
3923
+ timeHint: String,
3924
+ eventHint: String,
3925
+ moreLinkClick: identity,
3926
+ moreLinkClassNames: identity,
3927
+ moreLinkContent: identity,
3928
+ moreLinkDidMount: identity,
3929
+ moreLinkWillUnmount: identity,
3839
3930
  };
3840
3931
  // do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
3841
3932
  // raw values.
@@ -3861,6 +3952,7 @@ var BASE_OPTION_DEFAULTS = {
3861
3952
  editable: false,
3862
3953
  nowIndicator: false,
3863
3954
  scrollTime: '06:00:00',
3955
+ scrollTimeReset: true,
3864
3956
  slotMinTime: '00:00:00',
3865
3957
  slotMaxTime: '24:00:00',
3866
3958
  showNonCurrentDates: true,
@@ -3886,6 +3978,9 @@ var BASE_OPTION_DEFAULTS = {
3886
3978
  expandRows: false,
3887
3979
  navLinks: false,
3888
3980
  selectable: false,
3981
+ eventMinHeight: 15,
3982
+ eventMinWidth: 30,
3983
+ eventShortHeight: 30,
3889
3984
  };
3890
3985
  // calendar listeners
3891
3986
  // ------------------
@@ -3915,6 +4010,7 @@ var CALENDAR_LISTENER_REFINERS = {
3915
4010
  // -------------------------
3916
4011
  var CALENDAR_OPTION_REFINERS = {
3917
4012
  buttonText: identity,
4013
+ buttonHints: identity,
3918
4014
  views: identity,
3919
4015
  plugins: identity,
3920
4016
  initialEvents: identity,
@@ -3925,6 +4021,7 @@ var COMPLEX_OPTION_COMPARATORS = {
3925
4021
  headerToolbar: isBoolComplexEqual,
3926
4022
  footerToolbar: isBoolComplexEqual,
3927
4023
  buttonText: isBoolComplexEqual,
4024
+ buttonHints: isBoolComplexEqual,
3928
4025
  buttonIcons: isBoolComplexEqual,
3929
4026
  };
3930
4027
  function isBoolComplexEqual(a, b) {
@@ -4113,7 +4210,7 @@ function createEventUi(refined, context) {
4113
4210
  backgroundColor: refined.backgroundColor || refined.color || '',
4114
4211
  borderColor: refined.borderColor || refined.color || '',
4115
4212
  textColor: refined.textColor || '',
4116
- classNames: (refined.className || []).concat(refined.classNames || []),
4213
+ classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural
4117
4214
  };
4118
4215
  }
4119
4216
  // TODO: prevent against problems with <2 args!
@@ -4140,6 +4237,7 @@ var EVENT_NON_DATE_REFINERS = {
4140
4237
  groupId: String,
4141
4238
  title: String,
4142
4239
  url: String,
4240
+ interactive: Boolean,
4143
4241
  };
4144
4242
  var EVENT_DATE_REFINERS = {
4145
4243
  start: identity,
@@ -4192,6 +4290,7 @@ function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
4192
4290
  sourceId: sourceId,
4193
4291
  allDay: allDay,
4194
4292
  hasEnd: hasEnd,
4293
+ interactive: refined.interactive,
4195
4294
  ui: createEventUi(refined, context),
4196
4295
  extendedProps: __assign(__assign({}, (refined.extendedProps || {})), extra),
4197
4296
  };
@@ -4579,9 +4678,15 @@ startOverride, endOverride) {
4579
4678
  if (displayEventEnd == null) {
4580
4679
  displayEventEnd = defaultDisplayEventEnd !== false;
4581
4680
  }
4582
- if (displayEventTime && !eventDef.allDay && (seg.isStart || seg.isEnd)) {
4583
- var segStart = startOverride || (seg.isStart ? eventInstance.range.start : (seg.start || seg.eventRange.range.start));
4584
- var segEnd = endOverride || (seg.isEnd ? eventInstance.range.end : (seg.end || seg.eventRange.range.end));
4681
+ var wholeEventStart = eventInstance.range.start;
4682
+ var wholeEventEnd = eventInstance.range.end;
4683
+ var segStart = startOverride || seg.start || seg.eventRange.range.start;
4684
+ var segEnd = endOverride || seg.end || seg.eventRange.range.end;
4685
+ var isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
4686
+ var isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
4687
+ if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
4688
+ segStart = isStartDay ? wholeEventStart : segStart;
4689
+ segEnd = isEndDay ? wholeEventEnd : segEnd;
4585
4690
  if (displayEventEnd && eventDef.hasEnd) {
4586
4691
  return dateEnv.formatRange(segStart, segEnd, timeFormat, {
4587
4692
  forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
@@ -4589,7 +4694,7 @@ startOverride, endOverride) {
4589
4694
  });
4590
4695
  }
4591
4696
  return dateEnv.format(segStart, timeFormat, {
4592
- forcedTzo: startOverride ? null : eventInstance.forcedStartTzo,
4697
+ forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
4593
4698
  });
4594
4699
  }
4595
4700
  return '';
@@ -4645,6 +4750,34 @@ function buildEventRangeKey(eventRange) {
4645
4750
  : eventRange.def.defId + ":" + eventRange.range.start.toISOString();
4646
4751
  // inverse-background events don't have specific instances. TODO: better solution
4647
4752
  }
4753
+ function getSegAnchorAttrs(seg, context) {
4754
+ var _a = seg.eventRange, def = _a.def, instance = _a.instance;
4755
+ var url = def.url;
4756
+ if (url) {
4757
+ return { href: url };
4758
+ }
4759
+ var emitter = context.emitter, options = context.options;
4760
+ var eventInteractive = options.eventInteractive;
4761
+ if (eventInteractive == null) {
4762
+ eventInteractive = def.interactive;
4763
+ if (eventInteractive == null) {
4764
+ eventInteractive = Boolean(emitter.hasHandlers('eventClick'));
4765
+ }
4766
+ }
4767
+ // mock what happens in EventClicking
4768
+ if (eventInteractive) {
4769
+ // only attach keyboard-related handlers because click handler is already done in EventClicking
4770
+ return createAriaKeyboardAttrs(function (ev) {
4771
+ emitter.trigger('eventClick', {
4772
+ el: ev.target,
4773
+ event: new main_EventApi(context, def, instance),
4774
+ jsEvent: ev,
4775
+ view: context.viewApi,
4776
+ });
4777
+ });
4778
+ }
4779
+ return {};
4780
+ }
4648
4781
 
4649
4782
  var STANDARD_PROPS = {
4650
4783
  start: identity,
@@ -4914,6 +5047,7 @@ var EVENT_SOURCE_REFINERS = {
4914
5047
  id: String,
4915
5048
  defaultAllDay: Boolean,
4916
5049
  url: String,
5050
+ format: String,
4917
5051
  events: identity,
4918
5052
  eventDataTransform: identity,
4919
5053
  // for any network-related sources
@@ -5054,7 +5188,7 @@ var main_CalendarApi = /** @class */ (function () {
5054
5188
  for (var _i = 1; _i < arguments.length; _i++) {
5055
5189
  args[_i - 1] = arguments[_i];
5056
5190
  }
5057
- (_a = this.currentDataManager.emitter).trigger.apply(_a, __spreadArrays([handlerName], args));
5191
+ (_a = this.currentDataManager.emitter).trigger.apply(_a, __spreadArray([handlerName], args));
5058
5192
  };
5059
5193
  // View
5060
5194
  // -----------------------------------------------------------------------------------------------------------------
@@ -5118,7 +5252,7 @@ var main_CalendarApi = /** @class */ (function () {
5118
5252
  // Preference is given to views that have corresponding buttons.
5119
5253
  CalendarApi.prototype.getUnitViewSpec = function (unit) {
5120
5254
  var _a = this.getCurrentData(), viewSpecs = _a.viewSpecs, toolbarConfig = _a.toolbarConfig;
5121
- var viewTypes = [].concat(toolbarConfig.viewsWithButtons);
5255
+ var viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);
5122
5256
  var i;
5123
5257
  var spec;
5124
5258
  for (var viewType in viewSpecs) {
@@ -5256,7 +5390,7 @@ var main_CalendarApi = /** @class */ (function () {
5256
5390
  if (!currentData.eventStore.defs[def.defId]) {
5257
5391
  this.dispatch({
5258
5392
  type: 'ADD_EVENTS',
5259
- eventStore: eventTupleToStore({ def: def, instance: instance }),
5393
+ eventStore: eventTupleToStore({ def: def, instance: instance }), // TODO: better util for two args?
5260
5394
  });
5261
5395
  this.triggerEventAdd(eventInput);
5262
5396
  }
@@ -5379,7 +5513,7 @@ var main_CalendarApi = /** @class */ (function () {
5379
5513
  this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
5380
5514
  };
5381
5515
  CalendarApi.prototype.refetchEvents = function () {
5382
- this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
5516
+ this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });
5383
5517
  };
5384
5518
  // Scroll
5385
5519
  // -----------------------------------------------------------------------------------------------------------------
@@ -5407,6 +5541,13 @@ var main_EventApi = /** @class */ (function () {
5407
5541
  var _a, _b;
5408
5542
  if (name in EVENT_DATE_REFINERS) {
5409
5543
  console.warn('Could not set date-related prop \'name\'. Use one of the date-related methods instead.');
5544
+ // TODO: make proper aliasing system?
5545
+ }
5546
+ else if (name === 'id') {
5547
+ val = EVENT_NON_DATE_REFINERS[name](val);
5548
+ this.mutate({
5549
+ standardProps: { publicId: val }, // hardcoded internal name
5550
+ });
5410
5551
  }
5411
5552
  else if (name in EVENT_NON_DATE_REFINERS) {
5412
5553
  val = EVENT_NON_DATE_REFINERS[name](val);
@@ -5561,8 +5702,8 @@ var main_EventApi = /** @class */ (function () {
5561
5702
  if (instance) {
5562
5703
  var def = this._def;
5563
5704
  var context_1 = this._context;
5564
- var eventStore = context_1.getCurrentData().eventStore;
5565
- var relevantEvents_1 = getRelevantEvents(eventStore, instance.instanceId);
5705
+ var eventStore_1 = context_1.getCurrentData().eventStore;
5706
+ var relevantEvents = getRelevantEvents(eventStore_1, instance.instanceId);
5566
5707
  var eventConfigBase = {
5567
5708
  '': {
5568
5709
  display: '',
@@ -5577,22 +5718,22 @@ var main_EventApi = /** @class */ (function () {
5577
5718
  classNames: [],
5578
5719
  },
5579
5720
  };
5580
- relevantEvents_1 = applyMutationToEventStore(relevantEvents_1, eventConfigBase, mutation, context_1);
5721
+ relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context_1);
5581
5722
  var oldEvent = new EventApi(context_1, def, instance); // snapshot
5582
- this._def = relevantEvents_1.defs[def.defId];
5583
- this._instance = relevantEvents_1.instances[instance.instanceId];
5723
+ this._def = relevantEvents.defs[def.defId];
5724
+ this._instance = relevantEvents.instances[instance.instanceId];
5584
5725
  context_1.dispatch({
5585
5726
  type: 'MERGE_EVENTS',
5586
- eventStore: relevantEvents_1,
5727
+ eventStore: relevantEvents,
5587
5728
  });
5588
5729
  context_1.emitter.trigger('eventChange', {
5589
5730
  oldEvent: oldEvent,
5590
5731
  event: this,
5591
- relatedEvents: buildEventApis(relevantEvents_1, context_1, instance),
5732
+ relatedEvents: buildEventApis(relevantEvents, context_1, instance),
5592
5733
  revert: function () {
5593
5734
  context_1.dispatch({
5594
- type: 'REMOVE_EVENTS',
5595
- eventStore: relevantEvents_1,
5735
+ type: 'RESET_EVENTS',
5736
+ eventStore: eventStore_1,
5596
5737
  });
5597
5738
  },
5598
5739
  });
@@ -5915,6 +6056,7 @@ var DateEnv = /** @class */ (function () {
5915
6056
  this.weekNumberFunc = settings.weekNumberCalculation;
5916
6057
  }
5917
6058
  this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
6059
+ this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;
5918
6060
  this.cmdFormatter = settings.cmdFormatter;
5919
6061
  this.defaultSeparator = settings.defaultSeparator;
5920
6062
  }
@@ -6217,11 +6359,11 @@ var DateEnv = /** @class */ (function () {
6217
6359
 
6218
6360
  var globalLocales = [];
6219
6361
 
6220
- var RAW_EN_LOCALE = {
6362
+ var MINIMAL_RAW_EN_LOCALE = {
6221
6363
  code: 'en',
6222
6364
  week: {
6223
6365
  dow: 0,
6224
- doy: 4,
6366
+ doy: 4, // 4 days need to be within the year to be considered the first week
6225
6367
  },
6226
6368
  direction: 'ltr',
6227
6369
  buttonText: {
@@ -6237,10 +6379,28 @@ var RAW_EN_LOCALE = {
6237
6379
  list: 'list',
6238
6380
  },
6239
6381
  weekText: 'W',
6382
+ weekTextLong: 'Week',
6383
+ closeHint: 'Close',
6384
+ timeHint: 'Time',
6385
+ eventHint: 'Event',
6240
6386
  allDayText: 'all-day',
6241
6387
  moreLinkText: 'more',
6242
6388
  noEventsText: 'No events to display',
6243
6389
  };
6390
+ var RAW_EN_LOCALE = __assign(__assign({}, MINIMAL_RAW_EN_LOCALE), {
6391
+ // Includes things we don't want other locales to inherit,
6392
+ // things that derive from other translatable strings.
6393
+ buttonHints: {
6394
+ prev: 'Previous $0',
6395
+ next: 'Next $0',
6396
+ today: function (buttonText, unit) {
6397
+ return (unit === 'day')
6398
+ ? 'Today'
6399
+ : "This " + buttonText;
6400
+ },
6401
+ }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint: function (eventCnt) {
6402
+ return "Show " + eventCnt + " more event" + (eventCnt === 1 ? '' : 's');
6403
+ } });
6244
6404
  function organizeRawLocales(explicitRawLocales) {
6245
6405
  var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
6246
6406
  var allRawLocales = globalLocales.concat(explicitRawLocales);
@@ -6280,7 +6440,7 @@ function queryRawLocale(codes, available) {
6280
6440
  return null;
6281
6441
  }
6282
6442
  function parseLocale(codeArg, codes, raw) {
6283
- var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
6443
+ var merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
6284
6444
  delete merged.code; // don't want this part of the options
6285
6445
  var week = merged.week;
6286
6446
  delete merged.week;
@@ -6295,7 +6455,7 @@ function parseLocale(codeArg, codes, raw) {
6295
6455
 
6296
6456
  function formatDate(dateInput, options) {
6297
6457
  if (options === void 0) { options = {}; }
6298
- var dateEnv = buildDateEnv(options);
6458
+ var dateEnv = buildDateEnv$1(options);
6299
6459
  var formatter = createFormatter(options);
6300
6460
  var dateMeta = dateEnv.createMarkerMeta(dateInput);
6301
6461
  if (!dateMeta) { // TODO: warning?
@@ -6306,7 +6466,7 @@ function formatDate(dateInput, options) {
6306
6466
  });
6307
6467
  }
6308
6468
  function formatRange(startInput, endInput, options) {
6309
- var dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
6469
+ var dateEnv = buildDateEnv$1(typeof options === 'object' && options ? options : {}); // pass in if non-null object
6310
6470
  var formatter = createFormatter(options);
6311
6471
  var startMeta = dateEnv.createMarkerMeta(startInput);
6312
6472
  var endMeta = dateEnv.createMarkerMeta(endInput);
@@ -6321,7 +6481,7 @@ function formatRange(startInput, endInput, options) {
6321
6481
  });
6322
6482
  }
6323
6483
  // TODO: more DRY and optimized
6324
- function buildDateEnv(settings) {
6484
+ function buildDateEnv$1(settings) {
6325
6485
  var locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
6326
6486
  return new DateEnv(__assign(__assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale: locale }));
6327
6487
  }
@@ -6332,7 +6492,7 @@ var DEF_DEFAULTS = {
6332
6492
  daysOfWeek: [1, 2, 3, 4, 5],
6333
6493
  display: 'inverse-background',
6334
6494
  classNames: 'fc-non-business',
6335
- groupId: '_businessHours',
6495
+ groupId: '_businessHours', // so multiple defs get grouped
6336
6496
  };
6337
6497
  /*
6338
6498
  TODO: pass around as EventDefHash!!!
@@ -6628,12 +6788,33 @@ function getSlotClassNames(meta, theme) {
6628
6788
  return classNames;
6629
6789
  }
6630
6790
 
6631
- function buildNavLinkData(date, type) {
6632
- if (type === void 0) { type = 'day'; }
6633
- return JSON.stringify({
6634
- date: formatDayString(date),
6635
- type: type,
6636
- });
6791
+ var DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
6792
+ var WEEK_FORMAT = createFormatter({ week: 'long' });
6793
+ function buildNavLinkAttrs(context, dateMarker, viewType, isTabbable) {
6794
+ if (viewType === void 0) { viewType = 'day'; }
6795
+ if (isTabbable === void 0) { isTabbable = true; }
6796
+ var dateEnv = context.dateEnv, options = context.options, calendarApi = context.calendarApi;
6797
+ var dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
6798
+ if (options.navLinks) {
6799
+ var zonedDate = dateEnv.toDate(dateMarker);
6800
+ var handleInteraction = function (ev) {
6801
+ var customAction = viewType === 'day' ? options.navLinkDayClick :
6802
+ viewType === 'week' ? options.navLinkWeekClick : null;
6803
+ if (typeof customAction === 'function') {
6804
+ customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
6805
+ }
6806
+ else {
6807
+ if (typeof customAction === 'string') {
6808
+ viewType = customAction;
6809
+ }
6810
+ calendarApi.zoomTo(dateMarker, viewType);
6811
+ }
6812
+ };
6813
+ return __assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
6814
+ ? createAriaClickAttrs(handleInteraction)
6815
+ : { onClick: handleInteraction }));
6816
+ }
6817
+ return { 'aria-label': dateStr };
6637
6818
  }
6638
6819
 
6639
6820
  var _isRtlScrollbarOnLeft = null;
@@ -6672,6 +6853,9 @@ function getScrollbarWidths() {
6672
6853
  function computeScrollbarWidths() {
6673
6854
  var el = document.createElement('div');
6674
6855
  el.style.overflow = 'scroll';
6856
+ el.style.position = 'absolute';
6857
+ el.style.top = '-9999px';
6858
+ el.style.left = '-9999px';
6675
6859
  document.body.appendChild(el);
6676
6860
  var res = computeScrollbarWidthsForEl(el);
6677
6861
  document.body.removeChild(el);
@@ -6745,6 +6929,21 @@ function computeRect(el) {
6745
6929
  bottom: rect.bottom + window.pageYOffset,
6746
6930
  };
6747
6931
  }
6932
+ function computeClippedClientRect(el) {
6933
+ var clippingParents = getClippingParents(el);
6934
+ var rect = el.getBoundingClientRect();
6935
+ for (var _i = 0, clippingParents_1 = clippingParents; _i < clippingParents_1.length; _i++) {
6936
+ var clippingParent = clippingParents_1[_i];
6937
+ var intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
6938
+ if (intersection) {
6939
+ rect = intersection;
6940
+ }
6941
+ else {
6942
+ return null;
6943
+ }
6944
+ }
6945
+ return rect;
6946
+ }
6748
6947
  function computeHeightAndMargins(el) {
6749
6948
  return el.getBoundingClientRect().height + computeVMargins(el);
6750
6949
  }
@@ -6828,8 +7027,8 @@ var Emitter = /** @class */ (function () {
6828
7027
  }
6829
7028
  };
6830
7029
  Emitter.prototype.hasHandlers = function (type) {
6831
- return (this.handlers[type] && this.handlers[type].length) ||
6832
- (this.options && this.options[type]);
7030
+ return Boolean((this.handlers[type] && this.handlers[type].length) ||
7031
+ (this.options && this.options[type]));
6833
7032
  };
6834
7033
  return Emitter;
6835
7034
  }());
@@ -7088,11 +7287,12 @@ main_Theme.prototype.baseIconClass = '';
7088
7287
  main_Theme.prototype.iconOverridePrefix = '';
7089
7288
 
7090
7289
  var main_ScrollResponder = /** @class */ (function () {
7091
- function ScrollResponder(execFunc, emitter, scrollTime) {
7290
+ function ScrollResponder(execFunc, emitter, scrollTime, scrollTimeReset) {
7092
7291
  var _this = this;
7093
7292
  this.execFunc = execFunc;
7094
7293
  this.emitter = emitter;
7095
7294
  this.scrollTime = scrollTime;
7295
+ this.scrollTimeReset = scrollTimeReset;
7096
7296
  this.handleScrollRequest = function (request) {
7097
7297
  _this.queuedRequest = __assign({}, _this.queuedRequest || {}, request);
7098
7298
  _this.drain();
@@ -7104,7 +7304,7 @@ var main_ScrollResponder = /** @class */ (function () {
7104
7304
  this.emitter.off('_scrollRequest', this.handleScrollRequest);
7105
7305
  };
7106
7306
  ScrollResponder.prototype.update = function (isDatesNew) {
7107
- if (isDatesNew) {
7307
+ if (isDatesNew && this.scrollTimeReset) {
7108
7308
  this.fireInitialScroll(); // will drain
7109
7309
  }
7110
7310
  else {
@@ -7146,7 +7346,7 @@ function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator,
7146
7346
  emitter.off('_resize', handler);
7147
7347
  },
7148
7348
  createScrollResponder: function (execFunc) {
7149
- return new main_ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime));
7349
+ return new main_ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
7150
7350
  },
7151
7351
  registerInteractiveComponent: registerInteractiveComponent,
7152
7352
  unregisterInteractiveComponent: unregisterInteractiveComponent,
@@ -7203,467 +7403,153 @@ function setRef(ref, current) {
7203
7403
  }
7204
7404
  }
7205
7405
 
7206
- function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
7207
- switch (action.type) {
7208
- case 'RECEIVE_EVENTS': // raw
7209
- return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
7210
- case 'ADD_EVENTS': // already parsed, but not expanded
7211
- return addEvent(eventStore, action.eventStore, // new ones
7212
- dateProfile ? dateProfile.activeRange : null, context);
7213
- case 'MERGE_EVENTS': // already parsed and expanded
7214
- return mergeEventStores(eventStore, action.eventStore);
7215
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
7216
- case 'NEXT':
7217
- case 'CHANGE_DATE':
7218
- case 'CHANGE_VIEW_TYPE':
7219
- if (dateProfile) {
7220
- return expandRecurring(eventStore, dateProfile.activeRange, context);
7221
- }
7222
- return eventStore;
7223
- case 'REMOVE_EVENTS':
7224
- return excludeSubEventStore(eventStore, action.eventStore);
7225
- case 'REMOVE_EVENT_SOURCE':
7226
- return excludeEventsBySourceId(eventStore, action.sourceId);
7227
- case 'REMOVE_ALL_EVENT_SOURCES':
7228
- return filterEventStoreDefs(eventStore, function (eventDef) { return (!eventDef.sourceId // only keep events with no source id
7229
- ); });
7230
- case 'REMOVE_ALL_EVENTS':
7231
- return createEmptyEventStore();
7232
- default:
7233
- return eventStore;
7406
+ /*
7407
+ an INTERACTABLE date component
7408
+
7409
+ PURPOSES:
7410
+ - hook up to fg, fill, and mirror renderers
7411
+ - interface for dragging and hits
7412
+ */
7413
+ var main_DateComponent = /** @class */ (function (_super) {
7414
+ __extends(DateComponent, _super);
7415
+ function DateComponent() {
7416
+ var _this = _super !== null && _super.apply(this, arguments) || this;
7417
+ _this.uid = guid();
7418
+ return _this;
7234
7419
  }
7420
+ // Hit System
7421
+ // -----------------------------------------------------------------------------------------------------------------
7422
+ DateComponent.prototype.prepareHits = function () {
7423
+ };
7424
+ DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
7425
+ return null; // this should be abstract
7426
+ };
7427
+ // Pointer Interaction Utils
7428
+ // -----------------------------------------------------------------------------------------------------------------
7429
+ DateComponent.prototype.isValidSegDownEl = function (el) {
7430
+ return !this.props.eventDrag && // HACK
7431
+ !this.props.eventResize && // HACK
7432
+ !elementClosest(el, '.fc-event-mirror');
7433
+ };
7434
+ DateComponent.prototype.isValidDateDownEl = function (el) {
7435
+ return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
7436
+ !elementClosest(el, '.fc-more-link') && // a "more.." link
7437
+ !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
7438
+ !elementClosest(el, '.fc-popover'); // hack
7439
+ };
7440
+ return DateComponent;
7441
+ }(main_BaseComponent));
7442
+
7443
+ // TODO: easier way to add new hooks? need to update a million things
7444
+ function createPlugin(input) {
7445
+ return {
7446
+ id: guid(),
7447
+ deps: input.deps || [],
7448
+ reducers: input.reducers || [],
7449
+ isLoadingFuncs: input.isLoadingFuncs || [],
7450
+ contextInit: [].concat(input.contextInit || []),
7451
+ eventRefiners: input.eventRefiners || {},
7452
+ eventDefMemberAdders: input.eventDefMemberAdders || [],
7453
+ eventSourceRefiners: input.eventSourceRefiners || {},
7454
+ isDraggableTransformers: input.isDraggableTransformers || [],
7455
+ eventDragMutationMassagers: input.eventDragMutationMassagers || [],
7456
+ eventDefMutationAppliers: input.eventDefMutationAppliers || [],
7457
+ dateSelectionTransformers: input.dateSelectionTransformers || [],
7458
+ datePointTransforms: input.datePointTransforms || [],
7459
+ dateSpanTransforms: input.dateSpanTransforms || [],
7460
+ views: input.views || {},
7461
+ viewPropsTransformers: input.viewPropsTransformers || [],
7462
+ isPropsValid: input.isPropsValid || null,
7463
+ externalDefTransforms: input.externalDefTransforms || [],
7464
+ viewContainerAppends: input.viewContainerAppends || [],
7465
+ eventDropTransformers: input.eventDropTransformers || [],
7466
+ componentInteractions: input.componentInteractions || [],
7467
+ calendarInteractions: input.calendarInteractions || [],
7468
+ themeClasses: input.themeClasses || {},
7469
+ eventSourceDefs: input.eventSourceDefs || [],
7470
+ cmdFormatter: input.cmdFormatter,
7471
+ recurringTypes: input.recurringTypes || [],
7472
+ namedTimeZonedImpl: input.namedTimeZonedImpl,
7473
+ initialView: input.initialView || '',
7474
+ elementDraggingImpl: input.elementDraggingImpl,
7475
+ optionChangeHandlers: input.optionChangeHandlers || {},
7476
+ scrollGridImpl: input.scrollGridImpl || null,
7477
+ contentTypeHandlers: input.contentTypeHandlers || {},
7478
+ listenerRefiners: input.listenerRefiners || {},
7479
+ optionRefiners: input.optionRefiners || {},
7480
+ propSetHandlers: input.propSetHandlers || {},
7481
+ };
7235
7482
  }
7236
- function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
7237
- if (eventSource && // not already removed
7238
- fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
7239
- ) {
7240
- var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
7241
- if (fetchRange) {
7242
- subset = expandRecurring(subset, fetchRange, context);
7483
+ function buildPluginHooks(pluginDefs, globalDefs) {
7484
+ var isAdded = {};
7485
+ var hooks = {
7486
+ reducers: [],
7487
+ isLoadingFuncs: [],
7488
+ contextInit: [],
7489
+ eventRefiners: {},
7490
+ eventDefMemberAdders: [],
7491
+ eventSourceRefiners: {},
7492
+ isDraggableTransformers: [],
7493
+ eventDragMutationMassagers: [],
7494
+ eventDefMutationAppliers: [],
7495
+ dateSelectionTransformers: [],
7496
+ datePointTransforms: [],
7497
+ dateSpanTransforms: [],
7498
+ views: {},
7499
+ viewPropsTransformers: [],
7500
+ isPropsValid: null,
7501
+ externalDefTransforms: [],
7502
+ viewContainerAppends: [],
7503
+ eventDropTransformers: [],
7504
+ componentInteractions: [],
7505
+ calendarInteractions: [],
7506
+ themeClasses: {},
7507
+ eventSourceDefs: [],
7508
+ cmdFormatter: null,
7509
+ recurringTypes: [],
7510
+ namedTimeZonedImpl: null,
7511
+ initialView: '',
7512
+ elementDraggingImpl: null,
7513
+ optionChangeHandlers: {},
7514
+ scrollGridImpl: null,
7515
+ contentTypeHandlers: {},
7516
+ listenerRefiners: {},
7517
+ optionRefiners: {},
7518
+ propSetHandlers: {},
7519
+ };
7520
+ function addDefs(defs) {
7521
+ for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
7522
+ var def = defs_1[_i];
7523
+ if (!isAdded[def.id]) {
7524
+ isAdded[def.id] = true;
7525
+ addDefs(def.deps);
7526
+ hooks = combineHooks(hooks, def);
7527
+ }
7243
7528
  }
7244
- return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
7245
- }
7246
- return eventStore;
7247
- }
7248
- function transformRawEvents(rawEvents, eventSource, context) {
7249
- var calEachTransform = context.options.eventDataTransform;
7250
- var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
7251
- if (sourceEachTransform) {
7252
- rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
7253
7529
  }
7254
- if (calEachTransform) {
7255
- rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
7530
+ if (pluginDefs) {
7531
+ addDefs(pluginDefs);
7256
7532
  }
7257
- return rawEvents;
7533
+ addDefs(globalDefs);
7534
+ return hooks;
7258
7535
  }
7259
- function transformEachRawEvent(rawEvents, func) {
7260
- var refinedEvents;
7261
- if (!func) {
7262
- refinedEvents = rawEvents;
7263
- }
7264
- else {
7265
- refinedEvents = [];
7266
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
7267
- var rawEvent = rawEvents_1[_i];
7268
- var refinedEvent = func(rawEvent);
7269
- if (refinedEvent) {
7270
- refinedEvents.push(refinedEvent);
7271
- }
7272
- else if (refinedEvent == null) {
7273
- refinedEvents.push(rawEvent);
7274
- } // if a different falsy value, do nothing
7536
+ function buildBuildPluginHooks() {
7537
+ var currentOverrideDefs = [];
7538
+ var currentGlobalDefs = [];
7539
+ var currentHooks;
7540
+ return function (overrideDefs, globalDefs) {
7541
+ if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
7542
+ currentHooks = buildPluginHooks(overrideDefs, globalDefs);
7275
7543
  }
7276
- }
7277
- return refinedEvents;
7278
- }
7279
- function addEvent(eventStore, subset, expandRange, context) {
7280
- if (expandRange) {
7281
- subset = expandRecurring(subset, expandRange, context);
7282
- }
7283
- return mergeEventStores(eventStore, subset);
7284
- }
7285
- function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
7286
- var defs = eventStore.defs;
7287
- var instances = mapHash(eventStore.instances, function (instance) {
7288
- var def = defs[instance.defId];
7289
- if (def.allDay || def.recurringDef) {
7290
- return instance; // isn't dependent on timezone
7291
- }
7292
- return __assign(__assign({}, instance), { range: {
7293
- start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
7294
- end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
7295
- }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
7296
- });
7297
- return { defs: defs, instances: instances };
7298
- }
7299
- function excludeEventsBySourceId(eventStore, sourceId) {
7300
- return filterEventStoreDefs(eventStore, function (eventDef) { return eventDef.sourceId !== sourceId; });
7301
- }
7302
- // QUESTION: why not just return instances? do a general object-property-exclusion util
7303
- function excludeInstances(eventStore, removals) {
7304
- return {
7305
- defs: eventStore.defs,
7306
- instances: filterHash(eventStore.instances, function (instance) { return !removals[instance.instanceId]; }),
7307
- };
7308
- }
7309
-
7310
- // high-level segmenting-aware tester functions
7311
- // ------------------------------------------------------------------------------------------------------------------------
7312
- function isInteractionValid(interaction, context) {
7313
- return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
7314
- }
7315
- function isDateSelectionValid(dateSelection, context) {
7316
- return isNewPropsValid({ dateSelection: dateSelection }, context);
7317
- }
7318
- function isNewPropsValid(newProps, context) {
7319
- var calendarState = context.getCurrentData();
7320
- var props = __assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
7321
- return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
7322
- }
7323
- function isPropsValid(state, context, dateSpanMeta, filterConfig) {
7324
- if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
7325
- if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
7326
- return false;
7327
- }
7328
- if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
7329
- return false;
7330
- }
7331
- return true;
7332
- }
7333
- // Moving Event Validation
7334
- // ------------------------------------------------------------------------------------------------------------------------
7335
- function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
7336
- var currentState = context.getCurrentData();
7337
- var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
7338
- var subjectEventStore = interaction.mutatedEvents;
7339
- var subjectDefs = subjectEventStore.defs;
7340
- var subjectInstances = subjectEventStore.instances;
7341
- var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
7342
- state.eventUiBases :
7343
- { '': currentState.selectionConfig });
7344
- if (filterConfig) {
7345
- subjectConfigs = mapHash(subjectConfigs, filterConfig);
7346
- }
7347
- // exclude the subject events. TODO: exclude defs too?
7348
- var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
7349
- var otherDefs = otherEventStore.defs;
7350
- var otherInstances = otherEventStore.instances;
7351
- var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
7352
- for (var subjectInstanceId in subjectInstances) {
7353
- var subjectInstance = subjectInstances[subjectInstanceId];
7354
- var subjectRange = subjectInstance.range;
7355
- var subjectConfig = subjectConfigs[subjectInstance.defId];
7356
- var subjectDef = subjectDefs[subjectInstance.defId];
7357
- // constraint
7358
- if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
7359
- return false;
7360
- }
7361
- // overlap
7362
- var eventOverlap = context.options.eventOverlap;
7363
- var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
7364
- for (var otherInstanceId in otherInstances) {
7365
- var otherInstance = otherInstances[otherInstanceId];
7366
- // intersect! evaluate
7367
- if (rangesIntersect(subjectRange, otherInstance.range)) {
7368
- var otherOverlap = otherConfigs[otherInstance.defId].overlap;
7369
- // consider the other event's overlap. only do this if the subject event is a "real" event
7370
- if (otherOverlap === false && interaction.isEvent) {
7371
- return false;
7372
- }
7373
- if (subjectConfig.overlap === false) {
7374
- return false;
7375
- }
7376
- if (eventOverlapFunc && !eventOverlapFunc(new main_EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event
7377
- new main_EventApi(context, subjectDef, subjectInstance))) {
7378
- return false;
7379
- }
7380
- }
7381
- }
7382
- // allow (a function)
7383
- var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
7384
- for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
7385
- var subjectAllow = _a[_i];
7386
- var subjectDateSpan = __assign(__assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
7387
- var origDef = calendarEventStore.defs[subjectDef.defId];
7388
- var origInstance = calendarEventStore.instances[subjectInstanceId];
7389
- var eventApi = void 0;
7390
- if (origDef) { // was previously in the calendar
7391
- eventApi = new main_EventApi(context, origDef, origInstance);
7392
- }
7393
- else { // was an external event
7394
- eventApi = new main_EventApi(context, subjectDef); // no instance, because had no dates
7395
- }
7396
- if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
7397
- return false;
7398
- }
7399
- }
7400
- }
7401
- return true;
7402
- }
7403
- // Date Selection Validation
7404
- // ------------------------------------------------------------------------------------------------------------------------
7405
- function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
7406
- var relevantEventStore = state.eventStore;
7407
- var relevantDefs = relevantEventStore.defs;
7408
- var relevantInstances = relevantEventStore.instances;
7409
- var selection = state.dateSelection;
7410
- var selectionRange = selection.range;
7411
- var selectionConfig = context.getCurrentData().selectionConfig;
7412
- if (filterConfig) {
7413
- selectionConfig = filterConfig(selectionConfig);
7414
- }
7415
- // constraint
7416
- if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
7417
- return false;
7418
- }
7419
- // overlap
7420
- var selectOverlap = context.options.selectOverlap;
7421
- var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
7422
- for (var relevantInstanceId in relevantInstances) {
7423
- var relevantInstance = relevantInstances[relevantInstanceId];
7424
- // intersect! evaluate
7425
- if (rangesIntersect(selectionRange, relevantInstance.range)) {
7426
- if (selectionConfig.overlap === false) {
7427
- return false;
7428
- }
7429
- if (selectOverlapFunc && !selectOverlapFunc(new main_EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
7430
- return false;
7431
- }
7432
- }
7433
- }
7434
- // allow (a function)
7435
- for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
7436
- var selectionAllow = _a[_i];
7437
- var fullDateSpan = __assign(__assign({}, dateSpanMeta), selection);
7438
- if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
7439
- return false;
7440
- }
7441
- }
7442
- return true;
7443
- }
7444
- // Constraint Utils
7445
- // ------------------------------------------------------------------------------------------------------------------------
7446
- function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
7447
- for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
7448
- var constraint = constraints_1[_i];
7449
- if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
7450
- return false;
7451
- }
7452
- }
7453
- return true;
7454
- }
7455
- function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
7456
- otherEventStore, // for if constraint is an even group ID
7457
- businessHoursUnexpanded, // for if constraint is 'businessHours'
7458
- context) {
7459
- if (constraint === 'businessHours') {
7460
- return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
7461
- }
7462
- if (typeof constraint === 'string') { // an group ID
7463
- return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { return eventDef.groupId === constraint; }));
7464
- }
7465
- if (typeof constraint === 'object' && constraint) { // non-null object
7466
- return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
7467
- }
7468
- return []; // if it's false
7469
- }
7470
- // TODO: move to event-store file?
7471
- function eventStoreToRanges(eventStore) {
7472
- var instances = eventStore.instances;
7473
- var ranges = [];
7474
- for (var instanceId in instances) {
7475
- ranges.push(instances[instanceId].range);
7476
- }
7477
- return ranges;
7478
- }
7479
- // TODO: move to geom file?
7480
- function anyRangesContainRange(outerRanges, innerRange) {
7481
- for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
7482
- var outerRange = outerRanges_1[_i];
7483
- if (rangeContainsRange(outerRange, innerRange)) {
7484
- return true;
7485
- }
7486
- }
7487
- return false;
7488
- }
7489
-
7490
- /*
7491
- an INTERACTABLE date component
7492
-
7493
- PURPOSES:
7494
- - hook up to fg, fill, and mirror renderers
7495
- - interface for dragging and hits
7496
- */
7497
- var main_DateComponent = /** @class */ (function (_super) {
7498
- __extends(DateComponent, _super);
7499
- function DateComponent() {
7500
- var _this = _super !== null && _super.apply(this, arguments) || this;
7501
- _this.uid = guid();
7502
- return _this;
7503
- }
7504
- // Hit System
7505
- // -----------------------------------------------------------------------------------------------------------------
7506
- DateComponent.prototype.prepareHits = function () {
7507
- };
7508
- DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
7509
- return null; // this should be abstract
7510
- };
7511
- // Validation
7512
- // -----------------------------------------------------------------------------------------------------------------
7513
- DateComponent.prototype.isInteractionValid = function (interaction) {
7514
- var dateProfile = this.props.dateProfile; // HACK
7515
- var instances = interaction.mutatedEvents.instances;
7516
- if (dateProfile) { // HACK for MorePopover
7517
- for (var instanceId in instances) {
7518
- if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
7519
- return false;
7520
- }
7521
- }
7522
- }
7523
- return isInteractionValid(interaction, this.context);
7524
- };
7525
- DateComponent.prototype.isDateSelectionValid = function (selection) {
7526
- var dateProfile = this.props.dateProfile; // HACK
7527
- if (dateProfile && // HACK for MorePopover
7528
- !rangeContainsRange(dateProfile.validRange, selection.range)) {
7529
- return false;
7530
- }
7531
- return isDateSelectionValid(selection, this.context);
7532
- };
7533
- // Pointer Interaction Utils
7534
- // -----------------------------------------------------------------------------------------------------------------
7535
- DateComponent.prototype.isValidSegDownEl = function (el) {
7536
- return !this.props.eventDrag && // HACK
7537
- !this.props.eventResize && // HACK
7538
- !elementClosest(el, '.fc-event-mirror') &&
7539
- (this.isPopover() || !this.isInPopover(el));
7540
- // ^above line ensures we don't detect a seg interaction within a nested component.
7541
- // it's a HACK because it only supports a popover as the nested component.
7542
- };
7543
- DateComponent.prototype.isValidDateDownEl = function (el) {
7544
- return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
7545
- !elementClosest(el, '.fc-daygrid-more-link') && // a "more.." link
7546
- !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
7547
- !this.isInPopover(el);
7548
- };
7549
- DateComponent.prototype.isPopover = function () {
7550
- return false;
7551
- };
7552
- DateComponent.prototype.isInPopover = function (el) {
7553
- return Boolean(elementClosest(el, '.fc-popover'));
7554
- };
7555
- return DateComponent;
7556
- }(main_BaseComponent));
7557
-
7558
- // TODO: easier way to add new hooks? need to update a million things
7559
- function createPlugin(input) {
7560
- return {
7561
- id: guid(),
7562
- deps: input.deps || [],
7563
- reducers: input.reducers || [],
7564
- contextInit: [].concat(input.contextInit || []),
7565
- eventRefiners: input.eventRefiners || {},
7566
- eventDefMemberAdders: input.eventDefMemberAdders || [],
7567
- eventSourceRefiners: input.eventSourceRefiners || {},
7568
- isDraggableTransformers: input.isDraggableTransformers || [],
7569
- eventDragMutationMassagers: input.eventDragMutationMassagers || [],
7570
- eventDefMutationAppliers: input.eventDefMutationAppliers || [],
7571
- dateSelectionTransformers: input.dateSelectionTransformers || [],
7572
- datePointTransforms: input.datePointTransforms || [],
7573
- dateSpanTransforms: input.dateSpanTransforms || [],
7574
- views: input.views || {},
7575
- viewPropsTransformers: input.viewPropsTransformers || [],
7576
- isPropsValid: input.isPropsValid || null,
7577
- externalDefTransforms: input.externalDefTransforms || [],
7578
- eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
7579
- viewContainerAppends: input.viewContainerAppends || [],
7580
- eventDropTransformers: input.eventDropTransformers || [],
7581
- componentInteractions: input.componentInteractions || [],
7582
- calendarInteractions: input.calendarInteractions || [],
7583
- themeClasses: input.themeClasses || {},
7584
- eventSourceDefs: input.eventSourceDefs || [],
7585
- cmdFormatter: input.cmdFormatter,
7586
- recurringTypes: input.recurringTypes || [],
7587
- namedTimeZonedImpl: input.namedTimeZonedImpl,
7588
- initialView: input.initialView || '',
7589
- elementDraggingImpl: input.elementDraggingImpl,
7590
- optionChangeHandlers: input.optionChangeHandlers || {},
7591
- scrollGridImpl: input.scrollGridImpl || null,
7592
- contentTypeHandlers: input.contentTypeHandlers || {},
7593
- listenerRefiners: input.listenerRefiners || {},
7594
- optionRefiners: input.optionRefiners || {},
7595
- propSetHandlers: input.propSetHandlers || {},
7596
- };
7597
- }
7598
- function buildPluginHooks(pluginDefs, globalDefs) {
7599
- var isAdded = {};
7600
- var hooks = {
7601
- reducers: [],
7602
- contextInit: [],
7603
- eventRefiners: {},
7604
- eventDefMemberAdders: [],
7605
- eventSourceRefiners: {},
7606
- isDraggableTransformers: [],
7607
- eventDragMutationMassagers: [],
7608
- eventDefMutationAppliers: [],
7609
- dateSelectionTransformers: [],
7610
- datePointTransforms: [],
7611
- dateSpanTransforms: [],
7612
- views: {},
7613
- viewPropsTransformers: [],
7614
- isPropsValid: null,
7615
- externalDefTransforms: [],
7616
- eventResizeJoinTransforms: [],
7617
- viewContainerAppends: [],
7618
- eventDropTransformers: [],
7619
- componentInteractions: [],
7620
- calendarInteractions: [],
7621
- themeClasses: {},
7622
- eventSourceDefs: [],
7623
- cmdFormatter: null,
7624
- recurringTypes: [],
7625
- namedTimeZonedImpl: null,
7626
- initialView: '',
7627
- elementDraggingImpl: null,
7628
- optionChangeHandlers: {},
7629
- scrollGridImpl: null,
7630
- contentTypeHandlers: {},
7631
- listenerRefiners: {},
7632
- optionRefiners: {},
7633
- propSetHandlers: {},
7634
- };
7635
- function addDefs(defs) {
7636
- for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
7637
- var def = defs_1[_i];
7638
- if (!isAdded[def.id]) {
7639
- isAdded[def.id] = true;
7640
- addDefs(def.deps);
7641
- hooks = combineHooks(hooks, def);
7642
- }
7643
- }
7644
- }
7645
- if (pluginDefs) {
7646
- addDefs(pluginDefs);
7647
- }
7648
- addDefs(globalDefs);
7649
- return hooks;
7650
- }
7651
- function buildBuildPluginHooks() {
7652
- var currentOverrideDefs = [];
7653
- var currentGlobalDefs = [];
7654
- var currentHooks;
7655
- return function (overrideDefs, globalDefs) {
7656
- if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
7657
- currentHooks = buildPluginHooks(overrideDefs, globalDefs);
7658
- }
7659
- currentOverrideDefs = overrideDefs;
7660
- currentGlobalDefs = globalDefs;
7661
- return currentHooks;
7662
- };
7544
+ currentOverrideDefs = overrideDefs;
7545
+ currentGlobalDefs = globalDefs;
7546
+ return currentHooks;
7547
+ };
7663
7548
  }
7664
7549
  function combineHooks(hooks0, hooks1) {
7665
7550
  return {
7666
7551
  reducers: hooks0.reducers.concat(hooks1.reducers),
7552
+ isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
7667
7553
  contextInit: hooks0.contextInit.concat(hooks1.contextInit),
7668
7554
  eventRefiners: __assign(__assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
7669
7555
  eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
@@ -7678,7 +7564,6 @@ function combineHooks(hooks0, hooks1) {
7678
7564
  viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
7679
7565
  isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
7680
7566
  externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
7681
- eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
7682
7567
  viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
7683
7568
  eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
7684
7569
  calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
@@ -7831,39 +7716,56 @@ var main_ContentHookInner = /** @class */ (function (_super) {
7831
7716
  }
7832
7717
  };
7833
7718
  ContentHookInner.prototype.renderInnerContent = function () {
7834
- var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
7835
- var _a = this, props = _a.props, customContentInfo = _a.customContentInfo;
7836
- var rawVal = props.content;
7837
- var innerContent = normalizeContent(rawVal, props.hookProps);
7838
- var innerContentVDom = null;
7839
- if (innerContent === undefined) { // use the default
7840
- innerContent = normalizeContent(props.defaultContent, props.hookProps);
7841
- }
7842
- if (innerContent !== undefined) { // we allow custom content handlers to return nothing
7719
+ var customContentInfo = this.customContentInfo; // only populated if using non-[p]react node(s)
7720
+ var innerContent = this.getInnerContent();
7721
+ var meta = this.getContentMeta(innerContent);
7722
+ // initial run, or content-type changing? (from vue -> react for example)
7723
+ if (!customContentInfo || customContentInfo.contentKey !== meta.contentKey) {
7724
+ // clearing old value
7843
7725
  if (customContentInfo) {
7844
- customContentInfo.contentVal = innerContent[customContentInfo.contentKey];
7845
- }
7846
- else if (typeof innerContent === 'object') {
7847
- // look for a prop that would indicate a custom content handler is needed
7848
- for (var contentKey in contentTypeHandlers) {
7849
- if (innerContent[contentKey] !== undefined) {
7850
- var stuff = contentTypeHandlers[contentKey]();
7851
- customContentInfo = this.customContentInfo = __assign({ contentKey: contentKey, contentVal: innerContent[contentKey] }, stuff);
7852
- break;
7853
- }
7726
+ if (customContentInfo.destroy) {
7727
+ customContentInfo.destroy();
7854
7728
  }
7729
+ customContentInfo = this.customContentInfo = null;
7855
7730
  }
7856
- if (customContentInfo) {
7857
- innerContentVDom = []; // signal that something was specified
7731
+ // assigning new value
7732
+ if (meta.contentKey) {
7733
+ customContentInfo = this.customContentInfo = __assign({ contentKey: meta.contentKey, contentVal: innerContent[meta.contentKey] }, meta.buildLifecycleFuncs());
7858
7734
  }
7859
- else {
7860
- innerContentVDom = innerContent; // assume a [p]react vdom node. use it
7735
+ // updating
7736
+ }
7737
+ else if (customContentInfo) {
7738
+ customContentInfo.contentVal = innerContent[meta.contentKey];
7739
+ }
7740
+ return customContentInfo
7741
+ ? [] // signal that something was specified
7742
+ : innerContent; // assume a [p]react vdom node. use it
7743
+ };
7744
+ ContentHookInner.prototype.getInnerContent = function () {
7745
+ var props = this.props;
7746
+ var innerContent = normalizeContent(props.content, props.hookProps);
7747
+ if (innerContent === undefined) { // use the default
7748
+ innerContent = normalizeContent(props.defaultContent, props.hookProps);
7749
+ }
7750
+ return innerContent == null ? null : innerContent; // convert undefined to null (better for React)
7751
+ };
7752
+ ContentHookInner.prototype.getContentMeta = function (innerContent) {
7753
+ var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
7754
+ var contentKey = '';
7755
+ var buildLifecycleFuncs = null;
7756
+ if (innerContent) { // allowed to be null, for convenience to caller
7757
+ for (var searchKey in contentTypeHandlers) {
7758
+ if (innerContent[searchKey] !== undefined) {
7759
+ contentKey = searchKey;
7760
+ buildLifecycleFuncs = contentTypeHandlers[searchKey];
7761
+ break;
7762
+ }
7861
7763
  }
7862
7764
  }
7863
- return innerContentVDom;
7765
+ return { contentKey: contentKey, buildLifecycleFuncs: buildLifecycleFuncs };
7864
7766
  };
7865
7767
  ContentHookInner.prototype.updateCustomContent = function () {
7866
- if (this.customContentInfo) {
7768
+ if (this.customContentInfo) { // for non-[p]react
7867
7769
  this.customContentInfo.render(this.innerElRef.current || this.props.backupElRef.current, // the element to render into
7868
7770
  this.customContentInfo.contentVal);
7869
7771
  }
@@ -8007,6 +7909,20 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
8007
7909
  }
8008
7910
  return null;
8009
7911
  };
7912
+ var queryButtonTitle = function (optionsSubset) {
7913
+ var buttonHints = optionsSubset.buttonHints || {};
7914
+ var buttonKey = viewDef.defaults.buttonTextKey; // use same key as text
7915
+ if (buttonKey != null && buttonHints[buttonKey] != null) {
7916
+ return buttonHints[buttonKey];
7917
+ }
7918
+ if (buttonHints[viewDef.type] != null) {
7919
+ return buttonHints[viewDef.type];
7920
+ }
7921
+ if (buttonHints[singleUnit] != null) {
7922
+ return buttonHints[singleUnit];
7923
+ }
7924
+ return null;
7925
+ };
8010
7926
  return {
8011
7927
  type: viewDef.type,
8012
7928
  component: viewDef.component,
@@ -8022,6 +7938,14 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
8022
7938
  viewDef.defaults.buttonText ||
8023
7939
  queryButtonText(BASE_OPTION_DEFAULTS) ||
8024
7940
  viewDef.type,
7941
+ // not DRY
7942
+ buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||
7943
+ queryButtonTitle(optionOverrides) ||
7944
+ viewDef.overrides.buttonHint,
7945
+ buttonTitleDefault: queryButtonTitle(localeDefaults) ||
7946
+ viewDef.defaults.buttonHint ||
7947
+ queryButtonTitle(BASE_OPTION_DEFAULTS),
7948
+ // will eventually fall back to buttonText
8025
7949
  };
8026
7950
  }
8027
7951
  // hack to get memoization working
@@ -8111,6 +8035,7 @@ var DateProfileGenerator = /** @class */ (function () {
8111
8035
  isValid: isValid,
8112
8036
  // how far the current date will move for a prev/next operation
8113
8037
  dateIncrement: this.buildDateIncrement(currentInfo.duration),
8038
+ // pass a fallback (might be null) ^
8114
8039
  };
8115
8040
  };
8116
8041
  // Builds an object with optional start/end properties.
@@ -8369,12 +8294,7 @@ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileG
8369
8294
  case 'CHANGE_VIEW_TYPE':
8370
8295
  return dateProfileGenerator.build(action.dateMarker || currentDate);
8371
8296
  case 'CHANGE_DATE':
8372
- if (!currentDateProfile.activeRange ||
8373
- !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker) // don't move if date already in view
8374
- ) {
8375
- return dateProfileGenerator.build(action.dateMarker);
8376
- }
8377
- break;
8297
+ return dateProfileGenerator.build(action.dateMarker);
8378
8298
  case 'PREV':
8379
8299
  dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
8380
8300
  if (dp.isValid) {
@@ -8413,7 +8333,7 @@ function reduceEventSources(eventSources, action, dateProfile, context) {
8413
8333
  case 'FETCH_EVENT_SOURCES':
8414
8334
  return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
8415
8335
  arrayToHash(action.sourceIds) :
8416
- excludeStaticSources(eventSources, context), activeRange, context);
8336
+ excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
8417
8337
  case 'RECEIVE_EVENTS':
8418
8338
  case 'RECEIVE_EVENT_ERROR':
8419
8339
  return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
@@ -8425,16 +8345,15 @@ function reduceEventSources(eventSources, action, dateProfile, context) {
8425
8345
  }
8426
8346
  function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
8427
8347
  var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
8428
- return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, context);
8348
+ return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
8429
8349
  }
8430
- function computeEventSourceLoadingLevel(eventSources) {
8431
- var cnt = 0;
8350
+ function computeEventSourcesLoading(eventSources) {
8432
8351
  for (var sourceId in eventSources) {
8433
8352
  if (eventSources[sourceId].isFetching) {
8434
- cnt += 1;
8353
+ return true;
8435
8354
  }
8436
8355
  }
8437
- return cnt;
8356
+ return false;
8438
8357
  }
8439
8358
  function addSources(eventSourceHash, sources, fetchRange, context) {
8440
8359
  var hash = {};
@@ -8451,7 +8370,7 @@ function removeSource(eventSourceHash, sourceId) {
8451
8370
  return filterHash(eventSourceHash, function (eventSource) { return eventSource.sourceId !== sourceId; });
8452
8371
  }
8453
8372
  function fetchDirtySources(sourceHash, fetchRange, context) {
8454
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { return isSourceDirty(eventSource, fetchRange, context); }), fetchRange, context);
8373
+ return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { return isSourceDirty(eventSource, fetchRange, context); }), fetchRange, false, context);
8455
8374
  }
8456
8375
  function isSourceDirty(eventSource, fetchRange, context) {
8457
8376
  if (!doesSourceNeedRange(eventSource, context)) {
@@ -8463,12 +8382,12 @@ function isSourceDirty(eventSource, fetchRange, context) {
8463
8382
  fetchRange.start < eventSource.fetchRange.start ||
8464
8383
  fetchRange.end > eventSource.fetchRange.end;
8465
8384
  }
8466
- function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, context) {
8385
+ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
8467
8386
  var nextSources = {};
8468
8387
  for (var sourceId in prevSources) {
8469
8388
  var source = prevSources[sourceId];
8470
8389
  if (sourceIdHash[sourceId]) {
8471
- nextSources[sourceId] = fetchSource(source, fetchRange, context);
8390
+ nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
8472
8391
  }
8473
8392
  else {
8474
8393
  nextSources[sourceId] = source;
@@ -8476,13 +8395,14 @@ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, context) {
8476
8395
  }
8477
8396
  return nextSources;
8478
8397
  }
8479
- function fetchSource(eventSource, fetchRange, context) {
8398
+ function fetchSource(eventSource, fetchRange, isRefetch, context) {
8480
8399
  var options = context.options, calendarApi = context.calendarApi;
8481
8400
  var sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
8482
8401
  var fetchId = guid();
8483
8402
  sourceDef.fetch({
8484
8403
  eventSource: eventSource,
8485
8404
  range: fetchRange,
8405
+ isRefetch: isRefetch,
8486
8406
  context: context,
8487
8407
  }, function (res) {
8488
8408
  var rawEvents = res.rawEvents;
@@ -8524,33 +8444,139 @@ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
8524
8444
  fetchId === eventSource.latestFetchId) {
8525
8445
  return __assign(__assign({}, sourceHash), (_a = {}, _a[sourceId] = __assign(__assign({}, eventSource), { isFetching: false, fetchRange: fetchRange }), _a));
8526
8446
  }
8527
- return sourceHash;
8528
- }
8529
- function excludeStaticSources(eventSources, context) {
8530
- return filterHash(eventSources, function (eventSource) { return doesSourceNeedRange(eventSource, context); });
8447
+ return sourceHash;
8448
+ }
8449
+ function excludeStaticSources(eventSources, context) {
8450
+ return filterHash(eventSources, function (eventSource) { return doesSourceNeedRange(eventSource, context); });
8451
+ }
8452
+ function parseInitialSources(rawOptions, context) {
8453
+ var refiners = buildEventSourceRefiners(context);
8454
+ var rawSources = [].concat(rawOptions.eventSources || []);
8455
+ var sources = []; // parsed
8456
+ if (rawOptions.initialEvents) {
8457
+ rawSources.unshift(rawOptions.initialEvents);
8458
+ }
8459
+ if (rawOptions.events) {
8460
+ rawSources.unshift(rawOptions.events);
8461
+ }
8462
+ for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
8463
+ var rawSource = rawSources_1[_i];
8464
+ var source = parseEventSource(rawSource, context, refiners);
8465
+ if (source) {
8466
+ sources.push(source);
8467
+ }
8468
+ }
8469
+ return sources;
8470
+ }
8471
+ function doesSourceNeedRange(eventSource, context) {
8472
+ var defs = context.pluginHooks.eventSourceDefs;
8473
+ return !defs[eventSource.sourceDefId].ignoreRange;
8474
+ }
8475
+
8476
+ function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
8477
+ switch (action.type) {
8478
+ case 'RECEIVE_EVENTS': // raw
8479
+ return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
8480
+ case 'ADD_EVENTS': // already parsed, but not expanded
8481
+ return addEvent(eventStore, action.eventStore, // new ones
8482
+ dateProfile ? dateProfile.activeRange : null, context);
8483
+ case 'RESET_EVENTS':
8484
+ return action.eventStore;
8485
+ case 'MERGE_EVENTS': // already parsed and expanded
8486
+ return mergeEventStores(eventStore, action.eventStore);
8487
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
8488
+ case 'NEXT':
8489
+ case 'CHANGE_DATE':
8490
+ case 'CHANGE_VIEW_TYPE':
8491
+ if (dateProfile) {
8492
+ return expandRecurring(eventStore, dateProfile.activeRange, context);
8493
+ }
8494
+ return eventStore;
8495
+ case 'REMOVE_EVENTS':
8496
+ return excludeSubEventStore(eventStore, action.eventStore);
8497
+ case 'REMOVE_EVENT_SOURCE':
8498
+ return excludeEventsBySourceId(eventStore, action.sourceId);
8499
+ case 'REMOVE_ALL_EVENT_SOURCES':
8500
+ return filterEventStoreDefs(eventStore, function (eventDef) { return (!eventDef.sourceId // only keep events with no source id
8501
+ ); });
8502
+ case 'REMOVE_ALL_EVENTS':
8503
+ return createEmptyEventStore();
8504
+ default:
8505
+ return eventStore;
8506
+ }
8507
+ }
8508
+ function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
8509
+ if (eventSource && // not already removed
8510
+ fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
8511
+ ) {
8512
+ var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
8513
+ if (fetchRange) {
8514
+ subset = expandRecurring(subset, fetchRange, context);
8515
+ }
8516
+ return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
8517
+ }
8518
+ return eventStore;
8519
+ }
8520
+ function transformRawEvents(rawEvents, eventSource, context) {
8521
+ var calEachTransform = context.options.eventDataTransform;
8522
+ var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
8523
+ if (sourceEachTransform) {
8524
+ rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
8525
+ }
8526
+ if (calEachTransform) {
8527
+ rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
8528
+ }
8529
+ return rawEvents;
8530
+ }
8531
+ function transformEachRawEvent(rawEvents, func) {
8532
+ var refinedEvents;
8533
+ if (!func) {
8534
+ refinedEvents = rawEvents;
8535
+ }
8536
+ else {
8537
+ refinedEvents = [];
8538
+ for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
8539
+ var rawEvent = rawEvents_1[_i];
8540
+ var refinedEvent = func(rawEvent);
8541
+ if (refinedEvent) {
8542
+ refinedEvents.push(refinedEvent);
8543
+ }
8544
+ else if (refinedEvent == null) {
8545
+ refinedEvents.push(rawEvent);
8546
+ } // if a different falsy value, do nothing
8547
+ }
8548
+ }
8549
+ return refinedEvents;
8531
8550
  }
8532
- function parseInitialSources(rawOptions, context) {
8533
- var refiners = buildEventSourceRefiners(context);
8534
- var rawSources = [].concat(rawOptions.eventSources || []);
8535
- var sources = []; // parsed
8536
- if (rawOptions.initialEvents) {
8537
- rawSources.unshift(rawOptions.initialEvents);
8538
- }
8539
- if (rawOptions.events) {
8540
- rawSources.unshift(rawOptions.events);
8551
+ function addEvent(eventStore, subset, expandRange, context) {
8552
+ if (expandRange) {
8553
+ subset = expandRecurring(subset, expandRange, context);
8541
8554
  }
8542
- for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
8543
- var rawSource = rawSources_1[_i];
8544
- var source = parseEventSource(rawSource, context, refiners);
8545
- if (source) {
8546
- sources.push(source);
8555
+ return mergeEventStores(eventStore, subset);
8556
+ }
8557
+ function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
8558
+ var defs = eventStore.defs;
8559
+ var instances = mapHash(eventStore.instances, function (instance) {
8560
+ var def = defs[instance.defId];
8561
+ if (def.allDay || def.recurringDef) {
8562
+ return instance; // isn't dependent on timezone
8547
8563
  }
8548
- }
8549
- return sources;
8564
+ return __assign(__assign({}, instance), { range: {
8565
+ start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
8566
+ end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
8567
+ }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
8568
+ });
8569
+ return { defs: defs, instances: instances };
8550
8570
  }
8551
- function doesSourceNeedRange(eventSource, context) {
8552
- var defs = context.pluginHooks.eventSourceDefs;
8553
- return !defs[eventSource.sourceDefId].ignoreRange;
8571
+ function excludeEventsBySourceId(eventStore, sourceId) {
8572
+ return filterEventStoreDefs(eventStore, function (eventDef) { return eventDef.sourceId !== sourceId; });
8573
+ }
8574
+ // QUESTION: why not just return instances? do a general object-property-exclusion util
8575
+ function excludeInstances(eventStore, removals) {
8576
+ return {
8577
+ defs: eventStore.defs,
8578
+ instances: filterHash(eventStore.instances, function (instance) { return !removals[instance.instanceId]; }),
8579
+ };
8554
8580
  }
8555
8581
 
8556
8582
  function reduceDateSelection(currentSelection, action) {
@@ -8610,25 +8636,41 @@ function reduceEventResize(currentResize, action) {
8610
8636
  }
8611
8637
 
8612
8638
  function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
8613
- var viewsWithButtons = [];
8614
- var headerToolbar = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
8615
- var footerToolbar = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
8616
- return { headerToolbar: headerToolbar, footerToolbar: footerToolbar, viewsWithButtons: viewsWithButtons };
8639
+ var header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
8640
+ var footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
8641
+ return { header: header, footer: footer };
8617
8642
  }
8618
- function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
8619
- return mapHash(sectionStrHash, function (sectionStr) { return parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons); });
8643
+ function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
8644
+ var sectionWidgets = {};
8645
+ var viewsWithButtons = [];
8646
+ var hasTitle = false;
8647
+ for (var sectionName in sectionStrHash) {
8648
+ var sectionStr = sectionStrHash[sectionName];
8649
+ var sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
8650
+ sectionWidgets[sectionName] = sectionRes.widgets;
8651
+ viewsWithButtons.push.apply(viewsWithButtons, sectionRes.viewsWithButtons);
8652
+ hasTitle = hasTitle || sectionRes.hasTitle;
8653
+ }
8654
+ return { sectionWidgets: sectionWidgets, viewsWithButtons: viewsWithButtons, hasTitle: hasTitle };
8620
8655
  }
8621
8656
  /*
8622
8657
  BAD: querying icons and text here. should be done at render time
8623
8658
  */
8624
- function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
8659
+ function parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined
8660
+ calendarOptionOverrides, // overrides only!, unrefined :(
8661
+ theme, viewSpecs, calendarApi) {
8625
8662
  var isRtl = calendarOptions.direction === 'rtl';
8626
8663
  var calendarCustomButtons = calendarOptions.customButtons || {};
8627
8664
  var calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
8628
8665
  var calendarButtonText = calendarOptions.buttonText || {};
8666
+ var calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};
8667
+ var calendarButtonHints = calendarOptions.buttonHints || {};
8629
8668
  var sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
8630
- return sectionSubstrs.map(function (buttonGroupStr) { return (buttonGroupStr.split(',').map(function (buttonName) {
8669
+ var viewsWithButtons = [];
8670
+ var hasTitle = false;
8671
+ var widgets = sectionSubstrs.map(function (buttonGroupStr) { return (buttonGroupStr.split(',').map(function (buttonName) {
8631
8672
  if (buttonName === 'title') {
8673
+ hasTitle = true;
8632
8674
  return { buttonName: buttonName };
8633
8675
  }
8634
8676
  var customButtonProps;
@@ -8636,15 +8678,18 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8636
8678
  var buttonClick;
8637
8679
  var buttonIcon; // only one of these will be set
8638
8680
  var buttonText; // "
8681
+ var buttonHint;
8682
+ // ^ for the title="" attribute, for accessibility
8639
8683
  if ((customButtonProps = calendarCustomButtons[buttonName])) {
8640
8684
  buttonClick = function (ev) {
8641
8685
  if (customButtonProps.click) {
8642
- customButtonProps.click.call(ev.target, ev, ev.target);
8686
+ customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?
8643
8687
  }
8644
8688
  };
8645
8689
  (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
8646
8690
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8647
8691
  (buttonText = customButtonProps.text);
8692
+ buttonHint = customButtonProps.hint || customButtonProps.text;
8648
8693
  }
8649
8694
  else if ((viewSpec = viewSpecs[buttonName])) {
8650
8695
  viewsWithButtons.push(buttonName);
@@ -8654,6 +8699,12 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8654
8699
  (buttonText = viewSpec.buttonTextOverride) ||
8655
8700
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8656
8701
  (buttonText = viewSpec.buttonTextDefault);
8702
+ var textFallback = viewSpec.buttonTextOverride ||
8703
+ viewSpec.buttonTextDefault;
8704
+ buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||
8705
+ viewSpec.buttonTitleDefault ||
8706
+ calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName
8707
+ textFallback);
8657
8708
  }
8658
8709
  else if (calendarApi[buttonName]) { // a calendarApi method
8659
8710
  buttonClick = function () {
@@ -8661,14 +8712,29 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8661
8712
  };
8662
8713
  (buttonText = calendarButtonTextOverrides[buttonName]) ||
8663
8714
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8664
- (buttonText = calendarButtonText[buttonName]);
8665
- // ^ everything else is considered default
8715
+ (buttonText = calendarButtonText[buttonName]); // everything else is considered default
8716
+ if (buttonName === 'prevYear' || buttonName === 'nextYear') {
8717
+ var prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';
8718
+ buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
8719
+ calendarButtonHints[prevOrNext], [
8720
+ calendarButtonText.year || 'year',
8721
+ 'year',
8722
+ ], calendarButtonText[buttonName]);
8723
+ }
8724
+ else {
8725
+ buttonHint = function (navUnit) { return formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
8726
+ calendarButtonHints[buttonName], [
8727
+ calendarButtonText[navUnit] || navUnit,
8728
+ navUnit,
8729
+ ], calendarButtonText[buttonName]); };
8730
+ }
8666
8731
  }
8667
- return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText };
8732
+ return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText, buttonHint: buttonHint };
8668
8733
  })); });
8734
+ return { widgets: widgets, viewsWithButtons: viewsWithButtons, hasTitle: hasTitle };
8669
8735
  }
8670
8736
 
8671
- var eventSourceDef = {
8737
+ var eventSourceDef$2 = {
8672
8738
  ignoreRange: true,
8673
8739
  parseMeta: function (refined) {
8674
8740
  if (Array.isArray(refined.events)) {
@@ -8683,7 +8749,7 @@ var eventSourceDef = {
8683
8749
  },
8684
8750
  };
8685
8751
  var arrayEventSourcePlugin = createPlugin({
8686
- eventSourceDefs: [eventSourceDef],
8752
+ eventSourceDefs: [eventSourceDef$2],
8687
8753
  });
8688
8754
 
8689
8755
  var eventSourceDef$1 = {
@@ -8767,11 +8833,12 @@ var JSON_FEED_EVENT_SOURCE_REFINERS = {
8767
8833
  timeZoneParam: String,
8768
8834
  };
8769
8835
 
8770
- var eventSourceDef$2 = {
8836
+ var eventSourceDef = {
8771
8837
  parseMeta: function (refined) {
8772
- if (refined.url) {
8838
+ if (refined.url && (refined.format === 'json' || !refined.format)) {
8773
8839
  return {
8774
8840
  url: refined.url,
8841
+ format: 'json',
8775
8842
  method: (refined.method || 'GET').toUpperCase(),
8776
8843
  extraParams: refined.extraParams,
8777
8844
  startParam: refined.startParam,
@@ -8793,7 +8860,7 @@ var eventSourceDef$2 = {
8793
8860
  };
8794
8861
  var jsonFeedEventSourcePlugin = createPlugin({
8795
8862
  eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
8796
- eventSourceDefs: [eventSourceDef$2],
8863
+ eventSourceDefs: [eventSourceDef],
8797
8864
  });
8798
8865
  function buildRequestParams(meta, range, context) {
8799
8866
  var dateEnv = context.dateEnv, options = context.options;
@@ -8861,7 +8928,7 @@ var recurring = {
8861
8928
  return {
8862
8929
  allDayGuess: Boolean(!refined.startTime && !refined.endTime),
8863
8930
  duration: duration,
8864
- typeData: recurringData,
8931
+ typeData: recurringData, // doesn't need endTime anymore but oh well
8865
8932
  };
8866
8933
  }
8867
8934
  return null;
@@ -8965,9 +9032,12 @@ var globalPlugins = [
8965
9032
  simpleRecurringEventsPlugin,
8966
9033
  changeHandlerPlugin,
8967
9034
  createPlugin({
9035
+ isLoadingFuncs: [
9036
+ function (state) { return computeEventSourcesLoading(state.eventSources); },
9037
+ ],
8968
9038
  contentTypeHandlers: {
8969
- html: function () { return ({ render: injectHtml }); },
8970
- domNodes: function () { return ({ render: injectDomNodes }); },
9039
+ html: buildHtmlRenderer,
9040
+ domNodes: buildDomNodeRenderer,
8971
9041
  },
8972
9042
  propSetHandlers: {
8973
9043
  dateProfile: handleDateProfile,
@@ -8975,19 +9045,45 @@ var globalPlugins = [
8975
9045
  },
8976
9046
  }),
8977
9047
  ];
8978
- function injectHtml(el, html) {
8979
- el.innerHTML = html;
9048
+ function buildHtmlRenderer() {
9049
+ var currentEl = null;
9050
+ var currentHtml = '';
9051
+ function render(el, html) {
9052
+ if (el !== currentEl || html !== currentHtml) {
9053
+ el.innerHTML = html;
9054
+ }
9055
+ currentEl = el;
9056
+ currentHtml = html;
9057
+ }
9058
+ function destroy() {
9059
+ currentEl.innerHTML = '';
9060
+ currentEl = null;
9061
+ currentHtml = '';
9062
+ }
9063
+ return { render: render, destroy: destroy };
8980
9064
  }
8981
- function injectDomNodes(el, domNodes) {
8982
- var oldNodes = Array.prototype.slice.call(el.childNodes); // TODO: use array util
8983
- var newNodes = Array.prototype.slice.call(domNodes); // TODO: use array util
8984
- if (!isArraysEqual(oldNodes, newNodes)) {
8985
- for (var _i = 0, newNodes_1 = newNodes; _i < newNodes_1.length; _i++) {
8986
- var newNode = newNodes_1[_i];
8987
- el.appendChild(newNode);
9065
+ function buildDomNodeRenderer() {
9066
+ var currentEl = null;
9067
+ var currentDomNodes = [];
9068
+ function render(el, domNodes) {
9069
+ var newDomNodes = Array.prototype.slice.call(domNodes);
9070
+ if (el !== currentEl || !isArraysEqual(currentDomNodes, newDomNodes)) {
9071
+ // append first, remove second (for scroll resetting)
9072
+ for (var _i = 0, newDomNodes_1 = newDomNodes; _i < newDomNodes_1.length; _i++) {
9073
+ var newNode = newDomNodes_1[_i];
9074
+ el.appendChild(newNode);
9075
+ }
9076
+ destroy();
8988
9077
  }
8989
- oldNodes.forEach(removeElement);
9078
+ currentEl = el;
9079
+ currentDomNodes = newDomNodes;
8990
9080
  }
9081
+ function destroy() {
9082
+ currentDomNodes.forEach(removeElement);
9083
+ currentDomNodes = [];
9084
+ currentEl = null;
9085
+ }
9086
+ return { render: render, destroy: destroy };
8991
9087
  }
8992
9088
 
8993
9089
  var DelayedRunner = /** @class */ (function () {
@@ -9152,7 +9248,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9152
9248
  this.organizeRawLocales = memoize(organizeRawLocales);
9153
9249
  this.buildLocale = memoize(buildLocale);
9154
9250
  this.buildPluginHooks = buildBuildPluginHooks();
9155
- this.buildDateEnv = memoize(buildDateEnv$1);
9251
+ this.buildDateEnv = memoize(buildDateEnv);
9156
9252
  this.buildTheme = memoize(buildTheme);
9157
9253
  this.parseToolbars = memoize(parseToolbars);
9158
9254
  this.buildViewSpecs = memoize(buildViewSpecs);
@@ -9214,7 +9310,6 @@ var main_CalendarDataManager = /** @class */ (function () {
9214
9310
  businessHours: this.parseContextBusinessHours(calendarContext),
9215
9311
  eventSources: eventSources,
9216
9312
  eventUiBases: {},
9217
- loadingLevel: computeEventSourceLoadingLevel(eventSources),
9218
9313
  eventStore: createEmptyEventStore(),
9219
9314
  renderableEventStore: createEmptyEventStore(),
9220
9315
  dateSelection: null,
@@ -9228,7 +9323,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9228
9323
  var reducer = _c[_b];
9229
9324
  __assign(initialState, reducer(null, null, contextAndState));
9230
9325
  }
9231
- if (initialState.loadingLevel) {
9326
+ if (computeIsLoading(initialState, calendarContext)) {
9232
9327
  this.emitter.trigger('loading', true); // NOT DRY
9233
9328
  }
9234
9329
  this.state = initialState;
@@ -9269,20 +9364,20 @@ var main_CalendarDataManager = /** @class */ (function () {
9269
9364
  }
9270
9365
  currentDate = reduceCurrentDate(currentDate, action);
9271
9366
  dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
9272
- if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
9367
+ if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
9368
+ action.type === 'NEXT' || // "
9369
+ !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
9273
9370
  currentDate = dateProfile.currentRange.start;
9274
9371
  }
9275
9372
  var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
9276
- var eventSourceLoadingLevel = computeEventSourceLoadingLevel(eventSources);
9277
9373
  var eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
9278
- var renderableEventStore = (eventSourceLoadingLevel && !currentViewData.options.progressiveEventRendering) ?
9374
+ var isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
9375
+ var renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
9279
9376
  (state.renderableEventStore || eventStore) : // try from previous state
9280
9377
  eventStore;
9281
9378
  var _b = this.buildViewUiProps(calendarContext), eventUiSingleBase = _b.eventUiSingleBase, selectionConfig = _b.selectionConfig; // will memoize obj
9282
9379
  var eventUiBySource = this.buildEventUiBySource(eventSources);
9283
9380
  var eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
9284
- var prevLoadingLevel = state.loadingLevel || 0;
9285
- var loadingLevel = eventSourceLoadingLevel;
9286
9381
  var newState = {
9287
9382
  dynamicOptionOverrides: dynamicOptionOverrides,
9288
9383
  currentViewType: currentViewType,
@@ -9293,7 +9388,6 @@ var main_CalendarDataManager = /** @class */ (function () {
9293
9388
  renderableEventStore: renderableEventStore,
9294
9389
  selectionConfig: selectionConfig,
9295
9390
  eventUiBases: eventUiBases,
9296
- loadingLevel: loadingLevel,
9297
9391
  businessHours: this.parseContextBusinessHours(calendarContext),
9298
9392
  dateSelection: reduceDateSelection(state.dateSelection, action),
9299
9393
  eventSelection: reduceSelectedEvent(state.eventSelection, action),
@@ -9305,11 +9399,13 @@ var main_CalendarDataManager = /** @class */ (function () {
9305
9399
  var reducer = _c[_i];
9306
9400
  __assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
9307
9401
  }
9402
+ var wasLoading = computeIsLoading(state, calendarContext);
9403
+ var isLoading = computeIsLoading(newState, calendarContext);
9308
9404
  // TODO: use propSetHandlers in plugin system
9309
- if (!prevLoadingLevel && loadingLevel) {
9405
+ if (!wasLoading && isLoading) {
9310
9406
  emitter.trigger('loading', true);
9311
9407
  }
9312
- else if (prevLoadingLevel && !loadingLevel) {
9408
+ else if (wasLoading && !isLoading) {
9313
9409
  emitter.trigger('loading', false);
9314
9410
  }
9315
9411
  this.state = newState;
@@ -9491,7 +9587,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9491
9587
  };
9492
9588
  return CalendarDataManager;
9493
9589
  }());
9494
- function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
9590
+ function buildDateEnv(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
9495
9591
  var locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
9496
9592
  return new DateEnv({
9497
9593
  calendarSystem: 'gregory',
@@ -9544,6 +9640,7 @@ function buildViewUiProps(calendarContext) {
9544
9640
  borderColor: options.eventBorderColor,
9545
9641
  textColor: options.eventTextColor,
9546
9642
  color: options.eventColor,
9643
+ // classNames: options.eventClassNames // render hook will handle this
9547
9644
  }, calendarContext),
9548
9645
  selectionConfig: createEventUi({
9549
9646
  constraint: options.selectConstraint,
@@ -9552,6 +9649,15 @@ function buildViewUiProps(calendarContext) {
9552
9649
  }, calendarContext),
9553
9650
  };
9554
9651
  }
9652
+ function computeIsLoading(state, context) {
9653
+ for (var _i = 0, _a = context.pluginHooks.isLoadingFuncs; _i < _a.length; _i++) {
9654
+ var isLoadingFunc = _a[_i];
9655
+ if (isLoadingFunc(state)) {
9656
+ return true;
9657
+ }
9658
+ }
9659
+ return false;
9660
+ }
9555
9661
  function parseContextBusinessHours(calendarContext) {
9556
9662
  return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
9557
9663
  }
@@ -9611,9 +9717,248 @@ var NamedTimeZoneImpl = /** @class */ (function () {
9611
9717
  return NamedTimeZoneImpl;
9612
9718
  }());
9613
9719
 
9720
+ var main_SegHierarchy = /** @class */ (function () {
9721
+ function SegHierarchy() {
9722
+ // settings
9723
+ this.strictOrder = false;
9724
+ this.allowReslicing = false;
9725
+ this.maxCoord = -1; // -1 means no max
9726
+ this.maxStackCnt = -1; // -1 means no max
9727
+ this.levelCoords = []; // ordered
9728
+ this.entriesByLevel = []; // parallel with levelCoords
9729
+ this.stackCnts = {}; // TODO: use better technique!?
9730
+ }
9731
+ SegHierarchy.prototype.addSegs = function (inputs) {
9732
+ var hiddenEntries = [];
9733
+ for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
9734
+ var input = inputs_1[_i];
9735
+ this.insertEntry(input, hiddenEntries);
9736
+ }
9737
+ return hiddenEntries;
9738
+ };
9739
+ SegHierarchy.prototype.insertEntry = function (entry, hiddenEntries) {
9740
+ var insertion = this.findInsertion(entry);
9741
+ if (this.isInsertionValid(insertion, entry)) {
9742
+ this.insertEntryAt(entry, insertion);
9743
+ return 1;
9744
+ }
9745
+ return this.handleInvalidInsertion(insertion, entry, hiddenEntries);
9746
+ };
9747
+ SegHierarchy.prototype.isInsertionValid = function (insertion, entry) {
9748
+ return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&
9749
+ (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
9750
+ };
9751
+ // returns number of new entries inserted
9752
+ SegHierarchy.prototype.handleInvalidInsertion = function (insertion, entry, hiddenEntries) {
9753
+ if (this.allowReslicing && insertion.touchingEntry) {
9754
+ return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
9755
+ }
9756
+ hiddenEntries.push(entry);
9757
+ return 0;
9758
+ };
9759
+ SegHierarchy.prototype.splitEntry = function (entry, barrier, hiddenEntries) {
9760
+ var partCnt = 0;
9761
+ var splitHiddenEntries = [];
9762
+ var entrySpan = entry.span;
9763
+ var barrierSpan = barrier.span;
9764
+ if (entrySpan.start < barrierSpan.start) {
9765
+ partCnt += this.insertEntry({
9766
+ index: entry.index,
9767
+ thickness: entry.thickness,
9768
+ span: { start: entrySpan.start, end: barrierSpan.start },
9769
+ }, splitHiddenEntries);
9770
+ }
9771
+ if (entrySpan.end > barrierSpan.end) {
9772
+ partCnt += this.insertEntry({
9773
+ index: entry.index,
9774
+ thickness: entry.thickness,
9775
+ span: { start: barrierSpan.end, end: entrySpan.end },
9776
+ }, splitHiddenEntries);
9777
+ }
9778
+ if (partCnt) {
9779
+ hiddenEntries.push.apply(hiddenEntries, __spreadArray([{
9780
+ index: entry.index,
9781
+ thickness: entry.thickness,
9782
+ span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect
9783
+ }], splitHiddenEntries));
9784
+ return partCnt;
9785
+ }
9786
+ hiddenEntries.push(entry);
9787
+ return 0;
9788
+ };
9789
+ SegHierarchy.prototype.insertEntryAt = function (entry, insertion) {
9790
+ var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
9791
+ if (insertion.lateral === -1) {
9792
+ // create a new level
9793
+ insertAt(levelCoords, insertion.level, insertion.levelCoord);
9794
+ insertAt(entriesByLevel, insertion.level, [entry]);
9795
+ }
9796
+ else {
9797
+ // insert into existing level
9798
+ insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
9799
+ }
9800
+ this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
9801
+ };
9802
+ SegHierarchy.prototype.findInsertion = function (newEntry) {
9803
+ var _a = this, levelCoords = _a.levelCoords, entriesByLevel = _a.entriesByLevel, strictOrder = _a.strictOrder, stackCnts = _a.stackCnts;
9804
+ var levelCnt = levelCoords.length;
9805
+ var candidateCoord = 0;
9806
+ var touchingLevel = -1;
9807
+ var touchingLateral = -1;
9808
+ var touchingEntry = null;
9809
+ var stackCnt = 0;
9810
+ for (var trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
9811
+ var trackingCoord = levelCoords[trackingLevel];
9812
+ // if the current level is past the placed entry, we have found a good empty space and can stop.
9813
+ // if strictOrder, keep finding more lateral intersections.
9814
+ if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {
9815
+ break;
9816
+ }
9817
+ var trackingEntries = entriesByLevel[trackingLevel];
9818
+ var trackingEntry = void 0;
9819
+ var searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
9820
+ var lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
9821
+ while ( // loop through entries that horizontally intersect
9822
+ (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
9823
+ trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
9824
+ ) {
9825
+ var trackingEntryBottom = trackingCoord + trackingEntry.thickness;
9826
+ // intersects into the top of the candidate?
9827
+ if (trackingEntryBottom > candidateCoord) {
9828
+ candidateCoord = trackingEntryBottom;
9829
+ touchingEntry = trackingEntry;
9830
+ touchingLevel = trackingLevel;
9831
+ touchingLateral = lateralIndex;
9832
+ }
9833
+ // butts up against top of candidate? (will happen if just intersected as well)
9834
+ if (trackingEntryBottom === candidateCoord) {
9835
+ // accumulate the highest possible stackCnt of the trackingEntries that butt up
9836
+ stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
9837
+ }
9838
+ lateralIndex += 1;
9839
+ }
9840
+ }
9841
+ // the destination level will be after touchingEntry's level. find it
9842
+ var destLevel = 0;
9843
+ if (touchingEntry) {
9844
+ destLevel = touchingLevel + 1;
9845
+ while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
9846
+ destLevel += 1;
9847
+ }
9848
+ }
9849
+ // if adding to an existing level, find where to insert
9850
+ var destLateral = -1;
9851
+ if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
9852
+ destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
9853
+ }
9854
+ return {
9855
+ touchingLevel: touchingLevel,
9856
+ touchingLateral: touchingLateral,
9857
+ touchingEntry: touchingEntry,
9858
+ stackCnt: stackCnt,
9859
+ levelCoord: candidateCoord,
9860
+ level: destLevel,
9861
+ lateral: destLateral,
9862
+ };
9863
+ };
9864
+ // sorted by levelCoord (lowest to highest)
9865
+ SegHierarchy.prototype.toRects = function () {
9866
+ var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
9867
+ var levelCnt = entriesByLevel.length;
9868
+ var rects = [];
9869
+ for (var level = 0; level < levelCnt; level += 1) {
9870
+ var entries = entriesByLevel[level];
9871
+ var levelCoord = levelCoords[level];
9872
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
9873
+ var entry = entries_1[_i];
9874
+ rects.push(__assign(__assign({}, entry), { levelCoord: levelCoord }));
9875
+ }
9876
+ }
9877
+ return rects;
9878
+ };
9879
+ return SegHierarchy;
9880
+ }());
9881
+ function getEntrySpanEnd(entry) {
9882
+ return entry.span.end;
9883
+ }
9884
+ function buildEntryKey(entry) {
9885
+ return entry.index + ':' + entry.span.start;
9886
+ }
9887
+ // returns groups with entries sorted by input order
9888
+ function groupIntersectingEntries(entries) {
9889
+ var merges = [];
9890
+ for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
9891
+ var entry = entries_2[_i];
9892
+ var filteredMerges = [];
9893
+ var hungryMerge = {
9894
+ span: entry.span,
9895
+ entries: [entry],
9896
+ };
9897
+ for (var _a = 0, merges_1 = merges; _a < merges_1.length; _a++) {
9898
+ var merge = merges_1[_a];
9899
+ if (intersectSpans(merge.span, hungryMerge.span)) {
9900
+ hungryMerge = {
9901
+ entries: merge.entries.concat(hungryMerge.entries),
9902
+ span: joinSpans(merge.span, hungryMerge.span),
9903
+ };
9904
+ }
9905
+ else {
9906
+ filteredMerges.push(merge);
9907
+ }
9908
+ }
9909
+ filteredMerges.push(hungryMerge);
9910
+ merges = filteredMerges;
9911
+ }
9912
+ return merges;
9913
+ }
9914
+ function joinSpans(span0, span1) {
9915
+ return {
9916
+ start: Math.min(span0.start, span1.start),
9917
+ end: Math.max(span0.end, span1.end),
9918
+ };
9919
+ }
9920
+ function intersectSpans(span0, span1) {
9921
+ var start = Math.max(span0.start, span1.start);
9922
+ var end = Math.min(span0.end, span1.end);
9923
+ if (start < end) {
9924
+ return { start: start, end: end };
9925
+ }
9926
+ return null;
9927
+ }
9928
+ // general util
9929
+ // ---------------------------------------------------------------------------------------------------------------------
9930
+ function insertAt(arr, index, item) {
9931
+ arr.splice(index, 0, item);
9932
+ }
9933
+ function binarySearch(a, searchVal, getItemVal) {
9934
+ var startIndex = 0;
9935
+ var endIndex = a.length; // exclusive
9936
+ if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item
9937
+ return [0, 0];
9938
+ }
9939
+ if (searchVal > getItemVal(a[endIndex - 1])) { // after last item
9940
+ return [endIndex, 0];
9941
+ }
9942
+ while (startIndex < endIndex) {
9943
+ var middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
9944
+ var middleVal = getItemVal(a[middleIndex]);
9945
+ if (searchVal < middleVal) {
9946
+ endIndex = middleIndex;
9947
+ }
9948
+ else if (searchVal > middleVal) {
9949
+ startIndex = middleIndex + 1;
9950
+ }
9951
+ else { // equal!
9952
+ return [middleIndex, 1];
9953
+ }
9954
+ }
9955
+ return [startIndex, 0];
9956
+ }
9957
+
9614
9958
  var Interaction = /** @class */ (function () {
9615
9959
  function Interaction(settings) {
9616
9960
  this.component = settings.component;
9961
+ this.isHitComboAllowed = settings.isHitComboAllowed || null;
9617
9962
  }
9618
9963
  Interaction.prototype.destroy = function () {
9619
9964
  };
@@ -9624,6 +9969,7 @@ function parseInteractionSettings(component, input) {
9624
9969
  component: component,
9625
9970
  el: input.el,
9626
9971
  useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
9972
+ isHitComboAllowed: input.isHitComboAllowed || null,
9627
9973
  };
9628
9974
  }
9629
9975
  function interactionSettingsToStore(settings) {
@@ -9699,7 +10045,7 @@ var main_ToolbarSection = /** @class */ (function (_super) {
9699
10045
  ToolbarSection.prototype.render = function () {
9700
10046
  var _this = this;
9701
10047
  var children = this.props.widgetGroups.map(function (widgetGroup) { return _this.renderWidgetGroup(widgetGroup); });
9702
- return createElement.apply(void 0, __spreadArrays(['div', { className: 'fc-toolbar-chunk' }], children));
10048
+ return createElement.apply(void 0, __spreadArray(['div', { className: 'fc-toolbar-chunk' }], children));
9703
10049
  };
9704
10050
  ToolbarSection.prototype.renderWidgetGroup = function (widgetGroup) {
9705
10051
  var props = this.props;
@@ -9708,26 +10054,26 @@ var main_ToolbarSection = /** @class */ (function (_super) {
9708
10054
  var isOnlyButtons = true;
9709
10055
  for (var _i = 0, widgetGroup_1 = widgetGroup; _i < widgetGroup_1.length; _i++) {
9710
10056
  var widget = widgetGroup_1[_i];
9711
- var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon;
10057
+ var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon, buttonHint = widget.buttonHint;
9712
10058
  if (buttonName === 'title') {
9713
10059
  isOnlyButtons = false;
9714
- children.push(createElement("h2", { className: "fc-toolbar-title" }, props.title));
10060
+ children.push(createElement("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
9715
10061
  }
9716
10062
  else {
9717
- var ariaAttrs = buttonIcon ? { 'aria-label': buttonName } : {};
9718
- var buttonClasses = ["fc-" + buttonName + "-button", theme.getClass('button')];
9719
- if (buttonName === props.activeButton) {
9720
- buttonClasses.push(theme.getClass('buttonActive'));
9721
- }
10063
+ var isPressed = buttonName === props.activeButton;
9722
10064
  var isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
9723
10065
  (!props.isPrevEnabled && buttonName === 'prev') ||
9724
10066
  (!props.isNextEnabled && buttonName === 'next');
9725
- children.push(createElement("button", __assign({ disabled: isDisabled, className: buttonClasses.join(' '), onClick: buttonClick, type: "button" }, ariaAttrs), buttonText || (buttonIcon ? createElement("span", { className: buttonIcon }) : '')));
10067
+ var buttonClasses = ["fc-" + buttonName + "-button", theme.getClass('button')];
10068
+ if (isPressed) {
10069
+ buttonClasses.push(theme.getClass('buttonActive'));
10070
+ }
10071
+ children.push(createElement("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? createElement("span", { className: buttonIcon }) : '')));
9726
10072
  }
9727
10073
  }
9728
10074
  if (children.length > 1) {
9729
10075
  var groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
9730
- return createElement.apply(void 0, __spreadArrays(['div', { className: groupClassName }], children));
10076
+ return createElement.apply(void 0, __spreadArray(['div', { className: groupClassName }], children));
9731
10077
  }
9732
10078
  return children[0];
9733
10079
  };
@@ -9744,20 +10090,21 @@ var main_Toolbar = /** @class */ (function (_super) {
9744
10090
  var forceLtr = false;
9745
10091
  var startContent;
9746
10092
  var endContent;
9747
- var centerContent = model.center;
9748
- if (model.left) {
10093
+ var sectionWidgets = model.sectionWidgets;
10094
+ var centerContent = sectionWidgets.center;
10095
+ if (sectionWidgets.left) {
9749
10096
  forceLtr = true;
9750
- startContent = model.left;
10097
+ startContent = sectionWidgets.left;
9751
10098
  }
9752
10099
  else {
9753
- startContent = model.start;
10100
+ startContent = sectionWidgets.start;
9754
10101
  }
9755
- if (model.right) {
10102
+ if (sectionWidgets.right) {
9756
10103
  forceLtr = true;
9757
- endContent = model.right;
10104
+ endContent = sectionWidgets.right;
9758
10105
  }
9759
10106
  else {
9760
- endContent = model.end;
10107
+ endContent = sectionWidgets.end;
9761
10108
  }
9762
10109
  var classNames = [
9763
10110
  extraClassName || '',
@@ -9771,7 +10118,7 @@ var main_Toolbar = /** @class */ (function (_super) {
9771
10118
  };
9772
10119
  Toolbar.prototype.renderSection = function (key, widgetGroups) {
9773
10120
  var props = this.props;
9774
- return (createElement(main_ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
10121
+ return (createElement(main_ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));
9775
10122
  };
9776
10123
  return Toolbar;
9777
10124
  }(main_BaseComponent));
@@ -9801,7 +10148,7 @@ var main_ViewContainer = /** @class */ (function (_super) {
9801
10148
  'fc-view-harness',
9802
10149
  (aspectRatio || props.liquid || props.height)
9803
10150
  ? 'fc-view-harness-active' // harness controls the height
9804
- : 'fc-view-harness-passive',
10151
+ : 'fc-view-harness-passive', // let the view do the height
9805
10152
  ];
9806
10153
  var height = '';
9807
10154
  var paddingBottom = '';
@@ -9820,7 +10167,7 @@ var main_ViewContainer = /** @class */ (function (_super) {
9820
10167
  else {
9821
10168
  height = props.height || '';
9822
10169
  }
9823
- return (createElement("div", { ref: this.handleEl, onClick: props.onClick, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
10170
+ return (createElement("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
9824
10171
  };
9825
10172
  ViewContainer.prototype.componentDidMount = function () {
9826
10173
  this.context.addResizeHandler(this.handleResize);
@@ -9929,10 +10276,13 @@ var main_CalendarContent = /** @class */ (function (_super) {
9929
10276
  _this.buildViewContext = memoize(buildViewContext);
9930
10277
  _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
9931
10278
  _this.buildToolbarProps = memoize(buildToolbarProps);
9932
- _this.handleNavLinkClick = buildDelegationHandler('a[data-navlink]', _this._handleNavLinkClick.bind(_this));
9933
10279
  _this.headerRef = createRef();
9934
10280
  _this.footerRef = createRef();
9935
10281
  _this.interactionsStore = {};
10282
+ // eslint-disable-next-line
10283
+ _this.state = {
10284
+ viewLabelId: getUniqueDomId(),
10285
+ };
9936
10286
  // Component Registration
9937
10287
  // -----------------------------------------------------------------------------------------------------------------
9938
10288
  _this.registerInteractiveComponent = function (component, settingsInput) {
@@ -9994,12 +10344,15 @@ var main_CalendarContent = /** @class */ (function (_super) {
9994
10344
  viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
9995
10345
  }
9996
10346
  var viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
10347
+ var viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)
10348
+ ? this.state.viewLabelId
10349
+ : '';
9997
10350
  return (createElement(ViewContextType.Provider, { value: viewContext },
9998
- toolbarConfig.headerToolbar && (createElement(main_Toolbar, __assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.headerToolbar }, toolbarProps))),
9999
- createElement(main_ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, onClick: this.handleNavLinkClick },
10351
+ toolbarConfig.header && (createElement(main_Toolbar, __assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
10352
+ createElement(main_ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
10000
10353
  this.renderView(props),
10001
10354
  this.buildAppendContent()),
10002
- toolbarConfig.footerToolbar && (createElement(main_Toolbar, __assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footerToolbar }, toolbarProps)))));
10355
+ toolbarConfig.footer && (createElement(main_Toolbar, __assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
10003
10356
  };
10004
10357
  CalendarContent.prototype.componentDidMount = function () {
10005
10358
  var props = this.props;
@@ -10029,28 +10382,10 @@ var main_CalendarContent = /** @class */ (function (_super) {
10029
10382
  }
10030
10383
  this.props.emitter.trigger('_unmount');
10031
10384
  };
10032
- CalendarContent.prototype._handleNavLinkClick = function (ev, anchorEl) {
10033
- var _a = this.props, dateEnv = _a.dateEnv, options = _a.options, calendarApi = _a.calendarApi;
10034
- var navLinkOptions = anchorEl.getAttribute('data-navlink');
10035
- navLinkOptions = navLinkOptions ? JSON.parse(navLinkOptions) : {};
10036
- var dateMarker = dateEnv.createMarker(navLinkOptions.date);
10037
- var viewType = navLinkOptions.type;
10038
- var customAction = viewType === 'day' ? options.navLinkDayClick :
10039
- viewType === 'week' ? options.navLinkWeekClick : null;
10040
- if (typeof customAction === 'function') {
10041
- customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
10042
- }
10043
- else {
10044
- if (typeof customAction === 'string') {
10045
- viewType = customAction;
10046
- }
10047
- calendarApi.zoomTo(dateMarker, viewType);
10048
- }
10049
- };
10050
10385
  CalendarContent.prototype.buildAppendContent = function () {
10051
10386
  var props = this.props;
10052
10387
  var children = props.pluginHooks.viewContainerAppends.map(function (buildAppendContent) { return buildAppendContent(props); });
10053
- return createElement.apply(void 0, __spreadArrays([Fragment, {}], children));
10388
+ return createElement.apply(void 0, __spreadArray([Fragment, {}], children));
10054
10389
  };
10055
10390
  CalendarContent.prototype.renderView = function (props) {
10056
10391
  var pluginHooks = props.pluginHooks;
@@ -10085,6 +10420,7 @@ function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentD
10085
10420
  return {
10086
10421
  title: title,
10087
10422
  activeButton: viewSpec.type,
10423
+ navUnit: viewSpec.singleUnit,
10088
10424
  isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
10089
10425
  isPrevEnabled: prevInfo.isValid,
10090
10426
  isNextEnabled: nextInfo.isValid,
@@ -10155,7 +10491,7 @@ function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
10155
10491
  }
10156
10492
 
10157
10493
  var CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
10158
- function renderInner(hookProps) {
10494
+ function renderInner$1(hookProps) {
10159
10495
  return hookProps.text;
10160
10496
  }
10161
10497
 
@@ -10172,11 +10508,11 @@ var main_TableDateCell = /** @class */ (function (_super) {
10172
10508
  var classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
10173
10509
  var text = dateEnv.format(date, props.dayHeaderFormat);
10174
10510
  // if colCnt is 1, we are already in a day-view and don't need a navlink
10175
- var navLinkAttrs = (options.navLinks && !dayMeta.isDisabled && props.colCnt > 1)
10176
- ? { 'data-navlink': buildNavLinkData(date), tabIndex: 0 }
10511
+ var navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)
10512
+ ? buildNavLinkAttrs(this.context, date)
10177
10513
  : {};
10178
10514
  var hookProps = __assign(__assign(__assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraHookProps), { text: text }), dayMeta);
10179
- return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-date": !dayMeta.isDisabled ? formatDayString(date) : undefined, colSpan: props.colSpan }, props.extraDataAttrs),
10515
+ return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner$1, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, role: "columnheader", className: classNames.concat(customClassNames).join(' '), "data-date": !dayMeta.isDisabled ? formatDayString(date) : undefined, colSpan: props.colSpan }, props.extraDataAttrs),
10180
10516
  createElement("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && (createElement("a", __assign({ ref: innerElRef, className: [
10181
10517
  'fc-col-header-cell-cushion',
10182
10518
  props.isSticky ? 'fc-sticky' : '',
@@ -10185,6 +10521,7 @@ var main_TableDateCell = /** @class */ (function (_super) {
10185
10521
  return TableDateCell;
10186
10522
  }(main_BaseComponent));
10187
10523
 
10524
+ var WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });
10188
10525
  var main_TableDowCell = /** @class */ (function (_super) {
10189
10526
  __extends(TableDowCell, _super);
10190
10527
  function TableDowCell() {
@@ -10206,9 +10543,9 @@ var main_TableDowCell = /** @class */ (function (_super) {
10206
10543
  var text = dateEnv.format(date, props.dayHeaderFormat);
10207
10544
  var hookProps = __assign(__assign(__assign(__assign({ // TODO: make this public?
10208
10545
  date: date }, dateMeta), { view: viewApi }), props.extraHookProps), { text: text });
10209
- return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), colSpan: props.colSpan }, props.extraDataAttrs),
10546
+ return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner$1, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, role: "columnheader", className: classNames.concat(customClassNames).join(' '), colSpan: props.colSpan }, props.extraDataAttrs),
10210
10547
  createElement("div", { className: "fc-scrollgrid-sync-inner" },
10211
- createElement("a", { className: [
10548
+ createElement("a", { "aria-label": dateEnv.format(date, WEEKDAY_FORMAT), className: [
10212
10549
  'fc-col-header-cell-cushion',
10213
10550
  props.isSticky ? 'fc-sticky' : '',
10214
10551
  ].join(' '), ref: innerElRef }, innerContent)))); }));
@@ -10247,6 +10584,9 @@ var main_NowTimer = /** @class */ (function (_super) {
10247
10584
  var currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
10248
10585
  var nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
10249
10586
  var waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
10587
+ // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)
10588
+ // ensure no longer than a day
10589
+ waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);
10250
10590
  return {
10251
10591
  currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
10252
10592
  nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
@@ -10287,8 +10627,8 @@ var main_DayHeader = /** @class */ (function (_super) {
10287
10627
  var context = this.context;
10288
10628
  var _a = this.props, dates = _a.dates, dateProfile = _a.dateProfile, datesRepDistinctDays = _a.datesRepDistinctDays, renderIntro = _a.renderIntro;
10289
10629
  var dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
10290
- return (createElement(main_NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement("tr", null,
10291
- renderIntro && renderIntro(),
10630
+ return (createElement(main_NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement("tr", { role: "row" },
10631
+ renderIntro && renderIntro('day'),
10292
10632
  dates.map(function (date) { return (datesRepDistinctDays ? (createElement(main_TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (createElement(main_TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))); }))); }));
10293
10633
  };
10294
10634
  return DayHeader;
@@ -10447,14 +10787,14 @@ var main_Slicer = /** @class */ (function () {
10447
10787
  extraArgs[_i - 4] = arguments[_i];
10448
10788
  }
10449
10789
  var eventUiBases = props.eventUiBases;
10450
- var eventSegs = this.sliceEventStore.apply(this, __spreadArrays([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
10790
+ var eventSegs = this.sliceEventStore.apply(this, __spreadArray([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
10451
10791
  return {
10452
- dateSelectionSegs: this.sliceDateSelection.apply(this, __spreadArrays([props.dateSelection, eventUiBases, context], extraArgs)),
10453
- businessHourSegs: this.sliceBusinessHours.apply(this, __spreadArrays([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
10792
+ dateSelectionSegs: this.sliceDateSelection.apply(this, __spreadArray([props.dateSelection, eventUiBases, context], extraArgs)),
10793
+ businessHourSegs: this.sliceBusinessHours.apply(this, __spreadArray([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
10454
10794
  fgEventSegs: eventSegs.fg,
10455
10795
  bgEventSegs: eventSegs.bg,
10456
- eventDrag: this.sliceEventDrag.apply(this, __spreadArrays([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10457
- eventResize: this.sliceEventResize.apply(this, __spreadArrays([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10796
+ eventDrag: this.sliceEventDrag.apply(this, __spreadArray([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10797
+ eventResize: this.sliceEventResize.apply(this, __spreadArray([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10458
10798
  eventSelection: props.eventSelection,
10459
10799
  }; // TODO: give interactionSegs?
10460
10800
  };
@@ -10464,7 +10804,7 @@ var main_Slicer = /** @class */ (function () {
10464
10804
  for (var _i = 2; _i < arguments.length; _i++) {
10465
10805
  extraArgs[_i - 2] = arguments[_i];
10466
10806
  }
10467
- return this._sliceDateSpan.apply(this, __spreadArrays([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
10807
+ return this._sliceDateSpan.apply(this, __spreadArray([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
10468
10808
  {},
10469
10809
  context], extraArgs));
10470
10810
  };
@@ -10476,7 +10816,7 @@ var main_Slicer = /** @class */ (function () {
10476
10816
  if (!businessHours) {
10477
10817
  return [];
10478
10818
  }
10479
- return this._sliceEventStore.apply(this, __spreadArrays([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
10819
+ return this._sliceEventStore.apply(this, __spreadArray([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
10480
10820
  {},
10481
10821
  dateProfile,
10482
10822
  nextDayThreshold], extraArgs)).bg;
@@ -10515,65 +10855,254 @@ var main_Slicer = /** @class */ (function () {
10515
10855
  for (var _i = 3; _i < arguments.length; _i++) {
10516
10856
  extraArgs[_i - 3] = arguments[_i];
10517
10857
  }
10518
- if (!dateSpan) {
10519
- return [];
10858
+ if (!dateSpan) {
10859
+ return [];
10860
+ }
10861
+ var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
10862
+ var segs = this.sliceRange.apply(this, __spreadArray([dateSpan.range], extraArgs));
10863
+ for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
10864
+ var seg = segs_1[_a];
10865
+ seg.eventRange = eventRange;
10866
+ }
10867
+ return segs;
10868
+ };
10869
+ /*
10870
+ "complete" seg means it has component and eventRange
10871
+ */
10872
+ Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
10873
+ var segs = [];
10874
+ for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
10875
+ var eventRange = eventRanges_1[_i];
10876
+ segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
10877
+ }
10878
+ return segs;
10879
+ };
10880
+ /*
10881
+ "complete" seg means it has component and eventRange
10882
+ */
10883
+ Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
10884
+ var dateRange = eventRange.range;
10885
+ // hack to make multi-day events that are being force-displayed as list-items to take up only one day
10886
+ if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
10887
+ dateRange = {
10888
+ start: dateRange.start,
10889
+ end: addDays(dateRange.start, 1),
10890
+ };
10891
+ }
10892
+ var segs = this.sliceRange.apply(this, __spreadArray([dateRange], extraArgs));
10893
+ for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
10894
+ var seg = segs_2[_i];
10895
+ seg.eventRange = eventRange;
10896
+ seg.isStart = eventRange.isStart && seg.isStart;
10897
+ seg.isEnd = eventRange.isEnd && seg.isEnd;
10898
+ }
10899
+ return segs;
10900
+ };
10901
+ return Slicer;
10902
+ }());
10903
+ /*
10904
+ for incorporating slotMinTime/slotMaxTime if appropriate
10905
+ TODO: should be part of DateProfile!
10906
+ TimelineDateProfile already does this btw
10907
+ */
10908
+ function computeActiveRange(dateProfile, isComponentAllDay) {
10909
+ var range = dateProfile.activeRange;
10910
+ if (isComponentAllDay) {
10911
+ return range;
10912
+ }
10913
+ return {
10914
+ start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
10915
+ end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day
10916
+ };
10917
+ }
10918
+
10919
+ // high-level segmenting-aware tester functions
10920
+ // ------------------------------------------------------------------------------------------------------------------------
10921
+ function isInteractionValid(interaction, dateProfile, context) {
10922
+ var instances = interaction.mutatedEvents.instances;
10923
+ for (var instanceId in instances) {
10924
+ if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
10925
+ return false;
10926
+ }
10927
+ }
10928
+ return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
10929
+ }
10930
+ function isDateSelectionValid(dateSelection, dateProfile, context) {
10931
+ if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {
10932
+ return false;
10933
+ }
10934
+ return isNewPropsValid({ dateSelection: dateSelection }, context);
10935
+ }
10936
+ function isNewPropsValid(newProps, context) {
10937
+ var calendarState = context.getCurrentData();
10938
+ var props = __assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
10939
+ return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
10940
+ }
10941
+ function isPropsValid(state, context, dateSpanMeta, filterConfig) {
10942
+ if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
10943
+ if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
10944
+ return false;
10945
+ }
10946
+ if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
10947
+ return false;
10948
+ }
10949
+ return true;
10950
+ }
10951
+ // Moving Event Validation
10952
+ // ------------------------------------------------------------------------------------------------------------------------
10953
+ function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
10954
+ var currentState = context.getCurrentData();
10955
+ var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
10956
+ var subjectEventStore = interaction.mutatedEvents;
10957
+ var subjectDefs = subjectEventStore.defs;
10958
+ var subjectInstances = subjectEventStore.instances;
10959
+ var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
10960
+ state.eventUiBases :
10961
+ { '': currentState.selectionConfig });
10962
+ if (filterConfig) {
10963
+ subjectConfigs = mapHash(subjectConfigs, filterConfig);
10964
+ }
10965
+ // exclude the subject events. TODO: exclude defs too?
10966
+ var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
10967
+ var otherDefs = otherEventStore.defs;
10968
+ var otherInstances = otherEventStore.instances;
10969
+ var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
10970
+ for (var subjectInstanceId in subjectInstances) {
10971
+ var subjectInstance = subjectInstances[subjectInstanceId];
10972
+ var subjectRange = subjectInstance.range;
10973
+ var subjectConfig = subjectConfigs[subjectInstance.defId];
10974
+ var subjectDef = subjectDefs[subjectInstance.defId];
10975
+ // constraint
10976
+ if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
10977
+ return false;
10978
+ }
10979
+ // overlap
10980
+ var eventOverlap = context.options.eventOverlap;
10981
+ var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
10982
+ for (var otherInstanceId in otherInstances) {
10983
+ var otherInstance = otherInstances[otherInstanceId];
10984
+ // intersect! evaluate
10985
+ if (rangesIntersect(subjectRange, otherInstance.range)) {
10986
+ var otherOverlap = otherConfigs[otherInstance.defId].overlap;
10987
+ // consider the other event's overlap. only do this if the subject event is a "real" event
10988
+ if (otherOverlap === false && interaction.isEvent) {
10989
+ return false;
10990
+ }
10991
+ if (subjectConfig.overlap === false) {
10992
+ return false;
10993
+ }
10994
+ if (eventOverlapFunc && !eventOverlapFunc(new main_EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event
10995
+ new main_EventApi(context, subjectDef, subjectInstance))) {
10996
+ return false;
10997
+ }
10998
+ }
10999
+ }
11000
+ // allow (a function)
11001
+ var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
11002
+ for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
11003
+ var subjectAllow = _a[_i];
11004
+ var subjectDateSpan = __assign(__assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
11005
+ var origDef = calendarEventStore.defs[subjectDef.defId];
11006
+ var origInstance = calendarEventStore.instances[subjectInstanceId];
11007
+ var eventApi = void 0;
11008
+ if (origDef) { // was previously in the calendar
11009
+ eventApi = new main_EventApi(context, origDef, origInstance);
11010
+ }
11011
+ else { // was an external event
11012
+ eventApi = new main_EventApi(context, subjectDef); // no instance, because had no dates
11013
+ }
11014
+ if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
11015
+ return false;
11016
+ }
10520
11017
  }
10521
- var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
10522
- var segs = this.sliceRange.apply(this, __spreadArrays([dateSpan.range], extraArgs));
10523
- for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
10524
- var seg = segs_1[_a];
10525
- seg.eventRange = eventRange;
11018
+ }
11019
+ return true;
11020
+ }
11021
+ // Date Selection Validation
11022
+ // ------------------------------------------------------------------------------------------------------------------------
11023
+ function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
11024
+ var relevantEventStore = state.eventStore;
11025
+ var relevantDefs = relevantEventStore.defs;
11026
+ var relevantInstances = relevantEventStore.instances;
11027
+ var selection = state.dateSelection;
11028
+ var selectionRange = selection.range;
11029
+ var selectionConfig = context.getCurrentData().selectionConfig;
11030
+ if (filterConfig) {
11031
+ selectionConfig = filterConfig(selectionConfig);
11032
+ }
11033
+ // constraint
11034
+ if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
11035
+ return false;
11036
+ }
11037
+ // overlap
11038
+ var selectOverlap = context.options.selectOverlap;
11039
+ var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
11040
+ for (var relevantInstanceId in relevantInstances) {
11041
+ var relevantInstance = relevantInstances[relevantInstanceId];
11042
+ // intersect! evaluate
11043
+ if (rangesIntersect(selectionRange, relevantInstance.range)) {
11044
+ if (selectionConfig.overlap === false) {
11045
+ return false;
11046
+ }
11047
+ if (selectOverlapFunc && !selectOverlapFunc(new main_EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
11048
+ return false;
11049
+ }
10526
11050
  }
10527
- return segs;
10528
- };
10529
- /*
10530
- "complete" seg means it has component and eventRange
10531
- */
10532
- Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
10533
- var segs = [];
10534
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
10535
- var eventRange = eventRanges_1[_i];
10536
- segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
11051
+ }
11052
+ // allow (a function)
11053
+ for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
11054
+ var selectionAllow = _a[_i];
11055
+ var fullDateSpan = __assign(__assign({}, dateSpanMeta), selection);
11056
+ if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
11057
+ return false;
10537
11058
  }
10538
- return segs;
10539
- };
10540
- /*
10541
- "complete" seg means it has component and eventRange
10542
- */
10543
- Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
10544
- var dateRange = eventRange.range;
10545
- // hack to make multi-day events that are being force-displayed as list-items to take up only one day
10546
- if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
10547
- dateRange = {
10548
- start: dateRange.start,
10549
- end: addDays(dateRange.start, 1),
10550
- };
11059
+ }
11060
+ return true;
11061
+ }
11062
+ // Constraint Utils
11063
+ // ------------------------------------------------------------------------------------------------------------------------
11064
+ function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
11065
+ for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
11066
+ var constraint = constraints_1[_i];
11067
+ if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
11068
+ return false;
10551
11069
  }
10552
- var segs = this.sliceRange.apply(this, __spreadArrays([dateRange], extraArgs));
10553
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
10554
- var seg = segs_2[_i];
10555
- seg.eventRange = eventRange;
10556
- seg.isStart = eventRange.isStart && seg.isStart;
10557
- seg.isEnd = eventRange.isEnd && seg.isEnd;
11070
+ }
11071
+ return true;
11072
+ }
11073
+ function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
11074
+ otherEventStore, // for if constraint is an even group ID
11075
+ businessHoursUnexpanded, // for if constraint is 'businessHours'
11076
+ context) {
11077
+ if (constraint === 'businessHours') {
11078
+ return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
11079
+ }
11080
+ if (typeof constraint === 'string') { // an group ID
11081
+ return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { return eventDef.groupId === constraint; }));
11082
+ }
11083
+ if (typeof constraint === 'object' && constraint) { // non-null object
11084
+ return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
11085
+ }
11086
+ return []; // if it's false
11087
+ }
11088
+ // TODO: move to event-store file?
11089
+ function eventStoreToRanges(eventStore) {
11090
+ var instances = eventStore.instances;
11091
+ var ranges = [];
11092
+ for (var instanceId in instances) {
11093
+ ranges.push(instances[instanceId].range);
11094
+ }
11095
+ return ranges;
11096
+ }
11097
+ // TODO: move to geom file?
11098
+ function anyRangesContainRange(outerRanges, innerRange) {
11099
+ for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
11100
+ var outerRange = outerRanges_1[_i];
11101
+ if (rangeContainsRange(outerRange, innerRange)) {
11102
+ return true;
10558
11103
  }
10559
- return segs;
10560
- };
10561
- return Slicer;
10562
- }());
10563
- /*
10564
- for incorporating slotMinTime/slotMaxTime if appropriate
10565
- TODO: should be part of DateProfile!
10566
- TimelineDateProfile already does this btw
10567
- */
10568
- function computeActiveRange(dateProfile, isComponentAllDay) {
10569
- var range = dateProfile.activeRange;
10570
- if (isComponentAllDay) {
10571
- return range;
10572
11104
  }
10573
- return {
10574
- start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
10575
- end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5),
10576
- };
11105
+ return false;
10577
11106
  }
10578
11107
 
10579
11108
  var VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
@@ -10742,11 +11271,12 @@ function getAllowYScrolling(props, sectionConfig) {
10742
11271
  getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
10743
11272
  }
10744
11273
  // TODO: ONLY use `arg`. force out internal function to use same API
10745
- function renderChunkContent(sectionConfig, chunkConfig, arg) {
11274
+ function renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {
10746
11275
  var expandRows = arg.expandRows;
10747
11276
  var content = typeof chunkConfig.content === 'function' ?
10748
11277
  chunkConfig.content(arg) :
10749
11278
  createElement('table', {
11279
+ role: 'presentation',
10750
11280
  className: [
10751
11281
  chunkConfig.tableClassName,
10752
11282
  sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',
@@ -10754,9 +11284,13 @@ function renderChunkContent(sectionConfig, chunkConfig, arg) {
10754
11284
  style: {
10755
11285
  minWidth: arg.tableMinWidth,
10756
11286
  width: arg.clientWidth,
10757
- height: expandRows ? arg.clientHeight : '',
11287
+ height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height
10758
11288
  },
10759
- }, arg.tableColGroupNode, createElement('tbody', {}, typeof chunkConfig.rowContent === 'function' ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));
11289
+ }, arg.tableColGroupNode, createElement(isHeader ? 'thead' : 'tbody', {
11290
+ role: 'presentation',
11291
+ }, typeof chunkConfig.rowContent === 'function'
11292
+ ? chunkConfig.rowContent(arg)
11293
+ : chunkConfig.rowContent));
10760
11294
  return content;
10761
11295
  }
10762
11296
  function isColPropsEqual(cols0, cols1) {
@@ -10779,7 +11313,7 @@ function renderMicroColGroup(cols, shrinkWidth) {
10779
11313
  } }));
10780
11314
  }
10781
11315
  }
10782
- return createElement.apply(void 0, __spreadArrays(['colgroup', {}], colNodes));
11316
+ return createElement.apply(void 0, __spreadArray(['colgroup', {}], colNodes));
10783
11317
  }
10784
11318
  function sanitizeShrinkWidth(shrinkWidth) {
10785
11319
  /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
@@ -10809,7 +11343,7 @@ function getSectionClassNames(sectionConfig, wholeTableVGrow) {
10809
11343
  var classNames = [
10810
11344
  'fc-scrollgrid-section',
10811
11345
  "fc-scrollgrid-section-" + sectionConfig.type,
10812
- sectionConfig.className,
11346
+ sectionConfig.className, // used?
10813
11347
  ];
10814
11348
  if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
10815
11349
  classNames.push('fc-scrollgrid-section-liquid');
@@ -10867,6 +11401,9 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10867
11401
  var cols = this.processCols(props.cols);
10868
11402
  var microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
10869
11403
  var classNames = getScrollGridClassNames(props.liquid, context);
11404
+ if (props.collapsibleWidth) {
11405
+ classNames.push('fc-scrollgrid-collapsible');
11406
+ }
10870
11407
  // TODO: make DRY
10871
11408
  var configCnt = sectionConfigs.length;
10872
11409
  var configI = 0;
@@ -10875,15 +11412,15 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10875
11412
  var bodySectionNodes = [];
10876
11413
  var footSectionNodes = [];
10877
11414
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
10878
- headSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11415
+ headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
10879
11416
  configI += 1;
10880
11417
  }
10881
11418
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
10882
- bodySectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11419
+ bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));
10883
11420
  configI += 1;
10884
11421
  }
10885
11422
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
10886
- footSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11423
+ footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
10887
11424
  configI += 1;
10888
11425
  }
10889
11426
  // firefox bug: when setting height on table and there is a thead or tfoot,
@@ -10891,18 +11428,20 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10891
11428
  // use getCanVGrowWithinCell as a way to detect table-stupid firefox.
10892
11429
  // if so, use a simpler dom structure, jam everything into a lone tbody.
10893
11430
  var isBuggy = !getCanVGrowWithinCell();
11431
+ var roleAttrs = { role: 'rowgroup' };
10894
11432
  return createElement('table', {
11433
+ role: 'grid',
10895
11434
  className: classNames.join(' '),
10896
11435
  style: { height: props.height },
10897
- }, Boolean(!isBuggy && headSectionNodes.length) && createElement.apply(void 0, __spreadArrays(['thead', {}], headSectionNodes)), Boolean(!isBuggy && bodySectionNodes.length) && createElement.apply(void 0, __spreadArrays(['tbody', {}], bodySectionNodes)), Boolean(!isBuggy && footSectionNodes.length) && createElement.apply(void 0, __spreadArrays(['tfoot', {}], footSectionNodes)), isBuggy && createElement.apply(void 0, __spreadArrays(['tbody', {}], headSectionNodes, bodySectionNodes, footSectionNodes)));
11436
+ }, Boolean(!isBuggy && headSectionNodes.length) && createElement.apply(void 0, __spreadArray(['thead', roleAttrs], headSectionNodes)), Boolean(!isBuggy && bodySectionNodes.length) && createElement.apply(void 0, __spreadArray(['tbody', roleAttrs], bodySectionNodes)), Boolean(!isBuggy && footSectionNodes.length) && createElement.apply(void 0, __spreadArray(['tfoot', roleAttrs], footSectionNodes)), isBuggy && createElement.apply(void 0, __spreadArray(__spreadArray(__spreadArray(['tbody', roleAttrs], headSectionNodes), bodySectionNodes), footSectionNodes)));
10898
11437
  };
10899
- SimpleScrollGrid.prototype.renderSection = function (sectionConfig, sectionI, microColGroupNode) {
11438
+ SimpleScrollGrid.prototype.renderSection = function (sectionConfig, microColGroupNode, isHeader) {
10900
11439
  if ('outerContent' in sectionConfig) {
10901
11440
  return (createElement(Fragment, { key: sectionConfig.key }, sectionConfig.outerContent));
10902
11441
  }
10903
- return (createElement("tr", { key: sectionConfig.key, className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, sectionI, microColGroupNode, sectionConfig.chunk)));
11442
+ return (createElement("tr", { key: sectionConfig.key, role: "presentation", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));
10904
11443
  };
10905
- SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, sectionI, microColGroupNode, chunkConfig) {
11444
+ SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, microColGroupNode, chunkConfig, isHeader) {
10906
11445
  if ('outerContent' in chunkConfig) {
10907
11446
  return chunkConfig.outerContent;
10908
11447
  }
@@ -10916,25 +11455,29 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10916
11455
  forceYScrollbars ? 'scroll' :
10917
11456
  !needsYScrolling ? 'hidden' :
10918
11457
  'auto';
11458
+ var sectionKey = sectionConfig.key;
10919
11459
  var content = renderChunkContent(sectionConfig, chunkConfig, {
10920
11460
  tableColGroupNode: microColGroupNode,
10921
11461
  tableMinWidth: '',
10922
- clientWidth: scrollerClientWidths[sectionI] !== undefined ? scrollerClientWidths[sectionI] : null,
10923
- clientHeight: scrollerClientHeights[sectionI] !== undefined ? scrollerClientHeights[sectionI] : null,
11462
+ clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,
11463
+ clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,
10924
11464
  expandRows: sectionConfig.expandRows,
10925
11465
  syncRowHeights: false,
10926
11466
  rowSyncHeights: [],
10927
11467
  reportRowHeightChange: function () { },
10928
- });
10929
- return (createElement("td", { ref: chunkConfig.elRef },
10930
- createElement("div", { className: "fc-scroller-harness" + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
10931
- createElement(main_Scroller, { ref: this.scrollerRefs.createRef(sectionI), elRef: this.scrollerElRefs.createRef(sectionI), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness
10932
- : true }, content))));
11468
+ }, isHeader);
11469
+ return createElement(isHeader ? 'th' : 'td', {
11470
+ ref: chunkConfig.elRef,
11471
+ role: 'presentation',
11472
+ }, createElement("div", { className: "fc-scroller-harness" + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
11473
+ createElement(main_Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness
11474
+ : true }, content)));
10933
11475
  };
10934
11476
  SimpleScrollGrid.prototype._handleScrollerEl = function (scrollerEl, key) {
10935
- var sectionI = parseInt(key, 10);
10936
- var chunkConfig = this.props.sections[sectionI].chunk;
10937
- setRef(chunkConfig.scrollerElRef, scrollerEl);
11477
+ var section = getSectionByKey(this.props.sections, key);
11478
+ if (section) {
11479
+ setRef(section.chunk.scrollerElRef, scrollerEl);
11480
+ }
10938
11481
  };
10939
11482
  SimpleScrollGrid.prototype.componentDidMount = function () {
10940
11483
  this.handleSizing();
@@ -10954,26 +11497,27 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10954
11497
  };
10955
11498
  SimpleScrollGrid.prototype.computeScrollerDims = function () {
10956
11499
  var scrollbarWidth = getScrollbarWidths();
10957
- var sectionCnt = this.props.sections.length;
10958
11500
  var _a = this, scrollerRefs = _a.scrollerRefs, scrollerElRefs = _a.scrollerElRefs;
10959
11501
  var forceYScrollbars = false;
10960
11502
  var scrollerClientWidths = {};
10961
11503
  var scrollerClientHeights = {};
10962
- for (var sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge
10963
- var scroller = scrollerRefs.currentMap[sectionI];
11504
+ for (var sectionKey in scrollerRefs.currentMap) {
11505
+ var scroller = scrollerRefs.currentMap[sectionKey];
10964
11506
  if (scroller && scroller.needsYScrolling()) {
10965
11507
  forceYScrollbars = true;
10966
11508
  break;
10967
11509
  }
10968
11510
  }
10969
- for (var sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge
10970
- var scrollerEl = scrollerElRefs.currentMap[sectionI];
11511
+ for (var _i = 0, _b = this.props.sections; _i < _b.length; _i++) {
11512
+ var section = _b[_i];
11513
+ var sectionKey = section.key;
11514
+ var scrollerEl = scrollerElRefs.currentMap[sectionKey];
10971
11515
  if (scrollerEl) {
10972
11516
  var harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
10973
- scrollerClientWidths[sectionI] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
11517
+ scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
10974
11518
  ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
10975
11519
  : 0));
10976
- scrollerClientHeights[sectionI] = Math.floor(harnessEl.getBoundingClientRect().height);
11520
+ scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
10977
11521
  }
10978
11522
  }
10979
11523
  return { forceYScrollbars: forceYScrollbars, scrollerClientWidths: scrollerClientWidths, scrollerClientHeights: scrollerClientHeights };
@@ -10984,6 +11528,15 @@ main_SimpleScrollGrid.addStateEquality({
10984
11528
  scrollerClientWidths: isPropsEqual,
10985
11529
  scrollerClientHeights: isPropsEqual,
10986
11530
  });
11531
+ function getSectionByKey(sections, key) {
11532
+ for (var _i = 0, sections_1 = sections; _i < sections_1.length; _i++) {
11533
+ var section = sections_1[_i];
11534
+ if (section.key === key) {
11535
+ return section;
11536
+ }
11537
+ }
11538
+ return null;
11539
+ }
10987
11540
 
10988
11541
  var main_EventRoot = /** @class */ (function (_super) {
10989
11542
  __extends(EventRoot, _super);
@@ -11047,10 +11600,10 @@ var main_StandardEvent = /** @class */ (function (_super) {
11047
11600
  var seg = props.seg;
11048
11601
  var timeFormat = context.options.eventTimeFormat || props.defaultTimeFormat;
11049
11602
  var timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
11050
- return (createElement(main_EventRoot, { seg: seg, timeText: timeText, disableDragging: props.disableDragging, disableResizing: props.disableResizing, defaultContent: props.defaultContent || renderInnerContent, isDragging: props.isDragging, isResizing: props.isResizing, isDateSelecting: props.isDateSelecting, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("a", __assign({ className: props.extraClassNames.concat(classNames).join(' '), style: {
11603
+ return (createElement(main_EventRoot, { seg: seg, timeText: timeText, disableDragging: props.disableDragging, disableResizing: props.disableResizing, defaultContent: props.defaultContent || renderInnerContent$1, isDragging: props.isDragging, isResizing: props.isResizing, isDateSelecting: props.isDateSelecting, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("a", __assign({ className: props.extraClassNames.concat(classNames).join(' '), style: {
11051
11604
  borderColor: hookProps.borderColor,
11052
11605
  backgroundColor: hookProps.backgroundColor,
11053
- }, ref: rootElRef }, getSegAnchorAttrs(seg)),
11606
+ }, ref: rootElRef }, getSegAnchorAttrs(seg, context)),
11054
11607
  createElement("div", { className: "fc-event-main", ref: innerElRef, style: { color: hookProps.textColor } }, innerContent),
11055
11608
  hookProps.isStartResizable &&
11056
11609
  createElement("div", { className: "fc-event-resizer fc-event-resizer-start" }),
@@ -11059,16 +11612,12 @@ var main_StandardEvent = /** @class */ (function (_super) {
11059
11612
  };
11060
11613
  return StandardEvent;
11061
11614
  }(main_BaseComponent));
11062
- function renderInnerContent(innerProps) {
11615
+ function renderInnerContent$1(innerProps) {
11063
11616
  return (createElement("div", { className: "fc-event-main-frame" },
11064
11617
  innerProps.timeText && (createElement("div", { className: "fc-event-time" }, innerProps.timeText)),
11065
11618
  createElement("div", { className: "fc-event-title-container" },
11066
11619
  createElement("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || createElement(Fragment, null, "\u00A0")))));
11067
11620
  }
11068
- function getSegAnchorAttrs(seg) {
11069
- var url = seg.eventRange.def.url;
11070
- return url ? { href: url } : {};
11071
- }
11072
11621
 
11073
11622
  var NowIndicatorRoot = function (props) { return (createElement(ViewContextType.Consumer, null, function (context) {
11074
11623
  var options = context.options;
@@ -11142,10 +11691,10 @@ var main_DayCellRoot = /** @class */ (function (_super) {
11142
11691
  function renderFill(fillType) {
11143
11692
  return (createElement("div", { className: "fc-" + fillType }));
11144
11693
  }
11145
- var BgEvent = function (props) { return (createElement(main_EventRoot, { defaultContent: renderInnerContent$1, seg: props.seg /* uselesss i think */, timeText: "", disableDragging: true, disableResizing: true, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("div", { ref: rootElRef, className: ['fc-bg-event'].concat(classNames).join(' '), style: {
11694
+ var BgEvent = function (props) { return (createElement(main_EventRoot, { defaultContent: renderInnerContent, seg: props.seg /* uselesss i think */, timeText: "", disableDragging: true, disableResizing: true, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("div", { ref: rootElRef, className: ['fc-bg-event'].concat(classNames).join(' '), style: {
11146
11695
  backgroundColor: hookProps.backgroundColor,
11147
11696
  } }, innerContent)); })); };
11148
- function renderInnerContent$1(props) {
11697
+ function renderInnerContent(props) {
11149
11698
  var title = props.event.title;
11150
11699
  return title && (createElement("div", { className: "fc-event-title" }, props.event.title));
11151
11700
  }
@@ -11157,24 +11706,270 @@ var WeekNumberRoot = function (props) { return (createElement(ViewContextType.Co
11157
11706
  var num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
11158
11707
  var text = dateEnv.format(date, format);
11159
11708
  var hookProps = { num: num, text: text, date: date };
11160
- return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner$1, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
11709
+ return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
11161
11710
  })); };
11162
- function renderInner$1(innerProps) {
11711
+ function renderInner(innerProps) {
11163
11712
  return innerProps.text;
11164
11713
  }
11165
11714
 
11715
+ var PADDING_FROM_VIEWPORT = 10;
11716
+ var main_Popover = /** @class */ (function (_super) {
11717
+ __extends(Popover, _super);
11718
+ function Popover() {
11719
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11720
+ _this.state = {
11721
+ titleId: getUniqueDomId(),
11722
+ };
11723
+ _this.handleRootEl = function (el) {
11724
+ _this.rootEl = el;
11725
+ if (_this.props.elRef) {
11726
+ setRef(_this.props.elRef, el);
11727
+ }
11728
+ };
11729
+ // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
11730
+ _this.handleDocumentMouseDown = function (ev) {
11731
+ // only hide the popover if the click happened outside the popover
11732
+ var target = getEventTargetViaRoot(ev);
11733
+ if (!_this.rootEl.contains(target)) {
11734
+ _this.handleCloseClick();
11735
+ }
11736
+ };
11737
+ _this.handleDocumentKeyDown = function (ev) {
11738
+ if (ev.key === 'Escape') {
11739
+ _this.handleCloseClick();
11740
+ }
11741
+ };
11742
+ _this.handleCloseClick = function () {
11743
+ var onClose = _this.props.onClose;
11744
+ if (onClose) {
11745
+ onClose();
11746
+ }
11747
+ };
11748
+ return _this;
11749
+ }
11750
+ Popover.prototype.render = function () {
11751
+ var _a = this.context, theme = _a.theme, options = _a.options;
11752
+ var _b = this, props = _b.props, state = _b.state;
11753
+ var classNames = [
11754
+ 'fc-popover',
11755
+ theme.getClass('popover'),
11756
+ ].concat(props.extraClassNames || []);
11757
+ return createPortal(createElement("div", __assign({ id: props.id, className: classNames.join(' '), "aria-labelledby": state.titleId }, props.extraAttrs, { ref: this.handleRootEl }),
11758
+ createElement("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
11759
+ createElement("span", { className: "fc-popover-title", id: state.titleId }, props.title),
11760
+ createElement("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
11761
+ createElement("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
11762
+ };
11763
+ Popover.prototype.componentDidMount = function () {
11764
+ document.addEventListener('mousedown', this.handleDocumentMouseDown);
11765
+ document.addEventListener('keydown', this.handleDocumentKeyDown);
11766
+ this.updateSize();
11767
+ };
11768
+ Popover.prototype.componentWillUnmount = function () {
11769
+ document.removeEventListener('mousedown', this.handleDocumentMouseDown);
11770
+ document.removeEventListener('keydown', this.handleDocumentKeyDown);
11771
+ };
11772
+ Popover.prototype.updateSize = function () {
11773
+ var isRtl = this.context.isRtl;
11774
+ var _a = this.props, alignmentEl = _a.alignmentEl, alignGridTop = _a.alignGridTop;
11775
+ var rootEl = this.rootEl;
11776
+ var alignmentRect = computeClippedClientRect(alignmentEl);
11777
+ if (alignmentRect) {
11778
+ var popoverDims = rootEl.getBoundingClientRect();
11779
+ // position relative to viewport
11780
+ var popoverTop = alignGridTop
11781
+ ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top
11782
+ : alignmentRect.top;
11783
+ var popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
11784
+ // constrain
11785
+ popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
11786
+ popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
11787
+ popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
11788
+ var origin_1 = rootEl.offsetParent.getBoundingClientRect();
11789
+ applyStyle(rootEl, {
11790
+ top: popoverTop - origin_1.top,
11791
+ left: popoverLeft - origin_1.left,
11792
+ });
11793
+ }
11794
+ };
11795
+ return Popover;
11796
+ }(main_BaseComponent));
11797
+
11798
+ var main_MorePopover = /** @class */ (function (_super) {
11799
+ __extends(MorePopover, _super);
11800
+ function MorePopover() {
11801
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11802
+ _this.handleRootEl = function (rootEl) {
11803
+ _this.rootEl = rootEl;
11804
+ if (rootEl) {
11805
+ _this.context.registerInteractiveComponent(_this, {
11806
+ el: rootEl,
11807
+ useEventCenter: false,
11808
+ });
11809
+ }
11810
+ else {
11811
+ _this.context.unregisterInteractiveComponent(_this);
11812
+ }
11813
+ };
11814
+ return _this;
11815
+ }
11816
+ MorePopover.prototype.render = function () {
11817
+ var _a = this.context, options = _a.options, dateEnv = _a.dateEnv;
11818
+ var props = this.props;
11819
+ var startDate = props.startDate, todayRange = props.todayRange, dateProfile = props.dateProfile;
11820
+ var title = dateEnv.format(startDate, options.dayPopoverFormat);
11821
+ return (createElement(main_DayCellRoot, { date: startDate, dateProfile: dateProfile, todayRange: todayRange, elRef: this.handleRootEl }, function (rootElRef, dayClassNames, dataAttrs) { return (createElement(main_Popover, { elRef: rootElRef, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(dayClassNames), extraAttrs: dataAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
11822
+ createElement(main_DayCellContent, { date: startDate, dateProfile: dateProfile, todayRange: todayRange }, function (innerElRef, innerContent) { return (innerContent &&
11823
+ createElement("div", { className: "fc-more-popover-misc", ref: innerElRef }, innerContent)); }),
11824
+ props.children)); }));
11825
+ };
11826
+ MorePopover.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
11827
+ var _a = this, rootEl = _a.rootEl, props = _a.props;
11828
+ if (positionLeft >= 0 && positionLeft < elWidth &&
11829
+ positionTop >= 0 && positionTop < elHeight) {
11830
+ return {
11831
+ dateProfile: props.dateProfile,
11832
+ dateSpan: __assign({ allDay: true, range: {
11833
+ start: props.startDate,
11834
+ end: props.endDate,
11835
+ } }, props.extraDateSpan),
11836
+ dayEl: rootEl,
11837
+ rect: {
11838
+ left: 0,
11839
+ top: 0,
11840
+ right: elWidth,
11841
+ bottom: elHeight,
11842
+ },
11843
+ layer: 1, // important when comparing with hits from other components
11844
+ };
11845
+ }
11846
+ return null;
11847
+ };
11848
+ return MorePopover;
11849
+ }(main_DateComponent));
11850
+
11851
+ var main_MoreLinkRoot = /** @class */ (function (_super) {
11852
+ __extends(MoreLinkRoot, _super);
11853
+ function MoreLinkRoot() {
11854
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11855
+ _this.linkElRef = createRef();
11856
+ _this.state = {
11857
+ isPopoverOpen: false,
11858
+ popoverId: getUniqueDomId(),
11859
+ };
11860
+ _this.handleClick = function (ev) {
11861
+ var _a = _this, props = _a.props, context = _a.context;
11862
+ var moreLinkClick = context.options.moreLinkClick;
11863
+ var date = computeRange(props).start;
11864
+ function buildPublicSeg(seg) {
11865
+ var _a = seg.eventRange, def = _a.def, instance = _a.instance, range = _a.range;
11866
+ return {
11867
+ event: new main_EventApi(context, def, instance),
11868
+ start: context.dateEnv.toDate(range.start),
11869
+ end: context.dateEnv.toDate(range.end),
11870
+ isStart: seg.isStart,
11871
+ isEnd: seg.isEnd,
11872
+ };
11873
+ }
11874
+ if (typeof moreLinkClick === 'function') {
11875
+ moreLinkClick = moreLinkClick({
11876
+ date: date,
11877
+ allDay: Boolean(props.allDayDate),
11878
+ allSegs: props.allSegs.map(buildPublicSeg),
11879
+ hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
11880
+ jsEvent: ev,
11881
+ view: context.viewApi,
11882
+ });
11883
+ }
11884
+ if (!moreLinkClick || moreLinkClick === 'popover') {
11885
+ _this.setState({ isPopoverOpen: true });
11886
+ }
11887
+ else if (typeof moreLinkClick === 'string') { // a view name
11888
+ context.calendarApi.zoomTo(date, moreLinkClick);
11889
+ }
11890
+ };
11891
+ _this.handlePopoverClose = function () {
11892
+ _this.setState({ isPopoverOpen: false });
11893
+ };
11894
+ return _this;
11895
+ }
11896
+ MoreLinkRoot.prototype.render = function () {
11897
+ var _this = this;
11898
+ var _a = this, props = _a.props, state = _a.state;
11899
+ return (createElement(ViewContextType.Consumer, null, function (context) {
11900
+ var viewApi = context.viewApi, options = context.options, calendarApi = context.calendarApi;
11901
+ var moreLinkText = options.moreLinkText;
11902
+ var moreCnt = props.moreCnt;
11903
+ var range = computeRange(props);
11904
+ var text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
11905
+ ? moreLinkText.call(calendarApi, moreCnt)
11906
+ : "+" + moreCnt + " " + moreLinkText;
11907
+ var title = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
11908
+ var hookProps = {
11909
+ num: moreCnt,
11910
+ shortText: "+" + moreCnt,
11911
+ text: text,
11912
+ view: viewApi,
11913
+ };
11914
+ return (createElement(Fragment, null,
11915
+ Boolean(props.moreCnt) && (createElement(main_RenderHook, { elRef: _this.linkElRef, hookProps: hookProps, classNames: options.moreLinkClassNames, content: options.moreLinkContent, defaultContent: props.defaultContent || renderMoreLinkInner, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return props.children(rootElRef, ['fc-more-link'].concat(customClassNames), innerElRef, innerContent, _this.handleClick, title, state.isPopoverOpen, state.isPopoverOpen ? state.popoverId : ''); })),
11916
+ state.isPopoverOpen && (createElement(main_MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: _this.parentEl, alignmentEl: props.alignmentElRef.current, alignGridTop: props.alignGridTop, onClose: _this.handlePopoverClose }, props.popoverContent()))));
11917
+ }));
11918
+ };
11919
+ MoreLinkRoot.prototype.componentDidMount = function () {
11920
+ this.updateParentEl();
11921
+ };
11922
+ MoreLinkRoot.prototype.componentDidUpdate = function () {
11923
+ this.updateParentEl();
11924
+ };
11925
+ MoreLinkRoot.prototype.updateParentEl = function () {
11926
+ if (this.linkElRef.current) {
11927
+ this.parentEl = elementClosest(this.linkElRef.current, '.fc-view-harness');
11928
+ }
11929
+ };
11930
+ return MoreLinkRoot;
11931
+ }(main_BaseComponent));
11932
+ function renderMoreLinkInner(props) {
11933
+ return props.text;
11934
+ }
11935
+ function computeRange(props) {
11936
+ if (props.allDayDate) {
11937
+ return {
11938
+ start: props.allDayDate,
11939
+ end: addDays(props.allDayDate, 1),
11940
+ };
11941
+ }
11942
+ var hiddenSegs = props.hiddenSegs;
11943
+ return {
11944
+ start: computeEarliestSegStart(hiddenSegs),
11945
+ end: computeLatestSegEnd(hiddenSegs),
11946
+ };
11947
+ }
11948
+ function computeEarliestSegStart(segs) {
11949
+ return segs.reduce(pickEarliestStart).eventRange.range.start;
11950
+ }
11951
+ function pickEarliestStart(seg0, seg1) {
11952
+ return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
11953
+ }
11954
+ function computeLatestSegEnd(segs) {
11955
+ return segs.reduce(pickLatestEnd).eventRange.range.end;
11956
+ }
11957
+ function pickLatestEnd(seg0, seg1) {
11958
+ return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
11959
+ }
11960
+
11166
11961
  // exports
11167
11962
  // --------------------------------------------------------------------------------------------------
11168
- var version = '5.3.2'; // important to type it, so .d.ts has generic string
11963
+ var version = '5.10.1'; // important to type it, so .d.ts has generic string
11169
11964
 
11170
11965
 
11171
11966
  //# sourceMappingURL=main.js.map
11172
11967
 
11173
11968
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/core/main.js
11174
11969
  /*!
11175
- FullCalendar v5.3.2
11970
+ FullCalendar v5.10.1
11176
11971
  Docs & License: https://fullcalendar.io/
11177
- (c) 2020 Adam Shaw
11972
+ (c) 2021 Adam Shaw
11178
11973
  */
11179
11974
 
11180
11975
 
@@ -11303,6 +12098,7 @@ var main_Calendar = /** @class */ (function (_super) {
11303
12098
 
11304
12099
 
11305
12100
 
12101
+
11306
12102
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
11307
12103
 
11308
12104
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }