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
@@ -566,7 +566,7 @@ exports = module.exports = __webpack_require__("2350")(false);
566
566
 
567
567
 
568
568
  // module
569
- 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)}", ""]);
569
+ 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))}", ""]);
570
570
 
571
571
  // exports
572
572
 
@@ -1902,7 +1902,7 @@ if (typeof window !== 'undefined') {
1902
1902
  // Indicate to webpack that this file can be concatenated
1903
1903
  /* harmony default export */ var setPublicPath = (null);
1904
1904
 
1905
- // 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&
1905
+ // 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&
1906
1906
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div')}
1907
1907
  var staticRenderFns = []
1908
1908
 
@@ -1915,6 +1915,9 @@ var es7_object_get_own_property_descriptors = __webpack_require__("8e6e");
1915
1915
  // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
1916
1916
  var web_dom_iterable = __webpack_require__("ac6a");
1917
1917
 
1918
+ // EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
1919
+ var es6_array_iterator = __webpack_require__("cadf");
1920
+
1918
1921
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
1919
1922
  var es6_object_keys = __webpack_require__("456d");
1920
1923
 
@@ -2103,10 +2106,14 @@ function __spreadArrays() {
2103
2106
  return r;
2104
2107
  }
2105
2108
 
2106
- function __spreadArray(to, from) {
2107
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
2108
- to[j] = from[i];
2109
- return to;
2109
+ function __spreadArray(to, from, pack) {
2110
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
2111
+ if (ar || !(i in from)) {
2112
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
2113
+ ar[i] = from[i];
2114
+ }
2115
+ }
2116
+ return to.concat(ar || Array.prototype.slice.call(from));
2110
2117
  }
2111
2118
 
2112
2119
  function __await(v) {
@@ -2176,25 +2183,35 @@ function __classPrivateFieldSet(receiver, state, value, kind, f) {
2176
2183
  }
2177
2184
 
2178
2185
  // CONCATENATED MODULE: ./node_modules/preact/dist/preact.module.js
2179
- 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;
2186
+ 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;
2180
2187
  //# sourceMappingURL=preact.module.js.map
2181
2188
 
2189
+ // CONCATENATED MODULE: ./node_modules/preact/hooks/dist/hooks.module.js
2190
+ 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}
2191
+ //# sourceMappingURL=hooks.module.js.map
2192
+
2193
+ // CONCATENATED MODULE: ./node_modules/preact/compat/dist/compat.module.js
2194
+ 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});
2195
+ //# sourceMappingURL=compat.module.js.map
2196
+
2182
2197
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/core/vdom.js
2183
2198
 
2184
2199
 
2185
2200
 
2201
+
2186
2202
  var globalObj = typeof globalThis !== 'undefined' ? globalThis : window; // // TODO: streamline when killing IE11 support
2187
2203
  if (globalObj.FullCalendarVDom) {
2188
2204
  console.warn('FullCalendar VDOM already loaded');
2189
2205
  }
2190
2206
  else {
2191
2207
  globalObj.FullCalendarVDom = {
2192
- Component: p,
2193
- createElement: a,
2194
- render: N,
2195
- createRef: h,
2196
- Fragment: y,
2208
+ Component: _,
2209
+ createElement: v,
2210
+ render: S,
2211
+ createRef: p,
2212
+ Fragment: d,
2197
2213
  createContext: createContext,
2214
+ createPortal: W,
2198
2215
  flushToDom: flushToDom,
2199
2216
  unmountComponentAtNode: unmountComponentAtNode,
2200
2217
  };
@@ -2203,29 +2220,29 @@ else {
2203
2220
  // TODO: lock version
2204
2221
  // TODO: link gh issues
2205
2222
  function flushToDom() {
2206
- var oldDebounceRendering = n.debounceRendering; // orig
2223
+ var oldDebounceRendering = l.debounceRendering; // orig
2207
2224
  var callbackQ = [];
2208
2225
  function execCallbackSync(callback) {
2209
2226
  callbackQ.push(callback);
2210
2227
  }
2211
- n.debounceRendering = execCallbackSync;
2212
- N(a(vdom_FakeComponent, {}), document.createElement('div'));
2228
+ l.debounceRendering = execCallbackSync;
2229
+ S(v(vdom_FakeComponent, {}), document.createElement('div'));
2213
2230
  while (callbackQ.length) {
2214
2231
  callbackQ.shift()();
2215
2232
  }
2216
- n.debounceRendering = oldDebounceRendering;
2233
+ l.debounceRendering = oldDebounceRendering;
2217
2234
  }
2218
2235
  var vdom_FakeComponent = /** @class */ (function (_super) {
2219
2236
  __extends(FakeComponent, _super);
2220
2237
  function FakeComponent() {
2221
2238
  return _super !== null && _super.apply(this, arguments) || this;
2222
2239
  }
2223
- FakeComponent.prototype.render = function () { return a('div', {}); };
2240
+ FakeComponent.prototype.render = function () { return v('div', {}); };
2224
2241
  FakeComponent.prototype.componentDidMount = function () { this.setState({}); };
2225
2242
  return FakeComponent;
2226
- }(p));
2243
+ }(_));
2227
2244
  function createContext(defaultValue) {
2228
- var ContextType = q(defaultValue);
2245
+ var ContextType = D(defaultValue);
2229
2246
  var origProvider = ContextType.Provider;
2230
2247
  ContextType.Provider = function () {
2231
2248
  var _this = this;
@@ -2255,7 +2272,7 @@ function createContext(defaultValue) {
2255
2272
  return ContextType;
2256
2273
  }
2257
2274
  function unmountComponentAtNode(node) {
2258
- N(null, node);
2275
+ S(null, node);
2259
2276
  }
2260
2277
 
2261
2278
  // EXTERNAL MODULE: ./node_modules/@fullcalendar/common/main.css
@@ -2272,16 +2289,18 @@ var vdom_render = FullCalendarVDom.render;
2272
2289
  var createRef = FullCalendarVDom.createRef;
2273
2290
  var Fragment = FullCalendarVDom.Fragment;
2274
2291
  var vdom_createContext = FullCalendarVDom.createContext;
2292
+ var createPortal = FullCalendarVDom.createPortal;
2275
2293
  var vdom_flushToDom = FullCalendarVDom.flushToDom;
2276
2294
  var vdom_unmountComponentAtNode = FullCalendarVDom.unmountComponentAtNode;
2295
+ /* eslint-enable */
2277
2296
 
2278
2297
 
2279
2298
 
2280
2299
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/common/main.js
2281
2300
  /*!
2282
- FullCalendar v5.3.2
2301
+ FullCalendar v5.10.1
2283
2302
  Docs & License: https://fullcalendar.io/
2284
- (c) 2020 Adam Shaw
2303
+ (c) 2021 Adam Shaw
2285
2304
  */
2286
2305
 
2287
2306
 
@@ -2306,6 +2325,7 @@ var EventSourceApi = /** @class */ (function () {
2306
2325
  this.context.dispatch({
2307
2326
  type: 'FETCH_EVENT_SOURCES',
2308
2327
  sourceIds: [this.internalEventSource.sourceId],
2328
+ isRefetch: true,
2309
2329
  });
2310
2330
  };
2311
2331
  Object.defineProperty(EventSourceApi.prototype, "id", {
@@ -2316,13 +2336,19 @@ var EventSourceApi = /** @class */ (function () {
2316
2336
  configurable: true
2317
2337
  });
2318
2338
  Object.defineProperty(EventSourceApi.prototype, "url", {
2319
- // only relevant to json-feed event sources
2320
2339
  get: function () {
2321
2340
  return this.internalEventSource.meta.url;
2322
2341
  },
2323
2342
  enumerable: false,
2324
2343
  configurable: true
2325
2344
  });
2345
+ Object.defineProperty(EventSourceApi.prototype, "format", {
2346
+ get: function () {
2347
+ return this.internalEventSource.meta.format; // TODO: bad. not guaranteed
2348
+ },
2349
+ enumerable: false,
2350
+ configurable: true
2351
+ });
2326
2352
  return EventSourceApi;
2327
2353
  }());
2328
2354
 
@@ -2403,6 +2429,26 @@ function applyStyleProp(el, name, val) {
2403
2429
  el.style[name] = val;
2404
2430
  }
2405
2431
  }
2432
+ // Event Handling
2433
+ // ----------------------------------------------------------------------------------------------------------------
2434
+ // if intercepting bubbled events at the document/window/body level,
2435
+ // and want to see originating element (the 'target'), use this util instead
2436
+ // of `ev.target` because it goes within web-component boundaries.
2437
+ function getEventTargetViaRoot(ev) {
2438
+ var _a, _b;
2439
+ return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
2440
+ }
2441
+ // Shadow DOM consuderations
2442
+ // ----------------------------------------------------------------------------------------------------------------
2443
+ function getElRoot(el) {
2444
+ return el.getRootNode ? el.getRootNode() : document;
2445
+ }
2446
+ // Unique ID for DOM attribute
2447
+ var guid$1 = 0;
2448
+ function getUniqueDomId() {
2449
+ guid$1 += 1;
2450
+ return 'fc-dom-' + guid$1;
2451
+ }
2406
2452
 
2407
2453
  // Stops a mouse/touch event from doing it's native browser action
2408
2454
  function preventDefault(ev) {
@@ -2462,6 +2508,22 @@ function whenTransitionDone(el, callback) {
2462
2508
  el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
2463
2509
  });
2464
2510
  }
2511
+ // ARIA workarounds
2512
+ // ----------------------------------------------------------------------------------------------------------------
2513
+ function createAriaClickAttrs(handler) {
2514
+ return __assign({ onClick: handler }, createAriaKeyboardAttrs(handler));
2515
+ }
2516
+ function createAriaKeyboardAttrs(handler) {
2517
+ return {
2518
+ tabIndex: 0,
2519
+ onKeyDown: function (ev) {
2520
+ if (ev.key === 'Enter' || ev.key === ' ') {
2521
+ handler(ev);
2522
+ ev.preventDefault(); // if space, don't scroll down page
2523
+ }
2524
+ },
2525
+ };
2526
+ }
2465
2527
 
2466
2528
  var guidNumber = 0;
2467
2529
  function guid() {
@@ -2562,6 +2624,15 @@ function padStart(val, len) {
2562
2624
  var s = String(val);
2563
2625
  return '000'.substr(0, len - s.length) + s;
2564
2626
  }
2627
+ function formatWithOrdinals(formatter, args, fallbackText) {
2628
+ if (typeof formatter === 'function') {
2629
+ return formatter.apply(void 0, args);
2630
+ }
2631
+ if (typeof formatter === 'string') { // non-blank string
2632
+ return args.reduce(function (str, arg, index) { return (str.replace('$' + index, arg || '')); }, formatter);
2633
+ }
2634
+ return fallbackText;
2635
+ }
2565
2636
  /* Number Utilities
2566
2637
  ----------------------------------------------------------------------------------------------------------------------*/
2567
2638
  function compareNumbers(a, b) {
@@ -3030,7 +3101,7 @@ function parseObject(obj) {
3030
3101
  milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
3031
3102
  (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
3032
3103
  (obj.seconds || obj.second || 0) * 1000 + // seconds
3033
- (obj.milliseconds || obj.millisecond || obj.ms || 0),
3104
+ (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms
3034
3105
  };
3035
3106
  var weeks = obj.weeks || obj.week;
3036
3107
  if (weeks) {
@@ -3434,7 +3505,7 @@ function buildFormattingFunc(standardDateProps, extendedSettings, context) {
3434
3505
  return function (date) { return (formatTimeZoneOffset(date.timeZoneOffset)); };
3435
3506
  }
3436
3507
  if (standardDatePropCnt === 0 && extendedSettings.week) {
3437
- return function (date) { return (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.locale, extendedSettings.week)); };
3508
+ return function (date) { return (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week)); };
3438
3509
  }
3439
3510
  return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
3440
3511
  }
@@ -3526,15 +3597,17 @@ function injectTzoStr(s, tzoStr) {
3526
3597
  }
3527
3598
  return s;
3528
3599
  }
3529
- function formatWeekNumber(num, weekText, locale, display) {
3600
+ function formatWeekNumber(num, weekText, weekTextLong, locale, display) {
3530
3601
  var parts = [];
3531
- if (display === 'narrow') {
3602
+ if (display === 'long') {
3603
+ parts.push(weekTextLong);
3604
+ }
3605
+ else if (display === 'short' || display === 'narrow') {
3532
3606
  parts.push(weekText);
3533
3607
  }
3534
- else if (display === 'short') {
3535
- parts.push(weekText, ' ');
3608
+ if (display === 'long' || display === 'short') {
3609
+ parts.push(' ');
3536
3610
  }
3537
- // otherwise, considered 'numeric'
3538
3611
  parts.push(locale.simpleNumberFormat.format(num));
3539
3612
  if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
3540
3613
  parts.reverse();
@@ -3688,6 +3761,7 @@ var BASE_OPTION_REFINERS = {
3688
3761
  defaultTimedEventDuration: createDuration,
3689
3762
  nextDayThreshold: createDuration,
3690
3763
  scrollTime: createDuration,
3764
+ scrollTimeReset: Boolean,
3691
3765
  slotMinTime: createDuration,
3692
3766
  slotMaxTime: createDuration,
3693
3767
  dayPopoverFormat: createFormatter,
@@ -3741,6 +3815,7 @@ var BASE_OPTION_REFINERS = {
3741
3815
  unselectAuto: Boolean,
3742
3816
  dropAccept: identity,
3743
3817
  eventOrder: parseFieldSpecs,
3818
+ eventOrderStrict: Boolean,
3744
3819
  handleWindowResize: Boolean,
3745
3820
  windowResizeDelay: Number,
3746
3821
  longPressDelay: Number,
@@ -3754,6 +3829,7 @@ var BASE_OPTION_REFINERS = {
3754
3829
  displayEventTime: Boolean,
3755
3830
  displayEventEnd: Boolean,
3756
3831
  weekText: String,
3832
+ weekTextLong: String,
3757
3833
  progressiveEventRendering: Boolean,
3758
3834
  businessHours: identity,
3759
3835
  initialDate: identity,
@@ -3807,12 +3883,16 @@ var BASE_OPTION_REFINERS = {
3807
3883
  eventTimeFormat: createFormatter,
3808
3884
  rerenderDelay: Number,
3809
3885
  moreLinkText: identity,
3886
+ moreLinkHint: identity,
3810
3887
  selectMinDistance: Number,
3811
3888
  selectable: Boolean,
3812
3889
  selectLongPressDelay: Number,
3813
3890
  eventLongPressDelay: Number,
3814
3891
  selectMirror: Boolean,
3892
+ eventMaxStack: Number,
3815
3893
  eventMinHeight: Number,
3894
+ eventMinWidth: Number,
3895
+ eventShortHeight: Number,
3816
3896
  slotEventOverlap: Boolean,
3817
3897
  plugins: identity,
3818
3898
  firstDay: Number,
@@ -3825,8 +3905,19 @@ var BASE_OPTION_REFINERS = {
3825
3905
  validRange: identity,
3826
3906
  visibleRange: identity,
3827
3907
  titleFormat: identity,
3908
+ eventInteractive: Boolean,
3828
3909
  // only used by list-view, but languages define the value, so we need it in base options
3829
3910
  noEventsText: String,
3911
+ viewHint: identity,
3912
+ navLinkHint: identity,
3913
+ closeHint: String,
3914
+ timeHint: String,
3915
+ eventHint: String,
3916
+ moreLinkClick: identity,
3917
+ moreLinkClassNames: identity,
3918
+ moreLinkContent: identity,
3919
+ moreLinkDidMount: identity,
3920
+ moreLinkWillUnmount: identity,
3830
3921
  };
3831
3922
  // do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
3832
3923
  // raw values.
@@ -3852,6 +3943,7 @@ var BASE_OPTION_DEFAULTS = {
3852
3943
  editable: false,
3853
3944
  nowIndicator: false,
3854
3945
  scrollTime: '06:00:00',
3946
+ scrollTimeReset: true,
3855
3947
  slotMinTime: '00:00:00',
3856
3948
  slotMaxTime: '24:00:00',
3857
3949
  showNonCurrentDates: true,
@@ -3877,6 +3969,9 @@ var BASE_OPTION_DEFAULTS = {
3877
3969
  expandRows: false,
3878
3970
  navLinks: false,
3879
3971
  selectable: false,
3972
+ eventMinHeight: 15,
3973
+ eventMinWidth: 30,
3974
+ eventShortHeight: 30,
3880
3975
  };
3881
3976
  // calendar listeners
3882
3977
  // ------------------
@@ -3906,6 +4001,7 @@ var CALENDAR_LISTENER_REFINERS = {
3906
4001
  // -------------------------
3907
4002
  var CALENDAR_OPTION_REFINERS = {
3908
4003
  buttonText: identity,
4004
+ buttonHints: identity,
3909
4005
  views: identity,
3910
4006
  plugins: identity,
3911
4007
  initialEvents: identity,
@@ -3916,6 +4012,7 @@ var COMPLEX_OPTION_COMPARATORS = {
3916
4012
  headerToolbar: isBoolComplexEqual,
3917
4013
  footerToolbar: isBoolComplexEqual,
3918
4014
  buttonText: isBoolComplexEqual,
4015
+ buttonHints: isBoolComplexEqual,
3919
4016
  buttonIcons: isBoolComplexEqual,
3920
4017
  };
3921
4018
  function isBoolComplexEqual(a, b) {
@@ -4104,7 +4201,7 @@ function createEventUi(refined, context) {
4104
4201
  backgroundColor: refined.backgroundColor || refined.color || '',
4105
4202
  borderColor: refined.borderColor || refined.color || '',
4106
4203
  textColor: refined.textColor || '',
4107
- classNames: (refined.className || []).concat(refined.classNames || []),
4204
+ classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural
4108
4205
  };
4109
4206
  }
4110
4207
  // TODO: prevent against problems with <2 args!
@@ -4131,6 +4228,7 @@ var EVENT_NON_DATE_REFINERS = {
4131
4228
  groupId: String,
4132
4229
  title: String,
4133
4230
  url: String,
4231
+ interactive: Boolean,
4134
4232
  };
4135
4233
  var EVENT_DATE_REFINERS = {
4136
4234
  start: identity,
@@ -4183,6 +4281,7 @@ function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
4183
4281
  sourceId: sourceId,
4184
4282
  allDay: allDay,
4185
4283
  hasEnd: hasEnd,
4284
+ interactive: refined.interactive,
4186
4285
  ui: createEventUi(refined, context),
4187
4286
  extendedProps: __assign(__assign({}, (refined.extendedProps || {})), extra),
4188
4287
  };
@@ -4570,9 +4669,15 @@ startOverride, endOverride) {
4570
4669
  if (displayEventEnd == null) {
4571
4670
  displayEventEnd = defaultDisplayEventEnd !== false;
4572
4671
  }
4573
- if (displayEventTime && !eventDef.allDay && (seg.isStart || seg.isEnd)) {
4574
- var segStart = startOverride || (seg.isStart ? eventInstance.range.start : (seg.start || seg.eventRange.range.start));
4575
- var segEnd = endOverride || (seg.isEnd ? eventInstance.range.end : (seg.end || seg.eventRange.range.end));
4672
+ var wholeEventStart = eventInstance.range.start;
4673
+ var wholeEventEnd = eventInstance.range.end;
4674
+ var segStart = startOverride || seg.start || seg.eventRange.range.start;
4675
+ var segEnd = endOverride || seg.end || seg.eventRange.range.end;
4676
+ var isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
4677
+ var isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
4678
+ if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
4679
+ segStart = isStartDay ? wholeEventStart : segStart;
4680
+ segEnd = isEndDay ? wholeEventEnd : segEnd;
4576
4681
  if (displayEventEnd && eventDef.hasEnd) {
4577
4682
  return dateEnv.formatRange(segStart, segEnd, timeFormat, {
4578
4683
  forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
@@ -4580,7 +4685,7 @@ startOverride, endOverride) {
4580
4685
  });
4581
4686
  }
4582
4687
  return dateEnv.format(segStart, timeFormat, {
4583
- forcedTzo: startOverride ? null : eventInstance.forcedStartTzo,
4688
+ forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
4584
4689
  });
4585
4690
  }
4586
4691
  return '';
@@ -4636,6 +4741,34 @@ function buildEventRangeKey(eventRange) {
4636
4741
  : eventRange.def.defId + ":" + eventRange.range.start.toISOString();
4637
4742
  // inverse-background events don't have specific instances. TODO: better solution
4638
4743
  }
4744
+ function getSegAnchorAttrs(seg, context) {
4745
+ var _a = seg.eventRange, def = _a.def, instance = _a.instance;
4746
+ var url = def.url;
4747
+ if (url) {
4748
+ return { href: url };
4749
+ }
4750
+ var emitter = context.emitter, options = context.options;
4751
+ var eventInteractive = options.eventInteractive;
4752
+ if (eventInteractive == null) {
4753
+ eventInteractive = def.interactive;
4754
+ if (eventInteractive == null) {
4755
+ eventInteractive = Boolean(emitter.hasHandlers('eventClick'));
4756
+ }
4757
+ }
4758
+ // mock what happens in EventClicking
4759
+ if (eventInteractive) {
4760
+ // only attach keyboard-related handlers because click handler is already done in EventClicking
4761
+ return createAriaKeyboardAttrs(function (ev) {
4762
+ emitter.trigger('eventClick', {
4763
+ el: ev.target,
4764
+ event: new main_EventApi(context, def, instance),
4765
+ jsEvent: ev,
4766
+ view: context.viewApi,
4767
+ });
4768
+ });
4769
+ }
4770
+ return {};
4771
+ }
4639
4772
 
4640
4773
  var STANDARD_PROPS = {
4641
4774
  start: identity,
@@ -4905,6 +5038,7 @@ var EVENT_SOURCE_REFINERS = {
4905
5038
  id: String,
4906
5039
  defaultAllDay: Boolean,
4907
5040
  url: String,
5041
+ format: String,
4908
5042
  events: identity,
4909
5043
  eventDataTransform: identity,
4910
5044
  // for any network-related sources
@@ -5045,7 +5179,7 @@ var main_CalendarApi = /** @class */ (function () {
5045
5179
  for (var _i = 1; _i < arguments.length; _i++) {
5046
5180
  args[_i - 1] = arguments[_i];
5047
5181
  }
5048
- (_a = this.currentDataManager.emitter).trigger.apply(_a, __spreadArrays([handlerName], args));
5182
+ (_a = this.currentDataManager.emitter).trigger.apply(_a, __spreadArray([handlerName], args));
5049
5183
  };
5050
5184
  // View
5051
5185
  // -----------------------------------------------------------------------------------------------------------------
@@ -5109,7 +5243,7 @@ var main_CalendarApi = /** @class */ (function () {
5109
5243
  // Preference is given to views that have corresponding buttons.
5110
5244
  CalendarApi.prototype.getUnitViewSpec = function (unit) {
5111
5245
  var _a = this.getCurrentData(), viewSpecs = _a.viewSpecs, toolbarConfig = _a.toolbarConfig;
5112
- var viewTypes = [].concat(toolbarConfig.viewsWithButtons);
5246
+ var viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);
5113
5247
  var i;
5114
5248
  var spec;
5115
5249
  for (var viewType in viewSpecs) {
@@ -5247,7 +5381,7 @@ var main_CalendarApi = /** @class */ (function () {
5247
5381
  if (!currentData.eventStore.defs[def.defId]) {
5248
5382
  this.dispatch({
5249
5383
  type: 'ADD_EVENTS',
5250
- eventStore: eventTupleToStore({ def: def, instance: instance }),
5384
+ eventStore: eventTupleToStore({ def: def, instance: instance }), // TODO: better util for two args?
5251
5385
  });
5252
5386
  this.triggerEventAdd(eventInput);
5253
5387
  }
@@ -5370,7 +5504,7 @@ var main_CalendarApi = /** @class */ (function () {
5370
5504
  this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
5371
5505
  };
5372
5506
  CalendarApi.prototype.refetchEvents = function () {
5373
- this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
5507
+ this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });
5374
5508
  };
5375
5509
  // Scroll
5376
5510
  // -----------------------------------------------------------------------------------------------------------------
@@ -5398,6 +5532,13 @@ var main_EventApi = /** @class */ (function () {
5398
5532
  var _a, _b;
5399
5533
  if (name in EVENT_DATE_REFINERS) {
5400
5534
  console.warn('Could not set date-related prop \'name\'. Use one of the date-related methods instead.');
5535
+ // TODO: make proper aliasing system?
5536
+ }
5537
+ else if (name === 'id') {
5538
+ val = EVENT_NON_DATE_REFINERS[name](val);
5539
+ this.mutate({
5540
+ standardProps: { publicId: val }, // hardcoded internal name
5541
+ });
5401
5542
  }
5402
5543
  else if (name in EVENT_NON_DATE_REFINERS) {
5403
5544
  val = EVENT_NON_DATE_REFINERS[name](val);
@@ -5552,8 +5693,8 @@ var main_EventApi = /** @class */ (function () {
5552
5693
  if (instance) {
5553
5694
  var def = this._def;
5554
5695
  var context_1 = this._context;
5555
- var eventStore = context_1.getCurrentData().eventStore;
5556
- var relevantEvents_1 = getRelevantEvents(eventStore, instance.instanceId);
5696
+ var eventStore_1 = context_1.getCurrentData().eventStore;
5697
+ var relevantEvents = getRelevantEvents(eventStore_1, instance.instanceId);
5557
5698
  var eventConfigBase = {
5558
5699
  '': {
5559
5700
  display: '',
@@ -5568,22 +5709,22 @@ var main_EventApi = /** @class */ (function () {
5568
5709
  classNames: [],
5569
5710
  },
5570
5711
  };
5571
- relevantEvents_1 = applyMutationToEventStore(relevantEvents_1, eventConfigBase, mutation, context_1);
5712
+ relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context_1);
5572
5713
  var oldEvent = new EventApi(context_1, def, instance); // snapshot
5573
- this._def = relevantEvents_1.defs[def.defId];
5574
- this._instance = relevantEvents_1.instances[instance.instanceId];
5714
+ this._def = relevantEvents.defs[def.defId];
5715
+ this._instance = relevantEvents.instances[instance.instanceId];
5575
5716
  context_1.dispatch({
5576
5717
  type: 'MERGE_EVENTS',
5577
- eventStore: relevantEvents_1,
5718
+ eventStore: relevantEvents,
5578
5719
  });
5579
5720
  context_1.emitter.trigger('eventChange', {
5580
5721
  oldEvent: oldEvent,
5581
5722
  event: this,
5582
- relatedEvents: buildEventApis(relevantEvents_1, context_1, instance),
5723
+ relatedEvents: buildEventApis(relevantEvents, context_1, instance),
5583
5724
  revert: function () {
5584
5725
  context_1.dispatch({
5585
- type: 'REMOVE_EVENTS',
5586
- eventStore: relevantEvents_1,
5726
+ type: 'RESET_EVENTS',
5727
+ eventStore: eventStore_1,
5587
5728
  });
5588
5729
  },
5589
5730
  });
@@ -5906,6 +6047,7 @@ var DateEnv = /** @class */ (function () {
5906
6047
  this.weekNumberFunc = settings.weekNumberCalculation;
5907
6048
  }
5908
6049
  this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
6050
+ this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;
5909
6051
  this.cmdFormatter = settings.cmdFormatter;
5910
6052
  this.defaultSeparator = settings.defaultSeparator;
5911
6053
  }
@@ -6208,11 +6350,11 @@ var DateEnv = /** @class */ (function () {
6208
6350
 
6209
6351
  var globalLocales = [];
6210
6352
 
6211
- var RAW_EN_LOCALE = {
6353
+ var MINIMAL_RAW_EN_LOCALE = {
6212
6354
  code: 'en',
6213
6355
  week: {
6214
6356
  dow: 0,
6215
- doy: 4,
6357
+ doy: 4, // 4 days need to be within the year to be considered the first week
6216
6358
  },
6217
6359
  direction: 'ltr',
6218
6360
  buttonText: {
@@ -6228,10 +6370,28 @@ var RAW_EN_LOCALE = {
6228
6370
  list: 'list',
6229
6371
  },
6230
6372
  weekText: 'W',
6373
+ weekTextLong: 'Week',
6374
+ closeHint: 'Close',
6375
+ timeHint: 'Time',
6376
+ eventHint: 'Event',
6231
6377
  allDayText: 'all-day',
6232
6378
  moreLinkText: 'more',
6233
6379
  noEventsText: 'No events to display',
6234
6380
  };
6381
+ var RAW_EN_LOCALE = __assign(__assign({}, MINIMAL_RAW_EN_LOCALE), {
6382
+ // Includes things we don't want other locales to inherit,
6383
+ // things that derive from other translatable strings.
6384
+ buttonHints: {
6385
+ prev: 'Previous $0',
6386
+ next: 'Next $0',
6387
+ today: function (buttonText, unit) {
6388
+ return (unit === 'day')
6389
+ ? 'Today'
6390
+ : "This " + buttonText;
6391
+ },
6392
+ }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint: function (eventCnt) {
6393
+ return "Show " + eventCnt + " more event" + (eventCnt === 1 ? '' : 's');
6394
+ } });
6235
6395
  function organizeRawLocales(explicitRawLocales) {
6236
6396
  var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
6237
6397
  var allRawLocales = globalLocales.concat(explicitRawLocales);
@@ -6271,7 +6431,7 @@ function queryRawLocale(codes, available) {
6271
6431
  return null;
6272
6432
  }
6273
6433
  function parseLocale(codeArg, codes, raw) {
6274
- var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
6434
+ var merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
6275
6435
  delete merged.code; // don't want this part of the options
6276
6436
  var week = merged.week;
6277
6437
  delete merged.week;
@@ -6286,7 +6446,7 @@ function parseLocale(codeArg, codes, raw) {
6286
6446
 
6287
6447
  function formatDate(dateInput, options) {
6288
6448
  if (options === void 0) { options = {}; }
6289
- var dateEnv = buildDateEnv(options);
6449
+ var dateEnv = buildDateEnv$1(options);
6290
6450
  var formatter = createFormatter(options);
6291
6451
  var dateMeta = dateEnv.createMarkerMeta(dateInput);
6292
6452
  if (!dateMeta) { // TODO: warning?
@@ -6297,7 +6457,7 @@ function formatDate(dateInput, options) {
6297
6457
  });
6298
6458
  }
6299
6459
  function formatRange(startInput, endInput, options) {
6300
- var dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
6460
+ var dateEnv = buildDateEnv$1(typeof options === 'object' && options ? options : {}); // pass in if non-null object
6301
6461
  var formatter = createFormatter(options);
6302
6462
  var startMeta = dateEnv.createMarkerMeta(startInput);
6303
6463
  var endMeta = dateEnv.createMarkerMeta(endInput);
@@ -6312,7 +6472,7 @@ function formatRange(startInput, endInput, options) {
6312
6472
  });
6313
6473
  }
6314
6474
  // TODO: more DRY and optimized
6315
- function buildDateEnv(settings) {
6475
+ function buildDateEnv$1(settings) {
6316
6476
  var locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
6317
6477
  return new DateEnv(__assign(__assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale: locale }));
6318
6478
  }
@@ -6323,7 +6483,7 @@ var DEF_DEFAULTS = {
6323
6483
  daysOfWeek: [1, 2, 3, 4, 5],
6324
6484
  display: 'inverse-background',
6325
6485
  classNames: 'fc-non-business',
6326
- groupId: '_businessHours',
6486
+ groupId: '_businessHours', // so multiple defs get grouped
6327
6487
  };
6328
6488
  /*
6329
6489
  TODO: pass around as EventDefHash!!!
@@ -6619,12 +6779,33 @@ function getSlotClassNames(meta, theme) {
6619
6779
  return classNames;
6620
6780
  }
6621
6781
 
6622
- function buildNavLinkData(date, type) {
6623
- if (type === void 0) { type = 'day'; }
6624
- return JSON.stringify({
6625
- date: formatDayString(date),
6626
- type: type,
6627
- });
6782
+ var DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
6783
+ var WEEK_FORMAT = createFormatter({ week: 'long' });
6784
+ function buildNavLinkAttrs(context, dateMarker, viewType, isTabbable) {
6785
+ if (viewType === void 0) { viewType = 'day'; }
6786
+ if (isTabbable === void 0) { isTabbable = true; }
6787
+ var dateEnv = context.dateEnv, options = context.options, calendarApi = context.calendarApi;
6788
+ var dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
6789
+ if (options.navLinks) {
6790
+ var zonedDate = dateEnv.toDate(dateMarker);
6791
+ var handleInteraction = function (ev) {
6792
+ var customAction = viewType === 'day' ? options.navLinkDayClick :
6793
+ viewType === 'week' ? options.navLinkWeekClick : null;
6794
+ if (typeof customAction === 'function') {
6795
+ customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
6796
+ }
6797
+ else {
6798
+ if (typeof customAction === 'string') {
6799
+ viewType = customAction;
6800
+ }
6801
+ calendarApi.zoomTo(dateMarker, viewType);
6802
+ }
6803
+ };
6804
+ return __assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
6805
+ ? createAriaClickAttrs(handleInteraction)
6806
+ : { onClick: handleInteraction }));
6807
+ }
6808
+ return { 'aria-label': dateStr };
6628
6809
  }
6629
6810
 
6630
6811
  var _isRtlScrollbarOnLeft = null;
@@ -6663,6 +6844,9 @@ function getScrollbarWidths() {
6663
6844
  function computeScrollbarWidths() {
6664
6845
  var el = document.createElement('div');
6665
6846
  el.style.overflow = 'scroll';
6847
+ el.style.position = 'absolute';
6848
+ el.style.top = '-9999px';
6849
+ el.style.left = '-9999px';
6666
6850
  document.body.appendChild(el);
6667
6851
  var res = computeScrollbarWidthsForEl(el);
6668
6852
  document.body.removeChild(el);
@@ -6736,6 +6920,21 @@ function computeRect(el) {
6736
6920
  bottom: rect.bottom + window.pageYOffset,
6737
6921
  };
6738
6922
  }
6923
+ function computeClippedClientRect(el) {
6924
+ var clippingParents = getClippingParents(el);
6925
+ var rect = el.getBoundingClientRect();
6926
+ for (var _i = 0, clippingParents_1 = clippingParents; _i < clippingParents_1.length; _i++) {
6927
+ var clippingParent = clippingParents_1[_i];
6928
+ var intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
6929
+ if (intersection) {
6930
+ rect = intersection;
6931
+ }
6932
+ else {
6933
+ return null;
6934
+ }
6935
+ }
6936
+ return rect;
6937
+ }
6739
6938
  function computeHeightAndMargins(el) {
6740
6939
  return el.getBoundingClientRect().height + computeVMargins(el);
6741
6940
  }
@@ -6819,8 +7018,8 @@ var Emitter = /** @class */ (function () {
6819
7018
  }
6820
7019
  };
6821
7020
  Emitter.prototype.hasHandlers = function (type) {
6822
- return (this.handlers[type] && this.handlers[type].length) ||
6823
- (this.options && this.options[type]);
7021
+ return Boolean((this.handlers[type] && this.handlers[type].length) ||
7022
+ (this.options && this.options[type]));
6824
7023
  };
6825
7024
  return Emitter;
6826
7025
  }());
@@ -7079,11 +7278,12 @@ main_Theme.prototype.baseIconClass = '';
7079
7278
  main_Theme.prototype.iconOverridePrefix = '';
7080
7279
 
7081
7280
  var main_ScrollResponder = /** @class */ (function () {
7082
- function ScrollResponder(execFunc, emitter, scrollTime) {
7281
+ function ScrollResponder(execFunc, emitter, scrollTime, scrollTimeReset) {
7083
7282
  var _this = this;
7084
7283
  this.execFunc = execFunc;
7085
7284
  this.emitter = emitter;
7086
7285
  this.scrollTime = scrollTime;
7286
+ this.scrollTimeReset = scrollTimeReset;
7087
7287
  this.handleScrollRequest = function (request) {
7088
7288
  _this.queuedRequest = __assign({}, _this.queuedRequest || {}, request);
7089
7289
  _this.drain();
@@ -7095,7 +7295,7 @@ var main_ScrollResponder = /** @class */ (function () {
7095
7295
  this.emitter.off('_scrollRequest', this.handleScrollRequest);
7096
7296
  };
7097
7297
  ScrollResponder.prototype.update = function (isDatesNew) {
7098
- if (isDatesNew) {
7298
+ if (isDatesNew && this.scrollTimeReset) {
7099
7299
  this.fireInitialScroll(); // will drain
7100
7300
  }
7101
7301
  else {
@@ -7137,7 +7337,7 @@ function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator,
7137
7337
  emitter.off('_resize', handler);
7138
7338
  },
7139
7339
  createScrollResponder: function (execFunc) {
7140
- return new main_ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime));
7340
+ return new main_ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
7141
7341
  },
7142
7342
  registerInteractiveComponent: registerInteractiveComponent,
7143
7343
  unregisterInteractiveComponent: unregisterInteractiveComponent,
@@ -7194,467 +7394,153 @@ function setRef(ref, current) {
7194
7394
  }
7195
7395
  }
7196
7396
 
7197
- function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
7198
- switch (action.type) {
7199
- case 'RECEIVE_EVENTS': // raw
7200
- return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
7201
- case 'ADD_EVENTS': // already parsed, but not expanded
7202
- return addEvent(eventStore, action.eventStore, // new ones
7203
- dateProfile ? dateProfile.activeRange : null, context);
7204
- case 'MERGE_EVENTS': // already parsed and expanded
7205
- return mergeEventStores(eventStore, action.eventStore);
7206
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
7207
- case 'NEXT':
7208
- case 'CHANGE_DATE':
7209
- case 'CHANGE_VIEW_TYPE':
7210
- if (dateProfile) {
7211
- return expandRecurring(eventStore, dateProfile.activeRange, context);
7212
- }
7213
- return eventStore;
7214
- case 'REMOVE_EVENTS':
7215
- return excludeSubEventStore(eventStore, action.eventStore);
7216
- case 'REMOVE_EVENT_SOURCE':
7217
- return excludeEventsBySourceId(eventStore, action.sourceId);
7218
- case 'REMOVE_ALL_EVENT_SOURCES':
7219
- return filterEventStoreDefs(eventStore, function (eventDef) { return (!eventDef.sourceId // only keep events with no source id
7220
- ); });
7221
- case 'REMOVE_ALL_EVENTS':
7222
- return createEmptyEventStore();
7223
- default:
7224
- return eventStore;
7397
+ /*
7398
+ an INTERACTABLE date component
7399
+
7400
+ PURPOSES:
7401
+ - hook up to fg, fill, and mirror renderers
7402
+ - interface for dragging and hits
7403
+ */
7404
+ var main_DateComponent = /** @class */ (function (_super) {
7405
+ __extends(DateComponent, _super);
7406
+ function DateComponent() {
7407
+ var _this = _super !== null && _super.apply(this, arguments) || this;
7408
+ _this.uid = guid();
7409
+ return _this;
7225
7410
  }
7411
+ // Hit System
7412
+ // -----------------------------------------------------------------------------------------------------------------
7413
+ DateComponent.prototype.prepareHits = function () {
7414
+ };
7415
+ DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
7416
+ return null; // this should be abstract
7417
+ };
7418
+ // Pointer Interaction Utils
7419
+ // -----------------------------------------------------------------------------------------------------------------
7420
+ DateComponent.prototype.isValidSegDownEl = function (el) {
7421
+ return !this.props.eventDrag && // HACK
7422
+ !this.props.eventResize && // HACK
7423
+ !elementClosest(el, '.fc-event-mirror');
7424
+ };
7425
+ DateComponent.prototype.isValidDateDownEl = function (el) {
7426
+ return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
7427
+ !elementClosest(el, '.fc-more-link') && // a "more.." link
7428
+ !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
7429
+ !elementClosest(el, '.fc-popover'); // hack
7430
+ };
7431
+ return DateComponent;
7432
+ }(main_BaseComponent));
7433
+
7434
+ // TODO: easier way to add new hooks? need to update a million things
7435
+ function createPlugin(input) {
7436
+ return {
7437
+ id: guid(),
7438
+ deps: input.deps || [],
7439
+ reducers: input.reducers || [],
7440
+ isLoadingFuncs: input.isLoadingFuncs || [],
7441
+ contextInit: [].concat(input.contextInit || []),
7442
+ eventRefiners: input.eventRefiners || {},
7443
+ eventDefMemberAdders: input.eventDefMemberAdders || [],
7444
+ eventSourceRefiners: input.eventSourceRefiners || {},
7445
+ isDraggableTransformers: input.isDraggableTransformers || [],
7446
+ eventDragMutationMassagers: input.eventDragMutationMassagers || [],
7447
+ eventDefMutationAppliers: input.eventDefMutationAppliers || [],
7448
+ dateSelectionTransformers: input.dateSelectionTransformers || [],
7449
+ datePointTransforms: input.datePointTransforms || [],
7450
+ dateSpanTransforms: input.dateSpanTransforms || [],
7451
+ views: input.views || {},
7452
+ viewPropsTransformers: input.viewPropsTransformers || [],
7453
+ isPropsValid: input.isPropsValid || null,
7454
+ externalDefTransforms: input.externalDefTransforms || [],
7455
+ viewContainerAppends: input.viewContainerAppends || [],
7456
+ eventDropTransformers: input.eventDropTransformers || [],
7457
+ componentInteractions: input.componentInteractions || [],
7458
+ calendarInteractions: input.calendarInteractions || [],
7459
+ themeClasses: input.themeClasses || {},
7460
+ eventSourceDefs: input.eventSourceDefs || [],
7461
+ cmdFormatter: input.cmdFormatter,
7462
+ recurringTypes: input.recurringTypes || [],
7463
+ namedTimeZonedImpl: input.namedTimeZonedImpl,
7464
+ initialView: input.initialView || '',
7465
+ elementDraggingImpl: input.elementDraggingImpl,
7466
+ optionChangeHandlers: input.optionChangeHandlers || {},
7467
+ scrollGridImpl: input.scrollGridImpl || null,
7468
+ contentTypeHandlers: input.contentTypeHandlers || {},
7469
+ listenerRefiners: input.listenerRefiners || {},
7470
+ optionRefiners: input.optionRefiners || {},
7471
+ propSetHandlers: input.propSetHandlers || {},
7472
+ };
7226
7473
  }
7227
- function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
7228
- if (eventSource && // not already removed
7229
- fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
7230
- ) {
7231
- var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
7232
- if (fetchRange) {
7233
- subset = expandRecurring(subset, fetchRange, context);
7474
+ function buildPluginHooks(pluginDefs, globalDefs) {
7475
+ var isAdded = {};
7476
+ var hooks = {
7477
+ reducers: [],
7478
+ isLoadingFuncs: [],
7479
+ contextInit: [],
7480
+ eventRefiners: {},
7481
+ eventDefMemberAdders: [],
7482
+ eventSourceRefiners: {},
7483
+ isDraggableTransformers: [],
7484
+ eventDragMutationMassagers: [],
7485
+ eventDefMutationAppliers: [],
7486
+ dateSelectionTransformers: [],
7487
+ datePointTransforms: [],
7488
+ dateSpanTransforms: [],
7489
+ views: {},
7490
+ viewPropsTransformers: [],
7491
+ isPropsValid: null,
7492
+ externalDefTransforms: [],
7493
+ viewContainerAppends: [],
7494
+ eventDropTransformers: [],
7495
+ componentInteractions: [],
7496
+ calendarInteractions: [],
7497
+ themeClasses: {},
7498
+ eventSourceDefs: [],
7499
+ cmdFormatter: null,
7500
+ recurringTypes: [],
7501
+ namedTimeZonedImpl: null,
7502
+ initialView: '',
7503
+ elementDraggingImpl: null,
7504
+ optionChangeHandlers: {},
7505
+ scrollGridImpl: null,
7506
+ contentTypeHandlers: {},
7507
+ listenerRefiners: {},
7508
+ optionRefiners: {},
7509
+ propSetHandlers: {},
7510
+ };
7511
+ function addDefs(defs) {
7512
+ for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
7513
+ var def = defs_1[_i];
7514
+ if (!isAdded[def.id]) {
7515
+ isAdded[def.id] = true;
7516
+ addDefs(def.deps);
7517
+ hooks = combineHooks(hooks, def);
7518
+ }
7234
7519
  }
7235
- return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
7236
- }
7237
- return eventStore;
7238
- }
7239
- function transformRawEvents(rawEvents, eventSource, context) {
7240
- var calEachTransform = context.options.eventDataTransform;
7241
- var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
7242
- if (sourceEachTransform) {
7243
- rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
7244
7520
  }
7245
- if (calEachTransform) {
7246
- rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
7521
+ if (pluginDefs) {
7522
+ addDefs(pluginDefs);
7247
7523
  }
7248
- return rawEvents;
7524
+ addDefs(globalDefs);
7525
+ return hooks;
7249
7526
  }
7250
- function transformEachRawEvent(rawEvents, func) {
7251
- var refinedEvents;
7252
- if (!func) {
7253
- refinedEvents = rawEvents;
7254
- }
7255
- else {
7256
- refinedEvents = [];
7257
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
7258
- var rawEvent = rawEvents_1[_i];
7259
- var refinedEvent = func(rawEvent);
7260
- if (refinedEvent) {
7261
- refinedEvents.push(refinedEvent);
7262
- }
7263
- else if (refinedEvent == null) {
7264
- refinedEvents.push(rawEvent);
7265
- } // if a different falsy value, do nothing
7527
+ function buildBuildPluginHooks() {
7528
+ var currentOverrideDefs = [];
7529
+ var currentGlobalDefs = [];
7530
+ var currentHooks;
7531
+ return function (overrideDefs, globalDefs) {
7532
+ if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
7533
+ currentHooks = buildPluginHooks(overrideDefs, globalDefs);
7266
7534
  }
7267
- }
7268
- return refinedEvents;
7269
- }
7270
- function addEvent(eventStore, subset, expandRange, context) {
7271
- if (expandRange) {
7272
- subset = expandRecurring(subset, expandRange, context);
7273
- }
7274
- return mergeEventStores(eventStore, subset);
7275
- }
7276
- function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
7277
- var defs = eventStore.defs;
7278
- var instances = mapHash(eventStore.instances, function (instance) {
7279
- var def = defs[instance.defId];
7280
- if (def.allDay || def.recurringDef) {
7281
- return instance; // isn't dependent on timezone
7282
- }
7283
- return __assign(__assign({}, instance), { range: {
7284
- start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
7285
- end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
7286
- }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
7287
- });
7288
- return { defs: defs, instances: instances };
7289
- }
7290
- function excludeEventsBySourceId(eventStore, sourceId) {
7291
- return filterEventStoreDefs(eventStore, function (eventDef) { return eventDef.sourceId !== sourceId; });
7292
- }
7293
- // QUESTION: why not just return instances? do a general object-property-exclusion util
7294
- function excludeInstances(eventStore, removals) {
7295
- return {
7296
- defs: eventStore.defs,
7297
- instances: filterHash(eventStore.instances, function (instance) { return !removals[instance.instanceId]; }),
7298
- };
7299
- }
7300
-
7301
- // high-level segmenting-aware tester functions
7302
- // ------------------------------------------------------------------------------------------------------------------------
7303
- function isInteractionValid(interaction, context) {
7304
- return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
7305
- }
7306
- function isDateSelectionValid(dateSelection, context) {
7307
- return isNewPropsValid({ dateSelection: dateSelection }, context);
7308
- }
7309
- function isNewPropsValid(newProps, context) {
7310
- var calendarState = context.getCurrentData();
7311
- var props = __assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
7312
- return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
7313
- }
7314
- function isPropsValid(state, context, dateSpanMeta, filterConfig) {
7315
- if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
7316
- if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
7317
- return false;
7318
- }
7319
- if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
7320
- return false;
7321
- }
7322
- return true;
7323
- }
7324
- // Moving Event Validation
7325
- // ------------------------------------------------------------------------------------------------------------------------
7326
- function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
7327
- var currentState = context.getCurrentData();
7328
- var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
7329
- var subjectEventStore = interaction.mutatedEvents;
7330
- var subjectDefs = subjectEventStore.defs;
7331
- var subjectInstances = subjectEventStore.instances;
7332
- var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
7333
- state.eventUiBases :
7334
- { '': currentState.selectionConfig });
7335
- if (filterConfig) {
7336
- subjectConfigs = mapHash(subjectConfigs, filterConfig);
7337
- }
7338
- // exclude the subject events. TODO: exclude defs too?
7339
- var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
7340
- var otherDefs = otherEventStore.defs;
7341
- var otherInstances = otherEventStore.instances;
7342
- var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
7343
- for (var subjectInstanceId in subjectInstances) {
7344
- var subjectInstance = subjectInstances[subjectInstanceId];
7345
- var subjectRange = subjectInstance.range;
7346
- var subjectConfig = subjectConfigs[subjectInstance.defId];
7347
- var subjectDef = subjectDefs[subjectInstance.defId];
7348
- // constraint
7349
- if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
7350
- return false;
7351
- }
7352
- // overlap
7353
- var eventOverlap = context.options.eventOverlap;
7354
- var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
7355
- for (var otherInstanceId in otherInstances) {
7356
- var otherInstance = otherInstances[otherInstanceId];
7357
- // intersect! evaluate
7358
- if (rangesIntersect(subjectRange, otherInstance.range)) {
7359
- var otherOverlap = otherConfigs[otherInstance.defId].overlap;
7360
- // consider the other event's overlap. only do this if the subject event is a "real" event
7361
- if (otherOverlap === false && interaction.isEvent) {
7362
- return false;
7363
- }
7364
- if (subjectConfig.overlap === false) {
7365
- return false;
7366
- }
7367
- if (eventOverlapFunc && !eventOverlapFunc(new main_EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event
7368
- new main_EventApi(context, subjectDef, subjectInstance))) {
7369
- return false;
7370
- }
7371
- }
7372
- }
7373
- // allow (a function)
7374
- var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
7375
- for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
7376
- var subjectAllow = _a[_i];
7377
- var subjectDateSpan = __assign(__assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
7378
- var origDef = calendarEventStore.defs[subjectDef.defId];
7379
- var origInstance = calendarEventStore.instances[subjectInstanceId];
7380
- var eventApi = void 0;
7381
- if (origDef) { // was previously in the calendar
7382
- eventApi = new main_EventApi(context, origDef, origInstance);
7383
- }
7384
- else { // was an external event
7385
- eventApi = new main_EventApi(context, subjectDef); // no instance, because had no dates
7386
- }
7387
- if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
7388
- return false;
7389
- }
7390
- }
7391
- }
7392
- return true;
7393
- }
7394
- // Date Selection Validation
7395
- // ------------------------------------------------------------------------------------------------------------------------
7396
- function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
7397
- var relevantEventStore = state.eventStore;
7398
- var relevantDefs = relevantEventStore.defs;
7399
- var relevantInstances = relevantEventStore.instances;
7400
- var selection = state.dateSelection;
7401
- var selectionRange = selection.range;
7402
- var selectionConfig = context.getCurrentData().selectionConfig;
7403
- if (filterConfig) {
7404
- selectionConfig = filterConfig(selectionConfig);
7405
- }
7406
- // constraint
7407
- if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
7408
- return false;
7409
- }
7410
- // overlap
7411
- var selectOverlap = context.options.selectOverlap;
7412
- var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
7413
- for (var relevantInstanceId in relevantInstances) {
7414
- var relevantInstance = relevantInstances[relevantInstanceId];
7415
- // intersect! evaluate
7416
- if (rangesIntersect(selectionRange, relevantInstance.range)) {
7417
- if (selectionConfig.overlap === false) {
7418
- return false;
7419
- }
7420
- if (selectOverlapFunc && !selectOverlapFunc(new main_EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
7421
- return false;
7422
- }
7423
- }
7424
- }
7425
- // allow (a function)
7426
- for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
7427
- var selectionAllow = _a[_i];
7428
- var fullDateSpan = __assign(__assign({}, dateSpanMeta), selection);
7429
- if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
7430
- return false;
7431
- }
7432
- }
7433
- return true;
7434
- }
7435
- // Constraint Utils
7436
- // ------------------------------------------------------------------------------------------------------------------------
7437
- function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
7438
- for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
7439
- var constraint = constraints_1[_i];
7440
- if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
7441
- return false;
7442
- }
7443
- }
7444
- return true;
7445
- }
7446
- function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
7447
- otherEventStore, // for if constraint is an even group ID
7448
- businessHoursUnexpanded, // for if constraint is 'businessHours'
7449
- context) {
7450
- if (constraint === 'businessHours') {
7451
- return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
7452
- }
7453
- if (typeof constraint === 'string') { // an group ID
7454
- return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { return eventDef.groupId === constraint; }));
7455
- }
7456
- if (typeof constraint === 'object' && constraint) { // non-null object
7457
- return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
7458
- }
7459
- return []; // if it's false
7460
- }
7461
- // TODO: move to event-store file?
7462
- function eventStoreToRanges(eventStore) {
7463
- var instances = eventStore.instances;
7464
- var ranges = [];
7465
- for (var instanceId in instances) {
7466
- ranges.push(instances[instanceId].range);
7467
- }
7468
- return ranges;
7469
- }
7470
- // TODO: move to geom file?
7471
- function anyRangesContainRange(outerRanges, innerRange) {
7472
- for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
7473
- var outerRange = outerRanges_1[_i];
7474
- if (rangeContainsRange(outerRange, innerRange)) {
7475
- return true;
7476
- }
7477
- }
7478
- return false;
7479
- }
7480
-
7481
- /*
7482
- an INTERACTABLE date component
7483
-
7484
- PURPOSES:
7485
- - hook up to fg, fill, and mirror renderers
7486
- - interface for dragging and hits
7487
- */
7488
- var main_DateComponent = /** @class */ (function (_super) {
7489
- __extends(DateComponent, _super);
7490
- function DateComponent() {
7491
- var _this = _super !== null && _super.apply(this, arguments) || this;
7492
- _this.uid = guid();
7493
- return _this;
7494
- }
7495
- // Hit System
7496
- // -----------------------------------------------------------------------------------------------------------------
7497
- DateComponent.prototype.prepareHits = function () {
7498
- };
7499
- DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
7500
- return null; // this should be abstract
7501
- };
7502
- // Validation
7503
- // -----------------------------------------------------------------------------------------------------------------
7504
- DateComponent.prototype.isInteractionValid = function (interaction) {
7505
- var dateProfile = this.props.dateProfile; // HACK
7506
- var instances = interaction.mutatedEvents.instances;
7507
- if (dateProfile) { // HACK for MorePopover
7508
- for (var instanceId in instances) {
7509
- if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
7510
- return false;
7511
- }
7512
- }
7513
- }
7514
- return isInteractionValid(interaction, this.context);
7515
- };
7516
- DateComponent.prototype.isDateSelectionValid = function (selection) {
7517
- var dateProfile = this.props.dateProfile; // HACK
7518
- if (dateProfile && // HACK for MorePopover
7519
- !rangeContainsRange(dateProfile.validRange, selection.range)) {
7520
- return false;
7521
- }
7522
- return isDateSelectionValid(selection, this.context);
7523
- };
7524
- // Pointer Interaction Utils
7525
- // -----------------------------------------------------------------------------------------------------------------
7526
- DateComponent.prototype.isValidSegDownEl = function (el) {
7527
- return !this.props.eventDrag && // HACK
7528
- !this.props.eventResize && // HACK
7529
- !elementClosest(el, '.fc-event-mirror') &&
7530
- (this.isPopover() || !this.isInPopover(el));
7531
- // ^above line ensures we don't detect a seg interaction within a nested component.
7532
- // it's a HACK because it only supports a popover as the nested component.
7533
- };
7534
- DateComponent.prototype.isValidDateDownEl = function (el) {
7535
- return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
7536
- !elementClosest(el, '.fc-daygrid-more-link') && // a "more.." link
7537
- !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
7538
- !this.isInPopover(el);
7539
- };
7540
- DateComponent.prototype.isPopover = function () {
7541
- return false;
7542
- };
7543
- DateComponent.prototype.isInPopover = function (el) {
7544
- return Boolean(elementClosest(el, '.fc-popover'));
7545
- };
7546
- return DateComponent;
7547
- }(main_BaseComponent));
7548
-
7549
- // TODO: easier way to add new hooks? need to update a million things
7550
- function createPlugin(input) {
7551
- return {
7552
- id: guid(),
7553
- deps: input.deps || [],
7554
- reducers: input.reducers || [],
7555
- contextInit: [].concat(input.contextInit || []),
7556
- eventRefiners: input.eventRefiners || {},
7557
- eventDefMemberAdders: input.eventDefMemberAdders || [],
7558
- eventSourceRefiners: input.eventSourceRefiners || {},
7559
- isDraggableTransformers: input.isDraggableTransformers || [],
7560
- eventDragMutationMassagers: input.eventDragMutationMassagers || [],
7561
- eventDefMutationAppliers: input.eventDefMutationAppliers || [],
7562
- dateSelectionTransformers: input.dateSelectionTransformers || [],
7563
- datePointTransforms: input.datePointTransforms || [],
7564
- dateSpanTransforms: input.dateSpanTransforms || [],
7565
- views: input.views || {},
7566
- viewPropsTransformers: input.viewPropsTransformers || [],
7567
- isPropsValid: input.isPropsValid || null,
7568
- externalDefTransforms: input.externalDefTransforms || [],
7569
- eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
7570
- viewContainerAppends: input.viewContainerAppends || [],
7571
- eventDropTransformers: input.eventDropTransformers || [],
7572
- componentInteractions: input.componentInteractions || [],
7573
- calendarInteractions: input.calendarInteractions || [],
7574
- themeClasses: input.themeClasses || {},
7575
- eventSourceDefs: input.eventSourceDefs || [],
7576
- cmdFormatter: input.cmdFormatter,
7577
- recurringTypes: input.recurringTypes || [],
7578
- namedTimeZonedImpl: input.namedTimeZonedImpl,
7579
- initialView: input.initialView || '',
7580
- elementDraggingImpl: input.elementDraggingImpl,
7581
- optionChangeHandlers: input.optionChangeHandlers || {},
7582
- scrollGridImpl: input.scrollGridImpl || null,
7583
- contentTypeHandlers: input.contentTypeHandlers || {},
7584
- listenerRefiners: input.listenerRefiners || {},
7585
- optionRefiners: input.optionRefiners || {},
7586
- propSetHandlers: input.propSetHandlers || {},
7587
- };
7588
- }
7589
- function buildPluginHooks(pluginDefs, globalDefs) {
7590
- var isAdded = {};
7591
- var hooks = {
7592
- reducers: [],
7593
- contextInit: [],
7594
- eventRefiners: {},
7595
- eventDefMemberAdders: [],
7596
- eventSourceRefiners: {},
7597
- isDraggableTransformers: [],
7598
- eventDragMutationMassagers: [],
7599
- eventDefMutationAppliers: [],
7600
- dateSelectionTransformers: [],
7601
- datePointTransforms: [],
7602
- dateSpanTransforms: [],
7603
- views: {},
7604
- viewPropsTransformers: [],
7605
- isPropsValid: null,
7606
- externalDefTransforms: [],
7607
- eventResizeJoinTransforms: [],
7608
- viewContainerAppends: [],
7609
- eventDropTransformers: [],
7610
- componentInteractions: [],
7611
- calendarInteractions: [],
7612
- themeClasses: {},
7613
- eventSourceDefs: [],
7614
- cmdFormatter: null,
7615
- recurringTypes: [],
7616
- namedTimeZonedImpl: null,
7617
- initialView: '',
7618
- elementDraggingImpl: null,
7619
- optionChangeHandlers: {},
7620
- scrollGridImpl: null,
7621
- contentTypeHandlers: {},
7622
- listenerRefiners: {},
7623
- optionRefiners: {},
7624
- propSetHandlers: {},
7625
- };
7626
- function addDefs(defs) {
7627
- for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
7628
- var def = defs_1[_i];
7629
- if (!isAdded[def.id]) {
7630
- isAdded[def.id] = true;
7631
- addDefs(def.deps);
7632
- hooks = combineHooks(hooks, def);
7633
- }
7634
- }
7635
- }
7636
- if (pluginDefs) {
7637
- addDefs(pluginDefs);
7638
- }
7639
- addDefs(globalDefs);
7640
- return hooks;
7641
- }
7642
- function buildBuildPluginHooks() {
7643
- var currentOverrideDefs = [];
7644
- var currentGlobalDefs = [];
7645
- var currentHooks;
7646
- return function (overrideDefs, globalDefs) {
7647
- if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
7648
- currentHooks = buildPluginHooks(overrideDefs, globalDefs);
7649
- }
7650
- currentOverrideDefs = overrideDefs;
7651
- currentGlobalDefs = globalDefs;
7652
- return currentHooks;
7653
- };
7535
+ currentOverrideDefs = overrideDefs;
7536
+ currentGlobalDefs = globalDefs;
7537
+ return currentHooks;
7538
+ };
7654
7539
  }
7655
7540
  function combineHooks(hooks0, hooks1) {
7656
7541
  return {
7657
7542
  reducers: hooks0.reducers.concat(hooks1.reducers),
7543
+ isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
7658
7544
  contextInit: hooks0.contextInit.concat(hooks1.contextInit),
7659
7545
  eventRefiners: __assign(__assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
7660
7546
  eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
@@ -7669,7 +7555,6 @@ function combineHooks(hooks0, hooks1) {
7669
7555
  viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
7670
7556
  isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
7671
7557
  externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
7672
- eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
7673
7558
  viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
7674
7559
  eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
7675
7560
  calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
@@ -7822,39 +7707,56 @@ var main_ContentHookInner = /** @class */ (function (_super) {
7822
7707
  }
7823
7708
  };
7824
7709
  ContentHookInner.prototype.renderInnerContent = function () {
7825
- var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
7826
- var _a = this, props = _a.props, customContentInfo = _a.customContentInfo;
7827
- var rawVal = props.content;
7828
- var innerContent = normalizeContent(rawVal, props.hookProps);
7829
- var innerContentVDom = null;
7830
- if (innerContent === undefined) { // use the default
7831
- innerContent = normalizeContent(props.defaultContent, props.hookProps);
7832
- }
7833
- if (innerContent !== undefined) { // we allow custom content handlers to return nothing
7710
+ var customContentInfo = this.customContentInfo; // only populated if using non-[p]react node(s)
7711
+ var innerContent = this.getInnerContent();
7712
+ var meta = this.getContentMeta(innerContent);
7713
+ // initial run, or content-type changing? (from vue -> react for example)
7714
+ if (!customContentInfo || customContentInfo.contentKey !== meta.contentKey) {
7715
+ // clearing old value
7834
7716
  if (customContentInfo) {
7835
- customContentInfo.contentVal = innerContent[customContentInfo.contentKey];
7836
- }
7837
- else if (typeof innerContent === 'object') {
7838
- // look for a prop that would indicate a custom content handler is needed
7839
- for (var contentKey in contentTypeHandlers) {
7840
- if (innerContent[contentKey] !== undefined) {
7841
- var stuff = contentTypeHandlers[contentKey]();
7842
- customContentInfo = this.customContentInfo = __assign({ contentKey: contentKey, contentVal: innerContent[contentKey] }, stuff);
7843
- break;
7844
- }
7717
+ if (customContentInfo.destroy) {
7718
+ customContentInfo.destroy();
7845
7719
  }
7720
+ customContentInfo = this.customContentInfo = null;
7846
7721
  }
7847
- if (customContentInfo) {
7848
- innerContentVDom = []; // signal that something was specified
7722
+ // assigning new value
7723
+ if (meta.contentKey) {
7724
+ customContentInfo = this.customContentInfo = __assign({ contentKey: meta.contentKey, contentVal: innerContent[meta.contentKey] }, meta.buildLifecycleFuncs());
7849
7725
  }
7850
- else {
7851
- innerContentVDom = innerContent; // assume a [p]react vdom node. use it
7726
+ // updating
7727
+ }
7728
+ else if (customContentInfo) {
7729
+ customContentInfo.contentVal = innerContent[meta.contentKey];
7730
+ }
7731
+ return customContentInfo
7732
+ ? [] // signal that something was specified
7733
+ : innerContent; // assume a [p]react vdom node. use it
7734
+ };
7735
+ ContentHookInner.prototype.getInnerContent = function () {
7736
+ var props = this.props;
7737
+ var innerContent = normalizeContent(props.content, props.hookProps);
7738
+ if (innerContent === undefined) { // use the default
7739
+ innerContent = normalizeContent(props.defaultContent, props.hookProps);
7740
+ }
7741
+ return innerContent == null ? null : innerContent; // convert undefined to null (better for React)
7742
+ };
7743
+ ContentHookInner.prototype.getContentMeta = function (innerContent) {
7744
+ var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
7745
+ var contentKey = '';
7746
+ var buildLifecycleFuncs = null;
7747
+ if (innerContent) { // allowed to be null, for convenience to caller
7748
+ for (var searchKey in contentTypeHandlers) {
7749
+ if (innerContent[searchKey] !== undefined) {
7750
+ contentKey = searchKey;
7751
+ buildLifecycleFuncs = contentTypeHandlers[searchKey];
7752
+ break;
7753
+ }
7852
7754
  }
7853
7755
  }
7854
- return innerContentVDom;
7756
+ return { contentKey: contentKey, buildLifecycleFuncs: buildLifecycleFuncs };
7855
7757
  };
7856
7758
  ContentHookInner.prototype.updateCustomContent = function () {
7857
- if (this.customContentInfo) {
7759
+ if (this.customContentInfo) { // for non-[p]react
7858
7760
  this.customContentInfo.render(this.innerElRef.current || this.props.backupElRef.current, // the element to render into
7859
7761
  this.customContentInfo.contentVal);
7860
7762
  }
@@ -7998,6 +7900,20 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
7998
7900
  }
7999
7901
  return null;
8000
7902
  };
7903
+ var queryButtonTitle = function (optionsSubset) {
7904
+ var buttonHints = optionsSubset.buttonHints || {};
7905
+ var buttonKey = viewDef.defaults.buttonTextKey; // use same key as text
7906
+ if (buttonKey != null && buttonHints[buttonKey] != null) {
7907
+ return buttonHints[buttonKey];
7908
+ }
7909
+ if (buttonHints[viewDef.type] != null) {
7910
+ return buttonHints[viewDef.type];
7911
+ }
7912
+ if (buttonHints[singleUnit] != null) {
7913
+ return buttonHints[singleUnit];
7914
+ }
7915
+ return null;
7916
+ };
8001
7917
  return {
8002
7918
  type: viewDef.type,
8003
7919
  component: viewDef.component,
@@ -8013,6 +7929,14 @@ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionO
8013
7929
  viewDef.defaults.buttonText ||
8014
7930
  queryButtonText(BASE_OPTION_DEFAULTS) ||
8015
7931
  viewDef.type,
7932
+ // not DRY
7933
+ buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||
7934
+ queryButtonTitle(optionOverrides) ||
7935
+ viewDef.overrides.buttonHint,
7936
+ buttonTitleDefault: queryButtonTitle(localeDefaults) ||
7937
+ viewDef.defaults.buttonHint ||
7938
+ queryButtonTitle(BASE_OPTION_DEFAULTS),
7939
+ // will eventually fall back to buttonText
8016
7940
  };
8017
7941
  }
8018
7942
  // hack to get memoization working
@@ -8102,6 +8026,7 @@ var DateProfileGenerator = /** @class */ (function () {
8102
8026
  isValid: isValid,
8103
8027
  // how far the current date will move for a prev/next operation
8104
8028
  dateIncrement: this.buildDateIncrement(currentInfo.duration),
8029
+ // pass a fallback (might be null) ^
8105
8030
  };
8106
8031
  };
8107
8032
  // Builds an object with optional start/end properties.
@@ -8360,12 +8285,7 @@ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileG
8360
8285
  case 'CHANGE_VIEW_TYPE':
8361
8286
  return dateProfileGenerator.build(action.dateMarker || currentDate);
8362
8287
  case 'CHANGE_DATE':
8363
- if (!currentDateProfile.activeRange ||
8364
- !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker) // don't move if date already in view
8365
- ) {
8366
- return dateProfileGenerator.build(action.dateMarker);
8367
- }
8368
- break;
8288
+ return dateProfileGenerator.build(action.dateMarker);
8369
8289
  case 'PREV':
8370
8290
  dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
8371
8291
  if (dp.isValid) {
@@ -8404,7 +8324,7 @@ function reduceEventSources(eventSources, action, dateProfile, context) {
8404
8324
  case 'FETCH_EVENT_SOURCES':
8405
8325
  return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
8406
8326
  arrayToHash(action.sourceIds) :
8407
- excludeStaticSources(eventSources, context), activeRange, context);
8327
+ excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
8408
8328
  case 'RECEIVE_EVENTS':
8409
8329
  case 'RECEIVE_EVENT_ERROR':
8410
8330
  return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
@@ -8416,16 +8336,15 @@ function reduceEventSources(eventSources, action, dateProfile, context) {
8416
8336
  }
8417
8337
  function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
8418
8338
  var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
8419
- return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, context);
8339
+ return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
8420
8340
  }
8421
- function computeEventSourceLoadingLevel(eventSources) {
8422
- var cnt = 0;
8341
+ function computeEventSourcesLoading(eventSources) {
8423
8342
  for (var sourceId in eventSources) {
8424
8343
  if (eventSources[sourceId].isFetching) {
8425
- cnt += 1;
8344
+ return true;
8426
8345
  }
8427
8346
  }
8428
- return cnt;
8347
+ return false;
8429
8348
  }
8430
8349
  function addSources(eventSourceHash, sources, fetchRange, context) {
8431
8350
  var hash = {};
@@ -8442,7 +8361,7 @@ function removeSource(eventSourceHash, sourceId) {
8442
8361
  return filterHash(eventSourceHash, function (eventSource) { return eventSource.sourceId !== sourceId; });
8443
8362
  }
8444
8363
  function fetchDirtySources(sourceHash, fetchRange, context) {
8445
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { return isSourceDirty(eventSource, fetchRange, context); }), fetchRange, context);
8364
+ return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { return isSourceDirty(eventSource, fetchRange, context); }), fetchRange, false, context);
8446
8365
  }
8447
8366
  function isSourceDirty(eventSource, fetchRange, context) {
8448
8367
  if (!doesSourceNeedRange(eventSource, context)) {
@@ -8454,12 +8373,12 @@ function isSourceDirty(eventSource, fetchRange, context) {
8454
8373
  fetchRange.start < eventSource.fetchRange.start ||
8455
8374
  fetchRange.end > eventSource.fetchRange.end;
8456
8375
  }
8457
- function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, context) {
8376
+ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
8458
8377
  var nextSources = {};
8459
8378
  for (var sourceId in prevSources) {
8460
8379
  var source = prevSources[sourceId];
8461
8380
  if (sourceIdHash[sourceId]) {
8462
- nextSources[sourceId] = fetchSource(source, fetchRange, context);
8381
+ nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
8463
8382
  }
8464
8383
  else {
8465
8384
  nextSources[sourceId] = source;
@@ -8467,13 +8386,14 @@ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, context) {
8467
8386
  }
8468
8387
  return nextSources;
8469
8388
  }
8470
- function fetchSource(eventSource, fetchRange, context) {
8389
+ function fetchSource(eventSource, fetchRange, isRefetch, context) {
8471
8390
  var options = context.options, calendarApi = context.calendarApi;
8472
8391
  var sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
8473
8392
  var fetchId = guid();
8474
8393
  sourceDef.fetch({
8475
8394
  eventSource: eventSource,
8476
8395
  range: fetchRange,
8396
+ isRefetch: isRefetch,
8477
8397
  context: context,
8478
8398
  }, function (res) {
8479
8399
  var rawEvents = res.rawEvents;
@@ -8515,33 +8435,139 @@ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
8515
8435
  fetchId === eventSource.latestFetchId) {
8516
8436
  return __assign(__assign({}, sourceHash), (_a = {}, _a[sourceId] = __assign(__assign({}, eventSource), { isFetching: false, fetchRange: fetchRange }), _a));
8517
8437
  }
8518
- return sourceHash;
8519
- }
8520
- function excludeStaticSources(eventSources, context) {
8521
- return filterHash(eventSources, function (eventSource) { return doesSourceNeedRange(eventSource, context); });
8438
+ return sourceHash;
8439
+ }
8440
+ function excludeStaticSources(eventSources, context) {
8441
+ return filterHash(eventSources, function (eventSource) { return doesSourceNeedRange(eventSource, context); });
8442
+ }
8443
+ function parseInitialSources(rawOptions, context) {
8444
+ var refiners = buildEventSourceRefiners(context);
8445
+ var rawSources = [].concat(rawOptions.eventSources || []);
8446
+ var sources = []; // parsed
8447
+ if (rawOptions.initialEvents) {
8448
+ rawSources.unshift(rawOptions.initialEvents);
8449
+ }
8450
+ if (rawOptions.events) {
8451
+ rawSources.unshift(rawOptions.events);
8452
+ }
8453
+ for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
8454
+ var rawSource = rawSources_1[_i];
8455
+ var source = parseEventSource(rawSource, context, refiners);
8456
+ if (source) {
8457
+ sources.push(source);
8458
+ }
8459
+ }
8460
+ return sources;
8461
+ }
8462
+ function doesSourceNeedRange(eventSource, context) {
8463
+ var defs = context.pluginHooks.eventSourceDefs;
8464
+ return !defs[eventSource.sourceDefId].ignoreRange;
8465
+ }
8466
+
8467
+ function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
8468
+ switch (action.type) {
8469
+ case 'RECEIVE_EVENTS': // raw
8470
+ return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
8471
+ case 'ADD_EVENTS': // already parsed, but not expanded
8472
+ return addEvent(eventStore, action.eventStore, // new ones
8473
+ dateProfile ? dateProfile.activeRange : null, context);
8474
+ case 'RESET_EVENTS':
8475
+ return action.eventStore;
8476
+ case 'MERGE_EVENTS': // already parsed and expanded
8477
+ return mergeEventStores(eventStore, action.eventStore);
8478
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
8479
+ case 'NEXT':
8480
+ case 'CHANGE_DATE':
8481
+ case 'CHANGE_VIEW_TYPE':
8482
+ if (dateProfile) {
8483
+ return expandRecurring(eventStore, dateProfile.activeRange, context);
8484
+ }
8485
+ return eventStore;
8486
+ case 'REMOVE_EVENTS':
8487
+ return excludeSubEventStore(eventStore, action.eventStore);
8488
+ case 'REMOVE_EVENT_SOURCE':
8489
+ return excludeEventsBySourceId(eventStore, action.sourceId);
8490
+ case 'REMOVE_ALL_EVENT_SOURCES':
8491
+ return filterEventStoreDefs(eventStore, function (eventDef) { return (!eventDef.sourceId // only keep events with no source id
8492
+ ); });
8493
+ case 'REMOVE_ALL_EVENTS':
8494
+ return createEmptyEventStore();
8495
+ default:
8496
+ return eventStore;
8497
+ }
8498
+ }
8499
+ function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
8500
+ if (eventSource && // not already removed
8501
+ fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
8502
+ ) {
8503
+ var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
8504
+ if (fetchRange) {
8505
+ subset = expandRecurring(subset, fetchRange, context);
8506
+ }
8507
+ return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
8508
+ }
8509
+ return eventStore;
8510
+ }
8511
+ function transformRawEvents(rawEvents, eventSource, context) {
8512
+ var calEachTransform = context.options.eventDataTransform;
8513
+ var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
8514
+ if (sourceEachTransform) {
8515
+ rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
8516
+ }
8517
+ if (calEachTransform) {
8518
+ rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
8519
+ }
8520
+ return rawEvents;
8521
+ }
8522
+ function transformEachRawEvent(rawEvents, func) {
8523
+ var refinedEvents;
8524
+ if (!func) {
8525
+ refinedEvents = rawEvents;
8526
+ }
8527
+ else {
8528
+ refinedEvents = [];
8529
+ for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
8530
+ var rawEvent = rawEvents_1[_i];
8531
+ var refinedEvent = func(rawEvent);
8532
+ if (refinedEvent) {
8533
+ refinedEvents.push(refinedEvent);
8534
+ }
8535
+ else if (refinedEvent == null) {
8536
+ refinedEvents.push(rawEvent);
8537
+ } // if a different falsy value, do nothing
8538
+ }
8539
+ }
8540
+ return refinedEvents;
8522
8541
  }
8523
- function parseInitialSources(rawOptions, context) {
8524
- var refiners = buildEventSourceRefiners(context);
8525
- var rawSources = [].concat(rawOptions.eventSources || []);
8526
- var sources = []; // parsed
8527
- if (rawOptions.initialEvents) {
8528
- rawSources.unshift(rawOptions.initialEvents);
8529
- }
8530
- if (rawOptions.events) {
8531
- rawSources.unshift(rawOptions.events);
8542
+ function addEvent(eventStore, subset, expandRange, context) {
8543
+ if (expandRange) {
8544
+ subset = expandRecurring(subset, expandRange, context);
8532
8545
  }
8533
- for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
8534
- var rawSource = rawSources_1[_i];
8535
- var source = parseEventSource(rawSource, context, refiners);
8536
- if (source) {
8537
- sources.push(source);
8546
+ return mergeEventStores(eventStore, subset);
8547
+ }
8548
+ function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
8549
+ var defs = eventStore.defs;
8550
+ var instances = mapHash(eventStore.instances, function (instance) {
8551
+ var def = defs[instance.defId];
8552
+ if (def.allDay || def.recurringDef) {
8553
+ return instance; // isn't dependent on timezone
8538
8554
  }
8539
- }
8540
- return sources;
8555
+ return __assign(__assign({}, instance), { range: {
8556
+ start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
8557
+ end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
8558
+ }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
8559
+ });
8560
+ return { defs: defs, instances: instances };
8541
8561
  }
8542
- function doesSourceNeedRange(eventSource, context) {
8543
- var defs = context.pluginHooks.eventSourceDefs;
8544
- return !defs[eventSource.sourceDefId].ignoreRange;
8562
+ function excludeEventsBySourceId(eventStore, sourceId) {
8563
+ return filterEventStoreDefs(eventStore, function (eventDef) { return eventDef.sourceId !== sourceId; });
8564
+ }
8565
+ // QUESTION: why not just return instances? do a general object-property-exclusion util
8566
+ function excludeInstances(eventStore, removals) {
8567
+ return {
8568
+ defs: eventStore.defs,
8569
+ instances: filterHash(eventStore.instances, function (instance) { return !removals[instance.instanceId]; }),
8570
+ };
8545
8571
  }
8546
8572
 
8547
8573
  function reduceDateSelection(currentSelection, action) {
@@ -8601,25 +8627,41 @@ function reduceEventResize(currentResize, action) {
8601
8627
  }
8602
8628
 
8603
8629
  function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
8604
- var viewsWithButtons = [];
8605
- var headerToolbar = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
8606
- var footerToolbar = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
8607
- return { headerToolbar: headerToolbar, footerToolbar: footerToolbar, viewsWithButtons: viewsWithButtons };
8630
+ var header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
8631
+ var footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
8632
+ return { header: header, footer: footer };
8608
8633
  }
8609
- function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
8610
- return mapHash(sectionStrHash, function (sectionStr) { return parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons); });
8634
+ function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
8635
+ var sectionWidgets = {};
8636
+ var viewsWithButtons = [];
8637
+ var hasTitle = false;
8638
+ for (var sectionName in sectionStrHash) {
8639
+ var sectionStr = sectionStrHash[sectionName];
8640
+ var sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
8641
+ sectionWidgets[sectionName] = sectionRes.widgets;
8642
+ viewsWithButtons.push.apply(viewsWithButtons, sectionRes.viewsWithButtons);
8643
+ hasTitle = hasTitle || sectionRes.hasTitle;
8644
+ }
8645
+ return { sectionWidgets: sectionWidgets, viewsWithButtons: viewsWithButtons, hasTitle: hasTitle };
8611
8646
  }
8612
8647
  /*
8613
8648
  BAD: querying icons and text here. should be done at render time
8614
8649
  */
8615
- function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
8650
+ function parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined
8651
+ calendarOptionOverrides, // overrides only!, unrefined :(
8652
+ theme, viewSpecs, calendarApi) {
8616
8653
  var isRtl = calendarOptions.direction === 'rtl';
8617
8654
  var calendarCustomButtons = calendarOptions.customButtons || {};
8618
8655
  var calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
8619
8656
  var calendarButtonText = calendarOptions.buttonText || {};
8657
+ var calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};
8658
+ var calendarButtonHints = calendarOptions.buttonHints || {};
8620
8659
  var sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
8621
- return sectionSubstrs.map(function (buttonGroupStr) { return (buttonGroupStr.split(',').map(function (buttonName) {
8660
+ var viewsWithButtons = [];
8661
+ var hasTitle = false;
8662
+ var widgets = sectionSubstrs.map(function (buttonGroupStr) { return (buttonGroupStr.split(',').map(function (buttonName) {
8622
8663
  if (buttonName === 'title') {
8664
+ hasTitle = true;
8623
8665
  return { buttonName: buttonName };
8624
8666
  }
8625
8667
  var customButtonProps;
@@ -8627,15 +8669,18 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8627
8669
  var buttonClick;
8628
8670
  var buttonIcon; // only one of these will be set
8629
8671
  var buttonText; // "
8672
+ var buttonHint;
8673
+ // ^ for the title="" attribute, for accessibility
8630
8674
  if ((customButtonProps = calendarCustomButtons[buttonName])) {
8631
8675
  buttonClick = function (ev) {
8632
8676
  if (customButtonProps.click) {
8633
- customButtonProps.click.call(ev.target, ev, ev.target);
8677
+ customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?
8634
8678
  }
8635
8679
  };
8636
8680
  (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
8637
8681
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8638
8682
  (buttonText = customButtonProps.text);
8683
+ buttonHint = customButtonProps.hint || customButtonProps.text;
8639
8684
  }
8640
8685
  else if ((viewSpec = viewSpecs[buttonName])) {
8641
8686
  viewsWithButtons.push(buttonName);
@@ -8645,6 +8690,12 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8645
8690
  (buttonText = viewSpec.buttonTextOverride) ||
8646
8691
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8647
8692
  (buttonText = viewSpec.buttonTextDefault);
8693
+ var textFallback = viewSpec.buttonTextOverride ||
8694
+ viewSpec.buttonTextDefault;
8695
+ buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||
8696
+ viewSpec.buttonTitleDefault ||
8697
+ calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName
8698
+ textFallback);
8648
8699
  }
8649
8700
  else if (calendarApi[buttonName]) { // a calendarApi method
8650
8701
  buttonClick = function () {
@@ -8652,14 +8703,29 @@ function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, them
8652
8703
  };
8653
8704
  (buttonText = calendarButtonTextOverrides[buttonName]) ||
8654
8705
  (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
8655
- (buttonText = calendarButtonText[buttonName]);
8656
- // ^ everything else is considered default
8706
+ (buttonText = calendarButtonText[buttonName]); // everything else is considered default
8707
+ if (buttonName === 'prevYear' || buttonName === 'nextYear') {
8708
+ var prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';
8709
+ buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
8710
+ calendarButtonHints[prevOrNext], [
8711
+ calendarButtonText.year || 'year',
8712
+ 'year',
8713
+ ], calendarButtonText[buttonName]);
8714
+ }
8715
+ else {
8716
+ buttonHint = function (navUnit) { return formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
8717
+ calendarButtonHints[buttonName], [
8718
+ calendarButtonText[navUnit] || navUnit,
8719
+ navUnit,
8720
+ ], calendarButtonText[buttonName]); };
8721
+ }
8657
8722
  }
8658
- return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText };
8723
+ return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText, buttonHint: buttonHint };
8659
8724
  })); });
8725
+ return { widgets: widgets, viewsWithButtons: viewsWithButtons, hasTitle: hasTitle };
8660
8726
  }
8661
8727
 
8662
- var eventSourceDef = {
8728
+ var eventSourceDef$2 = {
8663
8729
  ignoreRange: true,
8664
8730
  parseMeta: function (refined) {
8665
8731
  if (Array.isArray(refined.events)) {
@@ -8674,7 +8740,7 @@ var eventSourceDef = {
8674
8740
  },
8675
8741
  };
8676
8742
  var arrayEventSourcePlugin = createPlugin({
8677
- eventSourceDefs: [eventSourceDef],
8743
+ eventSourceDefs: [eventSourceDef$2],
8678
8744
  });
8679
8745
 
8680
8746
  var eventSourceDef$1 = {
@@ -8758,11 +8824,12 @@ var JSON_FEED_EVENT_SOURCE_REFINERS = {
8758
8824
  timeZoneParam: String,
8759
8825
  };
8760
8826
 
8761
- var eventSourceDef$2 = {
8827
+ var eventSourceDef = {
8762
8828
  parseMeta: function (refined) {
8763
- if (refined.url) {
8829
+ if (refined.url && (refined.format === 'json' || !refined.format)) {
8764
8830
  return {
8765
8831
  url: refined.url,
8832
+ format: 'json',
8766
8833
  method: (refined.method || 'GET').toUpperCase(),
8767
8834
  extraParams: refined.extraParams,
8768
8835
  startParam: refined.startParam,
@@ -8784,7 +8851,7 @@ var eventSourceDef$2 = {
8784
8851
  };
8785
8852
  var jsonFeedEventSourcePlugin = createPlugin({
8786
8853
  eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
8787
- eventSourceDefs: [eventSourceDef$2],
8854
+ eventSourceDefs: [eventSourceDef],
8788
8855
  });
8789
8856
  function buildRequestParams(meta, range, context) {
8790
8857
  var dateEnv = context.dateEnv, options = context.options;
@@ -8852,7 +8919,7 @@ var recurring = {
8852
8919
  return {
8853
8920
  allDayGuess: Boolean(!refined.startTime && !refined.endTime),
8854
8921
  duration: duration,
8855
- typeData: recurringData,
8922
+ typeData: recurringData, // doesn't need endTime anymore but oh well
8856
8923
  };
8857
8924
  }
8858
8925
  return null;
@@ -8956,9 +9023,12 @@ var globalPlugins = [
8956
9023
  simpleRecurringEventsPlugin,
8957
9024
  changeHandlerPlugin,
8958
9025
  createPlugin({
9026
+ isLoadingFuncs: [
9027
+ function (state) { return computeEventSourcesLoading(state.eventSources); },
9028
+ ],
8959
9029
  contentTypeHandlers: {
8960
- html: function () { return ({ render: injectHtml }); },
8961
- domNodes: function () { return ({ render: injectDomNodes }); },
9030
+ html: buildHtmlRenderer,
9031
+ domNodes: buildDomNodeRenderer,
8962
9032
  },
8963
9033
  propSetHandlers: {
8964
9034
  dateProfile: handleDateProfile,
@@ -8966,19 +9036,45 @@ var globalPlugins = [
8966
9036
  },
8967
9037
  }),
8968
9038
  ];
8969
- function injectHtml(el, html) {
8970
- el.innerHTML = html;
9039
+ function buildHtmlRenderer() {
9040
+ var currentEl = null;
9041
+ var currentHtml = '';
9042
+ function render(el, html) {
9043
+ if (el !== currentEl || html !== currentHtml) {
9044
+ el.innerHTML = html;
9045
+ }
9046
+ currentEl = el;
9047
+ currentHtml = html;
9048
+ }
9049
+ function destroy() {
9050
+ currentEl.innerHTML = '';
9051
+ currentEl = null;
9052
+ currentHtml = '';
9053
+ }
9054
+ return { render: render, destroy: destroy };
8971
9055
  }
8972
- function injectDomNodes(el, domNodes) {
8973
- var oldNodes = Array.prototype.slice.call(el.childNodes); // TODO: use array util
8974
- var newNodes = Array.prototype.slice.call(domNodes); // TODO: use array util
8975
- if (!isArraysEqual(oldNodes, newNodes)) {
8976
- for (var _i = 0, newNodes_1 = newNodes; _i < newNodes_1.length; _i++) {
8977
- var newNode = newNodes_1[_i];
8978
- el.appendChild(newNode);
9056
+ function buildDomNodeRenderer() {
9057
+ var currentEl = null;
9058
+ var currentDomNodes = [];
9059
+ function render(el, domNodes) {
9060
+ var newDomNodes = Array.prototype.slice.call(domNodes);
9061
+ if (el !== currentEl || !isArraysEqual(currentDomNodes, newDomNodes)) {
9062
+ // append first, remove second (for scroll resetting)
9063
+ for (var _i = 0, newDomNodes_1 = newDomNodes; _i < newDomNodes_1.length; _i++) {
9064
+ var newNode = newDomNodes_1[_i];
9065
+ el.appendChild(newNode);
9066
+ }
9067
+ destroy();
8979
9068
  }
8980
- oldNodes.forEach(removeElement);
9069
+ currentEl = el;
9070
+ currentDomNodes = newDomNodes;
8981
9071
  }
9072
+ function destroy() {
9073
+ currentDomNodes.forEach(removeElement);
9074
+ currentDomNodes = [];
9075
+ currentEl = null;
9076
+ }
9077
+ return { render: render, destroy: destroy };
8982
9078
  }
8983
9079
 
8984
9080
  var DelayedRunner = /** @class */ (function () {
@@ -9143,7 +9239,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9143
9239
  this.organizeRawLocales = memoize(organizeRawLocales);
9144
9240
  this.buildLocale = memoize(buildLocale);
9145
9241
  this.buildPluginHooks = buildBuildPluginHooks();
9146
- this.buildDateEnv = memoize(buildDateEnv$1);
9242
+ this.buildDateEnv = memoize(buildDateEnv);
9147
9243
  this.buildTheme = memoize(buildTheme);
9148
9244
  this.parseToolbars = memoize(parseToolbars);
9149
9245
  this.buildViewSpecs = memoize(buildViewSpecs);
@@ -9205,7 +9301,6 @@ var main_CalendarDataManager = /** @class */ (function () {
9205
9301
  businessHours: this.parseContextBusinessHours(calendarContext),
9206
9302
  eventSources: eventSources,
9207
9303
  eventUiBases: {},
9208
- loadingLevel: computeEventSourceLoadingLevel(eventSources),
9209
9304
  eventStore: createEmptyEventStore(),
9210
9305
  renderableEventStore: createEmptyEventStore(),
9211
9306
  dateSelection: null,
@@ -9219,7 +9314,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9219
9314
  var reducer = _c[_b];
9220
9315
  __assign(initialState, reducer(null, null, contextAndState));
9221
9316
  }
9222
- if (initialState.loadingLevel) {
9317
+ if (computeIsLoading(initialState, calendarContext)) {
9223
9318
  this.emitter.trigger('loading', true); // NOT DRY
9224
9319
  }
9225
9320
  this.state = initialState;
@@ -9260,20 +9355,20 @@ var main_CalendarDataManager = /** @class */ (function () {
9260
9355
  }
9261
9356
  currentDate = reduceCurrentDate(currentDate, action);
9262
9357
  dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
9263
- if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
9358
+ if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
9359
+ action.type === 'NEXT' || // "
9360
+ !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
9264
9361
  currentDate = dateProfile.currentRange.start;
9265
9362
  }
9266
9363
  var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
9267
- var eventSourceLoadingLevel = computeEventSourceLoadingLevel(eventSources);
9268
9364
  var eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
9269
- var renderableEventStore = (eventSourceLoadingLevel && !currentViewData.options.progressiveEventRendering) ?
9365
+ var isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
9366
+ var renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
9270
9367
  (state.renderableEventStore || eventStore) : // try from previous state
9271
9368
  eventStore;
9272
9369
  var _b = this.buildViewUiProps(calendarContext), eventUiSingleBase = _b.eventUiSingleBase, selectionConfig = _b.selectionConfig; // will memoize obj
9273
9370
  var eventUiBySource = this.buildEventUiBySource(eventSources);
9274
9371
  var eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
9275
- var prevLoadingLevel = state.loadingLevel || 0;
9276
- var loadingLevel = eventSourceLoadingLevel;
9277
9372
  var newState = {
9278
9373
  dynamicOptionOverrides: dynamicOptionOverrides,
9279
9374
  currentViewType: currentViewType,
@@ -9284,7 +9379,6 @@ var main_CalendarDataManager = /** @class */ (function () {
9284
9379
  renderableEventStore: renderableEventStore,
9285
9380
  selectionConfig: selectionConfig,
9286
9381
  eventUiBases: eventUiBases,
9287
- loadingLevel: loadingLevel,
9288
9382
  businessHours: this.parseContextBusinessHours(calendarContext),
9289
9383
  dateSelection: reduceDateSelection(state.dateSelection, action),
9290
9384
  eventSelection: reduceSelectedEvent(state.eventSelection, action),
@@ -9296,11 +9390,13 @@ var main_CalendarDataManager = /** @class */ (function () {
9296
9390
  var reducer = _c[_i];
9297
9391
  __assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
9298
9392
  }
9393
+ var wasLoading = computeIsLoading(state, calendarContext);
9394
+ var isLoading = computeIsLoading(newState, calendarContext);
9299
9395
  // TODO: use propSetHandlers in plugin system
9300
- if (!prevLoadingLevel && loadingLevel) {
9396
+ if (!wasLoading && isLoading) {
9301
9397
  emitter.trigger('loading', true);
9302
9398
  }
9303
- else if (prevLoadingLevel && !loadingLevel) {
9399
+ else if (wasLoading && !isLoading) {
9304
9400
  emitter.trigger('loading', false);
9305
9401
  }
9306
9402
  this.state = newState;
@@ -9482,7 +9578,7 @@ var main_CalendarDataManager = /** @class */ (function () {
9482
9578
  };
9483
9579
  return CalendarDataManager;
9484
9580
  }());
9485
- function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
9581
+ function buildDateEnv(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
9486
9582
  var locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
9487
9583
  return new DateEnv({
9488
9584
  calendarSystem: 'gregory',
@@ -9535,6 +9631,7 @@ function buildViewUiProps(calendarContext) {
9535
9631
  borderColor: options.eventBorderColor,
9536
9632
  textColor: options.eventTextColor,
9537
9633
  color: options.eventColor,
9634
+ // classNames: options.eventClassNames // render hook will handle this
9538
9635
  }, calendarContext),
9539
9636
  selectionConfig: createEventUi({
9540
9637
  constraint: options.selectConstraint,
@@ -9543,6 +9640,15 @@ function buildViewUiProps(calendarContext) {
9543
9640
  }, calendarContext),
9544
9641
  };
9545
9642
  }
9643
+ function computeIsLoading(state, context) {
9644
+ for (var _i = 0, _a = context.pluginHooks.isLoadingFuncs; _i < _a.length; _i++) {
9645
+ var isLoadingFunc = _a[_i];
9646
+ if (isLoadingFunc(state)) {
9647
+ return true;
9648
+ }
9649
+ }
9650
+ return false;
9651
+ }
9546
9652
  function parseContextBusinessHours(calendarContext) {
9547
9653
  return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
9548
9654
  }
@@ -9602,9 +9708,248 @@ var NamedTimeZoneImpl = /** @class */ (function () {
9602
9708
  return NamedTimeZoneImpl;
9603
9709
  }());
9604
9710
 
9711
+ var main_SegHierarchy = /** @class */ (function () {
9712
+ function SegHierarchy() {
9713
+ // settings
9714
+ this.strictOrder = false;
9715
+ this.allowReslicing = false;
9716
+ this.maxCoord = -1; // -1 means no max
9717
+ this.maxStackCnt = -1; // -1 means no max
9718
+ this.levelCoords = []; // ordered
9719
+ this.entriesByLevel = []; // parallel with levelCoords
9720
+ this.stackCnts = {}; // TODO: use better technique!?
9721
+ }
9722
+ SegHierarchy.prototype.addSegs = function (inputs) {
9723
+ var hiddenEntries = [];
9724
+ for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
9725
+ var input = inputs_1[_i];
9726
+ this.insertEntry(input, hiddenEntries);
9727
+ }
9728
+ return hiddenEntries;
9729
+ };
9730
+ SegHierarchy.prototype.insertEntry = function (entry, hiddenEntries) {
9731
+ var insertion = this.findInsertion(entry);
9732
+ if (this.isInsertionValid(insertion, entry)) {
9733
+ this.insertEntryAt(entry, insertion);
9734
+ return 1;
9735
+ }
9736
+ return this.handleInvalidInsertion(insertion, entry, hiddenEntries);
9737
+ };
9738
+ SegHierarchy.prototype.isInsertionValid = function (insertion, entry) {
9739
+ return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&
9740
+ (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
9741
+ };
9742
+ // returns number of new entries inserted
9743
+ SegHierarchy.prototype.handleInvalidInsertion = function (insertion, entry, hiddenEntries) {
9744
+ if (this.allowReslicing && insertion.touchingEntry) {
9745
+ return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
9746
+ }
9747
+ hiddenEntries.push(entry);
9748
+ return 0;
9749
+ };
9750
+ SegHierarchy.prototype.splitEntry = function (entry, barrier, hiddenEntries) {
9751
+ var partCnt = 0;
9752
+ var splitHiddenEntries = [];
9753
+ var entrySpan = entry.span;
9754
+ var barrierSpan = barrier.span;
9755
+ if (entrySpan.start < barrierSpan.start) {
9756
+ partCnt += this.insertEntry({
9757
+ index: entry.index,
9758
+ thickness: entry.thickness,
9759
+ span: { start: entrySpan.start, end: barrierSpan.start },
9760
+ }, splitHiddenEntries);
9761
+ }
9762
+ if (entrySpan.end > barrierSpan.end) {
9763
+ partCnt += this.insertEntry({
9764
+ index: entry.index,
9765
+ thickness: entry.thickness,
9766
+ span: { start: barrierSpan.end, end: entrySpan.end },
9767
+ }, splitHiddenEntries);
9768
+ }
9769
+ if (partCnt) {
9770
+ hiddenEntries.push.apply(hiddenEntries, __spreadArray([{
9771
+ index: entry.index,
9772
+ thickness: entry.thickness,
9773
+ span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect
9774
+ }], splitHiddenEntries));
9775
+ return partCnt;
9776
+ }
9777
+ hiddenEntries.push(entry);
9778
+ return 0;
9779
+ };
9780
+ SegHierarchy.prototype.insertEntryAt = function (entry, insertion) {
9781
+ var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
9782
+ if (insertion.lateral === -1) {
9783
+ // create a new level
9784
+ insertAt(levelCoords, insertion.level, insertion.levelCoord);
9785
+ insertAt(entriesByLevel, insertion.level, [entry]);
9786
+ }
9787
+ else {
9788
+ // insert into existing level
9789
+ insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
9790
+ }
9791
+ this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
9792
+ };
9793
+ SegHierarchy.prototype.findInsertion = function (newEntry) {
9794
+ var _a = this, levelCoords = _a.levelCoords, entriesByLevel = _a.entriesByLevel, strictOrder = _a.strictOrder, stackCnts = _a.stackCnts;
9795
+ var levelCnt = levelCoords.length;
9796
+ var candidateCoord = 0;
9797
+ var touchingLevel = -1;
9798
+ var touchingLateral = -1;
9799
+ var touchingEntry = null;
9800
+ var stackCnt = 0;
9801
+ for (var trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
9802
+ var trackingCoord = levelCoords[trackingLevel];
9803
+ // if the current level is past the placed entry, we have found a good empty space and can stop.
9804
+ // if strictOrder, keep finding more lateral intersections.
9805
+ if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {
9806
+ break;
9807
+ }
9808
+ var trackingEntries = entriesByLevel[trackingLevel];
9809
+ var trackingEntry = void 0;
9810
+ var searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
9811
+ var lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
9812
+ while ( // loop through entries that horizontally intersect
9813
+ (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
9814
+ trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
9815
+ ) {
9816
+ var trackingEntryBottom = trackingCoord + trackingEntry.thickness;
9817
+ // intersects into the top of the candidate?
9818
+ if (trackingEntryBottom > candidateCoord) {
9819
+ candidateCoord = trackingEntryBottom;
9820
+ touchingEntry = trackingEntry;
9821
+ touchingLevel = trackingLevel;
9822
+ touchingLateral = lateralIndex;
9823
+ }
9824
+ // butts up against top of candidate? (will happen if just intersected as well)
9825
+ if (trackingEntryBottom === candidateCoord) {
9826
+ // accumulate the highest possible stackCnt of the trackingEntries that butt up
9827
+ stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
9828
+ }
9829
+ lateralIndex += 1;
9830
+ }
9831
+ }
9832
+ // the destination level will be after touchingEntry's level. find it
9833
+ var destLevel = 0;
9834
+ if (touchingEntry) {
9835
+ destLevel = touchingLevel + 1;
9836
+ while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
9837
+ destLevel += 1;
9838
+ }
9839
+ }
9840
+ // if adding to an existing level, find where to insert
9841
+ var destLateral = -1;
9842
+ if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
9843
+ destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
9844
+ }
9845
+ return {
9846
+ touchingLevel: touchingLevel,
9847
+ touchingLateral: touchingLateral,
9848
+ touchingEntry: touchingEntry,
9849
+ stackCnt: stackCnt,
9850
+ levelCoord: candidateCoord,
9851
+ level: destLevel,
9852
+ lateral: destLateral,
9853
+ };
9854
+ };
9855
+ // sorted by levelCoord (lowest to highest)
9856
+ SegHierarchy.prototype.toRects = function () {
9857
+ var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
9858
+ var levelCnt = entriesByLevel.length;
9859
+ var rects = [];
9860
+ for (var level = 0; level < levelCnt; level += 1) {
9861
+ var entries = entriesByLevel[level];
9862
+ var levelCoord = levelCoords[level];
9863
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
9864
+ var entry = entries_1[_i];
9865
+ rects.push(__assign(__assign({}, entry), { levelCoord: levelCoord }));
9866
+ }
9867
+ }
9868
+ return rects;
9869
+ };
9870
+ return SegHierarchy;
9871
+ }());
9872
+ function getEntrySpanEnd(entry) {
9873
+ return entry.span.end;
9874
+ }
9875
+ function buildEntryKey(entry) {
9876
+ return entry.index + ':' + entry.span.start;
9877
+ }
9878
+ // returns groups with entries sorted by input order
9879
+ function groupIntersectingEntries(entries) {
9880
+ var merges = [];
9881
+ for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
9882
+ var entry = entries_2[_i];
9883
+ var filteredMerges = [];
9884
+ var hungryMerge = {
9885
+ span: entry.span,
9886
+ entries: [entry],
9887
+ };
9888
+ for (var _a = 0, merges_1 = merges; _a < merges_1.length; _a++) {
9889
+ var merge = merges_1[_a];
9890
+ if (intersectSpans(merge.span, hungryMerge.span)) {
9891
+ hungryMerge = {
9892
+ entries: merge.entries.concat(hungryMerge.entries),
9893
+ span: joinSpans(merge.span, hungryMerge.span),
9894
+ };
9895
+ }
9896
+ else {
9897
+ filteredMerges.push(merge);
9898
+ }
9899
+ }
9900
+ filteredMerges.push(hungryMerge);
9901
+ merges = filteredMerges;
9902
+ }
9903
+ return merges;
9904
+ }
9905
+ function joinSpans(span0, span1) {
9906
+ return {
9907
+ start: Math.min(span0.start, span1.start),
9908
+ end: Math.max(span0.end, span1.end),
9909
+ };
9910
+ }
9911
+ function intersectSpans(span0, span1) {
9912
+ var start = Math.max(span0.start, span1.start);
9913
+ var end = Math.min(span0.end, span1.end);
9914
+ if (start < end) {
9915
+ return { start: start, end: end };
9916
+ }
9917
+ return null;
9918
+ }
9919
+ // general util
9920
+ // ---------------------------------------------------------------------------------------------------------------------
9921
+ function insertAt(arr, index, item) {
9922
+ arr.splice(index, 0, item);
9923
+ }
9924
+ function binarySearch(a, searchVal, getItemVal) {
9925
+ var startIndex = 0;
9926
+ var endIndex = a.length; // exclusive
9927
+ if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item
9928
+ return [0, 0];
9929
+ }
9930
+ if (searchVal > getItemVal(a[endIndex - 1])) { // after last item
9931
+ return [endIndex, 0];
9932
+ }
9933
+ while (startIndex < endIndex) {
9934
+ var middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
9935
+ var middleVal = getItemVal(a[middleIndex]);
9936
+ if (searchVal < middleVal) {
9937
+ endIndex = middleIndex;
9938
+ }
9939
+ else if (searchVal > middleVal) {
9940
+ startIndex = middleIndex + 1;
9941
+ }
9942
+ else { // equal!
9943
+ return [middleIndex, 1];
9944
+ }
9945
+ }
9946
+ return [startIndex, 0];
9947
+ }
9948
+
9605
9949
  var Interaction = /** @class */ (function () {
9606
9950
  function Interaction(settings) {
9607
9951
  this.component = settings.component;
9952
+ this.isHitComboAllowed = settings.isHitComboAllowed || null;
9608
9953
  }
9609
9954
  Interaction.prototype.destroy = function () {
9610
9955
  };
@@ -9615,6 +9960,7 @@ function parseInteractionSettings(component, input) {
9615
9960
  component: component,
9616
9961
  el: input.el,
9617
9962
  useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
9963
+ isHitComboAllowed: input.isHitComboAllowed || null,
9618
9964
  };
9619
9965
  }
9620
9966
  function interactionSettingsToStore(settings) {
@@ -9690,7 +10036,7 @@ var main_ToolbarSection = /** @class */ (function (_super) {
9690
10036
  ToolbarSection.prototype.render = function () {
9691
10037
  var _this = this;
9692
10038
  var children = this.props.widgetGroups.map(function (widgetGroup) { return _this.renderWidgetGroup(widgetGroup); });
9693
- return createElement.apply(void 0, __spreadArrays(['div', { className: 'fc-toolbar-chunk' }], children));
10039
+ return createElement.apply(void 0, __spreadArray(['div', { className: 'fc-toolbar-chunk' }], children));
9694
10040
  };
9695
10041
  ToolbarSection.prototype.renderWidgetGroup = function (widgetGroup) {
9696
10042
  var props = this.props;
@@ -9699,26 +10045,26 @@ var main_ToolbarSection = /** @class */ (function (_super) {
9699
10045
  var isOnlyButtons = true;
9700
10046
  for (var _i = 0, widgetGroup_1 = widgetGroup; _i < widgetGroup_1.length; _i++) {
9701
10047
  var widget = widgetGroup_1[_i];
9702
- var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon;
10048
+ var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon, buttonHint = widget.buttonHint;
9703
10049
  if (buttonName === 'title') {
9704
10050
  isOnlyButtons = false;
9705
- children.push(createElement("h2", { className: "fc-toolbar-title" }, props.title));
10051
+ children.push(createElement("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
9706
10052
  }
9707
10053
  else {
9708
- var ariaAttrs = buttonIcon ? { 'aria-label': buttonName } : {};
9709
- var buttonClasses = ["fc-" + buttonName + "-button", theme.getClass('button')];
9710
- if (buttonName === props.activeButton) {
9711
- buttonClasses.push(theme.getClass('buttonActive'));
9712
- }
10054
+ var isPressed = buttonName === props.activeButton;
9713
10055
  var isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
9714
10056
  (!props.isPrevEnabled && buttonName === 'prev') ||
9715
10057
  (!props.isNextEnabled && buttonName === 'next');
9716
- children.push(createElement("button", __assign({ disabled: isDisabled, className: buttonClasses.join(' '), onClick: buttonClick, type: "button" }, ariaAttrs), buttonText || (buttonIcon ? createElement("span", { className: buttonIcon }) : '')));
10058
+ var buttonClasses = ["fc-" + buttonName + "-button", theme.getClass('button')];
10059
+ if (isPressed) {
10060
+ buttonClasses.push(theme.getClass('buttonActive'));
10061
+ }
10062
+ 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 }) : '')));
9717
10063
  }
9718
10064
  }
9719
10065
  if (children.length > 1) {
9720
10066
  var groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
9721
- return createElement.apply(void 0, __spreadArrays(['div', { className: groupClassName }], children));
10067
+ return createElement.apply(void 0, __spreadArray(['div', { className: groupClassName }], children));
9722
10068
  }
9723
10069
  return children[0];
9724
10070
  };
@@ -9735,20 +10081,21 @@ var main_Toolbar = /** @class */ (function (_super) {
9735
10081
  var forceLtr = false;
9736
10082
  var startContent;
9737
10083
  var endContent;
9738
- var centerContent = model.center;
9739
- if (model.left) {
10084
+ var sectionWidgets = model.sectionWidgets;
10085
+ var centerContent = sectionWidgets.center;
10086
+ if (sectionWidgets.left) {
9740
10087
  forceLtr = true;
9741
- startContent = model.left;
10088
+ startContent = sectionWidgets.left;
9742
10089
  }
9743
10090
  else {
9744
- startContent = model.start;
10091
+ startContent = sectionWidgets.start;
9745
10092
  }
9746
- if (model.right) {
10093
+ if (sectionWidgets.right) {
9747
10094
  forceLtr = true;
9748
- endContent = model.right;
10095
+ endContent = sectionWidgets.right;
9749
10096
  }
9750
10097
  else {
9751
- endContent = model.end;
10098
+ endContent = sectionWidgets.end;
9752
10099
  }
9753
10100
  var classNames = [
9754
10101
  extraClassName || '',
@@ -9762,7 +10109,7 @@ var main_Toolbar = /** @class */ (function (_super) {
9762
10109
  };
9763
10110
  Toolbar.prototype.renderSection = function (key, widgetGroups) {
9764
10111
  var props = this.props;
9765
- return (createElement(main_ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
10112
+ 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 }));
9766
10113
  };
9767
10114
  return Toolbar;
9768
10115
  }(main_BaseComponent));
@@ -9792,7 +10139,7 @@ var main_ViewContainer = /** @class */ (function (_super) {
9792
10139
  'fc-view-harness',
9793
10140
  (aspectRatio || props.liquid || props.height)
9794
10141
  ? 'fc-view-harness-active' // harness controls the height
9795
- : 'fc-view-harness-passive',
10142
+ : 'fc-view-harness-passive', // let the view do the height
9796
10143
  ];
9797
10144
  var height = '';
9798
10145
  var paddingBottom = '';
@@ -9811,7 +10158,7 @@ var main_ViewContainer = /** @class */ (function (_super) {
9811
10158
  else {
9812
10159
  height = props.height || '';
9813
10160
  }
9814
- return (createElement("div", { ref: this.handleEl, onClick: props.onClick, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
10161
+ return (createElement("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
9815
10162
  };
9816
10163
  ViewContainer.prototype.componentDidMount = function () {
9817
10164
  this.context.addResizeHandler(this.handleResize);
@@ -9920,10 +10267,13 @@ var main_CalendarContent = /** @class */ (function (_super) {
9920
10267
  _this.buildViewContext = memoize(buildViewContext);
9921
10268
  _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
9922
10269
  _this.buildToolbarProps = memoize(buildToolbarProps);
9923
- _this.handleNavLinkClick = buildDelegationHandler('a[data-navlink]', _this._handleNavLinkClick.bind(_this));
9924
10270
  _this.headerRef = createRef();
9925
10271
  _this.footerRef = createRef();
9926
10272
  _this.interactionsStore = {};
10273
+ // eslint-disable-next-line
10274
+ _this.state = {
10275
+ viewLabelId: getUniqueDomId(),
10276
+ };
9927
10277
  // Component Registration
9928
10278
  // -----------------------------------------------------------------------------------------------------------------
9929
10279
  _this.registerInteractiveComponent = function (component, settingsInput) {
@@ -9985,12 +10335,15 @@ var main_CalendarContent = /** @class */ (function (_super) {
9985
10335
  viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
9986
10336
  }
9987
10337
  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);
10338
+ var viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)
10339
+ ? this.state.viewLabelId
10340
+ : '';
9988
10341
  return (createElement(ViewContextType.Provider, { value: viewContext },
9989
- toolbarConfig.headerToolbar && (createElement(main_Toolbar, __assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.headerToolbar }, toolbarProps))),
9990
- createElement(main_ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, onClick: this.handleNavLinkClick },
10342
+ toolbarConfig.header && (createElement(main_Toolbar, __assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
10343
+ createElement(main_ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
9991
10344
  this.renderView(props),
9992
10345
  this.buildAppendContent()),
9993
- toolbarConfig.footerToolbar && (createElement(main_Toolbar, __assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footerToolbar }, toolbarProps)))));
10346
+ toolbarConfig.footer && (createElement(main_Toolbar, __assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
9994
10347
  };
9995
10348
  CalendarContent.prototype.componentDidMount = function () {
9996
10349
  var props = this.props;
@@ -10020,28 +10373,10 @@ var main_CalendarContent = /** @class */ (function (_super) {
10020
10373
  }
10021
10374
  this.props.emitter.trigger('_unmount');
10022
10375
  };
10023
- CalendarContent.prototype._handleNavLinkClick = function (ev, anchorEl) {
10024
- var _a = this.props, dateEnv = _a.dateEnv, options = _a.options, calendarApi = _a.calendarApi;
10025
- var navLinkOptions = anchorEl.getAttribute('data-navlink');
10026
- navLinkOptions = navLinkOptions ? JSON.parse(navLinkOptions) : {};
10027
- var dateMarker = dateEnv.createMarker(navLinkOptions.date);
10028
- var viewType = navLinkOptions.type;
10029
- var customAction = viewType === 'day' ? options.navLinkDayClick :
10030
- viewType === 'week' ? options.navLinkWeekClick : null;
10031
- if (typeof customAction === 'function') {
10032
- customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
10033
- }
10034
- else {
10035
- if (typeof customAction === 'string') {
10036
- viewType = customAction;
10037
- }
10038
- calendarApi.zoomTo(dateMarker, viewType);
10039
- }
10040
- };
10041
10376
  CalendarContent.prototype.buildAppendContent = function () {
10042
10377
  var props = this.props;
10043
10378
  var children = props.pluginHooks.viewContainerAppends.map(function (buildAppendContent) { return buildAppendContent(props); });
10044
- return createElement.apply(void 0, __spreadArrays([Fragment, {}], children));
10379
+ return createElement.apply(void 0, __spreadArray([Fragment, {}], children));
10045
10380
  };
10046
10381
  CalendarContent.prototype.renderView = function (props) {
10047
10382
  var pluginHooks = props.pluginHooks;
@@ -10076,6 +10411,7 @@ function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentD
10076
10411
  return {
10077
10412
  title: title,
10078
10413
  activeButton: viewSpec.type,
10414
+ navUnit: viewSpec.singleUnit,
10079
10415
  isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
10080
10416
  isPrevEnabled: prevInfo.isValid,
10081
10417
  isNextEnabled: nextInfo.isValid,
@@ -10146,7 +10482,7 @@ function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
10146
10482
  }
10147
10483
 
10148
10484
  var CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
10149
- function renderInner(hookProps) {
10485
+ function renderInner$1(hookProps) {
10150
10486
  return hookProps.text;
10151
10487
  }
10152
10488
 
@@ -10163,11 +10499,11 @@ var main_TableDateCell = /** @class */ (function (_super) {
10163
10499
  var classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
10164
10500
  var text = dateEnv.format(date, props.dayHeaderFormat);
10165
10501
  // if colCnt is 1, we are already in a day-view and don't need a navlink
10166
- var navLinkAttrs = (options.navLinks && !dayMeta.isDisabled && props.colCnt > 1)
10167
- ? { 'data-navlink': buildNavLinkData(date), tabIndex: 0 }
10502
+ var navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)
10503
+ ? buildNavLinkAttrs(this.context, date)
10168
10504
  : {};
10169
10505
  var hookProps = __assign(__assign(__assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraHookProps), { text: text }), dayMeta);
10170
- 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),
10506
+ 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),
10171
10507
  createElement("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && (createElement("a", __assign({ ref: innerElRef, className: [
10172
10508
  'fc-col-header-cell-cushion',
10173
10509
  props.isSticky ? 'fc-sticky' : '',
@@ -10176,6 +10512,7 @@ var main_TableDateCell = /** @class */ (function (_super) {
10176
10512
  return TableDateCell;
10177
10513
  }(main_BaseComponent));
10178
10514
 
10515
+ var WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });
10179
10516
  var main_TableDowCell = /** @class */ (function (_super) {
10180
10517
  __extends(TableDowCell, _super);
10181
10518
  function TableDowCell() {
@@ -10197,9 +10534,9 @@ var main_TableDowCell = /** @class */ (function (_super) {
10197
10534
  var text = dateEnv.format(date, props.dayHeaderFormat);
10198
10535
  var hookProps = __assign(__assign(__assign(__assign({ // TODO: make this public?
10199
10536
  date: date }, dateMeta), { view: viewApi }), props.extraHookProps), { text: text });
10200
- 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),
10537
+ 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),
10201
10538
  createElement("div", { className: "fc-scrollgrid-sync-inner" },
10202
- createElement("a", { className: [
10539
+ createElement("a", { "aria-label": dateEnv.format(date, WEEKDAY_FORMAT), className: [
10203
10540
  'fc-col-header-cell-cushion',
10204
10541
  props.isSticky ? 'fc-sticky' : '',
10205
10542
  ].join(' '), ref: innerElRef }, innerContent)))); }));
@@ -10238,6 +10575,9 @@ var main_NowTimer = /** @class */ (function (_super) {
10238
10575
  var currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
10239
10576
  var nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
10240
10577
  var waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
10578
+ // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)
10579
+ // ensure no longer than a day
10580
+ waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);
10241
10581
  return {
10242
10582
  currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
10243
10583
  nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
@@ -10278,8 +10618,8 @@ var main_DayHeader = /** @class */ (function (_super) {
10278
10618
  var context = this.context;
10279
10619
  var _a = this.props, dates = _a.dates, dateProfile = _a.dateProfile, datesRepDistinctDays = _a.datesRepDistinctDays, renderIntro = _a.renderIntro;
10280
10620
  var dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
10281
- return (createElement(main_NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement("tr", null,
10282
- renderIntro && renderIntro(),
10621
+ return (createElement(main_NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement("tr", { role: "row" },
10622
+ renderIntro && renderIntro('day'),
10283
10623
  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 }))); }))); }));
10284
10624
  };
10285
10625
  return DayHeader;
@@ -10438,14 +10778,14 @@ var main_Slicer = /** @class */ (function () {
10438
10778
  extraArgs[_i - 4] = arguments[_i];
10439
10779
  }
10440
10780
  var eventUiBases = props.eventUiBases;
10441
- var eventSegs = this.sliceEventStore.apply(this, __spreadArrays([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
10781
+ var eventSegs = this.sliceEventStore.apply(this, __spreadArray([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
10442
10782
  return {
10443
- dateSelectionSegs: this.sliceDateSelection.apply(this, __spreadArrays([props.dateSelection, eventUiBases, context], extraArgs)),
10444
- businessHourSegs: this.sliceBusinessHours.apply(this, __spreadArrays([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
10783
+ dateSelectionSegs: this.sliceDateSelection.apply(this, __spreadArray([props.dateSelection, eventUiBases, context], extraArgs)),
10784
+ businessHourSegs: this.sliceBusinessHours.apply(this, __spreadArray([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
10445
10785
  fgEventSegs: eventSegs.fg,
10446
10786
  bgEventSegs: eventSegs.bg,
10447
- eventDrag: this.sliceEventDrag.apply(this, __spreadArrays([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10448
- eventResize: this.sliceEventResize.apply(this, __spreadArrays([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10787
+ eventDrag: this.sliceEventDrag.apply(this, __spreadArray([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10788
+ eventResize: this.sliceEventResize.apply(this, __spreadArray([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
10449
10789
  eventSelection: props.eventSelection,
10450
10790
  }; // TODO: give interactionSegs?
10451
10791
  };
@@ -10455,7 +10795,7 @@ var main_Slicer = /** @class */ (function () {
10455
10795
  for (var _i = 2; _i < arguments.length; _i++) {
10456
10796
  extraArgs[_i - 2] = arguments[_i];
10457
10797
  }
10458
- return this._sliceDateSpan.apply(this, __spreadArrays([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
10798
+ return this._sliceDateSpan.apply(this, __spreadArray([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
10459
10799
  {},
10460
10800
  context], extraArgs));
10461
10801
  };
@@ -10467,7 +10807,7 @@ var main_Slicer = /** @class */ (function () {
10467
10807
  if (!businessHours) {
10468
10808
  return [];
10469
10809
  }
10470
- return this._sliceEventStore.apply(this, __spreadArrays([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
10810
+ return this._sliceEventStore.apply(this, __spreadArray([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
10471
10811
  {},
10472
10812
  dateProfile,
10473
10813
  nextDayThreshold], extraArgs)).bg;
@@ -10506,65 +10846,254 @@ var main_Slicer = /** @class */ (function () {
10506
10846
  for (var _i = 3; _i < arguments.length; _i++) {
10507
10847
  extraArgs[_i - 3] = arguments[_i];
10508
10848
  }
10509
- if (!dateSpan) {
10510
- return [];
10849
+ if (!dateSpan) {
10850
+ return [];
10851
+ }
10852
+ var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
10853
+ var segs = this.sliceRange.apply(this, __spreadArray([dateSpan.range], extraArgs));
10854
+ for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
10855
+ var seg = segs_1[_a];
10856
+ seg.eventRange = eventRange;
10857
+ }
10858
+ return segs;
10859
+ };
10860
+ /*
10861
+ "complete" seg means it has component and eventRange
10862
+ */
10863
+ Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
10864
+ var segs = [];
10865
+ for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
10866
+ var eventRange = eventRanges_1[_i];
10867
+ segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
10868
+ }
10869
+ return segs;
10870
+ };
10871
+ /*
10872
+ "complete" seg means it has component and eventRange
10873
+ */
10874
+ Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
10875
+ var dateRange = eventRange.range;
10876
+ // hack to make multi-day events that are being force-displayed as list-items to take up only one day
10877
+ if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
10878
+ dateRange = {
10879
+ start: dateRange.start,
10880
+ end: addDays(dateRange.start, 1),
10881
+ };
10882
+ }
10883
+ var segs = this.sliceRange.apply(this, __spreadArray([dateRange], extraArgs));
10884
+ for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
10885
+ var seg = segs_2[_i];
10886
+ seg.eventRange = eventRange;
10887
+ seg.isStart = eventRange.isStart && seg.isStart;
10888
+ seg.isEnd = eventRange.isEnd && seg.isEnd;
10889
+ }
10890
+ return segs;
10891
+ };
10892
+ return Slicer;
10893
+ }());
10894
+ /*
10895
+ for incorporating slotMinTime/slotMaxTime if appropriate
10896
+ TODO: should be part of DateProfile!
10897
+ TimelineDateProfile already does this btw
10898
+ */
10899
+ function computeActiveRange(dateProfile, isComponentAllDay) {
10900
+ var range = dateProfile.activeRange;
10901
+ if (isComponentAllDay) {
10902
+ return range;
10903
+ }
10904
+ return {
10905
+ start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
10906
+ end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day
10907
+ };
10908
+ }
10909
+
10910
+ // high-level segmenting-aware tester functions
10911
+ // ------------------------------------------------------------------------------------------------------------------------
10912
+ function isInteractionValid(interaction, dateProfile, context) {
10913
+ var instances = interaction.mutatedEvents.instances;
10914
+ for (var instanceId in instances) {
10915
+ if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
10916
+ return false;
10917
+ }
10918
+ }
10919
+ return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
10920
+ }
10921
+ function isDateSelectionValid(dateSelection, dateProfile, context) {
10922
+ if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {
10923
+ return false;
10924
+ }
10925
+ return isNewPropsValid({ dateSelection: dateSelection }, context);
10926
+ }
10927
+ function isNewPropsValid(newProps, context) {
10928
+ var calendarState = context.getCurrentData();
10929
+ var props = __assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
10930
+ return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
10931
+ }
10932
+ function isPropsValid(state, context, dateSpanMeta, filterConfig) {
10933
+ if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
10934
+ if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
10935
+ return false;
10936
+ }
10937
+ if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
10938
+ return false;
10939
+ }
10940
+ return true;
10941
+ }
10942
+ // Moving Event Validation
10943
+ // ------------------------------------------------------------------------------------------------------------------------
10944
+ function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
10945
+ var currentState = context.getCurrentData();
10946
+ var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
10947
+ var subjectEventStore = interaction.mutatedEvents;
10948
+ var subjectDefs = subjectEventStore.defs;
10949
+ var subjectInstances = subjectEventStore.instances;
10950
+ var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
10951
+ state.eventUiBases :
10952
+ { '': currentState.selectionConfig });
10953
+ if (filterConfig) {
10954
+ subjectConfigs = mapHash(subjectConfigs, filterConfig);
10955
+ }
10956
+ // exclude the subject events. TODO: exclude defs too?
10957
+ var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
10958
+ var otherDefs = otherEventStore.defs;
10959
+ var otherInstances = otherEventStore.instances;
10960
+ var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
10961
+ for (var subjectInstanceId in subjectInstances) {
10962
+ var subjectInstance = subjectInstances[subjectInstanceId];
10963
+ var subjectRange = subjectInstance.range;
10964
+ var subjectConfig = subjectConfigs[subjectInstance.defId];
10965
+ var subjectDef = subjectDefs[subjectInstance.defId];
10966
+ // constraint
10967
+ if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
10968
+ return false;
10969
+ }
10970
+ // overlap
10971
+ var eventOverlap = context.options.eventOverlap;
10972
+ var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
10973
+ for (var otherInstanceId in otherInstances) {
10974
+ var otherInstance = otherInstances[otherInstanceId];
10975
+ // intersect! evaluate
10976
+ if (rangesIntersect(subjectRange, otherInstance.range)) {
10977
+ var otherOverlap = otherConfigs[otherInstance.defId].overlap;
10978
+ // consider the other event's overlap. only do this if the subject event is a "real" event
10979
+ if (otherOverlap === false && interaction.isEvent) {
10980
+ return false;
10981
+ }
10982
+ if (subjectConfig.overlap === false) {
10983
+ return false;
10984
+ }
10985
+ if (eventOverlapFunc && !eventOverlapFunc(new main_EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event
10986
+ new main_EventApi(context, subjectDef, subjectInstance))) {
10987
+ return false;
10988
+ }
10989
+ }
10990
+ }
10991
+ // allow (a function)
10992
+ var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
10993
+ for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
10994
+ var subjectAllow = _a[_i];
10995
+ var subjectDateSpan = __assign(__assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
10996
+ var origDef = calendarEventStore.defs[subjectDef.defId];
10997
+ var origInstance = calendarEventStore.instances[subjectInstanceId];
10998
+ var eventApi = void 0;
10999
+ if (origDef) { // was previously in the calendar
11000
+ eventApi = new main_EventApi(context, origDef, origInstance);
11001
+ }
11002
+ else { // was an external event
11003
+ eventApi = new main_EventApi(context, subjectDef); // no instance, because had no dates
11004
+ }
11005
+ if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
11006
+ return false;
11007
+ }
10511
11008
  }
10512
- var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
10513
- var segs = this.sliceRange.apply(this, __spreadArrays([dateSpan.range], extraArgs));
10514
- for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
10515
- var seg = segs_1[_a];
10516
- seg.eventRange = eventRange;
11009
+ }
11010
+ return true;
11011
+ }
11012
+ // Date Selection Validation
11013
+ // ------------------------------------------------------------------------------------------------------------------------
11014
+ function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
11015
+ var relevantEventStore = state.eventStore;
11016
+ var relevantDefs = relevantEventStore.defs;
11017
+ var relevantInstances = relevantEventStore.instances;
11018
+ var selection = state.dateSelection;
11019
+ var selectionRange = selection.range;
11020
+ var selectionConfig = context.getCurrentData().selectionConfig;
11021
+ if (filterConfig) {
11022
+ selectionConfig = filterConfig(selectionConfig);
11023
+ }
11024
+ // constraint
11025
+ if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
11026
+ return false;
11027
+ }
11028
+ // overlap
11029
+ var selectOverlap = context.options.selectOverlap;
11030
+ var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
11031
+ for (var relevantInstanceId in relevantInstances) {
11032
+ var relevantInstance = relevantInstances[relevantInstanceId];
11033
+ // intersect! evaluate
11034
+ if (rangesIntersect(selectionRange, relevantInstance.range)) {
11035
+ if (selectionConfig.overlap === false) {
11036
+ return false;
11037
+ }
11038
+ if (selectOverlapFunc && !selectOverlapFunc(new main_EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
11039
+ return false;
11040
+ }
10517
11041
  }
10518
- return segs;
10519
- };
10520
- /*
10521
- "complete" seg means it has component and eventRange
10522
- */
10523
- Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
10524
- var segs = [];
10525
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
10526
- var eventRange = eventRanges_1[_i];
10527
- segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
11042
+ }
11043
+ // allow (a function)
11044
+ for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
11045
+ var selectionAllow = _a[_i];
11046
+ var fullDateSpan = __assign(__assign({}, dateSpanMeta), selection);
11047
+ if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
11048
+ return false;
10528
11049
  }
10529
- return segs;
10530
- };
10531
- /*
10532
- "complete" seg means it has component and eventRange
10533
- */
10534
- Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
10535
- var dateRange = eventRange.range;
10536
- // hack to make multi-day events that are being force-displayed as list-items to take up only one day
10537
- if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
10538
- dateRange = {
10539
- start: dateRange.start,
10540
- end: addDays(dateRange.start, 1),
10541
- };
11050
+ }
11051
+ return true;
11052
+ }
11053
+ // Constraint Utils
11054
+ // ------------------------------------------------------------------------------------------------------------------------
11055
+ function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
11056
+ for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
11057
+ var constraint = constraints_1[_i];
11058
+ if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
11059
+ return false;
10542
11060
  }
10543
- var segs = this.sliceRange.apply(this, __spreadArrays([dateRange], extraArgs));
10544
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
10545
- var seg = segs_2[_i];
10546
- seg.eventRange = eventRange;
10547
- seg.isStart = eventRange.isStart && seg.isStart;
10548
- seg.isEnd = eventRange.isEnd && seg.isEnd;
11061
+ }
11062
+ return true;
11063
+ }
11064
+ function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
11065
+ otherEventStore, // for if constraint is an even group ID
11066
+ businessHoursUnexpanded, // for if constraint is 'businessHours'
11067
+ context) {
11068
+ if (constraint === 'businessHours') {
11069
+ return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
11070
+ }
11071
+ if (typeof constraint === 'string') { // an group ID
11072
+ return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) { return eventDef.groupId === constraint; }));
11073
+ }
11074
+ if (typeof constraint === 'object' && constraint) { // non-null object
11075
+ return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
11076
+ }
11077
+ return []; // if it's false
11078
+ }
11079
+ // TODO: move to event-store file?
11080
+ function eventStoreToRanges(eventStore) {
11081
+ var instances = eventStore.instances;
11082
+ var ranges = [];
11083
+ for (var instanceId in instances) {
11084
+ ranges.push(instances[instanceId].range);
11085
+ }
11086
+ return ranges;
11087
+ }
11088
+ // TODO: move to geom file?
11089
+ function anyRangesContainRange(outerRanges, innerRange) {
11090
+ for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
11091
+ var outerRange = outerRanges_1[_i];
11092
+ if (rangeContainsRange(outerRange, innerRange)) {
11093
+ return true;
10549
11094
  }
10550
- return segs;
10551
- };
10552
- return Slicer;
10553
- }());
10554
- /*
10555
- for incorporating slotMinTime/slotMaxTime if appropriate
10556
- TODO: should be part of DateProfile!
10557
- TimelineDateProfile already does this btw
10558
- */
10559
- function computeActiveRange(dateProfile, isComponentAllDay) {
10560
- var range = dateProfile.activeRange;
10561
- if (isComponentAllDay) {
10562
- return range;
10563
11095
  }
10564
- return {
10565
- start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
10566
- end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5),
10567
- };
11096
+ return false;
10568
11097
  }
10569
11098
 
10570
11099
  var VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
@@ -10733,11 +11262,12 @@ function getAllowYScrolling(props, sectionConfig) {
10733
11262
  getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
10734
11263
  }
10735
11264
  // TODO: ONLY use `arg`. force out internal function to use same API
10736
- function renderChunkContent(sectionConfig, chunkConfig, arg) {
11265
+ function renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {
10737
11266
  var expandRows = arg.expandRows;
10738
11267
  var content = typeof chunkConfig.content === 'function' ?
10739
11268
  chunkConfig.content(arg) :
10740
11269
  createElement('table', {
11270
+ role: 'presentation',
10741
11271
  className: [
10742
11272
  chunkConfig.tableClassName,
10743
11273
  sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',
@@ -10745,9 +11275,13 @@ function renderChunkContent(sectionConfig, chunkConfig, arg) {
10745
11275
  style: {
10746
11276
  minWidth: arg.tableMinWidth,
10747
11277
  width: arg.clientWidth,
10748
- height: expandRows ? arg.clientHeight : '',
11278
+ height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height
10749
11279
  },
10750
- }, arg.tableColGroupNode, createElement('tbody', {}, typeof chunkConfig.rowContent === 'function' ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));
11280
+ }, arg.tableColGroupNode, createElement(isHeader ? 'thead' : 'tbody', {
11281
+ role: 'presentation',
11282
+ }, typeof chunkConfig.rowContent === 'function'
11283
+ ? chunkConfig.rowContent(arg)
11284
+ : chunkConfig.rowContent));
10751
11285
  return content;
10752
11286
  }
10753
11287
  function isColPropsEqual(cols0, cols1) {
@@ -10770,7 +11304,7 @@ function renderMicroColGroup(cols, shrinkWidth) {
10770
11304
  } }));
10771
11305
  }
10772
11306
  }
10773
- return createElement.apply(void 0, __spreadArrays(['colgroup', {}], colNodes));
11307
+ return createElement.apply(void 0, __spreadArray(['colgroup', {}], colNodes));
10774
11308
  }
10775
11309
  function sanitizeShrinkWidth(shrinkWidth) {
10776
11310
  /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
@@ -10800,7 +11334,7 @@ function getSectionClassNames(sectionConfig, wholeTableVGrow) {
10800
11334
  var classNames = [
10801
11335
  'fc-scrollgrid-section',
10802
11336
  "fc-scrollgrid-section-" + sectionConfig.type,
10803
- sectionConfig.className,
11337
+ sectionConfig.className, // used?
10804
11338
  ];
10805
11339
  if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
10806
11340
  classNames.push('fc-scrollgrid-section-liquid');
@@ -10858,6 +11392,9 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10858
11392
  var cols = this.processCols(props.cols);
10859
11393
  var microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
10860
11394
  var classNames = getScrollGridClassNames(props.liquid, context);
11395
+ if (props.collapsibleWidth) {
11396
+ classNames.push('fc-scrollgrid-collapsible');
11397
+ }
10861
11398
  // TODO: make DRY
10862
11399
  var configCnt = sectionConfigs.length;
10863
11400
  var configI = 0;
@@ -10866,15 +11403,15 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10866
11403
  var bodySectionNodes = [];
10867
11404
  var footSectionNodes = [];
10868
11405
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
10869
- headSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11406
+ headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
10870
11407
  configI += 1;
10871
11408
  }
10872
11409
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
10873
- bodySectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11410
+ bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));
10874
11411
  configI += 1;
10875
11412
  }
10876
11413
  while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
10877
- footSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
11414
+ footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
10878
11415
  configI += 1;
10879
11416
  }
10880
11417
  // firefox bug: when setting height on table and there is a thead or tfoot,
@@ -10882,18 +11419,20 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10882
11419
  // use getCanVGrowWithinCell as a way to detect table-stupid firefox.
10883
11420
  // if so, use a simpler dom structure, jam everything into a lone tbody.
10884
11421
  var isBuggy = !getCanVGrowWithinCell();
11422
+ var roleAttrs = { role: 'rowgroup' };
10885
11423
  return createElement('table', {
11424
+ role: 'grid',
10886
11425
  className: classNames.join(' '),
10887
11426
  style: { height: props.height },
10888
- }, 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)));
11427
+ }, 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)));
10889
11428
  };
10890
- SimpleScrollGrid.prototype.renderSection = function (sectionConfig, sectionI, microColGroupNode) {
11429
+ SimpleScrollGrid.prototype.renderSection = function (sectionConfig, microColGroupNode, isHeader) {
10891
11430
  if ('outerContent' in sectionConfig) {
10892
11431
  return (createElement(Fragment, { key: sectionConfig.key }, sectionConfig.outerContent));
10893
11432
  }
10894
- return (createElement("tr", { key: sectionConfig.key, className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, sectionI, microColGroupNode, sectionConfig.chunk)));
11433
+ return (createElement("tr", { key: sectionConfig.key, role: "presentation", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));
10895
11434
  };
10896
- SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, sectionI, microColGroupNode, chunkConfig) {
11435
+ SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, microColGroupNode, chunkConfig, isHeader) {
10897
11436
  if ('outerContent' in chunkConfig) {
10898
11437
  return chunkConfig.outerContent;
10899
11438
  }
@@ -10907,25 +11446,29 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10907
11446
  forceYScrollbars ? 'scroll' :
10908
11447
  !needsYScrolling ? 'hidden' :
10909
11448
  'auto';
11449
+ var sectionKey = sectionConfig.key;
10910
11450
  var content = renderChunkContent(sectionConfig, chunkConfig, {
10911
11451
  tableColGroupNode: microColGroupNode,
10912
11452
  tableMinWidth: '',
10913
- clientWidth: scrollerClientWidths[sectionI] !== undefined ? scrollerClientWidths[sectionI] : null,
10914
- clientHeight: scrollerClientHeights[sectionI] !== undefined ? scrollerClientHeights[sectionI] : null,
11453
+ clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,
11454
+ clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,
10915
11455
  expandRows: sectionConfig.expandRows,
10916
11456
  syncRowHeights: false,
10917
11457
  rowSyncHeights: [],
10918
11458
  reportRowHeightChange: function () { },
10919
- });
10920
- return (createElement("td", { ref: chunkConfig.elRef },
10921
- createElement("div", { className: "fc-scroller-harness" + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
10922
- 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
10923
- : true }, content))));
11459
+ }, isHeader);
11460
+ return createElement(isHeader ? 'th' : 'td', {
11461
+ ref: chunkConfig.elRef,
11462
+ role: 'presentation',
11463
+ }, createElement("div", { className: "fc-scroller-harness" + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
11464
+ 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
11465
+ : true }, content)));
10924
11466
  };
10925
11467
  SimpleScrollGrid.prototype._handleScrollerEl = function (scrollerEl, key) {
10926
- var sectionI = parseInt(key, 10);
10927
- var chunkConfig = this.props.sections[sectionI].chunk;
10928
- setRef(chunkConfig.scrollerElRef, scrollerEl);
11468
+ var section = getSectionByKey(this.props.sections, key);
11469
+ if (section) {
11470
+ setRef(section.chunk.scrollerElRef, scrollerEl);
11471
+ }
10929
11472
  };
10930
11473
  SimpleScrollGrid.prototype.componentDidMount = function () {
10931
11474
  this.handleSizing();
@@ -10945,26 +11488,27 @@ var main_SimpleScrollGrid = /** @class */ (function (_super) {
10945
11488
  };
10946
11489
  SimpleScrollGrid.prototype.computeScrollerDims = function () {
10947
11490
  var scrollbarWidth = getScrollbarWidths();
10948
- var sectionCnt = this.props.sections.length;
10949
11491
  var _a = this, scrollerRefs = _a.scrollerRefs, scrollerElRefs = _a.scrollerElRefs;
10950
11492
  var forceYScrollbars = false;
10951
11493
  var scrollerClientWidths = {};
10952
11494
  var scrollerClientHeights = {};
10953
- for (var sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge
10954
- var scroller = scrollerRefs.currentMap[sectionI];
11495
+ for (var sectionKey in scrollerRefs.currentMap) {
11496
+ var scroller = scrollerRefs.currentMap[sectionKey];
10955
11497
  if (scroller && scroller.needsYScrolling()) {
10956
11498
  forceYScrollbars = true;
10957
11499
  break;
10958
11500
  }
10959
11501
  }
10960
- for (var sectionI = 0; sectionI < sectionCnt; sectionI += 1) { // along edge
10961
- var scrollerEl = scrollerElRefs.currentMap[sectionI];
11502
+ for (var _i = 0, _b = this.props.sections; _i < _b.length; _i++) {
11503
+ var section = _b[_i];
11504
+ var sectionKey = section.key;
11505
+ var scrollerEl = scrollerElRefs.currentMap[sectionKey];
10962
11506
  if (scrollerEl) {
10963
11507
  var harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
10964
- scrollerClientWidths[sectionI] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
11508
+ scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
10965
11509
  ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
10966
11510
  : 0));
10967
- scrollerClientHeights[sectionI] = Math.floor(harnessEl.getBoundingClientRect().height);
11511
+ scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
10968
11512
  }
10969
11513
  }
10970
11514
  return { forceYScrollbars: forceYScrollbars, scrollerClientWidths: scrollerClientWidths, scrollerClientHeights: scrollerClientHeights };
@@ -10975,6 +11519,15 @@ main_SimpleScrollGrid.addStateEquality({
10975
11519
  scrollerClientWidths: isPropsEqual,
10976
11520
  scrollerClientHeights: isPropsEqual,
10977
11521
  });
11522
+ function getSectionByKey(sections, key) {
11523
+ for (var _i = 0, sections_1 = sections; _i < sections_1.length; _i++) {
11524
+ var section = sections_1[_i];
11525
+ if (section.key === key) {
11526
+ return section;
11527
+ }
11528
+ }
11529
+ return null;
11530
+ }
10978
11531
 
10979
11532
  var main_EventRoot = /** @class */ (function (_super) {
10980
11533
  __extends(EventRoot, _super);
@@ -11038,10 +11591,10 @@ var main_StandardEvent = /** @class */ (function (_super) {
11038
11591
  var seg = props.seg;
11039
11592
  var timeFormat = context.options.eventTimeFormat || props.defaultTimeFormat;
11040
11593
  var timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
11041
- 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: {
11594
+ 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: {
11042
11595
  borderColor: hookProps.borderColor,
11043
11596
  backgroundColor: hookProps.backgroundColor,
11044
- }, ref: rootElRef }, getSegAnchorAttrs(seg)),
11597
+ }, ref: rootElRef }, getSegAnchorAttrs(seg, context)),
11045
11598
  createElement("div", { className: "fc-event-main", ref: innerElRef, style: { color: hookProps.textColor } }, innerContent),
11046
11599
  hookProps.isStartResizable &&
11047
11600
  createElement("div", { className: "fc-event-resizer fc-event-resizer-start" }),
@@ -11050,16 +11603,12 @@ var main_StandardEvent = /** @class */ (function (_super) {
11050
11603
  };
11051
11604
  return StandardEvent;
11052
11605
  }(main_BaseComponent));
11053
- function renderInnerContent(innerProps) {
11606
+ function renderInnerContent$1(innerProps) {
11054
11607
  return (createElement("div", { className: "fc-event-main-frame" },
11055
11608
  innerProps.timeText && (createElement("div", { className: "fc-event-time" }, innerProps.timeText)),
11056
11609
  createElement("div", { className: "fc-event-title-container" },
11057
11610
  createElement("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || createElement(Fragment, null, "\u00A0")))));
11058
11611
  }
11059
- function getSegAnchorAttrs(seg) {
11060
- var url = seg.eventRange.def.url;
11061
- return url ? { href: url } : {};
11062
- }
11063
11612
 
11064
11613
  var NowIndicatorRoot = function (props) { return (createElement(ViewContextType.Consumer, null, function (context) {
11065
11614
  var options = context.options;
@@ -11133,10 +11682,10 @@ var main_DayCellRoot = /** @class */ (function (_super) {
11133
11682
  function renderFill(fillType) {
11134
11683
  return (createElement("div", { className: "fc-" + fillType }));
11135
11684
  }
11136
- 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: {
11685
+ 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: {
11137
11686
  backgroundColor: hookProps.backgroundColor,
11138
11687
  } }, innerContent)); })); };
11139
- function renderInnerContent$1(props) {
11688
+ function renderInnerContent(props) {
11140
11689
  var title = props.event.title;
11141
11690
  return title && (createElement("div", { className: "fc-event-title" }, props.event.title));
11142
11691
  }
@@ -11148,24 +11697,270 @@ var WeekNumberRoot = function (props) { return (createElement(ViewContextType.Co
11148
11697
  var num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
11149
11698
  var text = dateEnv.format(date, format);
11150
11699
  var hookProps = { num: num, text: text, date: date };
11151
- return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner$1, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
11700
+ return (createElement(main_RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
11152
11701
  })); };
11153
- function renderInner$1(innerProps) {
11702
+ function renderInner(innerProps) {
11154
11703
  return innerProps.text;
11155
11704
  }
11156
11705
 
11706
+ var PADDING_FROM_VIEWPORT = 10;
11707
+ var main_Popover = /** @class */ (function (_super) {
11708
+ __extends(Popover, _super);
11709
+ function Popover() {
11710
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11711
+ _this.state = {
11712
+ titleId: getUniqueDomId(),
11713
+ };
11714
+ _this.handleRootEl = function (el) {
11715
+ _this.rootEl = el;
11716
+ if (_this.props.elRef) {
11717
+ setRef(_this.props.elRef, el);
11718
+ }
11719
+ };
11720
+ // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
11721
+ _this.handleDocumentMouseDown = function (ev) {
11722
+ // only hide the popover if the click happened outside the popover
11723
+ var target = getEventTargetViaRoot(ev);
11724
+ if (!_this.rootEl.contains(target)) {
11725
+ _this.handleCloseClick();
11726
+ }
11727
+ };
11728
+ _this.handleDocumentKeyDown = function (ev) {
11729
+ if (ev.key === 'Escape') {
11730
+ _this.handleCloseClick();
11731
+ }
11732
+ };
11733
+ _this.handleCloseClick = function () {
11734
+ var onClose = _this.props.onClose;
11735
+ if (onClose) {
11736
+ onClose();
11737
+ }
11738
+ };
11739
+ return _this;
11740
+ }
11741
+ Popover.prototype.render = function () {
11742
+ var _a = this.context, theme = _a.theme, options = _a.options;
11743
+ var _b = this, props = _b.props, state = _b.state;
11744
+ var classNames = [
11745
+ 'fc-popover',
11746
+ theme.getClass('popover'),
11747
+ ].concat(props.extraClassNames || []);
11748
+ return createPortal(createElement("div", __assign({ id: props.id, className: classNames.join(' '), "aria-labelledby": state.titleId }, props.extraAttrs, { ref: this.handleRootEl }),
11749
+ createElement("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
11750
+ createElement("span", { className: "fc-popover-title", id: state.titleId }, props.title),
11751
+ createElement("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
11752
+ createElement("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
11753
+ };
11754
+ Popover.prototype.componentDidMount = function () {
11755
+ document.addEventListener('mousedown', this.handleDocumentMouseDown);
11756
+ document.addEventListener('keydown', this.handleDocumentKeyDown);
11757
+ this.updateSize();
11758
+ };
11759
+ Popover.prototype.componentWillUnmount = function () {
11760
+ document.removeEventListener('mousedown', this.handleDocumentMouseDown);
11761
+ document.removeEventListener('keydown', this.handleDocumentKeyDown);
11762
+ };
11763
+ Popover.prototype.updateSize = function () {
11764
+ var isRtl = this.context.isRtl;
11765
+ var _a = this.props, alignmentEl = _a.alignmentEl, alignGridTop = _a.alignGridTop;
11766
+ var rootEl = this.rootEl;
11767
+ var alignmentRect = computeClippedClientRect(alignmentEl);
11768
+ if (alignmentRect) {
11769
+ var popoverDims = rootEl.getBoundingClientRect();
11770
+ // position relative to viewport
11771
+ var popoverTop = alignGridTop
11772
+ ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top
11773
+ : alignmentRect.top;
11774
+ var popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
11775
+ // constrain
11776
+ popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
11777
+ popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
11778
+ popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
11779
+ var origin_1 = rootEl.offsetParent.getBoundingClientRect();
11780
+ applyStyle(rootEl, {
11781
+ top: popoverTop - origin_1.top,
11782
+ left: popoverLeft - origin_1.left,
11783
+ });
11784
+ }
11785
+ };
11786
+ return Popover;
11787
+ }(main_BaseComponent));
11788
+
11789
+ var main_MorePopover = /** @class */ (function (_super) {
11790
+ __extends(MorePopover, _super);
11791
+ function MorePopover() {
11792
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11793
+ _this.handleRootEl = function (rootEl) {
11794
+ _this.rootEl = rootEl;
11795
+ if (rootEl) {
11796
+ _this.context.registerInteractiveComponent(_this, {
11797
+ el: rootEl,
11798
+ useEventCenter: false,
11799
+ });
11800
+ }
11801
+ else {
11802
+ _this.context.unregisterInteractiveComponent(_this);
11803
+ }
11804
+ };
11805
+ return _this;
11806
+ }
11807
+ MorePopover.prototype.render = function () {
11808
+ var _a = this.context, options = _a.options, dateEnv = _a.dateEnv;
11809
+ var props = this.props;
11810
+ var startDate = props.startDate, todayRange = props.todayRange, dateProfile = props.dateProfile;
11811
+ var title = dateEnv.format(startDate, options.dayPopoverFormat);
11812
+ 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 },
11813
+ createElement(main_DayCellContent, { date: startDate, dateProfile: dateProfile, todayRange: todayRange }, function (innerElRef, innerContent) { return (innerContent &&
11814
+ createElement("div", { className: "fc-more-popover-misc", ref: innerElRef }, innerContent)); }),
11815
+ props.children)); }));
11816
+ };
11817
+ MorePopover.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
11818
+ var _a = this, rootEl = _a.rootEl, props = _a.props;
11819
+ if (positionLeft >= 0 && positionLeft < elWidth &&
11820
+ positionTop >= 0 && positionTop < elHeight) {
11821
+ return {
11822
+ dateProfile: props.dateProfile,
11823
+ dateSpan: __assign({ allDay: true, range: {
11824
+ start: props.startDate,
11825
+ end: props.endDate,
11826
+ } }, props.extraDateSpan),
11827
+ dayEl: rootEl,
11828
+ rect: {
11829
+ left: 0,
11830
+ top: 0,
11831
+ right: elWidth,
11832
+ bottom: elHeight,
11833
+ },
11834
+ layer: 1, // important when comparing with hits from other components
11835
+ };
11836
+ }
11837
+ return null;
11838
+ };
11839
+ return MorePopover;
11840
+ }(main_DateComponent));
11841
+
11842
+ var main_MoreLinkRoot = /** @class */ (function (_super) {
11843
+ __extends(MoreLinkRoot, _super);
11844
+ function MoreLinkRoot() {
11845
+ var _this = _super !== null && _super.apply(this, arguments) || this;
11846
+ _this.linkElRef = createRef();
11847
+ _this.state = {
11848
+ isPopoverOpen: false,
11849
+ popoverId: getUniqueDomId(),
11850
+ };
11851
+ _this.handleClick = function (ev) {
11852
+ var _a = _this, props = _a.props, context = _a.context;
11853
+ var moreLinkClick = context.options.moreLinkClick;
11854
+ var date = computeRange(props).start;
11855
+ function buildPublicSeg(seg) {
11856
+ var _a = seg.eventRange, def = _a.def, instance = _a.instance, range = _a.range;
11857
+ return {
11858
+ event: new main_EventApi(context, def, instance),
11859
+ start: context.dateEnv.toDate(range.start),
11860
+ end: context.dateEnv.toDate(range.end),
11861
+ isStart: seg.isStart,
11862
+ isEnd: seg.isEnd,
11863
+ };
11864
+ }
11865
+ if (typeof moreLinkClick === 'function') {
11866
+ moreLinkClick = moreLinkClick({
11867
+ date: date,
11868
+ allDay: Boolean(props.allDayDate),
11869
+ allSegs: props.allSegs.map(buildPublicSeg),
11870
+ hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
11871
+ jsEvent: ev,
11872
+ view: context.viewApi,
11873
+ });
11874
+ }
11875
+ if (!moreLinkClick || moreLinkClick === 'popover') {
11876
+ _this.setState({ isPopoverOpen: true });
11877
+ }
11878
+ else if (typeof moreLinkClick === 'string') { // a view name
11879
+ context.calendarApi.zoomTo(date, moreLinkClick);
11880
+ }
11881
+ };
11882
+ _this.handlePopoverClose = function () {
11883
+ _this.setState({ isPopoverOpen: false });
11884
+ };
11885
+ return _this;
11886
+ }
11887
+ MoreLinkRoot.prototype.render = function () {
11888
+ var _this = this;
11889
+ var _a = this, props = _a.props, state = _a.state;
11890
+ return (createElement(ViewContextType.Consumer, null, function (context) {
11891
+ var viewApi = context.viewApi, options = context.options, calendarApi = context.calendarApi;
11892
+ var moreLinkText = options.moreLinkText;
11893
+ var moreCnt = props.moreCnt;
11894
+ var range = computeRange(props);
11895
+ var text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
11896
+ ? moreLinkText.call(calendarApi, moreCnt)
11897
+ : "+" + moreCnt + " " + moreLinkText;
11898
+ var title = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
11899
+ var hookProps = {
11900
+ num: moreCnt,
11901
+ shortText: "+" + moreCnt,
11902
+ text: text,
11903
+ view: viewApi,
11904
+ };
11905
+ return (createElement(Fragment, null,
11906
+ 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 : ''); })),
11907
+ 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()))));
11908
+ }));
11909
+ };
11910
+ MoreLinkRoot.prototype.componentDidMount = function () {
11911
+ this.updateParentEl();
11912
+ };
11913
+ MoreLinkRoot.prototype.componentDidUpdate = function () {
11914
+ this.updateParentEl();
11915
+ };
11916
+ MoreLinkRoot.prototype.updateParentEl = function () {
11917
+ if (this.linkElRef.current) {
11918
+ this.parentEl = elementClosest(this.linkElRef.current, '.fc-view-harness');
11919
+ }
11920
+ };
11921
+ return MoreLinkRoot;
11922
+ }(main_BaseComponent));
11923
+ function renderMoreLinkInner(props) {
11924
+ return props.text;
11925
+ }
11926
+ function computeRange(props) {
11927
+ if (props.allDayDate) {
11928
+ return {
11929
+ start: props.allDayDate,
11930
+ end: addDays(props.allDayDate, 1),
11931
+ };
11932
+ }
11933
+ var hiddenSegs = props.hiddenSegs;
11934
+ return {
11935
+ start: computeEarliestSegStart(hiddenSegs),
11936
+ end: computeLatestSegEnd(hiddenSegs),
11937
+ };
11938
+ }
11939
+ function computeEarliestSegStart(segs) {
11940
+ return segs.reduce(pickEarliestStart).eventRange.range.start;
11941
+ }
11942
+ function pickEarliestStart(seg0, seg1) {
11943
+ return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
11944
+ }
11945
+ function computeLatestSegEnd(segs) {
11946
+ return segs.reduce(pickLatestEnd).eventRange.range.end;
11947
+ }
11948
+ function pickLatestEnd(seg0, seg1) {
11949
+ return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
11950
+ }
11951
+
11157
11952
  // exports
11158
11953
  // --------------------------------------------------------------------------------------------------
11159
- var version = '5.3.2'; // important to type it, so .d.ts has generic string
11954
+ var version = '5.10.1'; // important to type it, so .d.ts has generic string
11160
11955
 
11161
11956
 
11162
11957
  //# sourceMappingURL=main.js.map
11163
11958
 
11164
11959
  // CONCATENATED MODULE: ./node_modules/@fullcalendar/core/main.js
11165
11960
  /*!
11166
- FullCalendar v5.3.2
11961
+ FullCalendar v5.10.1
11167
11962
  Docs & License: https://fullcalendar.io/
11168
- (c) 2020 Adam Shaw
11963
+ (c) 2021 Adam Shaw
11169
11964
  */
11170
11965
 
11171
11966
 
@@ -11294,6 +12089,7 @@ var main_Calendar = /** @class */ (function (_super) {
11294
12089
 
11295
12090
 
11296
12091
 
12092
+
11297
12093
  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; }
11298
12094
 
11299
12095
  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; }