@iamproperty/components 7.4.0 → 7.5.1--beta1

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 (349) hide show
  1. package/README.md +1 -1
  2. package/assets/css/components/actionbar.component.css +1 -1
  3. package/assets/css/components/actionbar.component.css.map +1 -1
  4. package/assets/css/components/actionbar.global.css +1 -1
  5. package/assets/css/components/actionbar.global.css.map +1 -1
  6. package/assets/css/components/address-lookup.component.css +1 -0
  7. package/assets/css/components/address-lookup.component.css.map +1 -0
  8. package/assets/css/components/applied-filters.css +1 -1
  9. package/assets/css/components/applied-filters.css.map +1 -1
  10. package/assets/css/components/barchart.component.css +1 -1
  11. package/assets/css/components/barchart.component.css.map +1 -1
  12. package/assets/css/components/calendar.component.css +1 -1
  13. package/assets/css/components/calendar.component.css.map +1 -1
  14. package/assets/css/components/calendar.config.css.map +1 -1
  15. package/assets/css/components/card.component.css +1 -1
  16. package/assets/css/components/card.component.css.map +1 -1
  17. package/assets/css/components/carousel.component.css +1 -1
  18. package/assets/css/components/carousel.component.css.map +1 -1
  19. package/assets/css/components/charts.css +1 -1
  20. package/assets/css/components/charts.css.map +1 -1
  21. package/assets/css/components/collapsible-side.css +1 -1
  22. package/assets/css/components/collapsible-side.css.map +1 -1
  23. package/assets/css/components/content.component.css +1 -1
  24. package/assets/css/components/content.component.css.map +1 -1
  25. package/assets/css/components/darkmode.component.css +1 -0
  26. package/assets/css/components/darkmode.component.css.map +1 -0
  27. package/assets/css/components/doughnutchart.component.css +1 -1
  28. package/assets/css/components/doughnutchart.component.css.map +1 -1
  29. package/assets/css/components/fileupload.css +1 -1
  30. package/assets/css/components/fileupload.css.map +1 -1
  31. package/assets/css/components/header.css +1 -1
  32. package/assets/css/components/header.css.map +1 -1
  33. package/assets/css/components/inline-edit.css +1 -1
  34. package/assets/css/components/inline-edit.css.map +1 -1
  35. package/assets/css/components/inline-edit.preload.css +1 -1
  36. package/assets/css/components/inline-edit.preload.css.map +1 -1
  37. package/assets/css/components/{menu.css → menu.global.css} +1 -1
  38. package/assets/css/components/menu.global.css.map +1 -0
  39. package/assets/css/components/milestone.css +1 -1
  40. package/assets/css/components/milestone.css.map +1 -1
  41. package/assets/css/components/multi-step.component.css +1 -1
  42. package/assets/css/components/multi-step.component.css.map +1 -1
  43. package/assets/css/components/multiselect.css +1 -1
  44. package/assets/css/components/multiselect.css.map +1 -1
  45. package/assets/css/components/multiselect.preload.css +1 -1
  46. package/assets/css/components/multiselect.preload.css.map +1 -1
  47. package/assets/css/components/nav.component.css +1 -1
  48. package/assets/css/components/nav.component.css.map +1 -1
  49. package/assets/css/components/nav.global.css +1 -1
  50. package/assets/css/components/nav.global.css.map +1 -1
  51. package/assets/css/components/notification.css +1 -1
  52. package/assets/css/components/notification.css.map +1 -1
  53. package/assets/css/components/pagination.css +1 -1
  54. package/assets/css/components/pagination.css.map +1 -1
  55. package/assets/css/components/property-searchbar.css +1 -1
  56. package/assets/css/components/property-searchbar.css.map +1 -1
  57. package/assets/css/components/rank.component.css +1 -1
  58. package/assets/css/components/rank.component.css.map +1 -1
  59. package/assets/css/components/rankings.component.css +1 -1
  60. package/assets/css/components/rankings.component.css.map +1 -1
  61. package/assets/css/components/rankings.global.css +1 -1
  62. package/assets/css/components/rankings.global.css.map +1 -1
  63. package/assets/css/components/slider.css +1 -1
  64. package/assets/css/components/slider.css.map +1 -1
  65. package/assets/css/components/split-button.component.css +1 -1
  66. package/assets/css/components/split-button.component.css.map +1 -1
  67. package/assets/css/components/table-basic.global.css +1 -1
  68. package/assets/css/components/table-basic.global.css.map +1 -1
  69. package/assets/css/components/table.global.css +1 -1
  70. package/assets/css/components/table.global.css.map +1 -1
  71. package/assets/css/components/tabs.component.css +1 -1
  72. package/assets/css/components/tabs.component.css.map +1 -1
  73. package/assets/css/components/tabs.config.css +1 -1
  74. package/assets/css/components/tabs.config.css.map +1 -1
  75. package/assets/css/components/word-count.component.css +1 -0
  76. package/assets/css/components/word-count.component.css.map +1 -0
  77. package/assets/css/core.min.css +1 -1
  78. package/assets/css/core.min.css.map +1 -1
  79. package/assets/css/mobile-core.min.css +1 -1
  80. package/assets/css/mobile-core.min.css.map +1 -1
  81. package/assets/css/mobile.min.css +1 -1
  82. package/assets/css/mobile.min.css.map +1 -1
  83. package/assets/css/style.min.css +1 -1
  84. package/assets/css/style.min.css.map +1 -1
  85. package/assets/js/components/accordion/accordion.component.js +39 -25
  86. package/assets/js/components/accordion/accordion.component.min.js +14 -15
  87. package/assets/js/components/accordion/accordion.component.min.js.map +1 -1
  88. package/assets/js/components/actionbar/actionbar.component.js +16 -9
  89. package/assets/js/components/actionbar/actionbar.component.min.js +13 -5
  90. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  91. package/assets/js/components/address-lookup/address-lookup.component.js +6 -11
  92. package/assets/js/components/address-lookup/address-lookup.component.min.js +10 -12
  93. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  94. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  95. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  96. package/assets/js/components/applied-filters/applied-filters.component.js +2 -5
  97. package/assets/js/components/applied-filters/applied-filters.component.min.js +7 -7
  98. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  99. package/assets/js/components/barchart/barchart.component.min.js +2 -2
  100. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  101. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  102. package/assets/js/components/bento-grid/bento-grid.component.min.js.map +1 -1
  103. package/assets/js/components/calendar/calendar.component.js +153 -136
  104. package/assets/js/components/calendar/calendar.component.min.js +3 -3
  105. package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
  106. package/assets/js/components/card/card.component.js +3 -9
  107. package/assets/js/components/card/card.component.min.js +13 -7
  108. package/assets/js/components/card/card.component.min.js.map +1 -1
  109. package/assets/js/components/carousel/carousel.component.js +17 -19
  110. package/assets/js/components/carousel/carousel.component.min.js +17 -19
  111. package/assets/js/components/carousel/carousel.component.min.js.map +1 -1
  112. package/assets/js/components/collapsible-side/collapsible-side.component.js +0 -5
  113. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +4 -6
  114. package/assets/js/components/collapsible-side/collapsible-side.component.min.js.map +1 -1
  115. package/assets/js/components/content/content.component.min.js +2 -2
  116. package/assets/js/components/content/content.component.min.js.map +1 -1
  117. package/assets/js/components/darkmode/darkmode.component.js +70 -0
  118. package/assets/js/components/darkmode/darkmode.component.min.js +10 -0
  119. package/assets/js/components/darkmode/darkmode.component.min.js.map +1 -0
  120. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
  121. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  122. package/assets/js/components/fileupload/fileupload.component.js +1 -5
  123. package/assets/js/components/fileupload/fileupload.component.min.js +5 -6
  124. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  125. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  126. package/assets/js/components/filter-card/filter-card.component.min.js.map +1 -1
  127. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  128. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -1
  129. package/assets/js/components/header/header.component.js +0 -5
  130. package/assets/js/components/header/header.component.min.js +4 -6
  131. package/assets/js/components/header/header.component.min.js.map +1 -1
  132. package/assets/js/components/inline-edit/inline-edit.component.js +61 -60
  133. package/assets/js/components/inline-edit/inline-edit.component.min.js +5 -5
  134. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  135. package/assets/js/components/marketing/marketing.component.js +0 -4
  136. package/assets/js/components/marketing/marketing.component.min.js +3 -4
  137. package/assets/js/components/marketing/marketing.component.min.js.map +1 -1
  138. package/assets/js/components/menu/menu.component.js +2 -2
  139. package/assets/js/components/menu/menu.component.min.js +4 -5
  140. package/assets/js/components/menu/menu.component.min.js.map +1 -1
  141. package/assets/js/components/milestone/milestone.component.js +12 -14
  142. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  143. package/assets/js/components/milestone/milestone.component.min.js.map +1 -1
  144. package/assets/js/components/milestone-group/milestone-group.component.js +10 -12
  145. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  146. package/assets/js/components/milestone-group/milestone-group.component.min.js.map +1 -1
  147. package/assets/js/components/multi-step/multi-step.component.min.js +3 -3
  148. package/assets/js/components/multi-step/multi-step.component.min.js.map +1 -1
  149. package/assets/js/components/multiselect/multiselect.component.js +90 -13
  150. package/assets/js/components/multiselect/multiselect.component.min.js +5 -5
  151. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  152. package/assets/js/components/nav/nav.component.js +4 -7
  153. package/assets/js/components/nav/nav.component.min.js +8 -7
  154. package/assets/js/components/nav/nav.component.min.js.map +1 -1
  155. package/assets/js/components/notification/notification.component.js +2 -7
  156. package/assets/js/components/notification/notification.component.min.js +6 -6
  157. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  158. package/assets/js/components/pagination/pagination.component.js +3 -8
  159. package/assets/js/components/pagination/pagination.component.min.js +7 -8
  160. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  161. package/assets/js/components/password-indicator/password-indicator.component.js +19 -0
  162. package/assets/js/components/password-indicator/password-indicator.component.min.js +7 -0
  163. package/assets/js/components/password-indicator/password-indicator.component.min.js.map +1 -0
  164. package/assets/js/components/rank/rank.component.js +2 -2
  165. package/assets/js/components/rank/rank.component.min.js +4 -5
  166. package/assets/js/components/rank/rank.component.min.js.map +1 -1
  167. package/assets/js/components/rankings/rankings.component.js +3 -0
  168. package/assets/js/components/rankings/rankings.component.min.js +364 -5
  169. package/assets/js/components/rankings/rankings.component.min.js.map +1 -1
  170. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  171. package/assets/js/components/record-card/record-card.component.min.js.map +1 -1
  172. package/assets/js/components/search/search.component.js +0 -4
  173. package/assets/js/components/search/search.component.min.js +5 -6
  174. package/assets/js/components/search/search.component.min.js.map +1 -1
  175. package/assets/js/components/slider/slider.component.js +0 -4
  176. package/assets/js/components/slider/slider.component.min.js +4 -5
  177. package/assets/js/components/slider/slider.component.min.js.map +1 -1
  178. package/assets/js/components/split-button/split-button.component.js +1 -3
  179. package/assets/js/components/split-button/split-button.component.min.js +8 -11
  180. package/assets/js/components/split-button/split-button.component.min.js.map +1 -1
  181. package/assets/js/components/table/table.component.min.js +4 -4
  182. package/assets/js/components/table/table.component.min.js.map +1 -1
  183. package/assets/js/components/table-ajax/table-ajax.component.js +11 -9
  184. package/assets/js/components/table-ajax/table-ajax.component.min.js +4 -4
  185. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  186. package/assets/js/components/table-basic/table-basic.component.min.js +4 -4
  187. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  188. package/assets/js/components/table-no-submit/table-no-submit.component.js +15 -30
  189. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +4 -4
  190. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  191. package/assets/js/components/table-submit/table-submit.component.min.js +4 -4
  192. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  193. package/assets/js/components/tabs/tabs.component.js +1 -4
  194. package/assets/js/components/tabs/tabs.component.min.js +5 -5
  195. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  196. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  197. package/assets/js/components/video-card/video-card.component.min.js.map +1 -1
  198. package/assets/js/components/word-count/word-count.component.js +81 -0
  199. package/assets/js/components/word-count/word-count.component.min.js +12 -0
  200. package/assets/js/components/word-count/word-count.component.min.js.map +1 -0
  201. package/assets/js/components.js +1 -0
  202. package/assets/js/modules/advanced-select.js +1 -1
  203. package/assets/js/modules/dynamicEvents.js +3 -3
  204. package/assets/js/modules/inputs.js +0 -26
  205. package/assets/js/modules/milestone.js +2 -2
  206. package/assets/js/modules/password-indicator.js +21 -0
  207. package/assets/js/modules/table.js +28 -2
  208. package/assets/js/scripts.bundle.js +3 -3
  209. package/assets/js/scripts.bundle.js.map +1 -1
  210. package/assets/js/scripts.bundle.min.js +2 -2
  211. package/assets/js/scripts.bundle.min.js.map +1 -1
  212. package/assets/js/scripts.js +3 -1
  213. package/assets/sass/_components.scss +6 -5
  214. package/assets/sass/_elements.scss +5 -0
  215. package/assets/sass/_example.scss +1 -1
  216. package/assets/sass/_functions/utility-mixins.scss +21 -1
  217. package/assets/sass/_functions/variables.scss +14 -0
  218. package/assets/sass/components/actionbar.component.scss +38 -1
  219. package/assets/sass/components/actionbar.global.scss +1 -1
  220. package/assets/sass/components/{address-lookup.scss → address-lookup.component.scss} +10 -0
  221. package/assets/sass/components/applied-filters.scss +1 -0
  222. package/assets/sass/components/calendar.component.scss +163 -271
  223. package/assets/sass/components/calendar.config.scss +69 -122
  224. package/assets/sass/components/collapsible-side.scss +2 -0
  225. package/assets/sass/components/darkmode.component.scss +22 -0
  226. package/assets/sass/components/fileupload.scss +18 -0
  227. package/assets/sass/components/header.scss +9 -0
  228. package/assets/sass/components/inline-edit.preload.scss +68 -2
  229. package/assets/sass/components/inline-edit.scss +7 -0
  230. package/assets/sass/components/milestone.scss +69 -60
  231. package/assets/sass/components/multi-step.component.scss +1 -1
  232. package/assets/sass/components/multiselect.preload.scss +11 -1
  233. package/assets/sass/components/multiselect.scss +62 -5
  234. package/assets/sass/components/nav.component.scss +31 -6
  235. package/assets/sass/components/nav.global.scss +8 -12
  236. package/assets/sass/components/notification.scss +38 -17
  237. package/assets/sass/components/pagination.scss +6 -0
  238. package/assets/sass/components/slider.scss +1 -0
  239. package/assets/sass/components/split-button.component.scss +3 -1
  240. package/assets/sass/components/table-basic.global.scss +33 -33
  241. package/assets/sass/components/table.global.scss +9 -4
  242. package/assets/sass/components/tabs.component.scss +4 -0
  243. package/assets/sass/components/tabs.config.scss +231 -4
  244. package/assets/sass/components/word-count.component.scss +26 -0
  245. package/assets/sass/elements/admin-panel.scss +38 -10
  246. package/assets/sass/elements/buttons--compact.scss +1 -1
  247. package/assets/sass/elements/buttons--global.scss +3 -3
  248. package/assets/sass/elements/details.scss +33 -6
  249. package/assets/sass/elements/forms.scss +23 -31
  250. package/assets/sass/elements/hr.scss +50 -0
  251. package/assets/sass/elements/icons.scss +5 -0
  252. package/assets/sass/elements/links.scss +2 -2
  253. package/assets/sass/elements/lists.scss +1 -1
  254. package/assets/sass/elements/modal.scss +1 -5
  255. package/assets/sass/elements/toggle-button.scss +1 -0
  256. package/assets/sass/elements/type.scss +6 -9
  257. package/assets/sass/foundations/colours.scss +0 -0
  258. package/assets/sass/foundations/reboot.scss +14 -18
  259. package/assets/sass/foundations/root.scss +43 -51
  260. package/assets/sass/templates/form.scss +5 -0
  261. package/assets/ts/components/accordion/accordion.component.ts +46 -33
  262. package/assets/ts/components/actionbar/actionbar.component.ts +29 -10
  263. package/assets/ts/components/address-lookup/address-lookup.component.ts +7 -11
  264. package/assets/ts/components/applied-filters/applied-filters.component.ts +2 -5
  265. package/assets/ts/components/calendar/calendar.component.ts +368 -498
  266. package/assets/ts/components/card/card.component.ts +2 -9
  267. package/assets/ts/components/carousel/carousel.component.ts +17 -19
  268. package/assets/ts/components/collapsible-side/collapsible-side.component.ts +1 -5
  269. package/assets/ts/components/darkmode/darkmode.component.ts +85 -0
  270. package/assets/ts/components/fileupload/fileupload.component.ts +2 -5
  271. package/assets/ts/components/header/header.component.ts +1 -5
  272. package/assets/ts/components/inline-edit/inline-edit.component.ts +74 -75
  273. package/assets/ts/components/marketing/marketing.component.ts +0 -4
  274. package/assets/ts/components/menu/menu.component.ts +2 -2
  275. package/assets/ts/components/milestone/milestone.component.ts +43 -45
  276. package/assets/ts/components/milestone-group/milestone-group.component.ts +39 -41
  277. package/assets/ts/components/multiselect/multiselect.component.ts +103 -27
  278. package/assets/ts/components/nav/nav.component.ts +10 -19
  279. package/assets/ts/components/notification/notification.component.ts +3 -9
  280. package/assets/ts/components/pagination/pagination.component.ts +6 -8
  281. package/assets/ts/components/password-indicator/password-indicator.component.ts +24 -0
  282. package/assets/ts/components/rank/rank.component.ts +2 -2
  283. package/assets/ts/components/rankings/rankings.component.ts +4 -0
  284. package/assets/ts/components/search/search.component.ts +0 -4
  285. package/assets/ts/components/slider/slider.component.ts +1 -4
  286. package/assets/ts/components/split-button/split-button.component.ts +1 -3
  287. package/assets/ts/components/table-ajax/table-ajax.component.ts +5 -5
  288. package/assets/ts/components/table-no-submit/table-no-submit.component.ts +10 -21
  289. package/assets/ts/components/tabs/tabs.component.ts +2 -4
  290. package/assets/ts/components/word-count/word-count.component.ts +91 -0
  291. package/assets/ts/components.ts +1 -0
  292. package/assets/ts/modules/advanced-select.ts +11 -16
  293. package/assets/ts/modules/data-layer.md +0 -5
  294. package/assets/ts/modules/dynamicEvents.ts +6 -7
  295. package/assets/ts/modules/inputs.ts +0 -31
  296. package/assets/ts/modules/milestone-group.ts +39 -42
  297. package/assets/ts/modules/milestone.ts +119 -122
  298. package/assets/ts/modules/password-indicator.ts +29 -0
  299. package/assets/ts/modules/table.ts +41 -3
  300. package/assets/ts/scripts.ts +4 -1
  301. package/dist/components.es.js +1691 -41
  302. package/dist/components.umd.js +1398 -231
  303. package/package.json +6 -6
  304. package/src/components/Accordion/Accordion.vue +14 -23
  305. package/src/components/Accordion/AccordionItem.vue +27 -43
  306. package/src/components/Actionbar/Actionbar.vue +17 -19
  307. package/src/components/AddressLookup/AddressLookup.vue +17 -18
  308. package/src/components/AdvancedSelect/AdvancedSelect.vue +17 -18
  309. package/src/components/AppliedFilters/AppliedFilters.vue +16 -18
  310. package/src/components/Banner/Banner.vue +18 -21
  311. package/src/components/BarChart/BarChart.vue +17 -18
  312. package/src/components/Calendar/Calendar.vue +14 -20
  313. package/src/components/Card/Card.vue +17 -17
  314. package/src/components/Carousel/Carousel.vue +17 -20
  315. package/src/components/Content/Content.vue +17 -18
  316. package/src/components/DarkMode/DarkMode.vue +19 -0
  317. package/src/components/DoughnutChart/DoughnutChart.vue +17 -18
  318. package/src/components/FileUpload/FileUpload.vue +22 -28
  319. package/src/components/FilterCard/FilterCard.vue +17 -18
  320. package/src/components/Filterlist/Filterlist.vue +17 -0
  321. package/src/components/Header/Header.vue +28 -29
  322. package/src/components/InlineEdit/InlineEdit.vue +11 -19
  323. package/src/components/Menu/Menu.vue +17 -17
  324. package/src/components/Milestones/Milestone.vue +22 -27
  325. package/src/components/Milestones/MilestoneGroup.vue +24 -27
  326. package/src/components/Multiselect/Multiselect.vue +17 -18
  327. package/src/components/Nav/Nav.vue +17 -19
  328. package/src/components/Notification/Notification.vue +17 -15
  329. package/src/components/Pagination/Pagination.vue +16 -16
  330. package/src/components/PasswordIndicator/PasswordIndicator.vue +23 -0
  331. package/src/components/Rank/Rank.vue +17 -18
  332. package/src/components/Rankings/Rankings.vue +17 -27
  333. package/src/components/RecordCard/RecordCard.vue +17 -18
  334. package/src/components/Search/Search.vue +17 -17
  335. package/src/components/Slider/Slider.vue +17 -17
  336. package/src/components/SplitButton/SplitButton.vue +17 -20
  337. package/src/components/Tabs/Tabs.vue +17 -17
  338. package/src/components/VideoCard/VideoCard.vue +17 -18
  339. package/src/components/WordCount/WordCount.vue +22 -0
  340. package/src/index.js +43 -44
  341. package/assets/css/components/address-lookup.css +0 -1
  342. package/assets/css/components/address-lookup.css.map +0 -1
  343. package/assets/css/components/menu.css.map +0 -1
  344. package/assets/css/components/tabs.css +0 -1
  345. package/assets/css/components/tabs.css.map +0 -1
  346. package/assets/sass/components/tabs.scss +0 -254
  347. package/assets/ts/components/accordion/README.md +0 -31
  348. package/assets/ts/components/fileupload/README.md +0 -28
  349. /package/assets/sass/components/{menu.scss → menu.global.scss} +0 -0
@@ -14,7 +14,6 @@ class iamCalendar extends HTMLElement {
14
14
 
15
15
  const loadCSS = `@import "${assetLocation}/css/components/calendar.component.css";`;
16
16
 
17
-
18
17
  const weekViewOnly = `<table class="table--day" role="presentation"><tbody>
19
18
  <tr class="allday"><th>All day</th></tr>
20
19
  <tr><th data-hour="0">00</th></tr>
@@ -45,7 +44,6 @@ class iamCalendar extends HTMLElement {
45
44
 
46
45
  const template = document.createElement('template');
47
46
 
48
-
49
47
  template.innerHTML = `
50
48
  <style>
51
49
  ${loadCSS}
@@ -161,16 +159,28 @@ class iamCalendar extends HTMLElement {
161
159
  `;
162
160
  this.shadowRoot.appendChild(template.content.cloneNode(true));
163
161
 
164
-
165
- this.monthArray = ["January","February","March","April","May","June","July","August","September","October","November","December"];
166
- this.dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
167
-
168
- this.english_ordinal_rules = new Intl.PluralRules("en", {type: "ordinal"});
162
+ this.monthArray = [
163
+ 'January',
164
+ 'February',
165
+ 'March',
166
+ 'April',
167
+ 'May',
168
+ 'June',
169
+ 'July',
170
+ 'August',
171
+ 'September',
172
+ 'October',
173
+ 'November',
174
+ 'December',
175
+ ];
176
+ this.dayArray = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
177
+
178
+ this.english_ordinal_rules = new Intl.PluralRules('en', { type: 'ordinal' });
169
179
  this.suffixes = {
170
- one: "st",
171
- two: "nd",
172
- few: "rd",
173
- other: "th"
180
+ one: 'st',
181
+ two: 'nd',
182
+ few: 'rd',
183
+ other: 'th',
174
184
  };
175
185
 
176
186
  this.calendars = ['Default']; // TO DO allow for these to be set via the component data attributes
@@ -180,8 +190,7 @@ class iamCalendar extends HTMLElement {
180
190
  }
181
191
 
182
192
  createThead(sundayFirst: false): string {
183
-
184
- if(sundayFirst)
193
+ if (sundayFirst)
185
194
  return `<tr>
186
195
  <th class="column-header sunday"><span class="long-day-name">Sunday</span><span class="short-day-name" role="presentation">Sun</span></th>
187
196
  <th class="column-header monday"><span class="long-day-name">Monday</span><span class="short-day-name" role="presentation">Mon</span></th>
@@ -191,7 +200,7 @@ class iamCalendar extends HTMLElement {
191
200
  <th class="column-header friday"><span class="long-day-name">Friday</span><span class="short-day-name" role="presentation">Fri</span></th>
192
201
  <th class="column-header saturday"><span class="long-day-name">Saturday</span><span class="short-day-name" role="presentation">Sat</span></th>
193
202
  </tr>`;
194
-
203
+
195
204
  return `<tr>
196
205
  <th class="column-header monday"><span class="long-day-name">Monday</span><span class="short-day-name" role="presentation">Mon</span></th>
197
206
  <th class="column-header tuesday"><span class="long-day-name">Tuesday</span><span class="short-day-name" role="presentation">Tues</span></th>
@@ -203,25 +212,23 @@ class iamCalendar extends HTMLElement {
203
212
  </tr>`;
204
213
  }
205
214
 
206
- numberDaysInMonth(year, month): Date {
207
- return new Date(year, month, 0).getDate();
215
+ numberDaysInMonth(year, month): Date {
216
+ return new Date(year, month, 0).getDate();
208
217
  }
209
218
 
210
- getOrdinalNumber(number): string {
219
+ getOrdinalNumber(number): string {
211
220
  const category = this.english_ordinal_rules.select(number);
212
221
  const suffix = this.suffixes[category];
213
- return (number + suffix);
222
+ return number + suffix;
214
223
  }
215
224
 
216
- setToMonday( date ): Date {
217
- const day = date.getDay() || 7;
218
- if( day !== 1 )
219
- date.setHours(-24 * (day - 1));
225
+ setToMonday(date): Date {
226
+ const day = date.getDay() || 7;
227
+ if (day !== 1) date.setHours(-24 * (day - 1));
220
228
  return date;
221
229
  }
222
230
 
223
- setToSunday( date ): Date {
224
-
231
+ setToSunday(date): Date {
225
232
  const monday = this.setToMonday(date);
226
233
  const sunday = new Date(monday);
227
234
 
@@ -229,16 +236,14 @@ class iamCalendar extends HTMLElement {
229
236
  return sunday;
230
237
  }
231
238
 
232
- getTitle(dateStr,view): string {
233
-
239
+ getTitle(dateStr, view): string {
234
240
  const date = new Date(dateStr);
235
241
  const month = date.getMonth();
236
242
  const year = date.getFullYear();
237
243
  const day = date.getDate();
238
- const dayOfWeek = date.getDay() ? date.getDay(): 7;
239
-
240
- if(view == "week"){
244
+ const dayOfWeek = date.getDay() ? date.getDay() : 7;
241
245
 
246
+ if (view == 'week') {
242
247
  const monday = this.setToMonday(new Date(dateStr));
243
248
  const sunday = this.setToSunday(new Date(dateStr));
244
249
 
@@ -251,13 +256,9 @@ class iamCalendar extends HTMLElement {
251
256
  const sundayDay = sunday.getDate();
252
257
 
253
258
  return `${this.getOrdinalNumber(mondayDay)} ${mondayMonth != sundayMonth ? this.monthArray[sundayMonth] : ''} ${mondayYear != sundayYear ? mondayYear : ''} - ${this.getOrdinalNumber(sundayDay)} ${this.monthArray[sundayMonth]} ${sundayYear}`;
254
- }
255
- else if(view == "day"){
256
-
259
+ } else if (view == 'day') {
257
260
  return `${this.dayArray[dayOfWeek]} ${this.getOrdinalNumber(day)} ${this.monthArray[month]} ${year}`;
258
- }
259
- else if(view == "year"){
260
-
261
+ } else if (view == 'year') {
261
262
  return `${year}`;
262
263
  }
263
264
 
@@ -265,22 +266,21 @@ class iamCalendar extends HTMLElement {
265
266
  }
266
267
 
267
268
  createCalendar(selectedDate, today, sundayFirst: false): string {
268
-
269
269
  const date = new Date(selectedDate);
270
270
  const month = date.getMonth();
271
271
  const year = date.getFullYear();
272
272
  const day = date.getDate();
273
- const selectedDateStr = `${year}-${String(month+1).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
274
- const daysThisMonth = this.numberDaysInMonth(year, month+1);
275
- const startOfMonth = new Date(`${year}-${String(month+1).padStart(2, "0")}-01`);
276
- const endOfMonth = new Date(`${year}-${String(month+1).padStart(2, "0")}-${daysThisMonth}`);
273
+ const selectedDateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
274
+ const daysThisMonth = this.numberDaysInMonth(year, month + 1);
275
+ const startOfMonth = new Date(`${year}-${String(month + 1).padStart(2, '0')}-01`);
276
+ const endOfMonth = new Date(`${year}-${String(month + 1).padStart(2, '0')}-${daysThisMonth}`);
277
277
  const startDay = startOfMonth.getDay() != 0 ? startOfMonth.getDay() : 7;
278
278
  const endDay = endOfMonth.getDay() != 0 ? endOfMonth.getDay() : 7;
279
279
  const loopDays = daysThisMonth + startDay + (7 - endDay - 1);
280
280
 
281
281
  // Get the previous month
282
282
  const prevMonthDate = new Date(selectedDate);
283
- prevMonthDate.setMonth(prevMonthDate.getMonth() -1);
283
+ prevMonthDate.setMonth(prevMonthDate.getMonth() - 1);
284
284
  const prevMonth = prevMonthDate.getMonth();
285
285
  const prevMonthYear = prevMonthDate.getFullYear();
286
286
  const daysPrevMonth = this.numberDaysInMonth(year, month);
@@ -292,49 +292,44 @@ class iamCalendar extends HTMLElement {
292
292
  const nextMonthYear = nextMonthDate.getFullYear();
293
293
 
294
294
  // Get calendars
295
-
296
- if(!this.hasAttribute('data-calendars')){
297
- Array.from(this.querySelectorAll('button[data-calendar]')).forEach((element) => {
298
295
 
296
+ if (!this.hasAttribute('data-calendars')) {
297
+ Array.from(this.querySelectorAll('button[data-calendar]')).forEach((element) => {
299
298
  // Scan through the buttons and look forunique calendar names
300
- if(!(this.calendars.includes(element.getAttribute('data-calendar'))))
299
+ if (!this.calendars.includes(element.getAttribute('data-calendar')))
301
300
  this.calendars.push(element.getAttribute('data-calendar'));
302
- })
301
+ });
303
302
  }
304
303
 
305
304
  // Create tbody string by looping through the number of days in month plus some days before and after
306
305
  let tbodyContent = `<tr>`;
307
306
 
308
- for (let i = (sundayFirst ? 0 : 1); i <= loopDays; i++) {
309
-
307
+ for (let i = sundayFirst ? 0 : 1; i <= loopDays; i++) {
310
308
  const loopDay = i - (startDay - 1);
311
- const loopDate = `${year}-${String(month+1).padStart(2, "0")}-${String(loopDay).padStart(2, "0")}`
312
- const dayOfWeek = i%7;
309
+ const loopDate = `${year}-${String(month + 1).padStart(2, '0')}-${String(loopDay).padStart(2, '0')}`;
310
+ const dayOfWeek = i % 7;
313
311
 
314
312
  tbodyContent += `<td class="day--${this.dayArray[dayOfWeek].toLowerCase()} ${loopDate == today ? 'today' : ''} ${loopDate == selectedDateStr ? 'selected' : ''} ${i < startDay ? 'prev-month' : ''} ${loopDay > daysThisMonth ? 'next-month' : ''}">`;
315
313
 
316
314
  // prev month days
317
- if(i < startDay){
318
-
315
+ if (i < startDay) {
319
316
  const adjustedLoopDay = daysPrevMonth - (startDay - 1 - i);
320
- const adjustedLoopDate = `${prevMonthYear}-${String(prevMonth+1).padStart(2, "0")}-${String(adjustedLoopDay).padStart(2, "0")}`
321
-
317
+ const adjustedLoopDate = `${prevMonthYear}-${String(prevMonth + 1).padStart(2, '0')}-${String(adjustedLoopDay).padStart(2, '0')}`;
318
+
322
319
  tbodyContent += `<time class="column-header" datetime="${adjustedLoopDate}" title="${this.dayArray[dayOfWeek]} ${loopDay} ${this.monthArray[prevMonth]} ${year}"><span class="day-of-week">${this.dayArray[dayOfWeek]} </span><span class="day">${adjustedLoopDay}</span> <span class="month">${this.monthArray[prevMonth]}</span></time>`;
323
320
  tbodyContent += this.addDay(adjustedLoopDate, this.calendars);
324
321
  }
325
322
 
326
- if(i >= startDay && loopDay <= daysThisMonth){
327
-
323
+ if (i >= startDay && loopDay <= daysThisMonth) {
328
324
  tbodyContent += `<time class="column-header" datetime="${loopDate}" title="${this.dayArray[dayOfWeek]} ${loopDay} ${this.monthArray[month]} ${year}"><span class="day-of-week">${this.dayArray[dayOfWeek]} </span><span class="day">${loopDay}</span> <span class="month">${this.monthArray[month]}</span></time>`;
329
325
  tbodyContent += this.addDay(loopDate, this.calendars);
330
326
  }
331
327
 
332
328
  // next month days
333
- if(loopDay > daysThisMonth){
334
-
329
+ if (loopDay > daysThisMonth) {
335
330
  const adjustedLoopDay = i - (startDay - 1) - daysThisMonth;
336
- const adjustedLoopDate = `${nextMonthYear}-${String(nextMonth+1).padStart(2, "0")}-${String(adjustedLoopDay).padStart(2, "0")}`
337
-
331
+ const adjustedLoopDate = `${nextMonthYear}-${String(nextMonth + 1).padStart(2, '0')}-${String(adjustedLoopDay).padStart(2, '0')}`;
332
+
338
333
  tbodyContent += `<time class="column-header" datetime="${adjustedLoopDate}" title="${this.dayArray[dayOfWeek]} ${loopDay} ${this.monthArray[nextMonth]} ${year}"><span class="day-of-week">${this.dayArray[dayOfWeek]} </span><span class="day">${adjustedLoopDay}</span> <span class="month">${this.monthArray[nextMonth]}</span></time>`;
339
334
  tbodyContent += this.addDay(adjustedLoopDate, this.calendars);
340
335
  }
@@ -342,10 +337,9 @@ class iamCalendar extends HTMLElement {
342
337
  tbodyContent += '</td>';
343
338
 
344
339
  // Close row and start a new one
345
- if(((sundayFirst ? i+1 : i) % 7) === 0 && i != loopDays){
340
+ if ((sundayFirst ? i + 1 : i) % 7 === 0 && i != loopDays) {
346
341
  tbodyContent += `</tr><tr>`;
347
342
  }
348
-
349
343
  }
350
344
  tbodyContent += '</tr>';
351
345
 
@@ -353,29 +347,24 @@ class iamCalendar extends HTMLElement {
353
347
  }
354
348
 
355
349
  addDay(day, calendars: []): string {
356
-
357
350
  let htmlTable = '<table class="table--day">';
358
351
  htmlTable += `<thead><tr><th>time</th>`;
359
- calendars.forEach(calendarTitle => {
360
-
352
+ calendars.forEach((calendarTitle) => {
361
353
  htmlTable += `<th class="column-header">${calendarTitle}</th>`;
362
354
  });
363
355
  htmlTable += `</tr></thead>`;
364
356
 
365
357
  htmlTable += `<tbody>`;
366
358
  htmlTable += `<tr class="allday"><th>All day</th>`;
367
- calendars.forEach(calendarTitle => {
368
-
359
+ calendars.forEach((calendarTitle) => {
369
360
  htmlTable += `<td datetime="${day}" data-calendar="${calendarTitle}"><span datetime="${day}"></span></td>`;
370
361
  });
371
362
  htmlTable += `</tr>`;
372
363
 
373
364
  for (let i = 0; i < 24; i++) {
374
-
375
365
  htmlTable += `<tr class="hour${i}"><th data-hour="${i}">${i}${i < 12 ? 'am' : 'pm'}</th>`;
376
- calendars.forEach(calendarTitle => {
377
-
378
- htmlTable += `<td datetime="${day}T${String(i).padStart(2, "0")}:00" data-calendar="${calendarTitle}"><span datetime="${day}T${String(i).padStart(2, "0")}:00"></span><span datetime="${day}T${String(i).padStart(2, "0")}:15"></span><span datetime="${day}T${String(i).padStart(2, "0")}:30"></span><span datetime="${day}T${String(i).padStart(2, "0")}:45"></span></td>`;
366
+ calendars.forEach((calendarTitle) => {
367
+ htmlTable += `<td datetime="${day}T${String(i).padStart(2, '0')}:00" data-calendar="${calendarTitle}"><span datetime="${day}T${String(i).padStart(2, '0')}:00"></span><span datetime="${day}T${String(i).padStart(2, '0')}:15"></span><span datetime="${day}T${String(i).padStart(2, '0')}:30"></span><span datetime="${day}T${String(i).padStart(2, '0')}:45"></span></td>`;
379
368
  });
380
369
  htmlTable += `</tr>`;
381
370
  }
@@ -386,68 +375,56 @@ class iamCalendar extends HTMLElement {
386
375
  }
387
376
 
388
377
  addEvents(): void {
389
-
390
378
  function setDefaultEventValues(component, element, index): void {
391
-
392
- const datetime = element.getAttribute('datetime')
379
+ const datetime = element.getAttribute('datetime');
393
380
  const datetimeArr = datetime.split('T');
394
381
  let id = element.getAttribute('id');
395
382
 
396
383
  // Add ID
397
- if(!element.hasAttribute('id')){
384
+ if (!element.hasAttribute('id')) {
398
385
  id = `event${uniqueID(index)}`;
399
- element.setAttribute('id',id);
386
+ element.setAttribute('id', id);
400
387
  }
401
388
 
402
389
  // Wrap content in span for formatting in week/day view
403
- if(!element.querySelector('span:not(.tooltip__content')){
390
+ if (!element.querySelector('span:not(.tooltip__content')) {
404
391
  element.innerHTML = `<span>${element.innerHTML}</span>`;
405
392
  }
406
393
 
407
394
  // Add event type enum so we can set the correct colours
408
395
  //if(!element.hasAttribute('data-event-type-enum') && element.hasAttribute('data-event-type')){
409
396
 
410
- const eventType = element.getAttribute('data-event-type');
397
+ const eventType = element.getAttribute('data-event-type');
411
398
 
412
- if(!component.eventTypes.includes(eventType))
413
- component.eventTypes.push(eventType);
399
+ if (!component.eventTypes.includes(eventType)) component.eventTypes.push(eventType);
414
400
 
415
- element.setAttribute('data-event-type-enum', component.eventTypes.indexOf(eventType) + 1);
401
+ element.setAttribute('data-event-type-enum', component.eventTypes.indexOf(eventType) + 1);
416
402
  //}
417
403
 
418
404
  // Add calendar enum so we can set the correct colours
419
- if(element.hasAttribute('data-calendar')){
420
-
405
+ if (element.hasAttribute('data-calendar')) {
421
406
  const calendar = element.getAttribute('data-calendar');
422
407
 
423
- if(!component.calendars.includes(calendar))
424
- component.calendars.push(calendar);
408
+ if (!component.calendars.includes(calendar)) component.calendars.push(calendar);
425
409
 
426
410
  element.setAttribute('data-calendar-enum', component.calendars.indexOf(calendar) + 1);
427
411
  }
428
-
429
- if(!element.hasAttribute('data-calendar-enum')){
412
+
413
+ if (!element.hasAttribute('data-calendar-enum')) {
430
414
  element.setAttribute('data-calendar-enum', 1);
431
415
  }
432
416
 
433
- if(!element.hasAttribute('data-hours') && !element.hasAttribute('data-days')){
434
-
435
- if(datetimeArr[1]){
417
+ if (!element.hasAttribute('data-hours') && !element.hasAttribute('data-days')) {
418
+ if (datetimeArr[1]) {
436
419
  element.setAttribute('data-hours', 1);
437
- }
438
- else {
439
-
420
+ } else {
440
421
  element.setAttribute('data-days', 1);
441
422
  }
442
423
  }
443
424
 
444
-
445
-
446
- let getRoundedDate = (minutes, d=new Date()) => {
447
-
448
- let ms = 1000 * 60 * minutes; // convert minutes to ms
449
- let roundedDate = new Date(Math.round(d.getTime() / ms) * ms);
450
-
425
+ const getRoundedDate = (minutes, d = new Date()): void => {
426
+ const ms = 1000 * 60 * minutes; // convert minutes to ms
427
+ const roundedDate = new Date(Math.round(d.getTime() / ms) * ms);
451
428
 
452
429
  const newMonth = roundedDate.getMonth();
453
430
  const newYear = roundedDate.getFullYear();
@@ -455,69 +432,82 @@ class iamCalendar extends HTMLElement {
455
432
  const newMinutes = roundedDate.getMinutes();
456
433
  const newHour = roundedDate.getHours();
457
434
 
458
- const strRoundedDate = `${newYear}-${String(newMonth+1).padStart(2, "0")}-${String(newDay).padStart(2, "0")}T${String(newHour).padStart(2, "0")}:${String(newMinutes).padStart(2, "0")}`;
459
-
435
+ const strRoundedDate = `${newYear}-${String(newMonth + 1).padStart(2, '0')}-${String(newDay).padStart(2, '0')}T${String(newHour).padStart(2, '0')}:${String(newMinutes).padStart(2, '0')}`;
460
436
 
461
437
  return strRoundedDate;
462
- }
463
-
438
+ };
464
439
 
465
- if(datetimeArr[1]){
440
+ if (datetimeArr[1]) {
466
441
  element.setAttribute('data-start', datetimeArr[1]);
467
442
  element.querySelector(':scope > span').setAttribute('data-start', datetimeArr[1]);
468
443
 
469
444
  const roundedDatetime = getRoundedDate(15, new Date(datetime));
470
- element.setAttribute('datetime',roundedDatetime);
471
-
472
-
473
- console.log(roundedDatetime);
445
+ element.setAttribute('datetime', roundedDatetime);
474
446
  }
475
447
 
476
-
477
- if(element.querySelector('.tooltip__content')){
478
-
448
+ if (element.querySelector('.tooltip__content')) {
479
449
  const tooltip = element.querySelector('.tooltip__content');
480
450
 
481
451
  tooltip.style.positionAnchor = `--${id}`;
482
452
 
483
- element.style.anchorName = `--${id}`
453
+ element.style.anchorName = `--${id}`;
484
454
  }
485
455
 
486
-
487
456
  element.classList.add('defaults-added');
488
457
  }
489
458
 
490
459
  function adjustEvent(component, element, continued: false): void {
491
-
492
460
  const datetime = element.getAttribute('datetime');
493
461
 
494
462
  const date = new Date(datetime);
495
- const dayOfWeek = date.getDay() ? date.getDay(): 7;
463
+ const dayOfWeek = date.getDay() ? date.getDay() : 7;
496
464
 
497
465
  // Locate where we need to add slots for the buttons to go - We need duplicate slots for the split view and fixed header
498
- const timeTd = component.shadowRoot.querySelector(`.month-wrapper .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_','')}"]` : ''}`);
499
- const timeTdHeader = component.shadowRoot.querySelector(`#week-view-header .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_','')}"]` : ''}`);
500
-
501
- if(timeTdHeader && timeTdHeader.closest('tr').classList.contains("allday")){
502
-
503
- // Add the alldays slot for the fixed header
504
- if(!timeTdHeader.querySelector(`slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_','')}` : ''}-header]"`)){
505
- timeTdHeader.querySelector(`span[datetime="${datetime}"]`).insertAdjacentHTML('beforeEnd',`<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_','')}` : ''}-header" class="${continued ? 'continued': ''}"></slot>`)
466
+ const timeTd = component.shadowRoot.querySelector(
467
+ `.month-wrapper .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_', '')}"]` : ''}`
468
+ );
469
+ const timeTdHeader = component.shadowRoot.querySelector(
470
+ `#week-view-header .table--day td:has(span[datetime="${datetime}"])${element.hasAttribute('data-calendar') ? `[data-calendar="${element.getAttribute('data-calendar').replace('_', '')}"]` : ''}`
471
+ );
472
+
473
+ if (timeTdHeader && timeTdHeader.closest('tr').classList.contains('allday')) {
474
+ // Add the alldays slot for the fixed header
475
+ if (
476
+ !timeTdHeader.querySelector(
477
+ `slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}-header]"`
478
+ )
479
+ ) {
480
+ timeTdHeader
481
+ .querySelector(`span[datetime="${datetime}"]`)
482
+ .insertAdjacentHTML(
483
+ 'beforeEnd',
484
+ `<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}-header" class="${continued ? 'continued' : ''}"></slot>`
485
+ );
506
486
  }
507
487
  }
508
-
509
-
488
+
510
489
  const dateTd = timeTd?.parentElement?.closest('td');
511
490
 
512
491
  // original event needs a slot name adding
513
- element.setAttribute('slot',`${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_','')}` : ''}`);
514
-
515
- // Add matching slot to the event element to have it show in the correct place on the calendar
516
- if(timeTd){
492
+ element.setAttribute(
493
+ 'slot',
494
+ `${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}`
495
+ );
517
496
 
497
+ // Add matching slot to the event element to have it show in the correct place on the calendar
498
+ if (timeTd) {
518
499
  // Add the default slot
519
- if(!timeTd.querySelector(`slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_','')}` : ''}"]`)){
520
- timeTd.querySelector(`span[datetime="${datetime}"]`).insertAdjacentHTML('beforeEnd',`<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_','')}` : ''}" class="${continued ? 'continued': ''}"></slot>`)
500
+ if (
501
+ !timeTd.querySelector(
502
+ `slot[name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}"]`
503
+ )
504
+ ) {
505
+ timeTd
506
+ .querySelector(`span[datetime="${datetime}"]`)
507
+ .insertAdjacentHTML(
508
+ 'beforeEnd',
509
+ `<slot name="${datetime}${element.hasAttribute('data-calendar') ? `-${element.getAttribute('data-calendar').replace('_', '')}` : ''}" class="${continued ? 'continued' : ''}"></slot>`
510
+ );
521
511
  }
522
512
 
523
513
  // Set the classes need to create the grey bars in the mobile month view
@@ -527,86 +517,76 @@ class iamCalendar extends HTMLElement {
527
517
 
528
518
  dateTd.setAttribute('data-events', parseInt(events) + 1);
529
519
 
530
- if((events + 1) > 2)
531
- dateTd.setAttribute('data-more', (parseInt(events) + 1) - 2);
520
+ if (events + 1 > 2) dateTd.setAttribute('data-more', parseInt(events) + 1 - 2);
532
521
 
533
522
  dateTd.setAttribute('data-hours', hours);
534
-
523
+
535
524
  dateTd.classList.add('has-event');
536
525
 
537
- if(timeTd.closest('tr').classList.contains('has-event'))
538
- timeTd.closest('tr').classList.add('multiple-event');
539
- else
540
- timeTd.closest('tr').classList.add('has-event');
526
+ if (timeTd.closest('tr').classList.contains('has-event')) timeTd.closest('tr').classList.add('multiple-event');
527
+ else timeTd.closest('tr').classList.add('has-event');
541
528
 
542
- if(hours > 2)
543
- dateTd.classList.add('multi-events');
529
+ if (hours > 2) dateTd.classList.add('multi-events');
544
530
 
545
- if(hours > 4)
546
- dateTd.classList.add('busy-day');
531
+ if (hours > 4) dateTd.classList.add('busy-day');
547
532
 
548
- if(element.hasAttribute('data-days'))
549
- dateTd.classList.add('all-day');
533
+ if (element.hasAttribute('data-days')) dateTd.classList.add('all-day');
550
534
 
551
- if(element.classList.contains('continued'))
552
- dateTd.classList.add('continued-day');
535
+ if (element.classList.contains('continued')) dateTd.classList.add('continued-day');
553
536
  }
554
537
 
555
538
  // Add CSS properties so we can control the size of the event elements for day and week view
556
- if(element.hasAttribute('data-hours'))
557
- element.style.setProperty('--event-height',`${parseInt(element.getAttribute('data-hours')) * (1.09375 * 4)}rem`);
558
-
559
- if(element.hasAttribute('data-days') && !element.classList.contains('processed')){
539
+ if (element.hasAttribute('data-hours'))
540
+ element.style.setProperty(
541
+ '--event-height',
542
+ `${parseInt(element.getAttribute('data-hours')) * (1.09375 * 4)}rem`
543
+ );
560
544
 
561
- const eventDayTotal = element.getAttribute('data-days')
545
+ if (element.hasAttribute('data-days') && !element.classList.contains('processed')) {
546
+ const eventDayTotal = element.getAttribute('data-days');
562
547
 
563
- element.style.setProperty('--event-width',`${eventDayTotal * 100}%`);
564
- element.style.setProperty('--event-max-width',`${(8 - dayOfWeek) * 100}%`);
548
+ element.style.setProperty('--event-width', `${eventDayTotal * 100}%`);
549
+ element.style.setProperty('--event-max-width', `${(8 - dayOfWeek) * 100}%`);
565
550
  element.classList.add('allday-event');
566
551
 
567
-
568
- // Create a duplicate event for each day the orginal
552
+ // Create a duplicate event for each day the orginal
569
553
  for (let i = 1; i < eventDayTotal; i++) {
570
-
571
554
  const cloneElement = element.cloneNode(true);
572
555
  cloneElement.removeAttribute('data-days');
573
556
  cloneElement.removeAttribute('style');
574
557
  cloneElement.classList.add('continued');
575
558
  cloneElement.classList.add('allday-event');
576
559
 
577
-
578
560
  const id = `event${uniqueID(i)}`;
579
- cloneElement.setAttribute('id',id);
580
-
581
-
582
- if(cloneElement.querySelector('.tooltip__content')){
561
+ cloneElement.setAttribute('id', id);
583
562
 
563
+ if (cloneElement.querySelector('.tooltip__content')) {
584
564
  const tooltip = cloneElement.querySelector('.tooltip__content');
585
565
  tooltip.style.positionAnchor = `--${id}`;
586
- cloneElement.style.anchorName = `--${id}`
566
+ cloneElement.style.anchorName = `--${id}`;
587
567
  }
588
568
 
589
-
590
569
  const newDate = new Date(datetime);
591
570
  newDate.setDate(newDate.getDate() + i);
592
571
 
593
572
  const newMonth = newDate.getMonth();
594
573
  const newYear = newDate.getFullYear();
595
574
  const newDay = newDate.getDate();
596
- const newDayOfWeek = newDate.getDay() ? newDate.getDay(): 7;
575
+ const newDayOfWeek = newDate.getDay() ? newDate.getDay() : 7;
597
576
 
598
- const strCloneEvent = `${newYear}-${String(newMonth+1).padStart(2, "0")}-${String(newDay).padStart(2, "0")}`;
577
+ const strCloneEvent = `${newYear}-${String(newMonth + 1).padStart(2, '0')}-${String(newDay).padStart(2, '0')}`;
599
578
 
600
- cloneElement.setAttribute('data-original-datetime',element.getAttribute('datetime'));
601
- cloneElement.setAttribute('datetime',strCloneEvent);
579
+ cloneElement.setAttribute('data-original-datetime', element.getAttribute('datetime'));
580
+ cloneElement.setAttribute('datetime', strCloneEvent);
602
581
 
603
582
  element.after(cloneElement); // Add after original
604
583
  adjustEvent(component, cloneElement, true);
605
584
 
606
- if(newDayOfWeek == 1){ // Monday
585
+ if (newDayOfWeek == 1) {
586
+ // Monday
607
587
 
608
- cloneElement.style.setProperty('--event-width',`${(eventDayTotal - i) * 100}%`);
609
- cloneElement.style.setProperty('--event-max-width',`${(8 - newDayOfWeek) * 100}%`);
588
+ cloneElement.style.setProperty('--event-width', `${(eventDayTotal - i) * 100}%`);
589
+ cloneElement.style.setProperty('--event-max-width', `${(8 - newDayOfWeek) * 100}%`);
610
590
 
611
591
  cloneElement.classList.remove('continued');
612
592
  }
@@ -620,21 +600,17 @@ class iamCalendar extends HTMLElement {
620
600
  this.pauseObserver = true;
621
601
 
622
602
  Array.from(this.querySelectorAll('button[datetime]')).forEach((element, index) => {
623
-
624
- setDefaultEventValues(this,element,index);
603
+ setDefaultEventValues(this, element, index);
625
604
  adjustEvent(this, element);
605
+ });
626
606
 
627
- });
628
-
629
607
  setTimeout(() => {
630
608
  this.pauseObserver = false;
631
- }, "500");
632
-
609
+ }, '500');
633
610
  }
634
611
 
635
612
  addJSEvents(component): void {
636
-
637
- // Add events to the newly created calendar
613
+ // Add events to the newly created calendar
638
614
  const title = component.shadowRoot?.querySelector('.calendar__title');
639
615
  const datePicker = component.shadowRoot?.querySelector(`#date`);
640
616
  const viewPicker = component.shadowRoot?.querySelector(`#view`);
@@ -644,274 +620,240 @@ class iamCalendar extends HTMLElement {
644
620
  const date = today.getDate();
645
621
  const month = today.getMonth();
646
622
  const year = today.getFullYear();
647
- const strToday = `${year}-${String(month+1).padStart(2, "0")}-${String(date).padStart(2, "0")}`;
623
+ const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
648
624
 
649
625
  const tbody = component.shadowRoot?.querySelector('#calendar > table > tbody');
650
626
 
651
627
  // clicking on the day istelf
652
- Array.from(component.shadowRoot.querySelectorAll('.month-wrapper > table > tbody > tr > td:has(slot)')).forEach((element) => {
653
-
654
- element.addEventListener('click', (event) => {
655
-
656
- if(!event.target.matches('button')) {
657
-
658
- const elementDate = element.querySelector('time').getAttribute('datetime');
659
- datePicker.value = elementDate;
660
-
661
- Array.from(tbody.querySelectorAll(':scope > tr > td')).forEach((innerelement) => {
662
- innerelement.classList.remove('selected');
663
- });
664
-
665
- element.classList.add('selected');
666
-
667
- // Go to day if the in month view with out split view enabled
668
-
669
- if(component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == "month"){
670
-
671
- Array.from(component.querySelectorAll(`[data-slot]`)).forEach((button) => {
672
- button.setAttribute('slot',button.getAttribute('data-slot'));
628
+ Array.from(component.shadowRoot.querySelectorAll('.month-wrapper > table > tbody > tr > td:has(slot)')).forEach(
629
+ (element) => {
630
+ element.addEventListener('click', (event) => {
631
+ if (!event.target.matches('button')) {
632
+ const elementDate = element.querySelector('time').getAttribute('datetime');
633
+ datePicker.value = elementDate;
634
+
635
+ Array.from(tbody.querySelectorAll(':scope > tr > td')).forEach((innerelement) => {
636
+ innerelement.classList.remove('selected');
673
637
  });
674
638
 
675
- Array.from(component.querySelectorAll(`[slot^="${datePicker.value}"]`)).forEach((button) => {
676
-
677
- button.setAttribute('data-slot',button.getAttribute('slot'));
678
- button.removeAttribute('slot');
679
- });
680
-
681
- }
682
- else if(!component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == "month"){
683
-
684
- viewPicker.value = "day";
685
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
686
- component.scrollIntoPlace();
639
+ element.classList.add('selected');
640
+
641
+ // Go to day if the in month view with out split view enabled
642
+
643
+ if (component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == 'month') {
644
+ Array.from(component.querySelectorAll(`[data-slot]`)).forEach((button) => {
645
+ button.setAttribute('slot', button.getAttribute('data-slot'));
646
+ });
647
+
648
+ Array.from(component.querySelectorAll(`[slot^="${datePicker.value}"]`)).forEach((button) => {
649
+ button.setAttribute('data-slot', button.getAttribute('slot'));
650
+ button.removeAttribute('slot');
651
+ });
652
+ } else if (!component.shadowRoot.querySelector('[name="split"]:checked') && viewPicker.value == 'month') {
653
+ viewPicker.value = 'day';
654
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
655
+ component.scrollIntoPlace();
656
+ }
657
+ if (viewPicker.value == 'year') {
658
+ viewPicker.value = 'month';
659
+ yearView?.innerHTML = '';
660
+ tbody?.innerHTML = component.createCalendar(datePicker.value, strToday);
661
+ component.addEvents();
662
+ }
687
663
  }
688
- if(viewPicker.value == "year"){
689
-
690
- viewPicker.value = "month";
691
- yearView?.innerHTML = '';
692
- tbody?.innerHTML = component.createCalendar(datePicker.value, strToday);
693
- component.addEvents();
694
- }
695
- }
696
- });
697
- });
664
+ });
665
+ }
666
+ );
698
667
 
699
668
  // Drag and drop
700
669
  component.shadowRoot?.querySelectorAll(`#calendar .table--day td span`).forEach((element) => {
701
-
702
- element.addEventListener("dragover", (ev) => {
670
+ element.addEventListener('dragover', (ev) => {
703
671
  ev.preventDefault();
704
672
  return false;
705
673
  });
706
674
 
707
- element.addEventListener("dragenter", (ev) => {
675
+ element.addEventListener('dragenter', (ev) => {
708
676
  ev.preventDefault();
709
677
  element.classList.add('dragover');
710
678
  });
711
679
 
712
- element.addEventListener("dragleave", (ev) => {
680
+ element.addEventListener('dragleave', (ev) => {
713
681
  ev.preventDefault();
714
682
  element.classList.remove('dragover');
715
683
  });
716
684
 
717
- element.addEventListener("drop", (ev) => {
685
+ element.addEventListener('drop', (ev) => {
718
686
  ev.preventDefault();
719
-
720
- const droppedElement = component.querySelector(`#${ev.dataTransfer.getData("text")}`);
687
+
688
+ const droppedElement = component.querySelector(`#${ev.dataTransfer.getData('text')}`);
721
689
  const td = element.closest('td');
722
690
  const datetime = element.getAttribute('datetime');
723
691
 
724
692
  element.classList.remove('dragover');
725
693
 
726
694
  // Add a new slot to te span if needed
727
- if(!element.querySelector(`slot[name="${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_','')}]` : ''}]"`)){
728
- element.insertAdjacentHTML('beforeEnd',`<slot name="${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_','')}` : ''}" class=""></slot>`)
695
+ if (
696
+ !element.querySelector(
697
+ `slot[name="${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_', '')}]` : ''}]"`
698
+ )
699
+ ) {
700
+ element.insertAdjacentHTML(
701
+ 'beforeEnd',
702
+ `<slot name="${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_', '')}` : ''}" class=""></slot>`
703
+ );
729
704
  }
730
705
 
731
706
  // Update the slot attribute to match the slot the event has been dropped on
732
- droppedElement?.setAttribute('slot',`${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_','')}` : ''}`)
707
+ droppedElement?.setAttribute(
708
+ 'slot',
709
+ `${datetime}${td.hasAttribute('data-calendar') ? `-${td.getAttribute('data-calendar').replace('_', '')}` : ''}`
710
+ );
733
711
  });
734
-
735
712
  });
736
713
 
737
- // Watch for the event being resized
714
+ // Watch for the event being resized
738
715
  const resizeObserver = new ResizeObserver((entries) => {
739
716
  for (const entry of entries) {
740
-
741
- if(entry.target.classList.contains('mousedown'))
742
- entry.target.classList.add('resizing');
717
+ if (entry.target.classList.contains('mousedown')) entry.target.classList.add('resizing');
743
718
  }
744
719
  });
745
720
 
746
- if(component.hasAttribute('data-drag')) {
747
-
721
+ if (component.hasAttribute('data-drag')) {
748
722
  component.querySelectorAll(`button:not([draggable])`).forEach((element) => {
749
-
750
- element.setAttribute('draggable','true');
751
- element.addEventListener("dragstart", (ev) => {
752
- ev.dataTransfer.setData("text", ev.target.id); // save the id for when dropped
723
+ element.setAttribute('draggable', 'true');
724
+ element.addEventListener('dragstart', (ev) => {
725
+ ev.dataTransfer.setData('text', ev.target.id); // save the id for when dropped
753
726
  });
754
727
 
755
728
  // set onbserver
756
729
  resizeObserver.observe(element);
757
730
 
758
- element.addEventListener("mousedown", (ev) => {
731
+ element.addEventListener('mousedown', (ev) => {
759
732
  element.classList.add('mousedown');
760
733
  });
761
734
 
762
- element.addEventListener("click", (ev) => {
763
-
764
- if(element.classList.contains('resizing')){
765
-
735
+ element.addEventListener('click', (ev) => {
736
+ if (element.classList.contains('resizing')) {
766
737
  ev.stopPropagation();
767
738
  ev.stopImmediatePropagation();
768
739
 
769
740
  element.classList.remove('mousedown');
770
741
  element.classList.remove('resizing');
771
-
742
+
772
743
  // Work out the evnt length in hours and set the height
773
744
  const span = this.shadowRoot.querySelector(`span[datetime="${element.getAttribute('datetime')}"]`);
774
745
  const spanStyles = window.getComputedStyle(span);
775
- const hours = Math.round(parseInt(element.style.height)/parseInt(spanStyles.getPropertyValue("height"))) / 4;
746
+ const hours =
747
+ Math.round(parseInt(element.style.height) / parseInt(spanStyles.getPropertyValue('height'))) / 4;
776
748
 
777
- element.setAttribute('data-hours',hours);
778
- element.style.setProperty('--event-height',`${hours * (1.09375 * 4)}rem`);
749
+ element.setAttribute('data-hours', hours);
750
+ element.style.setProperty('--event-height', `${hours * (1.09375 * 4)}rem`);
779
751
 
780
- element.style.height = "";
752
+ element.style.height = '';
781
753
 
782
754
  // to do dispatch event
783
755
  }
784
756
  });
785
-
786
757
  });
787
758
  }
788
759
 
789
760
  component.querySelectorAll(`button`).forEach((element) => {
790
-
791
- element.addEventListener("contextmenu", (event) => {
792
-
761
+ element.addEventListener('contextmenu', (event) => {
793
762
  event.preventDefault();
794
763
  event.stopPropagation();
795
-
796
764
  });
797
765
  });
798
766
 
799
767
  component.shadowRoot?.querySelectorAll(`.month-wrapper > table > tbody > tr > td`).forEach((element) => {
800
-
801
- element.addEventListener("contextmenu", (event) => {
802
-
768
+ element.addEventListener('contextmenu', (event) => {
803
769
  event.preventDefault();
804
770
 
805
771
  const customEvent = new CustomEvent('right-click', {
806
- detail: {
807
- 'clientX': event.clientX,
808
- 'clientY': event.clientY,
809
- 'element': element,
810
- 'datetime': element.querySelector('time').getAttribute('datetime')
772
+ detail: {
773
+ clientX: event.clientX,
774
+ clientY: event.clientY,
775
+ element: element,
776
+ datetime: element.querySelector('time').getAttribute('datetime'),
811
777
  },
812
778
  });
813
779
 
814
780
  console.log(element);
815
781
  this.dispatchEvent(customEvent);
816
-
817
782
  });
818
783
  });
819
784
  }
820
785
 
821
786
  paginateDate(direction, view, currentDate): string {
822
-
823
- if(view == "month" || view == "list") {
824
-
787
+ if (view == 'month' || view == 'list') {
825
788
  const selectedDate = new Date(currentDate);
826
789
 
827
- if(direction == "next")
828
- selectedDate.setMonth(selectedDate.getMonth() + 1);
829
- else
830
- selectedDate.setMonth(selectedDate.getMonth() - 1);
790
+ if (direction == 'next') selectedDate.setMonth(selectedDate.getMonth() + 1);
791
+ else selectedDate.setMonth(selectedDate.getMonth() - 1);
831
792
 
832
793
  const month = selectedDate.getMonth() + 1;
833
794
  const year = selectedDate.getFullYear();
834
795
 
835
- const strNextMonth = `${year}-${String(month).padStart(2, "0")}-01`;
836
-
837
- return strNextMonth;
838
- }
839
- else if(view == "week") {
796
+ const strNextMonth = `${year}-${String(month).padStart(2, '0')}-01`;
840
797
 
798
+ return strNextMonth;
799
+ } else if (view == 'week') {
841
800
  //const selectedDate = new Date(currentDate);
842
801
  const monday = this.setToMonday(new Date(currentDate));
843
802
 
844
- if(direction == "next")
845
- monday.setDate(monday.getDate() + 7);
846
- else
847
- monday.setDate(monday.getDate() - 7);
848
-
803
+ if (direction == 'next') monday.setDate(monday.getDate() + 7);
804
+ else monday.setDate(monday.getDate() - 7);
849
805
 
850
806
  const date = monday.getDate();
851
807
  const month = monday.getMonth() + 1;
852
808
  const year = monday.getFullYear();
853
- const strNextWeek = `${year}-${String(month).padStart(2, "0")}-${String(date).padStart(2, "0")}`;
809
+ const strNextWeek = `${year}-${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
854
810
 
855
811
  return strNextWeek;
856
- }
857
- else if(view == "year"){
858
-
812
+ } else if (view == 'year') {
859
813
  const selectedDate = new Date(currentDate);
860
814
 
861
- if(direction == "next")
862
- selectedDate.setYear(selectedDate.getFullYear() + 1);
863
- else
864
- selectedDate.setYear(selectedDate.getFullYear() - 1);
815
+ if (direction == 'next') selectedDate.setYear(selectedDate.getFullYear() + 1);
816
+ else selectedDate.setYear(selectedDate.getFullYear() - 1);
865
817
 
866
818
  const year = selectedDate.getFullYear();
867
819
  const month = selectedDate.getMonth() + 1;
868
820
 
869
- const strNextMonth = `${year}-${String(month).padStart(2, "0")}-01`;
870
-
821
+ const strNextMonth = `${year}-${String(month).padStart(2, '0')}-01`;
822
+
871
823
  return strNextMonth;
872
824
  }
873
825
 
874
826
  const nextDay = new Date(currentDate);
875
827
 
876
- if(direction == "next")
877
- nextDay.setDate(nextDay.getDate() + 1);
878
- else
879
- nextDay.setDate(nextDay.getDate() - 1);
828
+ if (direction == 'next') nextDay.setDate(nextDay.getDate() + 1);
829
+ else nextDay.setDate(nextDay.getDate() - 1);
880
830
 
881
831
  const date = nextDay.getDate();
882
832
  const month = nextDay.getMonth() + 1;
883
833
  const year = nextDay.getFullYear();
884
- const strNextDay = `${year}-${String(month).padStart(2, "0")}-${String(date).padStart(2, "0")}`;
885
-
834
+ const strNextDay = `${year}-${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
835
+
886
836
  return strNextDay;
887
837
  }
888
838
 
889
-
890
839
  setWeekDay(): void {
891
-
892
- this.shadowRoot?.querySelectorAll('.out-of-hours').forEach(element => {
840
+ this.shadowRoot?.querySelectorAll('.out-of-hours').forEach((element) => {
893
841
  element.classList.remove('out-of-hours');
894
842
  });
895
843
 
896
-
897
844
  const startTime = parseInt(this.shadowRoot?.querySelector('#start-time').value.split(':')[0]);
898
845
  const endTime = parseInt(this.shadowRoot?.querySelector('#end-time').value.split(':')[0]);
899
846
 
900
- this.shadowRoot?.querySelectorAll('[data-hour]').forEach(element => {
901
-
847
+ this.shadowRoot?.querySelectorAll('[data-hour]').forEach((element) => {
902
848
  const hour = parseInt(element.getAttribute('data-hour'));
903
849
 
904
- if(hour < startTime)
905
- element.classList.add('out-of-hours');
850
+ if (hour < startTime) element.classList.add('out-of-hours');
906
851
 
907
- if(hour >= endTime)
908
- element.classList.add('out-of-hours');
852
+ if (hour >= endTime) element.classList.add('out-of-hours');
909
853
  });
910
-
911
854
  }
912
855
 
913
856
  scrollIntoPlace(): void {
914
-
915
857
  const fs = parseInt(window.getComputedStyle(document.body).getPropertyValue('font-size'));
916
858
  const startTime = parseInt(this.shadowRoot?.querySelector('#start-time').value.split(':')[0]);
917
859
  const scrollPos = startTime * (4.5 * fs);
@@ -919,38 +861,31 @@ class iamCalendar extends HTMLElement {
919
861
  const wrapper = this.shadowRoot.querySelector('.calendar__wrapper');
920
862
 
921
863
  // scroll
922
- if(viewPicker.value == "week")
923
- wrapper.scrollTo(0,scrollPos); // TO DO work out how much to scroll by
924
- else if(viewPicker.value == "day"){
925
- wrapper.scrollTo(0,scrollPos); // TO DO work out how much to scroll by
864
+ if (viewPicker.value == 'week')
865
+ wrapper.scrollTo(0, scrollPos); // TO DO work out how much to scroll by
866
+ else if (viewPicker.value == 'day') {
867
+ wrapper.scrollTo(0, scrollPos); // TO DO work out how much to scroll by
926
868
  }
927
869
  }
928
870
 
929
871
  setupSettings(): void {
930
-
931
872
  const settingsButton = this.shadowRoot?.querySelector('#settings-button');
932
873
  const settingsDialog = this.shadowRoot?.querySelector('#settings');
933
874
 
934
875
  // Setup the pre-defined attributes and display the form elements to match
935
- if(this.hasAttribute('data-hide-weekends'))
936
- settingsDialog.querySelector('#weekends-no').checked = true;
937
- else
938
- settingsDialog.querySelector('#weekends-yes').checked = true;
876
+ if (this.hasAttribute('data-hide-weekends')) settingsDialog.querySelector('#weekends-no').checked = true;
877
+ else settingsDialog.querySelector('#weekends-yes').checked = true;
939
878
 
940
- if(this.hasAttribute('data-start-time'))
879
+ if (this.hasAttribute('data-start-time'))
941
880
  settingsDialog.querySelector('#start-time').value = this.getAttribute('data-start-time');
942
- else
943
- this.setAttribute('data-start-time', settingsDialog.querySelector('#start-time').value);
881
+ else this.setAttribute('data-start-time', settingsDialog.querySelector('#start-time').value);
944
882
 
945
- if(this.hasAttribute('data-end-time'))
883
+ if (this.hasAttribute('data-end-time'))
946
884
  settingsDialog.querySelector('#end-time').value = this.getAttribute('data-end-time');
947
- else
948
- this.setAttribute('data-end-time', settingsDialog.querySelector('#end-time').value);
949
-
885
+ else this.setAttribute('data-end-time', settingsDialog.querySelector('#end-time').value);
950
886
 
951
887
  // open dialog
952
- settingsButton?.addEventListener('click', ()=> {
953
-
888
+ settingsButton?.addEventListener('click', () => {
954
889
  settingsDialog.showModal();
955
890
  settingsDialog.focus();
956
891
 
@@ -960,18 +895,12 @@ class iamCalendar extends HTMLElement {
960
895
  });
961
896
 
962
897
  // On clicking the save button, adjust the data attributes
963
- settingsDialog?.addEventListener('click', (event)=> {
964
-
898
+ settingsDialog?.addEventListener('click', (event) => {
965
899
  if (event && event.target.matches('button')) {
900
+ if (event.target.matches('.btn-primary')) {
901
+ if (settingsDialog.querySelector('#weekends-no:checked')) this.setAttribute('data-hide-weekends', 'true');
902
+ else this.removeAttribute('data-hide-weekends');
966
903
 
967
- if(event.target.matches('.btn-primary')){
968
-
969
- if(settingsDialog.querySelector('#weekends-no:checked'))
970
- this.setAttribute('data-hide-weekends','true');
971
- else
972
- this.removeAttribute('data-hide-weekends');
973
-
974
-
975
904
  this.setAttribute('data-start-time', settingsDialog.querySelector('#start-time').value);
976
905
  this.setAttribute('data-end-time', settingsDialog.querySelector('#end-time').value);
977
906
 
@@ -979,7 +908,6 @@ class iamCalendar extends HTMLElement {
979
908
 
980
909
  const customEvent = new CustomEvent('save-settings');
981
910
  this.dispatchEvent(customEvent);
982
-
983
911
  }
984
912
 
985
913
  const customEvent = new CustomEvent('close-settings');
@@ -991,43 +919,37 @@ class iamCalendar extends HTMLElement {
991
919
  }
992
920
 
993
921
  setTime(): void {
994
-
995
- if(!this.hasAttribute('data-time')){
996
-
922
+ if (!this.hasAttribute('data-time')) {
997
923
  const today = new Date();
998
-
924
+
999
925
  const hour = today.getHours();
1000
926
  const minute = today.getMinutes();
1001
927
  const time = `${hour}:${minute}`;
1002
928
 
1003
- this.setAttribute('data-time',time);
929
+ this.setAttribute('data-time', time);
1004
930
  }
1005
931
 
1006
- if(this.hasAttribute('data-time')){
1007
-
932
+ if (this.hasAttribute('data-time')) {
1008
933
  const time = this.getAttribute('data-time');
1009
934
  const hour = parseInt(time.split(':')[0]);
1010
935
  const minute = parseInt(time.split(':')[1]);
1011
936
 
1012
937
  this.shadowRoot?.querySelectorAll(`[data-hour="${hour}"]`).forEach((element) => {
1013
-
1014
- element.setAttribute('data-time',time);
938
+ element.setAttribute('data-time', time);
1015
939
  element.classList.add('column-header');
1016
- element.closest('tr')?.style.setProperty('--minute-pos',((minute / 60) * 100) + '%');
940
+ element.closest('tr')?.style.setProperty('--minute-pos', (minute / 60) * 100 + '%');
1017
941
  });
1018
942
  }
1019
943
  }
1020
944
 
1021
945
  getYearView(selectedDate, today, sundayFirst: false): string {
1022
-
1023
- let yearViewStr = "";
946
+ let yearViewStr = '';
1024
947
 
1025
- for(let i = 0; i < 12; i++){
1026
-
948
+ for (let i = 0; i < 12; i++) {
1027
949
  console.log(selectedDate);
1028
950
  const selectedDateObj = new Date(selectedDate);
1029
951
  const selectedYear = selectedDateObj.getFullYear();
1030
- const selectedFormattedDate = `${selectedYear}-${String(i+1).padStart(2, "0")}-01`;
952
+ const selectedFormattedDate = `${selectedYear}-${String(i + 1).padStart(2, '0')}-01`;
1031
953
 
1032
954
  yearViewStr += `<div class='month-wrapper'>
1033
955
  <time class="column-header">${this.monthArray[i]}</time>
@@ -1045,10 +967,7 @@ class iamCalendar extends HTMLElement {
1045
967
  return yearViewStr;
1046
968
  }
1047
969
 
1048
-
1049
-
1050
970
  connectedCallback(): void {
1051
-
1052
971
  // To to transform the below into variables of component to make more re-usable
1053
972
  const title = this.shadowRoot?.querySelector('.calendar__title');
1054
973
  const tbody = this.shadowRoot?.querySelector('#calendar > table > tbody');
@@ -1066,8 +985,6 @@ class iamCalendar extends HTMLElement {
1066
985
  const sundayFirst = this.hasAttribute('data-sunday-first');
1067
986
 
1068
987
  const splitButton = this.shadowRoot?.querySelector(`[name="split"]`);
1069
-
1070
-
1071
988
 
1072
989
  // set the table head - starting by monday by default but can be changed to sunday
1073
990
  thead?.innerHTML = this.createThead(sundayFirst);
@@ -1078,85 +995,71 @@ class iamCalendar extends HTMLElement {
1078
995
  const date = today.getDate();
1079
996
  const month = today.getMonth();
1080
997
  const year = today.getFullYear();
1081
- const strToday = `${year}-${String(month+1).padStart(2, "0")}-${String(date).padStart(2, "0")}`;
998
+ const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
1082
999
 
1083
1000
  datePicker.value = strToday;
1084
1001
 
1085
1002
  // Setup the view, month being default
1086
- if(this.hasAttribute('data-view'))
1087
- viewPicker.value = this.getAttribute('data-view');
1003
+ if (this.hasAttribute('data-view')) viewPicker.value = this.getAttribute('data-view');
1088
1004
  else {
1089
- this.setAttribute('data-view', "month");
1090
- viewPicker.value = "month";
1005
+ this.setAttribute('data-view', 'month');
1006
+ viewPicker.value = 'month';
1091
1007
  }
1092
1008
 
1093
- if(this.hasAttribute('data-views'))
1094
- viewPicker?.setAttribute('data-views', this.getAttribute('data-views'));
1009
+ if (this.hasAttribute('data-views')) viewPicker?.setAttribute('data-views', this.getAttribute('data-views'));
1095
1010
 
1096
1011
  // Create the calendars
1097
- if(this.hasAttribute('data-calendars')){
1098
-
1012
+ if (this.hasAttribute('data-calendars')) {
1099
1013
  this.calendars = this.getAttribute('data-calendars').split(',');
1100
1014
 
1101
- this.calendars.forEach((item,index) => {
1015
+ this.calendars.forEach((item, index) => {
1102
1016
  this.calendars[index] = item.trim();
1103
1017
  });
1104
1018
  }
1105
1019
 
1106
-
1107
-
1108
1020
  // Setup the settings dialog
1109
1021
  this.setupSettings();
1110
1022
 
1111
-
1112
-
1113
- // Setup the calendar then adjust and add events
1114
- title?.innerHTML = this.getTitle(strToday,viewPicker.value);
1023
+ // Setup the calendar then adjust and add events
1024
+ title?.innerHTML = this.getTitle(strToday, viewPicker.value);
1115
1025
 
1116
1026
  const calendarHtml = this.createCalendar(strToday, strToday, sundayFirst);
1117
1027
  tbody?.innerHTML = calendarHtml;
1118
1028
  //tbodySplit?.innerHTML = calendarHtml;
1119
1029
  weekViewHeader?.innerHTML = calendarHtml;
1120
-
1121
-
1122
- if(viewPicker.value == "year"){
1123
1030
 
1031
+ if (viewPicker.value == 'year') {
1124
1032
  yearView?.innerHTML = this.getYearView(datePicker.value, strToday, sundayFirst);
1125
1033
  tbody?.innerHTML = '';
1126
1034
  }
1127
-
1035
+
1128
1036
  this.addEvents();
1129
1037
  this.addJSEvents(this);
1130
1038
  this.setWeekDay(); // Working hours
1131
1039
  this.setTime(); // Month and day view has a current time indicator
1132
1040
  this.scrollIntoPlace(); // Scroll into place - month and day view needs have the weekday hours in place
1133
-
1041
+
1134
1042
  // #region Add events for the basic top controls
1135
1043
 
1136
1044
  // Remove the slot attribute on selected days when in split mode
1137
- splitButton?.addEventListener('change', ()=> {
1138
-
1139
- if(splitButton.checked){
1045
+ splitButton?.addEventListener('change', () => {
1046
+ if (splitButton.checked) {
1140
1047
  Array.from(this.querySelectorAll(`[slot^="${datePicker.value}"]`)).forEach((button) => {
1141
-
1142
- button.setAttribute('data-slot',button.getAttribute('slot'));
1048
+ button.setAttribute('data-slot', button.getAttribute('slot'));
1143
1049
  button.removeAttribute('slot');
1144
1050
  });
1145
- }
1146
- else {
1051
+ } else {
1147
1052
  Array.from(this.querySelectorAll(`[data-slot]`)).forEach((button) => {
1148
- button.setAttribute('slot',button.getAttribute('data-slot'));
1053
+ button.setAttribute('slot', button.getAttribute('data-slot'));
1149
1054
  });
1150
1055
  }
1151
1056
  });
1152
1057
 
1153
1058
  const resizeObserver = new ResizeObserver((entries) => {
1154
-
1155
1059
  const splitButtonDisplayed = window.getComputedStyle(splitButton?.parentElement, null).display;
1156
- if(splitButtonDisplayed == "none"){
1157
-
1060
+ if (splitButtonDisplayed == 'none') {
1158
1061
  Array.from(this.querySelectorAll(`[data-slot]`)).forEach((button) => {
1159
- button.setAttribute('slot',button.getAttribute('data-slot'));
1062
+ button.setAttribute('slot', button.getAttribute('data-slot'));
1160
1063
  });
1161
1064
  splitButton.checked = false;
1162
1065
  }
@@ -1164,38 +1067,29 @@ class iamCalendar extends HTMLElement {
1164
1067
 
1165
1068
  resizeObserver.observe(this);
1166
1069
 
1167
- viewPicker?.addEventListener('change', ()=> {
1168
-
1169
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
1070
+ viewPicker?.addEventListener('change', () => {
1071
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
1170
1072
  this.setAttribute('data-view', viewPicker.value);
1171
1073
 
1172
- if(viewPicker.value == "week"){
1173
-
1074
+ if (viewPicker.value == 'week') {
1174
1075
  Array.from(this.querySelectorAll(`.allday-event`)).forEach((button) => {
1175
-
1176
- button.setAttribute('slot',button.getAttribute('slot')+'-header');
1076
+ button.setAttribute('slot', button.getAttribute('slot') + '-header');
1177
1077
  });
1178
- }
1179
- else {
1078
+ } else {
1180
1079
  Array.from(this.querySelectorAll(`.allday-event`)).forEach((button) => {
1181
-
1182
- button.setAttribute('slot',button.getAttribute('slot')?.replace('-header',''));
1080
+ button.setAttribute('slot', button.getAttribute('slot')?.replace('-header', ''));
1183
1081
  });
1184
1082
  }
1185
1083
 
1084
+ if (viewPicker.value == 'week' || viewPicker.value == 'day') this.scrollIntoPlace();
1186
1085
 
1187
- if(viewPicker.value == "week" || viewPicker.value == "day")
1188
- this.scrollIntoPlace();
1189
-
1190
- if(viewPicker.value != "month"){
1191
-
1086
+ if (viewPicker.value != 'month') {
1192
1087
  Array.from(this.querySelectorAll(`[data-slot^="${datePicker.value}"]`)).forEach((button) => {
1193
- button.setAttribute('slot',button.getAttribute('data-slot'));
1088
+ button.setAttribute('slot', button.getAttribute('data-slot'));
1194
1089
  });
1195
1090
  }
1196
1091
 
1197
- if(viewPicker.value == "year"){
1198
-
1092
+ if (viewPicker.value == 'year') {
1199
1093
  yearView?.innerHTML = this.getYearView(datePicker.value, strToday, sundayFirst);
1200
1094
  tbody?.innerHTML = '';
1201
1095
  this.addEvents();
@@ -1203,8 +1097,7 @@ class iamCalendar extends HTMLElement {
1203
1097
  this.setWeekDay(); // Working hours
1204
1098
  this.setTime(); // Month and day view has a current time indicator
1205
1099
  this.scrollIntoPlace();
1206
- }
1207
- else if(tbody?.innerHTML == "") {
1100
+ } else if (tbody?.innerHTML == '') {
1208
1101
  yearView?.innerHTML = '';
1209
1102
  tbody?.innerHTML = this.createCalendar(datePicker.value, strToday);
1210
1103
  this.addEvents();
@@ -1215,29 +1108,24 @@ class iamCalendar extends HTMLElement {
1215
1108
  }
1216
1109
 
1217
1110
  const customEvent = new CustomEvent('change-view', {
1218
- detail: {
1219
- 'view': viewPicker.value,
1220
- 'date': datePicker.value
1111
+ detail: {
1112
+ view: viewPicker.value,
1113
+ date: datePicker.value,
1221
1114
  },
1222
1115
  });
1223
1116
 
1224
1117
  this.dispatchEvent(customEvent);
1225
1118
  });
1226
1119
 
1227
-
1228
- function resetCalendar(component): void{
1229
-
1230
- if(viewPicker.value == "year"){
1231
-
1120
+ function resetCalendar(component): void {
1121
+ if (viewPicker.value == 'year') {
1232
1122
  yearView?.innerHTML = component.getYearView(datePicker.value, strToday, sundayFirst);
1233
1123
  tbody?.innerHTML = '';
1234
1124
  component.addEvents();
1235
1125
  component.addJSEvents(component);
1236
1126
  component.setWeekDay(); // Working hours
1237
1127
  component.setTime(); // Month and day view has a current time indicator
1238
- }
1239
- else {
1240
-
1128
+ } else {
1241
1129
  const calendarHtml = component.createCalendar(datePicker.value, strToday);
1242
1130
  tbody?.innerHTML = calendarHtml;
1243
1131
  //tbodySplit?.innerHTML = calendarHtml;
@@ -1250,58 +1138,55 @@ class iamCalendar extends HTMLElement {
1250
1138
  }
1251
1139
  }
1252
1140
 
1253
- function updateCalendar(component): void{
1254
-
1141
+ function updateCalendar(component): void {
1255
1142
  Array.from(component.shadowRoot.querySelectorAll('.selected')).forEach((element) => {
1256
1143
  element.classList.remove('selected');
1257
1144
  });
1258
1145
 
1259
- Array.from(component.shadowRoot.querySelectorAll(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`)).forEach((element) => {
1146
+ Array.from(
1147
+ component.shadowRoot.querySelectorAll(
1148
+ `td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`
1149
+ )
1150
+ ).forEach((element) => {
1260
1151
  element.classList.add('selected');
1261
1152
  });
1262
1153
  }
1263
1154
 
1264
- datePicker?.addEventListener('change', ()=> {
1265
-
1266
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
1155
+ datePicker?.addEventListener('change', () => {
1156
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
1267
1157
 
1268
- if(this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1158
+ if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1269
1159
  updateCalendar(this);
1270
- else
1271
- resetCalendar(this);
1160
+ else resetCalendar(this);
1272
1161
 
1273
1162
  const customEvent = new CustomEvent('change-date', {
1274
- detail: {
1275
- 'view': viewPicker.value,
1276
- 'date': datePicker.value
1163
+ detail: {
1164
+ view: viewPicker.value,
1165
+ date: datePicker.value,
1277
1166
  },
1278
1167
  });
1279
1168
 
1280
1169
  this.dispatchEvent(customEvent);
1281
1170
  });
1282
1171
 
1283
- filtersButton?.addEventListener('click', ()=> {
1284
-
1285
- const customEvent = new CustomEvent('open-filters',);
1172
+ filtersButton?.addEventListener('click', () => {
1173
+ const customEvent = new CustomEvent('open-filters');
1286
1174
  this.dispatchEvent(customEvent);
1287
1175
  });
1288
1176
 
1289
1177
  // HTML Observer
1290
1178
  const htmlUpdated = (mutationList: any, observer: any): void => {
1291
-
1292
-
1293
-
1294
-
1295
1179
  observer.disconnect();
1296
1180
 
1297
1181
  console.log(this.pauseObserver);
1298
1182
 
1299
- if(this.pauseObserver == false){
1300
-
1183
+ if (this.pauseObserver == false) {
1301
1184
  for (const mutation of mutationList) {
1302
-
1303
- if (mutation.type == 'characterData' || (mutation.type == 'childList' && mutation.addedNodes.length) || mutation.type === 'attributes') {
1304
-
1185
+ if (
1186
+ mutation.type == 'characterData' ||
1187
+ (mutation.type == 'childList' && mutation.addedNodes.length) ||
1188
+ mutation.type === 'attributes'
1189
+ ) {
1305
1190
  //resetCalendar(this);
1306
1191
  this.addEvents();
1307
1192
  }
@@ -1314,62 +1199,56 @@ class iamCalendar extends HTMLElement {
1314
1199
  const observer = new MutationObserver(htmlUpdated);
1315
1200
  observer.observe(this, { childList: true, characterData: true, subtree: true, attributes: true });
1316
1201
 
1317
- todayButton?.addEventListener('click', ()=> {
1318
-
1202
+ todayButton?.addEventListener('click', () => {
1319
1203
  datePicker.value = strToday;
1320
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
1204
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
1321
1205
 
1322
- if(this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1206
+ if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1323
1207
  updateCalendar(this);
1324
- else
1325
- resetCalendar(this);
1208
+ else resetCalendar(this);
1326
1209
 
1327
1210
  const customEvent = new CustomEvent('change-date-today', {
1328
- detail: {
1329
- 'view': viewPicker.value,
1330
- 'date': datePicker.value
1211
+ detail: {
1212
+ view: viewPicker.value,
1213
+ date: datePicker.value,
1331
1214
  },
1332
1215
  });
1333
1216
 
1334
1217
  this.dispatchEvent(customEvent);
1335
1218
  });
1336
1219
 
1337
- prevButton?.addEventListener('click', ()=> {
1220
+ prevButton?.addEventListener('click', () => {
1221
+ datePicker.value = this.paginateDate('prev', viewPicker.value, datePicker.value);
1222
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
1338
1223
 
1339
- datePicker.value = this.paginateDate("prev",viewPicker.value,datePicker.value);
1340
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
1341
-
1342
- if(this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1224
+ if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1343
1225
  updateCalendar(this);
1344
- else
1345
- resetCalendar(this);
1226
+ else resetCalendar(this);
1346
1227
 
1347
1228
  const customEvent = new CustomEvent('change-date-previous', {
1348
- detail: {
1349
- 'view': viewPicker.value,
1350
- 'date': datePicker.value
1229
+ detail: {
1230
+ view: viewPicker.value,
1231
+ date: datePicker.value,
1351
1232
  },
1352
1233
  });
1353
1234
 
1354
1235
  this.dispatchEvent(customEvent);
1355
1236
  });
1356
1237
 
1357
- nextButton?.addEventListener('click', ()=> {
1238
+ nextButton?.addEventListener('click', () => {
1239
+ datePicker.value = this.paginateDate('next', viewPicker.value, datePicker.value);
1240
+ title?.innerHTML = this.getTitle(datePicker.value, viewPicker.value);
1358
1241
 
1359
- datePicker.value = this.paginateDate("next",viewPicker.value,datePicker.value);
1360
- title?.innerHTML = this.getTitle(datePicker.value,viewPicker.value);
1361
-
1362
- console.log(datePicker.value)
1242
+ console.log(datePicker.value);
1363
1243
 
1364
- if(this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1244
+ if (this.shadowRoot.querySelector(`td:has(time[datetime="${datePicker.value}"]):not(.prev-month, .next-month)`))
1365
1245
  updateCalendar(this);
1366
- else
1367
- resetCalendar(this);
1246
+ else resetCalendar(this);
1368
1247
 
1369
1248
  const customEvent = new CustomEvent('change-date-next', {
1370
- detail: {
1371
- 'view': viewPicker.value,
1372
- 'date': datePicker.value
1249
+ detail: {
1250
+ view: viewPicker.value,
1251
+ date: datePicker.value,
1373
1252
  },
1374
1253
  });
1375
1254
 
@@ -1387,23 +1266,20 @@ class iamCalendar extends HTMLElement {
1387
1266
  'change-date-next',
1388
1267
  'open-settings',
1389
1268
  'close-settings',
1390
- 'save-settings'
1269
+ 'save-settings',
1391
1270
  ]);
1392
1271
  }
1393
1272
 
1394
1273
  static get observedAttributes(): any {
1395
- return ['data-calendars','data-view'];
1274
+ return ['data-calendars', 'data-view'];
1396
1275
  }
1397
1276
 
1398
1277
  attributeChangedCallback(attrName, oldVal, newVal): void {
1399
-
1400
1278
  this.pauseObserver = true;
1401
1279
 
1402
1280
  switch (attrName) {
1403
1281
  case 'data-calendars': {
1404
1282
  if (oldVal != newVal) {
1405
-
1406
-
1407
1283
  const tbody = this.shadowRoot?.querySelector('#calendar > table > tbody');
1408
1284
  const weekViewHeader = this.shadowRoot?.querySelector('#week-view-header > table > tbody');
1409
1285
  const datePicker = this.shadowRoot?.querySelector(`#date`);
@@ -1413,14 +1289,12 @@ class iamCalendar extends HTMLElement {
1413
1289
  const date = today.getDate();
1414
1290
  const month = today.getMonth();
1415
1291
  const year = today.getFullYear();
1416
- const strToday = `${year}-${String(month+1).padStart(2, "0")}-${String(date).padStart(2, "0")}`;
1417
-
1418
-
1419
- if(this.hasAttribute('data-calendars')){
1292
+ const strToday = `${year}-${String(month + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`;
1420
1293
 
1294
+ if (this.hasAttribute('data-calendars')) {
1421
1295
  this.calendars = this.getAttribute('data-calendars').split(',');
1422
1296
 
1423
- this.calendars.forEach((item,index) => {
1297
+ this.calendars.forEach((item, index) => {
1424
1298
  this.calendars[index] = item.trim();
1425
1299
  });
1426
1300
  }
@@ -1433,15 +1307,13 @@ class iamCalendar extends HTMLElement {
1433
1307
  this.addJSEvents(this);
1434
1308
  this.setWeekDay();
1435
1309
  this.setTime();
1436
-
1437
1310
  }
1438
1311
  break;
1439
- };
1312
+ }
1440
1313
  case 'data-view': {
1441
1314
  if (oldVal != newVal) {
1442
-
1443
1315
  const viewPicker = this.shadowRoot?.querySelector(`#view`);
1444
-
1316
+
1445
1317
  viewPicker.value = newVal;
1446
1318
  viewPicker.dispatchEvent(new Event('change'));
1447
1319
  }
@@ -1451,9 +1323,7 @@ class iamCalendar extends HTMLElement {
1451
1323
 
1452
1324
  setTimeout(() => {
1453
1325
  this.pauseObserver = false;
1454
- }, "500");
1455
-
1456
-
1326
+ }, '500');
1457
1327
  }
1458
1328
  }
1459
1329