@xplortech/apollo-core 1.0.0-beta.7 → 1.0.0-beta.9

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 (571) hide show
  1. package/dist/apollo-core/apollo-core.css +5841 -9
  2. package/dist/apollo-core/apollo-core.esm.js +163 -1
  3. package/dist/apollo-core/apollo-core.esm.js.map +1 -0
  4. package/dist/apollo-core/app-globals-0f993ce5.js +5 -0
  5. package/dist/apollo-core/app-globals-0f993ce5.js.map +1 -0
  6. package/dist/apollo-core/css-shim-6210ce77.js +6 -0
  7. package/dist/apollo-core/css-shim-6210ce77.js.map +1 -0
  8. package/dist/apollo-core/dom-423bdd70.js +75 -0
  9. package/dist/apollo-core/dom-423bdd70.js.map +1 -0
  10. package/dist/apollo-core/index-307c7018.js +3397 -0
  11. package/dist/apollo-core/index-307c7018.js.map +1 -0
  12. package/dist/apollo-core/index-912d1a21.js +586 -0
  13. package/dist/apollo-core/index-912d1a21.js.map +1 -0
  14. package/dist/apollo-core/index.esm.js +3 -0
  15. package/dist/apollo-core/index.esm.js.map +1 -0
  16. package/dist/apollo-core/p-08abab41.entry.js +2 -0
  17. package/dist/apollo-core/p-08abab41.entry.js.map +1 -0
  18. package/dist/apollo-core/p-16654189.entry.js +2 -0
  19. package/dist/apollo-core/p-16654189.entry.js.map +1 -0
  20. package/dist/apollo-core/p-2f90296c.js +3 -3
  21. package/dist/apollo-core/p-2f90296c.js.map +1 -0
  22. package/dist/apollo-core/p-315920cd.entry.js +2 -0
  23. package/dist/apollo-core/p-315920cd.entry.js.map +1 -0
  24. package/dist/apollo-core/p-3c934536.entry.js +2 -0
  25. package/dist/apollo-core/p-3c934536.entry.js.map +1 -0
  26. package/dist/apollo-core/p-47a55fa9.entry.js +2 -0
  27. package/dist/apollo-core/p-47a55fa9.entry.js.map +1 -0
  28. package/dist/apollo-core/p-485d0c40.entry.js +2 -0
  29. package/dist/apollo-core/p-485d0c40.entry.js.map +1 -0
  30. package/dist/apollo-core/p-5a038a8e.entry.js +2 -0
  31. package/dist/apollo-core/p-5a038a8e.entry.js.map +1 -0
  32. package/dist/apollo-core/p-88135928.entry.js +2 -0
  33. package/dist/apollo-core/p-88135928.entry.js.map +1 -0
  34. package/dist/apollo-core/p-91d6572c.entry.js +2 -0
  35. package/dist/apollo-core/p-91d6572c.entry.js.map +1 -0
  36. package/dist/apollo-core/p-ad90fe4d.js +2 -1
  37. package/dist/apollo-core/p-ad90fe4d.js.map +1 -0
  38. package/dist/apollo-core/p-ae99c266.entry.js +2 -0
  39. package/dist/apollo-core/p-ae99c266.entry.js.map +1 -0
  40. package/dist/apollo-core/p-aeef61dd.entry.js +2 -0
  41. package/dist/apollo-core/p-aeef61dd.entry.js.map +1 -0
  42. package/dist/apollo-core/p-c1b28f32.entry.js +2 -0
  43. package/dist/apollo-core/p-c1b28f32.entry.js.map +1 -0
  44. package/dist/apollo-core/p-ce6cb219.entry.js +2 -0
  45. package/dist/apollo-core/p-ce6cb219.entry.js.map +1 -0
  46. package/dist/apollo-core/p-cf2e6132.js +3 -0
  47. package/dist/apollo-core/p-cf2e6132.js.map +1 -0
  48. package/dist/apollo-core/p-e9cd309e.entry.js +2 -0
  49. package/dist/apollo-core/p-e9cd309e.entry.js.map +1 -0
  50. package/dist/apollo-core/p-f5561238.entry.js +2 -0
  51. package/dist/apollo-core/p-f5561238.entry.js.map +1 -0
  52. package/dist/apollo-core/p-ff46d20f.entry.js +2 -0
  53. package/dist/apollo-core/p-ff46d20f.entry.js.map +1 -0
  54. package/dist/{custom-elements/index.js → apollo-core/regular-133c23b5.js} +13 -4197
  55. package/dist/apollo-core/regular-133c23b5.js.map +1 -0
  56. package/dist/apollo-core/shadow-css-f0279020.js +389 -0
  57. package/dist/apollo-core/shadow-css-f0279020.js.map +1 -0
  58. package/dist/apollo-core/xpl-application-shell.entry.js +51 -0
  59. package/dist/apollo-core/xpl-application-shell.entry.js.map +1 -0
  60. package/dist/apollo-core/xpl-avatar.entry.js +28 -0
  61. package/dist/apollo-core/xpl-avatar.entry.js.map +1 -0
  62. package/dist/apollo-core/xpl-backdrop.entry.js +19 -0
  63. package/dist/apollo-core/xpl-backdrop.entry.js.map +1 -0
  64. package/dist/apollo-core/xpl-badge.entry.js +21 -0
  65. package/dist/apollo-core/xpl-badge.entry.js.map +1 -0
  66. package/dist/apollo-core/xpl-breadcrumb-item.entry.js +19 -0
  67. package/dist/apollo-core/xpl-breadcrumb-item.entry.js.map +1 -0
  68. package/dist/apollo-core/xpl-breadcrumbs.entry.js +14 -0
  69. package/dist/apollo-core/xpl-breadcrumbs.entry.js.map +1 -0
  70. package/dist/apollo-core/xpl-button-row.entry.js +23 -0
  71. package/dist/apollo-core/xpl-button-row.entry.js.map +1 -0
  72. package/dist/apollo-core/xpl-button.entry.js +60 -0
  73. package/dist/apollo-core/xpl-button.entry.js.map +1 -0
  74. package/dist/apollo-core/xpl-checkbox.entry.js +35 -0
  75. package/dist/apollo-core/xpl-checkbox.entry.js.map +1 -0
  76. package/dist/apollo-core/xpl-choicelist.entry.js +48 -0
  77. package/dist/apollo-core/xpl-choicelist.entry.js.map +1 -0
  78. package/dist/apollo-core/xpl-content-area.entry.js +15 -0
  79. package/dist/apollo-core/xpl-content-area.entry.js.map +1 -0
  80. package/dist/apollo-core/xpl-divider.entry.js +17 -0
  81. package/dist/apollo-core/xpl-divider.entry.js.map +1 -0
  82. package/dist/apollo-core/xpl-dropdown-group.entry.js +35 -0
  83. package/dist/apollo-core/xpl-dropdown-group.entry.js.map +1 -0
  84. package/dist/apollo-core/xpl-dropdown-heading.entry.js +15 -0
  85. package/dist/apollo-core/xpl-dropdown-heading.entry.js.map +1 -0
  86. package/dist/apollo-core/xpl-dropdown-option.entry.js +70 -0
  87. package/dist/apollo-core/xpl-dropdown-option.entry.js.map +1 -0
  88. package/dist/apollo-core/xpl-dropdown.entry.js +106 -0
  89. package/dist/apollo-core/xpl-dropdown.entry.js.map +1 -0
  90. package/dist/apollo-core/xpl-grid-item.entry.js +23 -0
  91. package/dist/apollo-core/xpl-grid-item.entry.js.map +1 -0
  92. package/dist/apollo-core/xpl-grid.entry.js +33 -0
  93. package/dist/apollo-core/xpl-grid.entry.js.map +1 -0
  94. package/dist/apollo-core/xpl-input.entry.js +2553 -0
  95. package/dist/apollo-core/xpl-input.entry.js.map +1 -0
  96. package/dist/apollo-core/xpl-list.entry.js +37 -0
  97. package/dist/apollo-core/xpl-list.entry.js.map +1 -0
  98. package/dist/apollo-core/xpl-main-nav.entry.js +25 -0
  99. package/dist/apollo-core/xpl-main-nav.entry.js.map +1 -0
  100. package/dist/apollo-core/xpl-nav-item.entry.js +25 -0
  101. package/dist/apollo-core/xpl-nav-item.entry.js.map +1 -0
  102. package/dist/apollo-core/xpl-pagination.entry.js +77 -0
  103. package/dist/apollo-core/xpl-pagination.entry.js.map +1 -0
  104. package/dist/apollo-core/xpl-radio.entry.js +34 -0
  105. package/dist/apollo-core/xpl-radio.entry.js.map +1 -0
  106. package/dist/apollo-core/xpl-secondary-nav.entry.js +14 -0
  107. package/dist/apollo-core/xpl-secondary-nav.entry.js.map +1 -0
  108. package/dist/apollo-core/xpl-select.entry.js +680 -0
  109. package/dist/apollo-core/xpl-select.entry.js.map +1 -0
  110. package/dist/apollo-core/xpl-table.entry.js +109 -0
  111. package/dist/apollo-core/xpl-table.entry.js.map +1 -0
  112. package/dist/apollo-core/xpl-tag.entry.js +19 -0
  113. package/dist/apollo-core/xpl-tag.entry.js.map +1 -0
  114. package/dist/apollo-core/xpl-toggle.entry.js +35 -0
  115. package/dist/apollo-core/xpl-toggle.entry.js.map +1 -0
  116. package/dist/apollo-core/xpl-utility-bar.entry.js +31 -0
  117. package/dist/apollo-core/xpl-utility-bar.entry.js.map +1 -0
  118. package/dist/cjs/apollo-core.cjs.js +154 -5
  119. package/dist/cjs/apollo-core.cjs.js.map +1 -0
  120. package/dist/cjs/app-globals-3a1e7e63.js +7 -0
  121. package/dist/cjs/app-globals-3a1e7e63.js.map +1 -0
  122. package/dist/cjs/css-shim-0a6fd78d.js +8 -0
  123. package/dist/cjs/css-shim-0a6fd78d.js.map +1 -0
  124. package/dist/cjs/dom-2c6adc90.js +77 -0
  125. package/dist/cjs/dom-2c6adc90.js.map +1 -0
  126. package/dist/cjs/index-0fdb260e.js +3564 -0
  127. package/dist/cjs/index-0fdb260e.js.map +1 -0
  128. package/dist/cjs/index-318d5fc7.js +588 -0
  129. package/dist/cjs/index-318d5fc7.js.map +1 -0
  130. package/dist/cjs/{index-acf3dd7a.js → index-e53b018b.js} +675 -215
  131. package/dist/cjs/index-e53b018b.js.map +1 -0
  132. package/dist/cjs/index.cjs.js +3 -0
  133. package/dist/cjs/index.cjs.js.map +1 -0
  134. package/dist/cjs/loader.cjs.js +24 -3
  135. package/dist/cjs/loader.cjs.js.map +1 -0
  136. package/dist/cjs/regular-503465f4.js +16056 -0
  137. package/dist/cjs/regular-503465f4.js.map +1 -0
  138. package/dist/cjs/regular-872f5226.js +2 -0
  139. package/dist/cjs/regular-872f5226.js.map +1 -0
  140. package/dist/cjs/shadow-css-39dfcfae.js +391 -0
  141. package/dist/cjs/shadow-css-39dfcfae.js.map +1 -0
  142. package/dist/cjs/v4-14140ff3.js +2 -0
  143. package/dist/cjs/v4-14140ff3.js.map +1 -0
  144. package/dist/cjs/xpl-application-shell.cjs.entry.js +4 -13
  145. package/dist/cjs/xpl-application-shell.cjs.entry.js.map +1 -0
  146. package/dist/cjs/xpl-avatar.cjs.entry.js +32 -0
  147. package/dist/cjs/xpl-avatar.cjs.entry.js.map +1 -0
  148. package/dist/cjs/xpl-avatar_12.cjs.entry.js +74 -38
  149. package/dist/cjs/xpl-avatar_12.cjs.entry.js.map +1 -0
  150. package/dist/cjs/xpl-backdrop.cjs.entry.js +3 -5
  151. package/dist/cjs/xpl-backdrop.cjs.entry.js.map +1 -0
  152. package/dist/cjs/xpl-badge.cjs.entry.js +25 -0
  153. package/dist/cjs/xpl-badge.cjs.entry.js.map +1 -0
  154. package/dist/cjs/xpl-breadcrumb-item.cjs.entry.js +23 -0
  155. package/dist/cjs/xpl-breadcrumb-item.cjs.entry.js.map +1 -0
  156. package/dist/cjs/xpl-breadcrumbs.cjs.entry.js +18 -0
  157. package/dist/cjs/xpl-breadcrumbs.cjs.entry.js.map +1 -0
  158. package/dist/cjs/xpl-button-row.cjs.entry.js +6 -1
  159. package/dist/cjs/xpl-button-row.cjs.entry.js.map +1 -0
  160. package/dist/cjs/xpl-button.cjs.entry.js +64 -0
  161. package/dist/cjs/xpl-button.cjs.entry.js.map +1 -0
  162. package/dist/cjs/xpl-checkbox.cjs.entry.js +39 -0
  163. package/dist/cjs/xpl-checkbox.cjs.entry.js.map +1 -0
  164. package/dist/cjs/xpl-choicelist.cjs.entry.js +10 -1
  165. package/dist/cjs/xpl-choicelist.cjs.entry.js.map +1 -0
  166. package/dist/cjs/xpl-content-area.cjs.entry.js +19 -0
  167. package/dist/cjs/xpl-content-area.cjs.entry.js.map +1 -0
  168. package/dist/cjs/xpl-divider.cjs.entry.js +4 -1
  169. package/dist/cjs/xpl-divider.cjs.entry.js.map +1 -0
  170. package/dist/cjs/xpl-dropdown-group.cjs.entry.js +39 -0
  171. package/dist/cjs/xpl-dropdown-group.cjs.entry.js.map +1 -0
  172. package/dist/cjs/xpl-dropdown-group_3.cjs.entry.js +12 -3
  173. package/dist/cjs/xpl-dropdown-group_3.cjs.entry.js.map +1 -0
  174. package/dist/cjs/xpl-dropdown-heading.cjs.entry.js +19 -0
  175. package/dist/cjs/xpl-dropdown-heading.cjs.entry.js.map +1 -0
  176. package/dist/cjs/xpl-dropdown-option.cjs.entry.js +74 -0
  177. package/dist/cjs/xpl-dropdown-option.cjs.entry.js.map +1 -0
  178. package/dist/cjs/xpl-dropdown.cjs.entry.js +110 -0
  179. package/dist/cjs/xpl-dropdown.cjs.entry.js.map +1 -0
  180. package/dist/cjs/xpl-dropdown_2.cjs.entry.js +13 -10
  181. package/dist/cjs/xpl-dropdown_2.cjs.entry.js.map +1 -0
  182. package/dist/cjs/xpl-grid-item.cjs.entry.js +3 -1
  183. package/dist/cjs/xpl-grid-item.cjs.entry.js.map +1 -0
  184. package/dist/cjs/xpl-grid.cjs.entry.js +3 -1
  185. package/dist/cjs/xpl-grid.cjs.entry.js.map +1 -0
  186. package/dist/cjs/xpl-input.cjs.entry.js +40 -17
  187. package/dist/cjs/xpl-input.cjs.entry.js.map +1 -0
  188. package/dist/cjs/xpl-list.cjs.entry.js +4 -24
  189. package/dist/cjs/xpl-list.cjs.entry.js.map +1 -0
  190. package/dist/cjs/xpl-main-nav.cjs.entry.js +3 -4
  191. package/dist/cjs/xpl-main-nav.cjs.entry.js.map +1 -0
  192. package/dist/cjs/xpl-nav-item.cjs.entry.js +29 -0
  193. package/dist/cjs/xpl-nav-item.cjs.entry.js.map +1 -0
  194. package/dist/cjs/xpl-pagination.cjs.entry.js +7 -2
  195. package/dist/cjs/xpl-pagination.cjs.entry.js.map +1 -0
  196. package/dist/cjs/xpl-radio.cjs.entry.js +38 -0
  197. package/dist/cjs/xpl-radio.cjs.entry.js.map +1 -0
  198. package/dist/cjs/xpl-secondary-nav.cjs.entry.js +18 -0
  199. package/dist/cjs/xpl-secondary-nav.cjs.entry.js.map +1 -0
  200. package/dist/cjs/xpl-select.cjs.entry.js +86 -27
  201. package/dist/cjs/xpl-select.cjs.entry.js.map +1 -0
  202. package/dist/cjs/xpl-table.cjs.entry.js +113 -0
  203. package/dist/cjs/xpl-table.cjs.entry.js.map +1 -0
  204. package/dist/cjs/xpl-tag.cjs.entry.js +23 -0
  205. package/dist/cjs/xpl-tag.cjs.entry.js.map +1 -0
  206. package/dist/cjs/xpl-toggle.cjs.entry.js +11 -6
  207. package/dist/cjs/xpl-toggle.cjs.entry.js.map +1 -0
  208. package/dist/cjs/xpl-utility-bar.cjs.entry.js +35 -0
  209. package/dist/cjs/xpl-utility-bar.cjs.entry.js.map +1 -0
  210. package/dist/collection/collection-manifest.json +2 -2
  211. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js +119 -132
  212. package/dist/collection/components/xpl-application-shell/xpl-application-shell.js.map +1 -0
  213. package/dist/collection/components/xpl-avatar/xpl-avatar.js +151 -144
  214. package/dist/collection/components/xpl-avatar/xpl-avatar.js.map +1 -0
  215. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js +27 -28
  216. package/dist/collection/components/xpl-backdrop/xpl-backdrop.js.map +1 -0
  217. package/dist/collection/components/xpl-badge/xpl-badge.js +44 -39
  218. package/dist/collection/components/xpl-badge/xpl-badge.js.map +1 -0
  219. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js +3 -5
  220. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumb-item/xpl-breadcrumb-item.js.map +1 -0
  221. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js +3 -5
  222. package/dist/collection/components/xpl-breadcrumbs/xpl-breadcrumbs/xpl-breadcrumbs.js.map +1 -0
  223. package/dist/collection/components/xpl-button/xpl-button.js +205 -205
  224. package/dist/collection/components/xpl-button/xpl-button.js.map +1 -0
  225. package/dist/collection/components/xpl-button-row/xpl-button-row.js +106 -104
  226. package/dist/collection/components/xpl-button-row/xpl-button-row.js.map +1 -0
  227. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js +182 -171
  228. package/dist/collection/components/xpl-checkbox/xpl-checkbox.js.map +1 -0
  229. package/dist/collection/components/xpl-choicelist/choice.js +1 -0
  230. package/dist/collection/components/xpl-choicelist/choice.js.map +1 -0
  231. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js +134 -126
  232. package/dist/collection/components/xpl-choicelist/xpl-choicelist.js.map +1 -0
  233. package/dist/collection/components/xpl-content-area/xpl-content-area.js +28 -31
  234. package/dist/collection/components/xpl-content-area/xpl-content-area.js.map +1 -0
  235. package/dist/collection/components/xpl-divider/xpl-divider.js +27 -23
  236. package/dist/collection/components/xpl-divider/xpl-divider.js.map +1 -0
  237. package/dist/collection/components/xpl-dropdown/dropdownoption.js +1 -0
  238. package/dist/collection/components/xpl-dropdown/dropdownoption.js.map +1 -0
  239. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js +47 -42
  240. package/dist/collection/components/xpl-dropdown/xpl-dropdown-group/xpl-dropdown-group.js.map +1 -0
  241. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js +27 -22
  242. package/dist/collection/components/xpl-dropdown/xpl-dropdown-heading/xpl-dropdown-heading.js.map +1 -0
  243. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js +79 -54
  244. package/dist/collection/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.js.map +1 -0
  245. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js +168 -168
  246. package/dist/collection/components/xpl-dropdown/xpl-dropdown.js.map +1 -0
  247. package/dist/collection/components/xpl-grid/xpl-grid.js +2 -1
  248. package/dist/collection/components/xpl-grid/xpl-grid.js.map +1 -0
  249. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js +76 -74
  250. package/dist/collection/components/xpl-grid-item/xpl-grid-item.js.map +1 -0
  251. package/dist/collection/components/xpl-input/xpl-input.js +405 -417
  252. package/dist/collection/components/xpl-input/xpl-input.js.map +1 -0
  253. package/dist/collection/components/xpl-list/listitem.js +1 -0
  254. package/dist/collection/components/xpl-list/listitem.js.map +1 -0
  255. package/dist/collection/components/xpl-list/xpl-list.js +43 -75
  256. package/dist/collection/components/xpl-list/xpl-list.js.map +1 -0
  257. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js +48 -54
  258. package/dist/collection/components/xpl-main-nav/xpl-main-nav.js.map +1 -0
  259. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js +48 -49
  260. package/dist/collection/components/xpl-nav-item/xpl-nav-item.js.map +1 -0
  261. package/dist/collection/components/xpl-pagination/xpl-pagination.js +117 -128
  262. package/dist/collection/components/xpl-pagination/xpl-pagination.js.map +1 -0
  263. package/dist/collection/components/xpl-radio/xpl-radio.js +158 -148
  264. package/dist/collection/components/xpl-radio/xpl-radio.js.map +1 -0
  265. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js +3 -4
  266. package/dist/collection/components/xpl-secondary-nav/xpl-secondary-nav.js.map +1 -0
  267. package/dist/collection/components/xpl-select/xpl-select.js +296 -236
  268. package/dist/collection/components/xpl-select/xpl-select.js.map +1 -0
  269. package/dist/collection/components/xpl-table/xpl-table.js +169 -151
  270. package/dist/collection/components/xpl-table/xpl-table.js.map +1 -0
  271. package/dist/collection/components/xpl-tag/xpl-tag.js +25 -25
  272. package/dist/collection/components/xpl-tag/xpl-tag.js.map +1 -0
  273. package/dist/collection/components/xpl-toggle/xpl-toggle.js +138 -135
  274. package/dist/collection/components/xpl-toggle/xpl-toggle.js.map +1 -0
  275. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js +74 -70
  276. package/dist/collection/components/xpl-utility-bar/xpl-utility-bar.js.map +1 -0
  277. package/dist/components/index.d.ts +39 -0
  278. package/dist/components/index.js +81 -0
  279. package/dist/components/index.js.map +1 -0
  280. package/dist/components/index2.js +586 -0
  281. package/dist/components/index2.js.map +1 -0
  282. package/dist/components/regular.js +16054 -0
  283. package/dist/components/regular.js.map +1 -0
  284. package/dist/components/v4.js +77 -0
  285. package/dist/components/v4.js.map +1 -0
  286. package/dist/components/xpl-application-shell.d.ts +11 -0
  287. package/dist/components/xpl-application-shell.js +80 -0
  288. package/dist/components/xpl-application-shell.js.map +1 -0
  289. package/dist/components/xpl-avatar.d.ts +11 -0
  290. package/dist/components/xpl-avatar.js +8 -0
  291. package/dist/components/xpl-avatar.js.map +1 -0
  292. package/dist/components/xpl-avatar2.js +51 -0
  293. package/dist/components/xpl-avatar2.js.map +1 -0
  294. package/dist/components/xpl-backdrop.d.ts +11 -0
  295. package/dist/components/xpl-backdrop.js +8 -0
  296. package/dist/components/xpl-backdrop.js.map +1 -0
  297. package/dist/components/xpl-backdrop2.js +35 -0
  298. package/dist/components/xpl-backdrop2.js.map +1 -0
  299. package/dist/components/xpl-badge.d.ts +11 -0
  300. package/dist/components/xpl-badge.js +8 -0
  301. package/dist/components/xpl-badge.js.map +1 -0
  302. package/dist/components/xpl-badge2.js +38 -0
  303. package/dist/components/xpl-badge2.js.map +1 -0
  304. package/dist/components/xpl-breadcrumb-item.d.ts +11 -0
  305. package/dist/components/xpl-breadcrumb-item.js +36 -0
  306. package/dist/components/xpl-breadcrumb-item.js.map +1 -0
  307. package/dist/components/xpl-breadcrumbs.d.ts +11 -0
  308. package/dist/components/xpl-breadcrumbs.js +31 -0
  309. package/dist/components/xpl-breadcrumbs.js.map +1 -0
  310. package/dist/components/xpl-button-row.d.ts +11 -0
  311. package/dist/components/xpl-button-row.js +50 -0
  312. package/dist/components/xpl-button-row.js.map +1 -0
  313. package/dist/components/xpl-button.d.ts +11 -0
  314. package/dist/components/xpl-button.js +8 -0
  315. package/dist/components/xpl-button.js.map +1 -0
  316. package/dist/components/xpl-button2.js +85 -0
  317. package/dist/components/xpl-button2.js.map +1 -0
  318. package/dist/components/xpl-checkbox.d.ts +11 -0
  319. package/dist/components/xpl-checkbox.js +8 -0
  320. package/dist/components/xpl-checkbox.js.map +1 -0
  321. package/dist/components/xpl-checkbox2.js +59 -0
  322. package/dist/components/xpl-checkbox2.js.map +1 -0
  323. package/dist/components/xpl-choicelist.d.ts +11 -0
  324. package/dist/components/xpl-choicelist.js +85 -0
  325. package/dist/components/xpl-choicelist.js.map +1 -0
  326. package/dist/components/xpl-content-area.d.ts +11 -0
  327. package/dist/components/xpl-content-area.js +34 -0
  328. package/dist/components/xpl-content-area.js.map +1 -0
  329. package/dist/components/xpl-divider.d.ts +11 -0
  330. package/dist/components/xpl-divider.js +36 -0
  331. package/dist/components/xpl-divider.js.map +1 -0
  332. package/dist/components/xpl-dropdown-group.d.ts +11 -0
  333. package/dist/components/xpl-dropdown-group.js +8 -0
  334. package/dist/components/xpl-dropdown-group.js.map +1 -0
  335. package/dist/components/xpl-dropdown-group2.js +69 -0
  336. package/dist/components/xpl-dropdown-group2.js.map +1 -0
  337. package/dist/components/xpl-dropdown-heading.d.ts +11 -0
  338. package/dist/components/xpl-dropdown-heading.js +8 -0
  339. package/dist/components/xpl-dropdown-heading.js.map +1 -0
  340. package/dist/components/xpl-dropdown-heading2.js +31 -0
  341. package/dist/components/xpl-dropdown-heading2.js.map +1 -0
  342. package/dist/components/xpl-dropdown-option.d.ts +11 -0
  343. package/dist/components/xpl-dropdown-option.js +8 -0
  344. package/dist/components/xpl-dropdown-option.js.map +1 -0
  345. package/dist/components/xpl-dropdown-option2.js +89 -0
  346. package/dist/components/xpl-dropdown-option2.js.map +1 -0
  347. package/dist/components/xpl-dropdown.d.ts +11 -0
  348. package/dist/components/xpl-dropdown.js +8 -0
  349. package/dist/components/xpl-dropdown.js.map +1 -0
  350. package/dist/components/xpl-dropdown2.js +147 -0
  351. package/dist/components/xpl-dropdown2.js.map +1 -0
  352. package/dist/components/xpl-grid-item.d.ts +11 -0
  353. package/dist/components/xpl-grid-item.js +45 -0
  354. package/dist/components/xpl-grid-item.js.map +1 -0
  355. package/dist/components/xpl-grid.d.ts +11 -0
  356. package/dist/components/xpl-grid.js +50 -0
  357. package/dist/components/xpl-grid.js.map +1 -0
  358. package/dist/components/xpl-input.d.ts +11 -0
  359. package/dist/components/xpl-input.js +2594 -0
  360. package/dist/components/xpl-input.js.map +1 -0
  361. package/dist/components/xpl-list.d.ts +11 -0
  362. package/dist/components/xpl-list.js +68 -0
  363. package/dist/components/xpl-list.js.map +1 -0
  364. package/dist/components/xpl-main-nav.d.ts +11 -0
  365. package/dist/components/xpl-main-nav.js +44 -0
  366. package/dist/components/xpl-main-nav.js.map +1 -0
  367. package/dist/components/xpl-nav-item.d.ts +11 -0
  368. package/dist/components/xpl-nav-item.js +44 -0
  369. package/dist/components/xpl-nav-item.js.map +1 -0
  370. package/dist/components/xpl-pagination.d.ts +11 -0
  371. package/dist/components/xpl-pagination.js +100 -0
  372. package/dist/components/xpl-pagination.js.map +1 -0
  373. package/dist/components/xpl-radio.d.ts +11 -0
  374. package/dist/components/xpl-radio.js +8 -0
  375. package/dist/components/xpl-radio.js.map +1 -0
  376. package/dist/components/xpl-radio2.js +57 -0
  377. package/dist/components/xpl-radio2.js.map +1 -0
  378. package/dist/components/xpl-secondary-nav.d.ts +11 -0
  379. package/dist/components/xpl-secondary-nav.js +31 -0
  380. package/dist/components/xpl-secondary-nav.js.map +1 -0
  381. package/dist/components/xpl-select.d.ts +11 -0
  382. package/dist/components/xpl-select.js +745 -0
  383. package/dist/components/xpl-select.js.map +1 -0
  384. package/dist/components/xpl-table.d.ts +11 -0
  385. package/dist/components/xpl-table.js +136 -0
  386. package/dist/components/xpl-table.js.map +1 -0
  387. package/dist/components/xpl-tag.d.ts +11 -0
  388. package/dist/components/xpl-tag.js +8 -0
  389. package/dist/components/xpl-tag.js.map +1 -0
  390. package/dist/components/xpl-tag2.js +33 -0
  391. package/dist/components/xpl-tag2.js.map +1 -0
  392. package/dist/components/xpl-toggle.d.ts +11 -0
  393. package/dist/components/xpl-toggle.js +61 -0
  394. package/dist/components/xpl-toggle.js.map +1 -0
  395. package/dist/components/xpl-utility-bar.d.ts +11 -0
  396. package/dist/components/xpl-utility-bar.js +52 -0
  397. package/dist/components/xpl-utility-bar.js.map +1 -0
  398. package/dist/esm/apollo-core.js +151 -5
  399. package/dist/esm/apollo-core.js.map +1 -0
  400. package/dist/esm/app-globals-0f993ce5.js +5 -0
  401. package/dist/esm/app-globals-0f993ce5.js.map +1 -0
  402. package/dist/esm/css-shim-6210ce77.js +6 -0
  403. package/dist/esm/css-shim-6210ce77.js.map +1 -0
  404. package/dist/esm/dom-423bdd70.js +75 -0
  405. package/dist/esm/dom-423bdd70.js.map +1 -0
  406. package/dist/esm/index-307c7018.js +3526 -0
  407. package/dist/esm/index-307c7018.js.map +1 -0
  408. package/dist/esm/index-912d1a21.js +586 -0
  409. package/dist/esm/index-912d1a21.js.map +1 -0
  410. package/dist/esm/{index-e3c4bb97.js → index-df9b48b4.js} +675 -216
  411. package/dist/esm/index-df9b48b4.js.map +1 -0
  412. package/dist/esm/index.js +2 -0
  413. package/dist/esm/index.js.map +1 -0
  414. package/dist/esm/loader.js +24 -3
  415. package/dist/esm/loader.js.map +1 -0
  416. package/dist/esm/polyfills/css-shim.js +1 -1
  417. package/dist/esm/regular-133c23b5.js +16054 -0
  418. package/dist/esm/regular-133c23b5.js.map +1 -0
  419. package/dist/esm/regular-86225e9d.js +2 -0
  420. package/dist/esm/regular-86225e9d.js.map +1 -0
  421. package/dist/esm/shadow-css-f0279020.js +389 -0
  422. package/dist/esm/shadow-css-f0279020.js.map +1 -0
  423. package/dist/esm/v4-929670b7.js +2 -0
  424. package/dist/esm/v4-929670b7.js.map +1 -0
  425. package/dist/esm/xpl-application-shell.entry.js +4 -13
  426. package/dist/esm/xpl-application-shell.entry.js.map +1 -0
  427. package/dist/esm/xpl-avatar.entry.js +28 -0
  428. package/dist/esm/xpl-avatar.entry.js.map +1 -0
  429. package/dist/esm/xpl-avatar_12.entry.js +74 -38
  430. package/dist/esm/xpl-avatar_12.entry.js.map +1 -0
  431. package/dist/esm/xpl-backdrop.entry.js +3 -5
  432. package/dist/esm/xpl-backdrop.entry.js.map +1 -0
  433. package/dist/esm/xpl-badge.entry.js +21 -0
  434. package/dist/esm/xpl-badge.entry.js.map +1 -0
  435. package/dist/esm/xpl-breadcrumb-item.entry.js +19 -0
  436. package/dist/esm/xpl-breadcrumb-item.entry.js.map +1 -0
  437. package/dist/esm/xpl-breadcrumbs.entry.js +14 -0
  438. package/dist/esm/xpl-breadcrumbs.entry.js.map +1 -0
  439. package/dist/esm/xpl-button-row.entry.js +6 -1
  440. package/dist/esm/xpl-button-row.entry.js.map +1 -0
  441. package/dist/esm/xpl-button.entry.js +60 -0
  442. package/dist/esm/xpl-button.entry.js.map +1 -0
  443. package/dist/esm/xpl-checkbox.entry.js +35 -0
  444. package/dist/esm/xpl-checkbox.entry.js.map +1 -0
  445. package/dist/esm/xpl-choicelist.entry.js +10 -1
  446. package/dist/esm/xpl-choicelist.entry.js.map +1 -0
  447. package/dist/esm/xpl-content-area.entry.js +15 -0
  448. package/dist/esm/xpl-content-area.entry.js.map +1 -0
  449. package/dist/esm/xpl-divider.entry.js +4 -1
  450. package/dist/esm/xpl-divider.entry.js.map +1 -0
  451. package/dist/esm/xpl-dropdown-group.entry.js +35 -0
  452. package/dist/esm/xpl-dropdown-group.entry.js.map +1 -0
  453. package/dist/esm/xpl-dropdown-group_3.entry.js +12 -3
  454. package/dist/esm/xpl-dropdown-group_3.entry.js.map +1 -0
  455. package/dist/esm/xpl-dropdown-heading.entry.js +15 -0
  456. package/dist/esm/xpl-dropdown-heading.entry.js.map +1 -0
  457. package/dist/esm/xpl-dropdown-option.entry.js +70 -0
  458. package/dist/esm/xpl-dropdown-option.entry.js.map +1 -0
  459. package/dist/esm/xpl-dropdown.entry.js +106 -0
  460. package/dist/esm/xpl-dropdown.entry.js.map +1 -0
  461. package/dist/esm/xpl-dropdown_2.entry.js +13 -10
  462. package/dist/esm/xpl-dropdown_2.entry.js.map +1 -0
  463. package/dist/esm/xpl-grid-item.entry.js +3 -1
  464. package/dist/esm/xpl-grid-item.entry.js.map +1 -0
  465. package/dist/esm/xpl-grid.entry.js +3 -1
  466. package/dist/esm/xpl-grid.entry.js.map +1 -0
  467. package/dist/esm/xpl-input.entry.js +39 -16
  468. package/dist/esm/xpl-input.entry.js.map +1 -0
  469. package/dist/esm/xpl-list.entry.js +4 -24
  470. package/dist/esm/xpl-list.entry.js.map +1 -0
  471. package/dist/esm/xpl-main-nav.entry.js +3 -4
  472. package/dist/esm/xpl-main-nav.entry.js.map +1 -0
  473. package/dist/esm/xpl-nav-item.entry.js +25 -0
  474. package/dist/esm/xpl-nav-item.entry.js.map +1 -0
  475. package/dist/esm/xpl-pagination.entry.js +7 -2
  476. package/dist/esm/xpl-pagination.entry.js.map +1 -0
  477. package/dist/esm/xpl-radio.entry.js +34 -0
  478. package/dist/esm/xpl-radio.entry.js.map +1 -0
  479. package/dist/esm/xpl-secondary-nav.entry.js +14 -0
  480. package/dist/esm/xpl-secondary-nav.entry.js.map +1 -0
  481. package/dist/esm/xpl-select.entry.js +85 -26
  482. package/dist/esm/xpl-select.entry.js.map +1 -0
  483. package/dist/esm/xpl-table.entry.js +109 -0
  484. package/dist/esm/xpl-table.entry.js.map +1 -0
  485. package/dist/esm/xpl-tag.entry.js +19 -0
  486. package/dist/esm/xpl-tag.entry.js.map +1 -0
  487. package/dist/esm/xpl-toggle.entry.js +10 -5
  488. package/dist/esm/xpl-toggle.entry.js.map +1 -0
  489. package/dist/esm/xpl-utility-bar.entry.js +31 -0
  490. package/dist/esm/xpl-utility-bar.entry.js.map +1 -0
  491. package/dist/stories/application-shell.stories.js +1 -0
  492. package/dist/stories/application-shell.stories.js.map +1 -0
  493. package/dist/stories/avatar.stories.js +1 -0
  494. package/dist/stories/avatar.stories.js.map +1 -0
  495. package/dist/stories/backdrop.stories.js +1 -0
  496. package/dist/stories/backdrop.stories.js.map +1 -0
  497. package/dist/stories/badge.stories.js +1 -0
  498. package/dist/stories/badge.stories.js.map +1 -0
  499. package/dist/stories/breadcrumbs.stories.js +1 -0
  500. package/dist/stories/breadcrumbs.stories.js.map +1 -0
  501. package/dist/stories/button-row.stories.js +1 -0
  502. package/dist/stories/button-row.stories.js.map +1 -0
  503. package/dist/stories/button.stories.js +1 -0
  504. package/dist/stories/button.stories.js.map +1 -0
  505. package/dist/stories/checkbox.stories.js +1 -0
  506. package/dist/stories/checkbox.stories.js.map +1 -0
  507. package/dist/stories/choicelist.stories.js +1 -0
  508. package/dist/stories/choicelist.stories.js.map +1 -0
  509. package/dist/stories/content-area.stories.js +1 -0
  510. package/dist/stories/content-area.stories.js.map +1 -0
  511. package/dist/stories/divider.stories.js +1 -0
  512. package/dist/stories/divider.stories.js.map +1 -0
  513. package/dist/stories/dropdown.stories.js +74 -65
  514. package/dist/stories/dropdown.stories.js.map +1 -0
  515. package/dist/stories/grid.stories.js +1 -0
  516. package/dist/stories/grid.stories.js.map +1 -0
  517. package/dist/stories/input.stories.js +1 -0
  518. package/dist/stories/input.stories.js.map +1 -0
  519. package/dist/stories/list.stories.js +1 -0
  520. package/dist/stories/list.stories.js.map +1 -0
  521. package/dist/stories/main-nav.stories.js +1 -0
  522. package/dist/stories/main-nav.stories.js.map +1 -0
  523. package/dist/stories/pagination.stories.js +1 -0
  524. package/dist/stories/pagination.stories.js.map +1 -0
  525. package/dist/stories/radio.stories.js +1 -0
  526. package/dist/stories/radio.stories.js.map +1 -0
  527. package/dist/stories/secondary-nav.stories.js +1 -0
  528. package/dist/stories/secondary-nav.stories.js.map +1 -0
  529. package/dist/stories/select.stories.js +109 -32
  530. package/dist/stories/select.stories.js.map +1 -0
  531. package/dist/stories/table.stories.js +1 -0
  532. package/dist/stories/table.stories.js.map +1 -0
  533. package/dist/stories/tabs.stories.js +1 -0
  534. package/dist/stories/tabs.stories.js.map +1 -0
  535. package/dist/stories/toggle.stories.js +1 -0
  536. package/dist/stories/toggle.stories.js.map +1 -0
  537. package/dist/stories/utility-bar.stories.js +1 -0
  538. package/dist/stories/utility-bar.stories.js.map +1 -0
  539. package/dist/types/Users/roc/Sites/apollo/.stencil/stories/dropdown.stories.d.ts +17 -1
  540. package/dist/types/Users/roc/Sites/apollo/.stencil/stories/select.stories.d.ts +60 -0
  541. package/dist/types/components/xpl-dropdown/dropdownoption.d.ts +2 -1
  542. package/dist/types/components/xpl-dropdown/xpl-dropdown-option/xpl-dropdown-option.d.ts +7 -1
  543. package/dist/types/components/xpl-dropdown/xpl-dropdown.d.ts +2 -2
  544. package/dist/types/components/xpl-select/xpl-select.d.ts +16 -2
  545. package/dist/types/components/xpl-table/xpl-table.d.ts +2 -0
  546. package/dist/types/components.d.ts +88 -23
  547. package/dist/types/stencil-public-runtime.d.ts +97 -23
  548. package/loader/index.d.ts +9 -1
  549. package/loader/package.json +1 -0
  550. package/package.json +7 -6
  551. package/CHANGELOG.md +0 -106
  552. package/dist/apollo-core/p-25f84d39.entry.js +0 -1
  553. package/dist/apollo-core/p-2ce2fe5c.entry.js +0 -1
  554. package/dist/apollo-core/p-3ff1ff38.entry.js +0 -1
  555. package/dist/apollo-core/p-63dd9a65.entry.js +0 -1
  556. package/dist/apollo-core/p-6c3c1e3d.entry.js +0 -1
  557. package/dist/apollo-core/p-81a6ce4c.entry.js +0 -1
  558. package/dist/apollo-core/p-918b0731.entry.js +0 -1
  559. package/dist/apollo-core/p-a43e2d1f.entry.js +0 -1
  560. package/dist/apollo-core/p-a7cc4114.entry.js +0 -1
  561. package/dist/apollo-core/p-b6d1b135.entry.js +0 -1
  562. package/dist/apollo-core/p-bc0ebed2.entry.js +0 -1
  563. package/dist/apollo-core/p-c8af4ed6.entry.js +0 -1
  564. package/dist/apollo-core/p-d4aa2fa9.js +0 -1
  565. package/dist/apollo-core/p-d4e5d3aa.entry.js +0 -1
  566. package/dist/apollo-core/p-dad11011.entry.js +0 -1
  567. package/dist/apollo-core/p-db74c99c.entry.js +0 -1
  568. package/dist/apollo-core/p-ee16942f.entry.js +0 -1
  569. package/dist/collection/components/xpl-select/selectchoice.js +0 -1
  570. package/dist/custom-elements/index.d.ts +0 -219
  571. package/dist/types/components/xpl-select/selectchoice.d.ts +0 -4
@@ -1,3067 +1,9 @@
1
- import { h, Host, createEvent, Fragment, proxyCustomElement } from '@stencil/core/internal/client';
2
- export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
3
-
4
- const XplApplicationShell$1 = class extends HTMLElement {
5
- constructor() {
6
- super();
7
- this.__registerHost();
8
- /**
9
- * @property {boolean} - Whether or not the Grid should have space for a secondary (sub) navigation bar
10
- */
11
- this.withSubnav = false;
12
- /**
13
- * @property {boolean} - Whether or not the Grid should have space for a utility bar
14
- */
15
- this.withUtility = true;
16
- /**
17
- * @property {string} - The width of the main navigation bar, can be passed or updated when nav-width event is emitted.
18
- */
19
- this.navWidth = 'default';
20
- /**
21
- * @state {boolean} - Whether or not the main nav is open, updates when the nav-open event is emitted.
22
- */
23
- this.navOpen = true;
24
- }
25
- closeNavOnMobile() {
26
- if (window.innerWidth <= 640) {
27
- this.navOpen = false;
28
- }
29
- }
30
- navToggleHandler() {
31
- this.navOpen = !this.navOpen;
32
- }
33
- navWithHandler(event) {
34
- this.navWidth = event.detail;
35
- }
36
- onWindowResize() {
37
- this.closeNavOnMobile();
38
- }
39
- connectedCallback() {
40
- this.closeNavOnMobile();
41
- }
42
- componentWillLoad() {
43
- this.navOpen =
44
- this.isNavOpenAtStartup !== undefined
45
- ? this.isNavOpenAtStartup
46
- : this.navOpen;
47
- }
48
- render() {
49
- let applicationShellClasses = 'xpl-application-shell';
50
- if (this.withUtility)
51
- applicationShellClasses += ' xpl-application-shell--with_utility';
52
- let navClasses = 'xpl-application-shell__nav';
53
- navClasses += this.navOpen
54
- ? ` xpl-application-shell__nav--${this.navWidth}--open`
55
- : ` xpl-application-shell__nav--${this.navWidth}`;
56
- return (h(Host, { class: applicationShellClasses }, h("div", { class: navClasses }, h("slot", { name: "nav" })), h("div", { class: "xpl-application-shell__subnav" }, h("slot", { name: "subnav" })), h("div", { class: "xpl-application-shell__utility" }, h("slot", { name: "utility" })), h("div", { class: "xpl-application-shell__content" }, h("slot", { name: "content" })), h("xpl-backdrop", { onClick: () => this.navToggleHandler(), class: {
57
- 'xpl-application-shell__backdrop--open': this.navOpen,
58
- }, relative: true })));
59
- }
60
- };
61
-
62
- const XplAvatar$1 = class extends HTMLElement {
63
- constructor() {
64
- super();
65
- this.__registerHost();
66
- this.disabled = false;
67
- }
68
- render() {
69
- let className = 'xpl-avatar';
70
- if (this.size)
71
- className += ` xpl-avatar--${this.size}`;
72
- if (this.color)
73
- className += ` xpl-avatar--${this.color}`;
74
- const inner = (h("div", null, this.src ? (h("img", { alt: this.name, src: this.src })) : (h("div", { class: "xpl-avatar__placeholder" }, h("slot", null))), this.status && (h("div", { class: `xpl-avatar__dot--${this.status}` }))));
75
- return (h(Host, null, this.href && !this.disabled ? (h("a", { href: this.href, class: className, target: this.target }, inner)) : this.href && this.disabled ? (h("div", { class: className + ' xpl-avatar--disabled' }, inner)) : (h("div", { class: className }, inner))));
76
- }
77
- };
78
-
79
- const XplBackdrop$1 = class extends HTMLElement {
80
- constructor() {
81
- super();
82
- this.__registerHost();
83
- /**
84
- * @property {boolean} - When true, backdrop will have relative position. This is useful when the backdrop doesn't cover the whole view area.
85
- * If false, the position will be fixed and cover the whole view area.
86
- */
87
- this.relative = false;
88
- }
89
- render() {
90
- return (h(Host, { class: {
91
- 'xpl-backdrop': true,
92
- 'xpl-backdrop--fixed': !this.relative,
93
- 'xpl-backdrop--relative': this.relative,
94
- }, "aria-hidden": "true" }));
95
- }
96
- };
97
-
98
- const XplBadge$1 = class extends HTMLElement {
99
- constructor() {
100
- super();
101
- this.__registerHost();
102
- }
103
- render() {
104
- let className = 'xpl-badge';
105
- if (this.dot)
106
- className += ' xpl-badge--dot';
107
- if (this.variant)
108
- className += ' xpl-badge--' + this.variant;
109
- return (h(Host, null, h("div", { class: className }, h("slot", null))));
110
- }
111
- };
112
-
113
- const XplBreadcrumbItem$1 = class extends HTMLElement {
114
- constructor() {
115
- super();
116
- this.__registerHost();
117
- // This is temporary as we still don't have a xpl-icon component. When that's created we should update this code.
118
- this.chevron = `<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chevron-right" class="svg-inline--fa fa-chevron-right fa-w-10" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">
119
- <path fill="currentColor" d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"></path>
120
- </svg>
121
- `;
122
- }
123
- render() {
124
- return (h(Host, { class: "xpl-breadcrumb-item", role: "listitem" }, h("li", { role: "none" }, h("slot", null)), h("span", { innerHTML: `${this.chevron}` })));
125
- }
126
- };
127
-
128
- const XplBreadcrumbs$1 = class extends HTMLElement {
129
- constructor() {
130
- super();
131
- this.__registerHost();
132
- }
133
- render() {
134
- return (h(Host, null, h("nav", { class: "xpl-breadcrumbs", "aria-label": "Breadcrumb" }, h("ol", { role: "list" }, h("slot", null)))));
135
- }
136
- };
137
-
138
- const XplButton$1 = class extends HTMLElement {
139
- constructor() {
140
- super();
141
- this.__registerHost();
142
- /**
143
- * @property {"default" | "sm" | "xs"} - button size
144
- */
145
- this.size = 'default';
146
- /**
147
- * @property {"primary" | "secondary" | "subtle"} - button variant
148
- */
149
- this.variant = 'primary';
150
- /**
151
- * @property {"neutral" | "warning" | "success"} - button state (color) neutral=purple, success=green, warning=red
152
- */
153
- this.state = 'neutral';
154
- }
155
- componentDidRender() {
156
- const attrs = this.el.attributes;
157
- const dataAttrs = Object.keys(attrs)
158
- .filter((k) => {
159
- const propertyName = attrs[k].name;
160
- if (propertyName) {
161
- return (propertyName.includes('data-test') ||
162
- propertyName.includes('aria-'));
163
- }
164
- return false;
165
- })
166
- .reduce((acc, k) => {
167
- return Object.assign(Object.assign({}, acc), { [attrs[k].name]: attrs[k].value });
168
- }, {});
169
- const child = this.el.querySelector('button');
170
- Object.keys(dataAttrs).forEach((k) => {
171
- child.setAttribute(k, dataAttrs[k]);
172
- this.el.removeAttribute(k);
173
- });
174
- }
175
- render() {
176
- let className = `xpl-button
177
- xpl-button--${this.size}
178
- xpl-button--${this.state}
179
- xpl-button--${this.variant}`;
180
- if (this.iconOnly)
181
- className += ' xpl-button--icon-only';
182
- if (this.fullWidth)
183
- className += ' xpl-button--full-width';
184
- if (this.link && this.disabled)
185
- className += ' xpl-button--link-disabled';
186
- return (h(Host, { class: className },
187
- /**
188
- * Conditionally render either an <slot> or <button> element
189
- * depending on if there's an `link` or not
190
- */
191
- this.link ? (h("slot", null)) : (h("button", { disabled: this.disabled, name: this.name, type: this.type, value: this.value }, h("slot", null)))));
192
- }
193
- get el() { return this; }
194
- };
195
-
196
- const XplButtonRow$1 = class extends HTMLElement {
197
- constructor() {
198
- super();
199
- this.__registerHost();
200
- this.clickPrimary = createEvent(this, "clickPrimary", 7);
201
- this.clickSecondary = createEvent(this, "clickSecondary", 7);
202
- this.clickTertiary = createEvent(this, "clickTertiary", 7);
203
- this.onPrimary = () => this.clickPrimary.emit();
204
- this.onSecondary = () => this.clickSecondary.emit();
205
- this.onTertiary = () => this.clickTertiary.emit();
206
- }
207
- render() {
208
- return (h(Host, { class: "xpl-button-row" }, h("div", { class: "xpl-button-row-inner" }, h("div", { class: "xpl-button-row__left" }, this.secondary && (h("xpl-button", { variant: "secondary", type: "button", onClick: this.onSecondary }, this.secondary))), h("div", { class: "xpl-button-row__right" }, this.tertiary && (h("xpl-button", { variant: "subtle", type: "button", onClick: this.onTertiary }, this.tertiary)), this.secondary && (h("xpl-button", { variant: "secondary", type: "button", onClick: this.onSecondary }, this.secondary)), this.primary && (h("xpl-button", { class: "xpl-button-row__primary", onClick: this.onPrimary }, this.primary))))));
209
- }
210
- };
211
-
212
- // Unique ID creation requires a high quality random # generator. In the browser we therefore
213
- // require the crypto API and do not support built-in fallback to lower quality random number
214
- // generators (like Math.random()).
215
- var getRandomValues;
216
- var rnds8 = new Uint8Array(16);
217
- function rng() {
218
- // lazy load so that environments that need to polyfill have a chance to do so
219
- if (!getRandomValues) {
220
- // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
221
- // find the complete implementation of crypto (msCrypto) on IE11.
222
- getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
223
-
224
- if (!getRandomValues) {
225
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
226
- }
227
- }
228
-
229
- return getRandomValues(rnds8);
230
- }
231
-
232
- const REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
233
-
234
- function validate(uuid) {
235
- return typeof uuid === 'string' && REGEX.test(uuid);
236
- }
237
-
238
- /**
239
- * Convert array of 16 byte values to UUID string format of the form:
240
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
241
- */
242
-
243
- var byteToHex = [];
244
-
245
- for (var i = 0; i < 256; ++i) {
246
- byteToHex.push((i + 0x100).toString(16).substr(1));
247
- }
248
-
249
- function stringify(arr) {
250
- var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
251
- // Note: Be careful editing this code! It's been tuned for performance
252
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
253
- var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
254
- // of the following:
255
- // - One or more input array values don't map to a hex octet (leading to
256
- // "undefined" in the uuid)
257
- // - Invalid input values for the RFC `version` or `variant` fields
258
-
259
- if (!validate(uuid)) {
260
- throw TypeError('Stringified UUID is invalid');
261
- }
262
-
263
- return uuid;
264
- }
265
-
266
- function v4(options, buf, offset) {
267
- options = options || {};
268
- var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
269
-
270
- rnds[6] = rnds[6] & 0x0f | 0x40;
271
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
272
-
273
- if (buf) {
274
- offset = offset || 0;
275
-
276
- for (var i = 0; i < 16; ++i) {
277
- buf[offset + i] = rnds[i];
278
- }
279
-
280
- return buf;
281
- }
282
-
283
- return stringify(rnds);
284
- }
285
-
286
- const XplCheckbox$1 = class extends HTMLElement {
287
- constructor() {
288
- super();
289
- this.__registerHost();
290
- this.checkboxChange = createEvent(this, "checkboxChange", 7);
291
- this.id = v4();
292
- }
293
- render() {
294
- return (h(Host, { class: {
295
- 'xpl-checkbox-radio-container': true,
296
- styled: this.styled,
297
- disabled: this.disabled,
298
- } }, h("input", { class: "xpl-checkbox", type: "checkbox", checked: this.checked, disabled: this.disabled, id: this.id, indeterminate: this.indeterminate, onChange: () => this.checkboxChange.emit(this.input.checked), name: this.name, ref: (el) => (this.input = el), required: this.required, value: this.value }), h("label", { class: {
299
- 'xpl-label': true,
300
- 'xpl-label--disabled': this.disabled,
301
- }, htmlFor: this.id }, h("slot", null), this.description && (h("small", { class: {
302
- 'xpl-description': true,
303
- 'xpl-description--disabled': this.disabled,
304
- } }, this.description)))));
305
- }
306
- };
307
-
308
- const XplChoicelist$1 = class extends HTMLElement {
309
- constructor() {
310
- super();
311
- this.__registerHost();
312
- }
313
- componentWillLoad() {
314
- this.selected =
315
- this.choices !== undefined &&
316
- this.choices !== null &&
317
- this.choices.length > 0
318
- ? this.choices.map(() => false)
319
- : [];
320
- }
321
- render() {
322
- let className = 'xpl-choicelist';
323
- if (this.styled)
324
- className += ' xpl-choicelist--styled';
325
- return (h(Host, { class: "xpl-choicelist-container" }, this.heading !== undefined ||
326
- this.description !== undefined ? (h("div", { class: "xpl-choicelist-heading" }, this.heading && h("h3", null, this.heading), this.description && h("p", null, this.description))) : null, this.choices && (h("ul", { class: className }, this.choices.map(({ children, description, label }, i) => {
327
- const inner = this.multi ? (h("xpl-checkbox", { description: description, name: this.name, onCheckboxChange: (e) => {
328
- const { detail } = e;
329
- this.selected = this.selected.map((v, j) => (i === j ? detail : v));
330
- } }, label)) : (h("xpl-radio", { description: description, name: this.name, onRadioChange: () => {
331
- this.selected = this.selected.map((_, j) => i === j);
332
- } }, label));
333
- let className = this.styled && this.selected[i]
334
- ? 'selected'
335
- : '';
336
- return (h("li", { class: className }, inner, children && (h("ul", null, children.map((child) => {
337
- const childInner = this
338
- .multi ? (h("xpl-checkbox", { description: child.description }, child.label)) : (h("xpl-radio", { description: child.description }, child.label));
339
- return (h("li", null, childInner));
340
- })))));
341
- })))));
342
- }
343
- };
344
-
345
- const XplContentArea$1 = class extends HTMLElement {
346
- constructor() {
347
- super();
348
- this.__registerHost();
349
- /**
350
- * @property {string} size - The content-area size.
351
- */
352
- this.size = 'wide';
353
- }
354
- render() {
355
- return (h(Host, null, h("main", { class: `xpl-content-area-wrapper xpl-content-area-wrapper__${this.size}` }, h("div", { class: "xpl-content-area" }, h("slot", null)))));
356
- }
357
- };
358
-
359
- const XplDivider$1 = class extends HTMLElement {
360
- constructor() {
361
- super();
362
- this.__registerHost();
363
- }
364
- render() {
365
- let className = 'xpl-divider';
366
- className += ` xpl-divider--${this.tier}`;
367
- return (h(Host, { class: className }, h("span", null, h("slot", null))));
368
- }
369
- };
370
-
371
- var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
372
- var t = {};
373
- for (var p in s)
374
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
375
- t[p] = s[p];
376
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
377
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
378
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
379
- t[p[i]] = s[p[i]];
380
- }
381
- return t;
382
- };
383
- const XplDropdown$1 = class extends HTMLElement {
384
- constructor() {
385
- super();
386
- this.__registerHost();
387
- /** text to display as heading */
388
- this.isOpen = false;
389
- /** options that are listed */
390
- this.closeOnSelect = true;
391
- /** constant representing number of options that can be selected */
392
- this.mode = 'single';
393
- /** whether selection should be made when focusing on interactable element */
394
- this.selectOnFocus = false;
395
- this.handleClickOutside = ({ target }) => {
396
- const { triggerId } = this;
397
- const isTrigger = triggerId && target.id === triggerId;
398
- const isInside = this.hostElement.contains(target);
399
- if (!isInside && !isTrigger)
400
- this.isOpen = false;
401
- };
402
- }
403
- /**
404
- * called on dropdown option click and keydown events to update isSelected states
405
- */
406
- async handleSelect(e, { component }) {
407
- const { hostElement, mode, options, update } = this;
408
- const isSingle = mode === 'single';
409
- const isMulti = mode === 'multi';
410
- if (Boolean(options)) {
411
- options
412
- .reduce((acc, curr) => [
413
- ...acc,
414
- ...(curr.groupName ? curr.options : [curr]),
415
- ], [])
416
- .forEach((option) => {
417
- const isMatch = option.label === component.hostElement.label;
418
- if (isSingle) {
419
- option.isSelected = isMatch;
420
- component.hostElement.isSelected = option.isSelected;
421
- }
422
- else if (isMulti && isMatch) {
423
- option.isSelected = !option.isSelected;
424
- component.hostElement.isSelected = option.isSelected;
425
- }
426
- });
427
- const mapOptions = (option) => {
428
- option.options = option.groupName
429
- ? option.options.map(mapOptions)
430
- : undefined;
431
- return option;
432
- };
433
- this.options = options.map(mapOptions);
434
- }
435
- else if (isSingle) {
436
- const optionNodes = Array.from(hostElement.querySelectorAll('xpl-dropdown-option'));
437
- optionNodes.forEach((node) => (node.isSelected = node === component.hostElement));
438
- }
439
- else if (isMulti) {
440
- component.isSelected = !component.isSelected;
441
- }
442
- if (Boolean(update))
443
- update(e, { component: this });
444
- }
445
- componentWillLoad() {
446
- this.handleSelect = this.handleSelect.bind(this);
447
- }
448
- connectedCallback() {
449
- document.addEventListener('mousedown', this.handleClickOutside.bind(this));
450
- }
451
- disconnectedCallback() {
452
- document.removeEventListener('mousedown', this.handleClickOutside);
453
- }
454
- render() {
455
- let { isOpen } = this;
456
- const { mode, options } = this;
457
- const hasOptions = options && options.length;
458
- const mappedOptions = hasOptions &&
459
- options.map((_a) => {
460
- var { groupName, options } = _a, properties = __rest$1(_a, ["groupName", "options"]);
461
- return groupName ? (h("xpl-dropdown-group", Object.assign({ groupName: groupName, options: options }, properties))) : (h("xpl-dropdown-option", Object.assign({}, properties)));
462
- });
463
- return (h(Host, { "aria-expanded": isOpen, class: {
464
- 'xpl-dropdown': true,
465
- 'xpl-dropdown--multi': mode === 'multi',
466
- 'xpl-dropdown--open': isOpen,
467
- }, role: "listbox" }, h("ul", { class: "xpl-dropdown-list" }, mappedOptions || h("slot", { name: "options" }))));
468
- }
469
- get hostElement() { return this; }
470
- };
471
-
472
- var __rest = (undefined && undefined.__rest) || function (s, e) {
473
- var t = {};
474
- for (var p in s)
475
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
476
- t[p] = s[p];
477
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
478
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
479
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
480
- t[p[i]] = s[p[i]];
481
- }
482
- return t;
483
- };
484
- const XplDropdownGroup$1 = class extends HTMLElement {
485
- constructor() {
486
- super();
487
- this.__registerHost();
488
- }
489
- render() {
490
- const { groupName, options } = this;
491
- const hasOptions = options && options.length;
492
- const mappedOptions = hasOptions &&
493
- options.map((_a) => {
494
- var { groupName } = _a, properties = __rest(_a, ["groupName"]);
495
- return groupName ? (h("xpl-dropdown-group", Object.assign({ label: groupName }, properties))) : (h("xpl-dropdown-option", Object.assign({}, properties)));
496
- });
497
- return (h(Host, { role: "group", "aria-label": groupName }, h("li", { class: "xpl-dropdown-list-item" }, h("xpl-dropdown-heading", { label: groupName }), h("ul", { class: "xpl-dropdown-list" }, mappedOptions || h("slot", { name: "options" })))));
498
- }
499
- };
500
-
501
- const XplDropdownHeading$1 = class extends HTMLElement {
502
- constructor() {
503
- super();
504
- this.__registerHost();
505
- }
506
- render() {
507
- return (h(Host, { class: { 'xpl-dropdown-heading': true }, role: "presentation" }, h("span", null, this.label || h("slot", { name: "heading" }))));
508
- }
509
- };
510
-
511
- const XplDropdownOption$1 = class extends HTMLElement {
512
- constructor() {
513
- super();
514
- this.__registerHost();
515
- }
516
- componentWillLoad() {
517
- this.dropdown = this.hostElement.closest('xpl-dropdown');
518
- }
519
- handleClick(ev) {
520
- const { closeOnSelect, mode } = this.dropdown;
521
- if (Boolean(ev.x && ev.y)) {
522
- this.dropdown.handleSelect(ev, { component: this });
523
- if (mode === 'single' && closeOnSelect)
524
- this.dropdown.isOpen = false;
525
- }
526
- }
527
- handleKeyup(ev) {
528
- const { dropdown } = this;
529
- const navigationKeys = [
530
- 'ArrowDown',
531
- 'ArrowLeft',
532
- 'ArrowRight',
533
- 'ArrowUp',
534
- 'Tab',
535
- ];
536
- const { closeOnSelect, mode, selectOnFocus } = this.dropdown;
537
- if (selectOnFocus && navigationKeys.includes(ev.key)) {
538
- const hostElement = document.activeElement.closest('xpl-dropdown-option');
539
- const component = {
540
- component: { hostElement },
541
- };
542
- dropdown.handleSelect(ev, component);
543
- if (mode === 'single' && closeOnSelect)
544
- this.dropdown.isOpen = false;
545
- return;
546
- }
547
- const selectionKeys = ['Escape', 'Enter'];
548
- if (selectionKeys.includes(ev.key)) {
549
- dropdown.handleSelect(ev, { component: this });
550
- if (this.dropdown.closeOnSelect)
551
- this.dropdown.isOpen = false;
552
- }
553
- }
554
- connectedCallback() {
555
- this.hostElement.addEventListener('click', this.handleClick.bind(this));
556
- this.hostElement.addEventListener('keyup', this.handleKeyup.bind(this));
557
- }
558
- disconnectedCallback() {
559
- this.hostElement.removeEventListener('click', this.handleClick);
560
- this.hostElement.removeEventListener('keyup', this.handleKeyup);
561
- }
562
- render() {
563
- const { label, isSelected, isDisabled } = this;
564
- return (h(Host, { class: {
565
- 'xpl-dropdown-option': true,
566
- 'xpl-dropdown-option--disabled': isDisabled,
567
- 'xpl-dropdown-option--selected': isSelected,
568
- }, role: "option", "aria-checked": isSelected, "aria-disabled": isDisabled, "aria-selected": isSelected }, h("li", { class: "xpl-dropdown-list-item" }, label || h("slot", { name: "option" }))));
569
- }
570
- get hostElement() { return this; }
571
- };
572
-
573
- const XplGrid$1 = class extends HTMLElement {
574
- constructor() {
575
- super();
576
- this.__registerHost();
577
- }
578
- componentDidLoad() {
579
- const items = Array.from(this.container.querySelectorAll('.xpl-grid-item'));
580
- let lgCounter = 0, mdCounter = 0, smCounter = 0, xsCounter = 0;
581
- items.forEach((item) => {
582
- lgCounter += +item.getAttribute('lg') || 6;
583
- mdCounter += +item.getAttribute('md') || 6;
584
- smCounter += +item.getAttribute('sm') || 6;
585
- xsCounter += +item.getAttribute('xs') || 6;
586
- if (lgCounter % 6 === 0)
587
- item.classList.add('xpl-grid-item-lg-last');
588
- if (mdCounter % 6 === 0)
589
- item.classList.add('xpl-grid-item-md-last');
590
- if (smCounter % 6 === 0)
591
- item.classList.add('xpl-grid-item-sm-last');
592
- if (xsCounter % 6 === 0)
593
- item.classList.add('xpl-grid-item-xs-last');
594
- });
595
- }
596
- render() {
597
- return h(Host, { class: "xpl-grid" });
598
- }
599
- get container() { return this; }
600
- };
601
-
602
- const XplGridItem$1 = class extends HTMLElement {
603
- constructor() {
604
- super();
605
- this.__registerHost();
606
- this.xs = 6;
607
- this.sm = 6;
608
- this.md = 6;
609
- this.lg = 6;
610
- }
611
- render() {
612
- let className = 'xpl-grid-item';
613
- className += ` xpl-grid-item-xs-${this.xs}`;
614
- className += ` xpl-grid-item-sm-${this.sm}`;
615
- className += ` xpl-grid-item-md-${this.md}`;
616
- className += ` xpl-grid-item-lg-${this.lg}`;
617
- return (h(Host, { class: className }, h("slot", null)));
618
- }
619
- };
620
-
621
- const HOOKS = [
622
- "onChange",
623
- "onClose",
624
- "onDayCreate",
625
- "onDestroy",
626
- "onKeyDown",
627
- "onMonthChange",
628
- "onOpen",
629
- "onParseConfig",
630
- "onReady",
631
- "onValueUpdate",
632
- "onYearChange",
633
- "onPreCalendarPosition",
634
- ];
635
- const defaults = {
636
- _disable: [],
637
- allowInput: false,
638
- allowInvalidPreload: false,
639
- altFormat: "F j, Y",
640
- altInput: false,
641
- altInputClass: "form-control input",
642
- animate: typeof window === "object" &&
643
- window.navigator.userAgent.indexOf("MSIE") === -1,
644
- ariaDateFormat: "F j, Y",
645
- autoFillDefaultTime: true,
646
- clickOpens: true,
647
- closeOnSelect: true,
648
- conjunction: ", ",
649
- dateFormat: "Y-m-d",
650
- defaultHour: 12,
651
- defaultMinute: 0,
652
- defaultSeconds: 0,
653
- disable: [],
654
- disableMobile: false,
655
- enableSeconds: false,
656
- enableTime: false,
657
- errorHandler: (err) => typeof console !== "undefined" && console.warn(err),
658
- getWeek: (givenDate) => {
659
- const date = new Date(givenDate.getTime());
660
- date.setHours(0, 0, 0, 0);
661
- date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
662
- var week1 = new Date(date.getFullYear(), 0, 4);
663
- return (1 +
664
- Math.round(((date.getTime() - week1.getTime()) / 86400000 -
665
- 3 +
666
- ((week1.getDay() + 6) % 7)) /
667
- 7));
668
- },
669
- hourIncrement: 1,
670
- ignoredFocusElements: [],
671
- inline: false,
672
- locale: "default",
673
- minuteIncrement: 5,
674
- mode: "single",
675
- monthSelectorType: "dropdown",
676
- nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
677
- noCalendar: false,
678
- now: new Date(),
679
- onChange: [],
680
- onClose: [],
681
- onDayCreate: [],
682
- onDestroy: [],
683
- onKeyDown: [],
684
- onMonthChange: [],
685
- onOpen: [],
686
- onParseConfig: [],
687
- onReady: [],
688
- onValueUpdate: [],
689
- onYearChange: [],
690
- onPreCalendarPosition: [],
691
- plugins: [],
692
- position: "auto",
693
- positionElement: undefined,
694
- prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
695
- shorthandCurrentMonth: false,
696
- showMonths: 1,
697
- static: false,
698
- time_24hr: false,
699
- weekNumbers: false,
700
- wrap: false,
701
- };
702
-
703
- const english = {
704
- weekdays: {
705
- shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
706
- longhand: [
707
- "Sunday",
708
- "Monday",
709
- "Tuesday",
710
- "Wednesday",
711
- "Thursday",
712
- "Friday",
713
- "Saturday",
714
- ],
715
- },
716
- months: {
717
- shorthand: [
718
- "Jan",
719
- "Feb",
720
- "Mar",
721
- "Apr",
722
- "May",
723
- "Jun",
724
- "Jul",
725
- "Aug",
726
- "Sep",
727
- "Oct",
728
- "Nov",
729
- "Dec",
730
- ],
731
- longhand: [
732
- "January",
733
- "February",
734
- "March",
735
- "April",
736
- "May",
737
- "June",
738
- "July",
739
- "August",
740
- "September",
741
- "October",
742
- "November",
743
- "December",
744
- ],
745
- },
746
- daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
747
- firstDayOfWeek: 0,
748
- ordinal: (nth) => {
749
- const s = nth % 100;
750
- if (s > 3 && s < 21)
751
- return "th";
752
- switch (s % 10) {
753
- case 1:
754
- return "st";
755
- case 2:
756
- return "nd";
757
- case 3:
758
- return "rd";
759
- default:
760
- return "th";
761
- }
762
- },
763
- rangeSeparator: " to ",
764
- weekAbbreviation: "Wk",
765
- scrollTitle: "Scroll to increment",
766
- toggleTitle: "Click to toggle",
767
- amPM: ["AM", "PM"],
768
- yearAriaLabel: "Year",
769
- monthAriaLabel: "Month",
770
- hourAriaLabel: "Hour",
771
- minuteAriaLabel: "Minute",
772
- time_24hr: false,
773
- };
774
-
775
- const pad = (number, length = 2) => `000${number}`.slice(length * -1);
776
- const int = (bool) => (bool === true ? 1 : 0);
777
- function debounce$1(fn, wait) {
778
- let t;
779
- return function () {
780
- clearTimeout(t);
781
- t = setTimeout(() => fn.apply(this, arguments), wait);
782
- };
783
- }
784
- const arrayify = (obj) => obj instanceof Array ? obj : [obj];
785
-
786
- function toggleClass(elem, className, bool) {
787
- if (bool === true)
788
- return elem.classList.add(className);
789
- elem.classList.remove(className);
790
- }
791
- function createElement(tag, className, content) {
792
- const e = window.document.createElement(tag);
793
- className = className || "";
794
- content = content || "";
795
- e.className = className;
796
- if (content !== undefined)
797
- e.textContent = content;
798
- return e;
799
- }
800
- function clearNode(node) {
801
- while (node.firstChild)
802
- node.removeChild(node.firstChild);
803
- }
804
- function findParent(node, condition) {
805
- if (condition(node))
806
- return node;
807
- else if (node.parentNode)
808
- return findParent(node.parentNode, condition);
809
- return undefined;
810
- }
811
- function createNumberInput(inputClassName, opts) {
812
- const wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
813
- if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
814
- numInput.type = "number";
815
- }
816
- else {
817
- numInput.type = "text";
818
- numInput.pattern = "\\d*";
819
- }
820
- if (opts !== undefined)
821
- for (const key in opts)
822
- numInput.setAttribute(key, opts[key]);
823
- wrapper.appendChild(numInput);
824
- wrapper.appendChild(arrowUp);
825
- wrapper.appendChild(arrowDown);
826
- return wrapper;
827
- }
828
- function getEventTarget(event) {
829
- try {
830
- if (typeof event.composedPath === "function") {
831
- const path = event.composedPath();
832
- return path[0];
833
- }
834
- return event.target;
835
- }
836
- catch (error) {
837
- return event.target;
838
- }
839
- }
840
-
841
- const doNothing = () => undefined;
842
- const monthToStr = (monthNumber, shorthand, locale) => locale.months[shorthand ? "shorthand" : "longhand"][monthNumber];
843
- const revFormat = {
844
- D: doNothing,
845
- F: function (dateObj, monthName, locale) {
846
- dateObj.setMonth(locale.months.longhand.indexOf(monthName));
847
- },
848
- G: (dateObj, hour) => {
849
- dateObj.setHours(parseFloat(hour));
850
- },
851
- H: (dateObj, hour) => {
852
- dateObj.setHours(parseFloat(hour));
853
- },
854
- J: (dateObj, day) => {
855
- dateObj.setDate(parseFloat(day));
856
- },
857
- K: (dateObj, amPM, locale) => {
858
- dateObj.setHours((dateObj.getHours() % 12) +
859
- 12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
860
- },
861
- M: function (dateObj, shortMonth, locale) {
862
- dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
863
- },
864
- S: (dateObj, seconds) => {
865
- dateObj.setSeconds(parseFloat(seconds));
866
- },
867
- U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1000),
868
- W: function (dateObj, weekNum, locale) {
869
- const weekNumber = parseInt(weekNum);
870
- const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
871
- date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
872
- return date;
873
- },
874
- Y: (dateObj, year) => {
875
- dateObj.setFullYear(parseFloat(year));
876
- },
877
- Z: (_, ISODate) => new Date(ISODate),
878
- d: (dateObj, day) => {
879
- dateObj.setDate(parseFloat(day));
880
- },
881
- h: (dateObj, hour) => {
882
- dateObj.setHours(parseFloat(hour));
883
- },
884
- i: (dateObj, minutes) => {
885
- dateObj.setMinutes(parseFloat(minutes));
886
- },
887
- j: (dateObj, day) => {
888
- dateObj.setDate(parseFloat(day));
889
- },
890
- l: doNothing,
891
- m: (dateObj, month) => {
892
- dateObj.setMonth(parseFloat(month) - 1);
893
- },
894
- n: (dateObj, month) => {
895
- dateObj.setMonth(parseFloat(month) - 1);
896
- },
897
- s: (dateObj, seconds) => {
898
- dateObj.setSeconds(parseFloat(seconds));
899
- },
900
- u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),
901
- w: doNothing,
902
- y: (dateObj, year) => {
903
- dateObj.setFullYear(2000 + parseFloat(year));
904
- },
905
- };
906
- const tokenRegex = {
907
- D: "(\\w+)",
908
- F: "(\\w+)",
909
- G: "(\\d\\d|\\d)",
910
- H: "(\\d\\d|\\d)",
911
- J: "(\\d\\d|\\d)\\w+",
912
- K: "",
913
- M: "(\\w+)",
914
- S: "(\\d\\d|\\d)",
915
- U: "(.+)",
916
- W: "(\\d\\d|\\d)",
917
- Y: "(\\d{4})",
918
- Z: "(.+)",
919
- d: "(\\d\\d|\\d)",
920
- h: "(\\d\\d|\\d)",
921
- i: "(\\d\\d|\\d)",
922
- j: "(\\d\\d|\\d)",
923
- l: "(\\w+)",
924
- m: "(\\d\\d|\\d)",
925
- n: "(\\d\\d|\\d)",
926
- s: "(\\d\\d|\\d)",
927
- u: "(.+)",
928
- w: "(\\d\\d|\\d)",
929
- y: "(\\d{2})",
930
- };
931
- const formats = {
932
- Z: (date) => date.toISOString(),
933
- D: function (date, locale, options) {
934
- return locale.weekdays.shorthand[formats.w(date, locale, options)];
935
- },
936
- F: function (date, locale, options) {
937
- return monthToStr(formats.n(date, locale, options) - 1, false, locale);
938
- },
939
- G: function (date, locale, options) {
940
- return pad(formats.h(date, locale, options));
941
- },
942
- H: (date) => pad(date.getHours()),
943
- J: function (date, locale) {
944
- return locale.ordinal !== undefined
945
- ? date.getDate() + locale.ordinal(date.getDate())
946
- : date.getDate();
947
- },
948
- K: (date, locale) => locale.amPM[int(date.getHours() > 11)],
949
- M: function (date, locale) {
950
- return monthToStr(date.getMonth(), true, locale);
951
- },
952
- S: (date) => pad(date.getSeconds()),
953
- U: (date) => date.getTime() / 1000,
954
- W: function (date, _, options) {
955
- return options.getWeek(date);
956
- },
957
- Y: (date) => pad(date.getFullYear(), 4),
958
- d: (date) => pad(date.getDate()),
959
- h: (date) => (date.getHours() % 12 ? date.getHours() % 12 : 12),
960
- i: (date) => pad(date.getMinutes()),
961
- j: (date) => date.getDate(),
962
- l: function (date, locale) {
963
- return locale.weekdays.longhand[date.getDay()];
964
- },
965
- m: (date) => pad(date.getMonth() + 1),
966
- n: (date) => date.getMonth() + 1,
967
- s: (date) => date.getSeconds(),
968
- u: (date) => date.getTime(),
969
- w: (date) => date.getDay(),
970
- y: (date) => String(date.getFullYear()).substring(2),
971
- };
972
-
973
- const createDateFormatter = ({ config = defaults, l10n = english, isMobile = false, }) => (dateObj, frmt, overrideLocale) => {
974
- const locale = overrideLocale || l10n;
975
- if (config.formatDate !== undefined && !isMobile) {
976
- return config.formatDate(dateObj, frmt, locale);
977
- }
978
- return frmt
979
- .split("")
980
- .map((c, i, arr) => formats[c] && arr[i - 1] !== "\\"
981
- ? formats[c](dateObj, locale, config)
982
- : c !== "\\"
983
- ? c
984
- : "")
985
- .join("");
986
- };
987
- const createDateParser = ({ config = defaults, l10n = english }) => (date, givenFormat, timeless, customLocale) => {
988
- if (date !== 0 && !date)
989
- return undefined;
990
- const locale = customLocale || l10n;
991
- let parsedDate;
992
- const dateOrig = date;
993
- if (date instanceof Date)
994
- parsedDate = new Date(date.getTime());
995
- else if (typeof date !== "string" &&
996
- date.toFixed !== undefined)
997
- parsedDate = new Date(date);
998
- else if (typeof date === "string") {
999
- const format = givenFormat || (config || defaults).dateFormat;
1000
- const datestr = String(date).trim();
1001
- if (datestr === "today") {
1002
- parsedDate = new Date();
1003
- timeless = true;
1004
- }
1005
- else if (/Z$/.test(datestr) ||
1006
- /GMT$/.test(datestr))
1007
- parsedDate = new Date(date);
1008
- else if (config && config.parseDate)
1009
- parsedDate = config.parseDate(date, format);
1010
- else {
1011
- parsedDate =
1012
- !config || !config.noCalendar
1013
- ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
1014
- : new Date(new Date().setHours(0, 0, 0, 0));
1015
- let matched, ops = [];
1016
- for (let i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
1017
- const token = format[i];
1018
- const isBackSlash = token === "\\";
1019
- const escaped = format[i - 1] === "\\" || isBackSlash;
1020
- if (tokenRegex[token] && !escaped) {
1021
- regexStr += tokenRegex[token];
1022
- const match = new RegExp(regexStr).exec(date);
1023
- if (match && (matched = true)) {
1024
- ops[token !== "Y" ? "push" : "unshift"]({
1025
- fn: revFormat[token],
1026
- val: match[++matchIndex],
1027
- });
1028
- }
1029
- }
1030
- else if (!isBackSlash)
1031
- regexStr += ".";
1032
- ops.forEach(({ fn, val }) => (parsedDate = fn(parsedDate, val, locale) || parsedDate));
1033
- }
1034
- parsedDate = matched ? parsedDate : undefined;
1035
- }
1036
- }
1037
- if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
1038
- config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));
1039
- return undefined;
1040
- }
1041
- if (timeless === true)
1042
- parsedDate.setHours(0, 0, 0, 0);
1043
- return parsedDate;
1044
- };
1045
- function compareDates(date1, date2, timeless = true) {
1046
- if (timeless !== false) {
1047
- return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
1048
- new Date(date2.getTime()).setHours(0, 0, 0, 0));
1049
- }
1050
- return date1.getTime() - date2.getTime();
1051
- }
1052
- const isBetween = (ts, ts1, ts2) => {
1053
- return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
1054
- };
1055
- const duration = {
1056
- DAY: 86400000,
1057
- };
1058
- function getDefaultHours(config) {
1059
- let hours = config.defaultHour;
1060
- let minutes = config.defaultMinute;
1061
- let seconds = config.defaultSeconds;
1062
- if (config.minDate !== undefined) {
1063
- const minHour = config.minDate.getHours();
1064
- const minMinutes = config.minDate.getMinutes();
1065
- const minSeconds = config.minDate.getSeconds();
1066
- if (hours < minHour) {
1067
- hours = minHour;
1068
- }
1069
- if (hours === minHour && minutes < minMinutes) {
1070
- minutes = minMinutes;
1071
- }
1072
- if (hours === minHour && minutes === minMinutes && seconds < minSeconds)
1073
- seconds = config.minDate.getSeconds();
1074
- }
1075
- if (config.maxDate !== undefined) {
1076
- const maxHr = config.maxDate.getHours();
1077
- const maxMinutes = config.maxDate.getMinutes();
1078
- hours = Math.min(hours, maxHr);
1079
- if (hours === maxHr)
1080
- minutes = Math.min(maxMinutes, minutes);
1081
- if (hours === maxHr && minutes === maxMinutes)
1082
- seconds = config.maxDate.getSeconds();
1083
- }
1084
- return { hours, minutes, seconds };
1085
- }
1086
-
1087
- if (typeof Object.assign !== "function") {
1088
- Object.assign = function (target, ...args) {
1089
- if (!target) {
1090
- throw TypeError("Cannot convert undefined or null to object");
1091
- }
1092
- for (const source of args) {
1093
- if (source) {
1094
- Object.keys(source).forEach((key) => (target[key] = source[key]));
1095
- }
1096
- }
1097
- return target;
1098
- };
1099
- }
1100
-
1101
- const DEBOUNCED_CHANGE_MS = 300;
1102
- function FlatpickrInstance(element, instanceConfig) {
1103
- const self = {
1104
- config: Object.assign(Object.assign({}, defaults), flatpickr.defaultConfig),
1105
- l10n: english,
1106
- };
1107
- self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
1108
- self._handlers = [];
1109
- self.pluginElements = [];
1110
- self.loadedPlugins = [];
1111
- self._bind = bind;
1112
- self._setHoursFromDate = setHoursFromDate;
1113
- self._positionCalendar = positionCalendar;
1114
- self.changeMonth = changeMonth;
1115
- self.changeYear = changeYear;
1116
- self.clear = clear;
1117
- self.close = close;
1118
- self._createElement = createElement;
1119
- self.destroy = destroy;
1120
- self.isEnabled = isEnabled;
1121
- self.jumpToDate = jumpToDate;
1122
- self.open = open;
1123
- self.redraw = redraw;
1124
- self.set = set;
1125
- self.setDate = setDate;
1126
- self.toggle = toggle;
1127
- function setupHelperFunctions() {
1128
- self.utils = {
1129
- getDaysInMonth(month = self.currentMonth, yr = self.currentYear) {
1130
- if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
1131
- return 29;
1132
- return self.l10n.daysInMonth[month];
1133
- },
1134
- };
1135
- }
1136
- function init() {
1137
- self.element = self.input = element;
1138
- self.isOpen = false;
1139
- parseConfig();
1140
- setupLocale();
1141
- setupInputs();
1142
- setupDates();
1143
- setupHelperFunctions();
1144
- if (!self.isMobile)
1145
- build();
1146
- bindEvents();
1147
- if (self.selectedDates.length || self.config.noCalendar) {
1148
- if (self.config.enableTime) {
1149
- setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);
1150
- }
1151
- updateValue(false);
1152
- }
1153
- setCalendarWidth();
1154
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
1155
- if (!self.isMobile && isSafari) {
1156
- positionCalendar();
1157
- }
1158
- triggerEvent("onReady");
1159
- }
1160
- function bindToInstance(fn) {
1161
- return fn.bind(self);
1162
- }
1163
- function setCalendarWidth() {
1164
- const config = self.config;
1165
- if (config.weekNumbers === false && config.showMonths === 1) {
1166
- return;
1167
- }
1168
- else if (config.noCalendar !== true) {
1169
- window.requestAnimationFrame(function () {
1170
- if (self.calendarContainer !== undefined) {
1171
- self.calendarContainer.style.visibility = "hidden";
1172
- self.calendarContainer.style.display = "block";
1173
- }
1174
- if (self.daysContainer !== undefined) {
1175
- const daysWidth = (self.days.offsetWidth + 1) * config.showMonths;
1176
- self.daysContainer.style.width = daysWidth + "px";
1177
- self.calendarContainer.style.width =
1178
- daysWidth +
1179
- (self.weekWrapper !== undefined
1180
- ? self.weekWrapper.offsetWidth
1181
- : 0) +
1182
- "px";
1183
- self.calendarContainer.style.removeProperty("visibility");
1184
- self.calendarContainer.style.removeProperty("display");
1185
- }
1186
- });
1187
- }
1188
- }
1189
- function updateTime(e) {
1190
- if (self.selectedDates.length === 0) {
1191
- const defaultDate = self.config.minDate === undefined ||
1192
- compareDates(new Date(), self.config.minDate) >= 0
1193
- ? new Date()
1194
- : new Date(self.config.minDate.getTime());
1195
- const defaults = getDefaultHours(self.config);
1196
- defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());
1197
- self.selectedDates = [defaultDate];
1198
- self.latestSelectedDateObj = defaultDate;
1199
- }
1200
- if (e !== undefined && e.type !== "blur") {
1201
- timeWrapper(e);
1202
- }
1203
- const prevValue = self._input.value;
1204
- setHoursFromInputs();
1205
- updateValue();
1206
- if (self._input.value !== prevValue) {
1207
- self._debouncedChange();
1208
- }
1209
- }
1210
- function ampm2military(hour, amPM) {
1211
- return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);
1212
- }
1213
- function military2ampm(hour) {
1214
- switch (hour % 24) {
1215
- case 0:
1216
- case 12:
1217
- return 12;
1218
- default:
1219
- return hour % 12;
1220
- }
1221
- }
1222
- function setHoursFromInputs() {
1223
- if (self.hourElement === undefined || self.minuteElement === undefined)
1224
- return;
1225
- let hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined
1226
- ? (parseInt(self.secondElement.value, 10) || 0) % 60
1227
- : 0;
1228
- if (self.amPM !== undefined) {
1229
- hours = ampm2military(hours, self.amPM.textContent);
1230
- }
1231
- const limitMinHours = self.config.minTime !== undefined ||
1232
- (self.config.minDate &&
1233
- self.minDateHasTime &&
1234
- self.latestSelectedDateObj &&
1235
- compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===
1236
- 0);
1237
- const limitMaxHours = self.config.maxTime !== undefined ||
1238
- (self.config.maxDate &&
1239
- self.maxDateHasTime &&
1240
- self.latestSelectedDateObj &&
1241
- compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
1242
- 0);
1243
- if (limitMaxHours) {
1244
- const maxTime = self.config.maxTime !== undefined
1245
- ? self.config.maxTime
1246
- : self.config.maxDate;
1247
- hours = Math.min(hours, maxTime.getHours());
1248
- if (hours === maxTime.getHours())
1249
- minutes = Math.min(minutes, maxTime.getMinutes());
1250
- if (minutes === maxTime.getMinutes())
1251
- seconds = Math.min(seconds, maxTime.getSeconds());
1252
- }
1253
- if (limitMinHours) {
1254
- const minTime = self.config.minTime !== undefined
1255
- ? self.config.minTime
1256
- : self.config.minDate;
1257
- hours = Math.max(hours, minTime.getHours());
1258
- if (hours === minTime.getHours() && minutes < minTime.getMinutes())
1259
- minutes = minTime.getMinutes();
1260
- if (minutes === minTime.getMinutes())
1261
- seconds = Math.max(seconds, minTime.getSeconds());
1262
- }
1263
- setHours(hours, minutes, seconds);
1264
- }
1265
- function setHoursFromDate(dateObj) {
1266
- const date = dateObj || self.latestSelectedDateObj;
1267
- if (date) {
1268
- setHours(date.getHours(), date.getMinutes(), date.getSeconds());
1269
- }
1270
- }
1271
- function setHours(hours, minutes, seconds) {
1272
- if (self.latestSelectedDateObj !== undefined) {
1273
- self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
1274
- }
1275
- if (!self.hourElement || !self.minuteElement || self.isMobile)
1276
- return;
1277
- self.hourElement.value = pad(!self.config.time_24hr
1278
- ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)
1279
- : hours);
1280
- self.minuteElement.value = pad(minutes);
1281
- if (self.amPM !== undefined)
1282
- self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];
1283
- if (self.secondElement !== undefined)
1284
- self.secondElement.value = pad(seconds);
1285
- }
1286
- function onYearInput(event) {
1287
- const eventTarget = getEventTarget(event);
1288
- const year = parseInt(eventTarget.value) + (event.delta || 0);
1289
- if (year / 1000 > 1 ||
1290
- (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
1291
- changeYear(year);
1292
- }
1293
- }
1294
- function bind(element, event, handler, options) {
1295
- if (event instanceof Array)
1296
- return event.forEach((ev) => bind(element, ev, handler, options));
1297
- if (element instanceof Array)
1298
- return element.forEach((el) => bind(el, event, handler, options));
1299
- element.addEventListener(event, handler, options);
1300
- self._handlers.push({
1301
- remove: () => element.removeEventListener(event, handler),
1302
- });
1303
- }
1304
- function triggerChange() {
1305
- triggerEvent("onChange");
1306
- }
1307
- function bindEvents() {
1308
- if (self.config.wrap) {
1309
- ["open", "close", "toggle", "clear"].forEach((evt) => {
1310
- Array.prototype.forEach.call(self.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, "click", self[evt]));
1311
- });
1312
- }
1313
- if (self.isMobile) {
1314
- setupMobile();
1315
- return;
1316
- }
1317
- const debouncedResize = debounce$1(onResize, 50);
1318
- self._debouncedChange = debounce$1(triggerChange, DEBOUNCED_CHANGE_MS);
1319
- if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
1320
- bind(self.daysContainer, "mouseover", (e) => {
1321
- if (self.config.mode === "range")
1322
- onMouseOver(getEventTarget(e));
1323
- });
1324
- bind(window.document.body, "keydown", onKeyDown);
1325
- if (!self.config.inline && !self.config.static)
1326
- bind(window, "resize", debouncedResize);
1327
- if (window.ontouchstart !== undefined)
1328
- bind(window.document, "touchstart", documentClick);
1329
- else
1330
- bind(window.document, "mousedown", documentClick);
1331
- bind(window.document, "focus", documentClick, { capture: true });
1332
- if (self.config.clickOpens === true) {
1333
- bind(self._input, "focus", self.open);
1334
- bind(self._input, "click", self.open);
1335
- }
1336
- if (self.daysContainer !== undefined) {
1337
- bind(self.monthNav, "click", onMonthNavClick);
1338
- bind(self.monthNav, ["keyup", "increment"], onYearInput);
1339
- bind(self.daysContainer, "click", selectDate);
1340
- }
1341
- if (self.timeContainer !== undefined &&
1342
- self.minuteElement !== undefined &&
1343
- self.hourElement !== undefined) {
1344
- const selText = (e) => getEventTarget(e).select();
1345
- bind(self.timeContainer, ["increment"], updateTime);
1346
- bind(self.timeContainer, "blur", updateTime, { capture: true });
1347
- bind(self.timeContainer, "click", timeIncrement);
1348
- bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
1349
- if (self.secondElement !== undefined)
1350
- bind(self.secondElement, "focus", () => self.secondElement && self.secondElement.select());
1351
- if (self.amPM !== undefined) {
1352
- bind(self.amPM, "click", (e) => {
1353
- updateTime(e);
1354
- triggerChange();
1355
- });
1356
- }
1357
- }
1358
- if (self.config.allowInput) {
1359
- bind(self._input, "blur", onBlur);
1360
- }
1361
- }
1362
- function jumpToDate(jumpDate, triggerChange) {
1363
- const jumpTo = jumpDate !== undefined
1364
- ? self.parseDate(jumpDate)
1365
- : self.latestSelectedDateObj ||
1366
- (self.config.minDate && self.config.minDate > self.now
1367
- ? self.config.minDate
1368
- : self.config.maxDate && self.config.maxDate < self.now
1369
- ? self.config.maxDate
1370
- : self.now);
1371
- const oldYear = self.currentYear;
1372
- const oldMonth = self.currentMonth;
1373
- try {
1374
- if (jumpTo !== undefined) {
1375
- self.currentYear = jumpTo.getFullYear();
1376
- self.currentMonth = jumpTo.getMonth();
1377
- }
1378
- }
1379
- catch (e) {
1380
- e.message = "Invalid date supplied: " + jumpTo;
1381
- self.config.errorHandler(e);
1382
- }
1383
- if (triggerChange && self.currentYear !== oldYear) {
1384
- triggerEvent("onYearChange");
1385
- buildMonthSwitch();
1386
- }
1387
- if (triggerChange &&
1388
- (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {
1389
- triggerEvent("onMonthChange");
1390
- }
1391
- self.redraw();
1392
- }
1393
- function timeIncrement(e) {
1394
- const eventTarget = getEventTarget(e);
1395
- if (~eventTarget.className.indexOf("arrow"))
1396
- incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
1397
- }
1398
- function incrementNumInput(e, delta, inputElem) {
1399
- const target = e && getEventTarget(e);
1400
- const input = inputElem ||
1401
- (target && target.parentNode && target.parentNode.firstChild);
1402
- const event = createEvent("increment");
1403
- event.delta = delta;
1404
- input && input.dispatchEvent(event);
1405
- }
1406
- function build() {
1407
- const fragment = window.document.createDocumentFragment();
1408
- self.calendarContainer = createElement("div", "flatpickr-calendar");
1409
- self.calendarContainer.tabIndex = -1;
1410
- if (!self.config.noCalendar) {
1411
- fragment.appendChild(buildMonthNav());
1412
- self.innerContainer = createElement("div", "flatpickr-innerContainer");
1413
- if (self.config.weekNumbers) {
1414
- const { weekWrapper, weekNumbers } = buildWeeks();
1415
- self.innerContainer.appendChild(weekWrapper);
1416
- self.weekNumbers = weekNumbers;
1417
- self.weekWrapper = weekWrapper;
1418
- }
1419
- self.rContainer = createElement("div", "flatpickr-rContainer");
1420
- self.rContainer.appendChild(buildWeekdays());
1421
- if (!self.daysContainer) {
1422
- self.daysContainer = createElement("div", "flatpickr-days");
1423
- self.daysContainer.tabIndex = -1;
1424
- }
1425
- buildDays();
1426
- self.rContainer.appendChild(self.daysContainer);
1427
- self.innerContainer.appendChild(self.rContainer);
1428
- fragment.appendChild(self.innerContainer);
1429
- }
1430
- if (self.config.enableTime) {
1431
- fragment.appendChild(buildTime());
1432
- }
1433
- toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range");
1434
- toggleClass(self.calendarContainer, "animate", self.config.animate === true);
1435
- toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1);
1436
- self.calendarContainer.appendChild(fragment);
1437
- const customAppend = self.config.appendTo !== undefined &&
1438
- self.config.appendTo.nodeType !== undefined;
1439
- if (self.config.inline || self.config.static) {
1440
- self.calendarContainer.classList.add(self.config.inline ? "inline" : "static");
1441
- if (self.config.inline) {
1442
- if (!customAppend && self.element.parentNode)
1443
- self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);
1444
- else if (self.config.appendTo !== undefined)
1445
- self.config.appendTo.appendChild(self.calendarContainer);
1446
- }
1447
- if (self.config.static) {
1448
- const wrapper = createElement("div", "flatpickr-wrapper");
1449
- if (self.element.parentNode)
1450
- self.element.parentNode.insertBefore(wrapper, self.element);
1451
- wrapper.appendChild(self.element);
1452
- if (self.altInput)
1453
- wrapper.appendChild(self.altInput);
1454
- wrapper.appendChild(self.calendarContainer);
1455
- }
1456
- }
1457
- if (!self.config.static && !self.config.inline)
1458
- (self.config.appendTo !== undefined
1459
- ? self.config.appendTo
1460
- : window.document.body).appendChild(self.calendarContainer);
1461
- }
1462
- function createDay(className, date, dayNumber, i) {
1463
- const dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
1464
- dayElement.dateObj = date;
1465
- dayElement.$i = i;
1466
- dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
1467
- if (className.indexOf("hidden") === -1 &&
1468
- compareDates(date, self.now) === 0) {
1469
- self.todayDateElem = dayElement;
1470
- dayElement.classList.add("today");
1471
- dayElement.setAttribute("aria-current", "date");
1472
- }
1473
- if (dateIsEnabled) {
1474
- dayElement.tabIndex = -1;
1475
- if (isDateSelected(date)) {
1476
- dayElement.classList.add("selected");
1477
- self.selectedDateElem = dayElement;
1478
- if (self.config.mode === "range") {
1479
- toggleClass(dayElement, "startRange", self.selectedDates[0] &&
1480
- compareDates(date, self.selectedDates[0], true) === 0);
1481
- toggleClass(dayElement, "endRange", self.selectedDates[1] &&
1482
- compareDates(date, self.selectedDates[1], true) === 0);
1483
- if (className === "nextMonthDay")
1484
- dayElement.classList.add("inRange");
1485
- }
1486
- }
1487
- }
1488
- else {
1489
- dayElement.classList.add("flatpickr-disabled");
1490
- }
1491
- if (self.config.mode === "range") {
1492
- if (isDateInRange(date) && !isDateSelected(date))
1493
- dayElement.classList.add("inRange");
1494
- }
1495
- if (self.weekNumbers &&
1496
- self.config.showMonths === 1 &&
1497
- className !== "prevMonthDay" &&
1498
- dayNumber % 7 === 1) {
1499
- self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
1500
- }
1501
- triggerEvent("onDayCreate", dayElement);
1502
- return dayElement;
1503
- }
1504
- function focusOnDayElem(targetNode) {
1505
- targetNode.focus();
1506
- if (self.config.mode === "range")
1507
- onMouseOver(targetNode);
1508
- }
1509
- function getFirstAvailableDay(delta) {
1510
- const startMonth = delta > 0 ? 0 : self.config.showMonths - 1;
1511
- const endMonth = delta > 0 ? self.config.showMonths : -1;
1512
- for (let m = startMonth; m != endMonth; m += delta) {
1513
- const month = self.daysContainer.children[m];
1514
- const startIndex = delta > 0 ? 0 : month.children.length - 1;
1515
- const endIndex = delta > 0 ? month.children.length : -1;
1516
- for (let i = startIndex; i != endIndex; i += delta) {
1517
- const c = month.children[i];
1518
- if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj))
1519
- return c;
1520
- }
1521
- }
1522
- return undefined;
1523
- }
1524
- function getNextAvailableDay(current, delta) {
1525
- const givenMonth = current.className.indexOf("Month") === -1
1526
- ? current.dateObj.getMonth()
1527
- : self.currentMonth;
1528
- const endMonth = delta > 0 ? self.config.showMonths : -1;
1529
- const loopDelta = delta > 0 ? 1 : -1;
1530
- for (let m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {
1531
- const month = self.daysContainer.children[m];
1532
- const startIndex = givenMonth - self.currentMonth === m
1533
- ? current.$i + delta
1534
- : delta < 0
1535
- ? month.children.length - 1
1536
- : 0;
1537
- const numMonthDays = month.children.length;
1538
- for (let i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {
1539
- const c = month.children[i];
1540
- if (c.className.indexOf("hidden") === -1 &&
1541
- isEnabled(c.dateObj) &&
1542
- Math.abs(current.$i - i) >= Math.abs(delta))
1543
- return focusOnDayElem(c);
1544
- }
1545
- }
1546
- self.changeMonth(loopDelta);
1547
- focusOnDay(getFirstAvailableDay(loopDelta), 0);
1548
- return undefined;
1549
- }
1550
- function focusOnDay(current, offset) {
1551
- const dayFocused = isInView(document.activeElement || document.body);
1552
- const startElem = current !== undefined
1553
- ? current
1554
- : dayFocused
1555
- ? document.activeElement
1556
- : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
1557
- ? self.selectedDateElem
1558
- : self.todayDateElem !== undefined && isInView(self.todayDateElem)
1559
- ? self.todayDateElem
1560
- : getFirstAvailableDay(offset > 0 ? 1 : -1);
1561
- if (startElem === undefined) {
1562
- self._input.focus();
1563
- }
1564
- else if (!dayFocused) {
1565
- focusOnDayElem(startElem);
1566
- }
1567
- else {
1568
- getNextAvailableDay(startElem, offset);
1569
- }
1570
- }
1571
- function buildMonthDays(year, month) {
1572
- const firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
1573
- const prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
1574
- const daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
1575
- let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
1576
- for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
1577
- days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1578
- }
1579
- for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
1580
- days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
1581
- }
1582
- for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
1583
- (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
1584
- days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1585
- }
1586
- const dayContainer = createElement("div", "dayContainer");
1587
- dayContainer.appendChild(days);
1588
- return dayContainer;
1589
- }
1590
- function buildDays() {
1591
- if (self.daysContainer === undefined) {
1592
- return;
1593
- }
1594
- clearNode(self.daysContainer);
1595
- if (self.weekNumbers)
1596
- clearNode(self.weekNumbers);
1597
- const frag = document.createDocumentFragment();
1598
- for (let i = 0; i < self.config.showMonths; i++) {
1599
- const d = new Date(self.currentYear, self.currentMonth, 1);
1600
- d.setMonth(self.currentMonth + i);
1601
- frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
1602
- }
1603
- self.daysContainer.appendChild(frag);
1604
- self.days = self.daysContainer.firstChild;
1605
- if (self.config.mode === "range" && self.selectedDates.length === 1) {
1606
- onMouseOver();
1607
- }
1608
- }
1609
- function buildMonthSwitch() {
1610
- if (self.config.showMonths > 1 ||
1611
- self.config.monthSelectorType !== "dropdown")
1612
- return;
1613
- const shouldBuildMonth = function (month) {
1614
- if (self.config.minDate !== undefined &&
1615
- self.currentYear === self.config.minDate.getFullYear() &&
1616
- month < self.config.minDate.getMonth()) {
1617
- return false;
1618
- }
1619
- return !(self.config.maxDate !== undefined &&
1620
- self.currentYear === self.config.maxDate.getFullYear() &&
1621
- month > self.config.maxDate.getMonth());
1622
- };
1623
- self.monthsDropdownContainer.tabIndex = -1;
1624
- self.monthsDropdownContainer.innerHTML = "";
1625
- for (let i = 0; i < 12; i++) {
1626
- if (!shouldBuildMonth(i))
1627
- continue;
1628
- const month = createElement("option", "flatpickr-monthDropdown-month");
1629
- month.value = new Date(self.currentYear, i).getMonth().toString();
1630
- month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);
1631
- month.tabIndex = -1;
1632
- if (self.currentMonth === i) {
1633
- month.selected = true;
1634
- }
1635
- self.monthsDropdownContainer.appendChild(month);
1636
- }
1637
- }
1638
- function buildMonth() {
1639
- const container = createElement("div", "flatpickr-month");
1640
- const monthNavFragment = window.document.createDocumentFragment();
1641
- let monthElement;
1642
- if (self.config.showMonths > 1 ||
1643
- self.config.monthSelectorType === "static") {
1644
- monthElement = createElement("span", "cur-month");
1645
- }
1646
- else {
1647
- self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
1648
- self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
1649
- bind(self.monthsDropdownContainer, "change", (e) => {
1650
- const target = getEventTarget(e);
1651
- const selectedMonth = parseInt(target.value, 10);
1652
- self.changeMonth(selectedMonth - self.currentMonth);
1653
- triggerEvent("onMonthChange");
1654
- });
1655
- buildMonthSwitch();
1656
- monthElement = self.monthsDropdownContainer;
1657
- }
1658
- const yearInput = createNumberInput("cur-year", { tabindex: "-1" });
1659
- const yearElement = yearInput.getElementsByTagName("input")[0];
1660
- yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel);
1661
- if (self.config.minDate) {
1662
- yearElement.setAttribute("min", self.config.minDate.getFullYear().toString());
1663
- }
1664
- if (self.config.maxDate) {
1665
- yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString());
1666
- yearElement.disabled =
1667
- !!self.config.minDate &&
1668
- self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();
1669
- }
1670
- const currentMonth = createElement("div", "flatpickr-current-month");
1671
- currentMonth.appendChild(monthElement);
1672
- currentMonth.appendChild(yearInput);
1673
- monthNavFragment.appendChild(currentMonth);
1674
- container.appendChild(monthNavFragment);
1675
- return {
1676
- container,
1677
- yearElement,
1678
- monthElement,
1679
- };
1680
- }
1681
- function buildMonths() {
1682
- clearNode(self.monthNav);
1683
- self.monthNav.appendChild(self.prevMonthNav);
1684
- if (self.config.showMonths) {
1685
- self.yearElements = [];
1686
- self.monthElements = [];
1687
- }
1688
- for (let m = self.config.showMonths; m--;) {
1689
- const month = buildMonth();
1690
- self.yearElements.push(month.yearElement);
1691
- self.monthElements.push(month.monthElement);
1692
- self.monthNav.appendChild(month.container);
1693
- }
1694
- self.monthNav.appendChild(self.nextMonthNav);
1695
- }
1696
- function buildMonthNav() {
1697
- self.monthNav = createElement("div", "flatpickr-months");
1698
- self.yearElements = [];
1699
- self.monthElements = [];
1700
- self.prevMonthNav = createElement("span", "flatpickr-prev-month");
1701
- self.prevMonthNav.innerHTML = self.config.prevArrow;
1702
- self.nextMonthNav = createElement("span", "flatpickr-next-month");
1703
- self.nextMonthNav.innerHTML = self.config.nextArrow;
1704
- buildMonths();
1705
- Object.defineProperty(self, "_hidePrevMonthArrow", {
1706
- get: () => self.__hidePrevMonthArrow,
1707
- set(bool) {
1708
- if (self.__hidePrevMonthArrow !== bool) {
1709
- toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
1710
- self.__hidePrevMonthArrow = bool;
1711
- }
1712
- },
1713
- });
1714
- Object.defineProperty(self, "_hideNextMonthArrow", {
1715
- get: () => self.__hideNextMonthArrow,
1716
- set(bool) {
1717
- if (self.__hideNextMonthArrow !== bool) {
1718
- toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
1719
- self.__hideNextMonthArrow = bool;
1720
- }
1721
- },
1722
- });
1723
- self.currentYearElement = self.yearElements[0];
1724
- updateNavigationCurrentMonth();
1725
- return self.monthNav;
1726
- }
1727
- function buildTime() {
1728
- self.calendarContainer.classList.add("hasTime");
1729
- if (self.config.noCalendar)
1730
- self.calendarContainer.classList.add("noCalendar");
1731
- const defaults = getDefaultHours(self.config);
1732
- self.timeContainer = createElement("div", "flatpickr-time");
1733
- self.timeContainer.tabIndex = -1;
1734
- const separator = createElement("span", "flatpickr-time-separator", ":");
1735
- const hourInput = createNumberInput("flatpickr-hour", {
1736
- "aria-label": self.l10n.hourAriaLabel,
1737
- });
1738
- self.hourElement = hourInput.getElementsByTagName("input")[0];
1739
- const minuteInput = createNumberInput("flatpickr-minute", {
1740
- "aria-label": self.l10n.minuteAriaLabel,
1741
- });
1742
- self.minuteElement = minuteInput.getElementsByTagName("input")[0];
1743
- self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
1744
- self.hourElement.value = pad(self.latestSelectedDateObj
1745
- ? self.latestSelectedDateObj.getHours()
1746
- : self.config.time_24hr
1747
- ? defaults.hours
1748
- : military2ampm(defaults.hours));
1749
- self.minuteElement.value = pad(self.latestSelectedDateObj
1750
- ? self.latestSelectedDateObj.getMinutes()
1751
- : defaults.minutes);
1752
- self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
1753
- self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
1754
- self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
1755
- self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
1756
- self.hourElement.setAttribute("maxlength", "2");
1757
- self.minuteElement.setAttribute("min", "0");
1758
- self.minuteElement.setAttribute("max", "59");
1759
- self.minuteElement.setAttribute("maxlength", "2");
1760
- self.timeContainer.appendChild(hourInput);
1761
- self.timeContainer.appendChild(separator);
1762
- self.timeContainer.appendChild(minuteInput);
1763
- if (self.config.time_24hr)
1764
- self.timeContainer.classList.add("time24hr");
1765
- if (self.config.enableSeconds) {
1766
- self.timeContainer.classList.add("hasSeconds");
1767
- const secondInput = createNumberInput("flatpickr-second");
1768
- self.secondElement = secondInput.getElementsByTagName("input")[0];
1769
- self.secondElement.value = pad(self.latestSelectedDateObj
1770
- ? self.latestSelectedDateObj.getSeconds()
1771
- : defaults.seconds);
1772
- self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
1773
- self.secondElement.setAttribute("min", "0");
1774
- self.secondElement.setAttribute("max", "59");
1775
- self.secondElement.setAttribute("maxlength", "2");
1776
- self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
1777
- self.timeContainer.appendChild(secondInput);
1778
- }
1779
- if (!self.config.time_24hr) {
1780
- self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj
1781
- ? self.hourElement.value
1782
- : self.config.defaultHour) > 11)]);
1783
- self.amPM.title = self.l10n.toggleTitle;
1784
- self.amPM.tabIndex = -1;
1785
- self.timeContainer.appendChild(self.amPM);
1786
- }
1787
- return self.timeContainer;
1788
- }
1789
- function buildWeekdays() {
1790
- if (!self.weekdayContainer)
1791
- self.weekdayContainer = createElement("div", "flatpickr-weekdays");
1792
- else
1793
- clearNode(self.weekdayContainer);
1794
- for (let i = self.config.showMonths; i--;) {
1795
- const container = createElement("div", "flatpickr-weekdaycontainer");
1796
- self.weekdayContainer.appendChild(container);
1797
- }
1798
- updateWeekdays();
1799
- return self.weekdayContainer;
1800
- }
1801
- function updateWeekdays() {
1802
- if (!self.weekdayContainer) {
1803
- return;
1804
- }
1805
- const firstDayOfWeek = self.l10n.firstDayOfWeek;
1806
- let weekdays = [...self.l10n.weekdays.shorthand];
1807
- if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
1808
- weekdays = [
1809
- ...weekdays.splice(firstDayOfWeek, weekdays.length),
1810
- ...weekdays.splice(0, firstDayOfWeek),
1811
- ];
1812
- }
1813
- for (let i = self.config.showMonths; i--;) {
1814
- self.weekdayContainer.children[i].innerHTML = `
1815
- <span class='flatpickr-weekday'>
1816
- ${weekdays.join("</span><span class='flatpickr-weekday'>")}
1817
- </span>
1818
- `;
1819
- }
1820
- }
1821
- function buildWeeks() {
1822
- self.calendarContainer.classList.add("hasWeeks");
1823
- const weekWrapper = createElement("div", "flatpickr-weekwrapper");
1824
- weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
1825
- const weekNumbers = createElement("div", "flatpickr-weeks");
1826
- weekWrapper.appendChild(weekNumbers);
1827
- return {
1828
- weekWrapper,
1829
- weekNumbers,
1830
- };
1831
- }
1832
- function changeMonth(value, isOffset = true) {
1833
- const delta = isOffset ? value : value - self.currentMonth;
1834
- if ((delta < 0 && self._hidePrevMonthArrow === true) ||
1835
- (delta > 0 && self._hideNextMonthArrow === true))
1836
- return;
1837
- self.currentMonth += delta;
1838
- if (self.currentMonth < 0 || self.currentMonth > 11) {
1839
- self.currentYear += self.currentMonth > 11 ? 1 : -1;
1840
- self.currentMonth = (self.currentMonth + 12) % 12;
1841
- triggerEvent("onYearChange");
1842
- buildMonthSwitch();
1843
- }
1844
- buildDays();
1845
- triggerEvent("onMonthChange");
1846
- updateNavigationCurrentMonth();
1847
- }
1848
- function clear(triggerChangeEvent = true, toInitial = true) {
1849
- self.input.value = "";
1850
- if (self.altInput !== undefined)
1851
- self.altInput.value = "";
1852
- if (self.mobileInput !== undefined)
1853
- self.mobileInput.value = "";
1854
- self.selectedDates = [];
1855
- self.latestSelectedDateObj = undefined;
1856
- if (toInitial === true) {
1857
- self.currentYear = self._initialDate.getFullYear();
1858
- self.currentMonth = self._initialDate.getMonth();
1859
- }
1860
- if (self.config.enableTime === true) {
1861
- const { hours, minutes, seconds } = getDefaultHours(self.config);
1862
- setHours(hours, minutes, seconds);
1863
- }
1864
- self.redraw();
1865
- if (triggerChangeEvent)
1866
- triggerEvent("onChange");
1867
- }
1868
- function close() {
1869
- self.isOpen = false;
1870
- if (!self.isMobile) {
1871
- if (self.calendarContainer !== undefined) {
1872
- self.calendarContainer.classList.remove("open");
1873
- }
1874
- if (self._input !== undefined) {
1875
- self._input.classList.remove("active");
1876
- }
1877
- }
1878
- triggerEvent("onClose");
1879
- }
1880
- function destroy() {
1881
- if (self.config !== undefined)
1882
- triggerEvent("onDestroy");
1883
- for (let i = self._handlers.length; i--;) {
1884
- self._handlers[i].remove();
1885
- }
1886
- self._handlers = [];
1887
- if (self.mobileInput) {
1888
- if (self.mobileInput.parentNode)
1889
- self.mobileInput.parentNode.removeChild(self.mobileInput);
1890
- self.mobileInput = undefined;
1891
- }
1892
- else if (self.calendarContainer && self.calendarContainer.parentNode) {
1893
- if (self.config.static && self.calendarContainer.parentNode) {
1894
- const wrapper = self.calendarContainer.parentNode;
1895
- wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
1896
- if (wrapper.parentNode) {
1897
- while (wrapper.firstChild)
1898
- wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
1899
- wrapper.parentNode.removeChild(wrapper);
1900
- }
1901
- }
1902
- else
1903
- self.calendarContainer.parentNode.removeChild(self.calendarContainer);
1904
- }
1905
- if (self.altInput) {
1906
- self.input.type = "text";
1907
- if (self.altInput.parentNode)
1908
- self.altInput.parentNode.removeChild(self.altInput);
1909
- delete self.altInput;
1910
- }
1911
- if (self.input) {
1912
- self.input.type = self.input._type;
1913
- self.input.classList.remove("flatpickr-input");
1914
- self.input.removeAttribute("readonly");
1915
- }
1916
- [
1917
- "_showTimeInput",
1918
- "latestSelectedDateObj",
1919
- "_hideNextMonthArrow",
1920
- "_hidePrevMonthArrow",
1921
- "__hideNextMonthArrow",
1922
- "__hidePrevMonthArrow",
1923
- "isMobile",
1924
- "isOpen",
1925
- "selectedDateElem",
1926
- "minDateHasTime",
1927
- "maxDateHasTime",
1928
- "days",
1929
- "daysContainer",
1930
- "_input",
1931
- "_positionElement",
1932
- "innerContainer",
1933
- "rContainer",
1934
- "monthNav",
1935
- "todayDateElem",
1936
- "calendarContainer",
1937
- "weekdayContainer",
1938
- "prevMonthNav",
1939
- "nextMonthNav",
1940
- "monthsDropdownContainer",
1941
- "currentMonthElement",
1942
- "currentYearElement",
1943
- "navigationCurrentMonth",
1944
- "selectedDateElem",
1945
- "config",
1946
- ].forEach((k) => {
1947
- try {
1948
- delete self[k];
1949
- }
1950
- catch (_) { }
1951
- });
1952
- }
1953
- function isCalendarElem(elem) {
1954
- if (self.config.appendTo && self.config.appendTo.contains(elem))
1955
- return true;
1956
- return self.calendarContainer.contains(elem);
1957
- }
1958
- function documentClick(e) {
1959
- if (self.isOpen && !self.config.inline) {
1960
- const eventTarget = getEventTarget(e);
1961
- const isCalendarElement = isCalendarElem(eventTarget);
1962
- const isInput = eventTarget === self.input ||
1963
- eventTarget === self.altInput ||
1964
- self.element.contains(eventTarget) ||
1965
- (e.path &&
1966
- e.path.indexOf &&
1967
- (~e.path.indexOf(self.input) ||
1968
- ~e.path.indexOf(self.altInput)));
1969
- const lostFocus = e.type === "blur"
1970
- ? isInput &&
1971
- e.relatedTarget &&
1972
- !isCalendarElem(e.relatedTarget)
1973
- : !isInput &&
1974
- !isCalendarElement &&
1975
- !isCalendarElem(e.relatedTarget);
1976
- const isIgnored = !self.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));
1977
- if (lostFocus && isIgnored) {
1978
- if (self.timeContainer !== undefined &&
1979
- self.minuteElement !== undefined &&
1980
- self.hourElement !== undefined &&
1981
- self.input.value !== "" &&
1982
- self.input.value !== undefined) {
1983
- updateTime();
1984
- }
1985
- self.close();
1986
- if (self.config &&
1987
- self.config.mode === "range" &&
1988
- self.selectedDates.length === 1) {
1989
- self.clear(false);
1990
- self.redraw();
1991
- }
1992
- }
1993
- }
1994
- }
1995
- function changeYear(newYear) {
1996
- if (!newYear ||
1997
- (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||
1998
- (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))
1999
- return;
2000
- const newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;
2001
- self.currentYear = newYearNum || self.currentYear;
2002
- if (self.config.maxDate &&
2003
- self.currentYear === self.config.maxDate.getFullYear()) {
2004
- self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
2005
- }
2006
- else if (self.config.minDate &&
2007
- self.currentYear === self.config.minDate.getFullYear()) {
2008
- self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
2009
- }
2010
- if (isNewYear) {
2011
- self.redraw();
2012
- triggerEvent("onYearChange");
2013
- buildMonthSwitch();
2014
- }
2015
- }
2016
- function isEnabled(date, timeless = true) {
2017
- var _a;
2018
- const dateToCheck = self.parseDate(date, undefined, timeless);
2019
- if ((self.config.minDate &&
2020
- dateToCheck &&
2021
- compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||
2022
- (self.config.maxDate &&
2023
- dateToCheck &&
2024
- compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
2025
- return false;
2026
- if (!self.config.enable && self.config.disable.length === 0)
2027
- return true;
2028
- if (dateToCheck === undefined)
2029
- return false;
2030
- const bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;
2031
- for (let i = 0, d; i < array.length; i++) {
2032
- d = array[i];
2033
- if (typeof d === "function" &&
2034
- d(dateToCheck))
2035
- return bool;
2036
- else if (d instanceof Date &&
2037
- dateToCheck !== undefined &&
2038
- d.getTime() === dateToCheck.getTime())
2039
- return bool;
2040
- else if (typeof d === "string") {
2041
- const parsed = self.parseDate(d, undefined, true);
2042
- return parsed && parsed.getTime() === dateToCheck.getTime()
2043
- ? bool
2044
- : !bool;
2045
- }
2046
- else if (typeof d === "object" &&
2047
- dateToCheck !== undefined &&
2048
- d.from &&
2049
- d.to &&
2050
- dateToCheck.getTime() >= d.from.getTime() &&
2051
- dateToCheck.getTime() <= d.to.getTime())
2052
- return bool;
2053
- }
2054
- return !bool;
2055
- }
2056
- function isInView(elem) {
2057
- if (self.daysContainer !== undefined)
2058
- return (elem.className.indexOf("hidden") === -1 &&
2059
- elem.className.indexOf("flatpickr-disabled") === -1 &&
2060
- self.daysContainer.contains(elem));
2061
- return false;
2062
- }
2063
- function onBlur(e) {
2064
- const isInput = e.target === self._input;
2065
- if (isInput &&
2066
- (self.selectedDates.length > 0 || self._input.value.length > 0) &&
2067
- !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
2068
- self.setDate(self._input.value, true, e.target === self.altInput
2069
- ? self.config.altFormat
2070
- : self.config.dateFormat);
2071
- }
2072
- }
2073
- function onKeyDown(e) {
2074
- const eventTarget = getEventTarget(e);
2075
- const isInput = self.config.wrap
2076
- ? element.contains(eventTarget)
2077
- : eventTarget === self._input;
2078
- const allowInput = self.config.allowInput;
2079
- const allowKeydown = self.isOpen && (!allowInput || !isInput);
2080
- const allowInlineKeydown = self.config.inline && isInput && !allowInput;
2081
- if (e.keyCode === 13 && isInput) {
2082
- if (allowInput) {
2083
- self.setDate(self._input.value, true, eventTarget === self.altInput
2084
- ? self.config.altFormat
2085
- : self.config.dateFormat);
2086
- return eventTarget.blur();
2087
- }
2088
- else {
2089
- self.open();
2090
- }
2091
- }
2092
- else if (isCalendarElem(eventTarget) ||
2093
- allowKeydown ||
2094
- allowInlineKeydown) {
2095
- const isTimeObj = !!self.timeContainer &&
2096
- self.timeContainer.contains(eventTarget);
2097
- switch (e.keyCode) {
2098
- case 13:
2099
- if (isTimeObj) {
2100
- e.preventDefault();
2101
- updateTime();
2102
- focusAndClose();
2103
- }
2104
- else
2105
- selectDate(e);
2106
- break;
2107
- case 27:
2108
- e.preventDefault();
2109
- focusAndClose();
2110
- break;
2111
- case 8:
2112
- case 46:
2113
- if (isInput && !self.config.allowInput) {
2114
- e.preventDefault();
2115
- self.clear();
2116
- }
2117
- break;
2118
- case 37:
2119
- case 39:
2120
- if (!isTimeObj && !isInput) {
2121
- e.preventDefault();
2122
- if (self.daysContainer !== undefined &&
2123
- (allowInput === false ||
2124
- (document.activeElement && isInView(document.activeElement)))) {
2125
- const delta = e.keyCode === 39 ? 1 : -1;
2126
- if (!e.ctrlKey)
2127
- focusOnDay(undefined, delta);
2128
- else {
2129
- e.stopPropagation();
2130
- changeMonth(delta);
2131
- focusOnDay(getFirstAvailableDay(1), 0);
2132
- }
2133
- }
2134
- }
2135
- else if (self.hourElement)
2136
- self.hourElement.focus();
2137
- break;
2138
- case 38:
2139
- case 40:
2140
- e.preventDefault();
2141
- const delta = e.keyCode === 40 ? 1 : -1;
2142
- if ((self.daysContainer &&
2143
- eventTarget.$i !== undefined) ||
2144
- eventTarget === self.input ||
2145
- eventTarget === self.altInput) {
2146
- if (e.ctrlKey) {
2147
- e.stopPropagation();
2148
- changeYear(self.currentYear - delta);
2149
- focusOnDay(getFirstAvailableDay(1), 0);
2150
- }
2151
- else if (!isTimeObj)
2152
- focusOnDay(undefined, delta * 7);
2153
- }
2154
- else if (eventTarget === self.currentYearElement) {
2155
- changeYear(self.currentYear - delta);
2156
- }
2157
- else if (self.config.enableTime) {
2158
- if (!isTimeObj && self.hourElement)
2159
- self.hourElement.focus();
2160
- updateTime(e);
2161
- self._debouncedChange();
2162
- }
2163
- break;
2164
- case 9:
2165
- if (isTimeObj) {
2166
- const elems = [
2167
- self.hourElement,
2168
- self.minuteElement,
2169
- self.secondElement,
2170
- self.amPM,
2171
- ]
2172
- .concat(self.pluginElements)
2173
- .filter((x) => x);
2174
- const i = elems.indexOf(eventTarget);
2175
- if (i !== -1) {
2176
- const target = elems[i + (e.shiftKey ? -1 : 1)];
2177
- e.preventDefault();
2178
- (target || self._input).focus();
2179
- }
2180
- }
2181
- else if (!self.config.noCalendar &&
2182
- self.daysContainer &&
2183
- self.daysContainer.contains(eventTarget) &&
2184
- e.shiftKey) {
2185
- e.preventDefault();
2186
- self._input.focus();
2187
- }
2188
- break;
2189
- }
2190
- }
2191
- if (self.amPM !== undefined && eventTarget === self.amPM) {
2192
- switch (e.key) {
2193
- case self.l10n.amPM[0].charAt(0):
2194
- case self.l10n.amPM[0].charAt(0).toLowerCase():
2195
- self.amPM.textContent = self.l10n.amPM[0];
2196
- setHoursFromInputs();
2197
- updateValue();
2198
- break;
2199
- case self.l10n.amPM[1].charAt(0):
2200
- case self.l10n.amPM[1].charAt(0).toLowerCase():
2201
- self.amPM.textContent = self.l10n.amPM[1];
2202
- setHoursFromInputs();
2203
- updateValue();
2204
- break;
2205
- }
2206
- }
2207
- if (isInput || isCalendarElem(eventTarget)) {
2208
- triggerEvent("onKeyDown", e);
2209
- }
2210
- }
2211
- function onMouseOver(elem) {
2212
- if (self.selectedDates.length !== 1 ||
2213
- (elem &&
2214
- (!elem.classList.contains("flatpickr-day") ||
2215
- elem.classList.contains("flatpickr-disabled"))))
2216
- return;
2217
- const hoverDate = elem
2218
- ? elem.dateObj.getTime()
2219
- : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());
2220
- let containsDisabled = false;
2221
- let minRange = 0, maxRange = 0;
2222
- for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
2223
- if (!isEnabled(new Date(t), true)) {
2224
- containsDisabled =
2225
- containsDisabled || (t > rangeStartDate && t < rangeEndDate);
2226
- if (t < initialDate && (!minRange || t > minRange))
2227
- minRange = t;
2228
- else if (t > initialDate && (!maxRange || t < maxRange))
2229
- maxRange = t;
2230
- }
2231
- }
2232
- for (let m = 0; m < self.config.showMonths; m++) {
2233
- const month = self.daysContainer.children[m];
2234
- for (let i = 0, l = month.children.length; i < l; i++) {
2235
- const dayElem = month.children[i], date = dayElem.dateObj;
2236
- const timestamp = date.getTime();
2237
- const outOfRange = (minRange > 0 && timestamp < minRange) ||
2238
- (maxRange > 0 && timestamp > maxRange);
2239
- if (outOfRange) {
2240
- dayElem.classList.add("notAllowed");
2241
- ["inRange", "startRange", "endRange"].forEach((c) => {
2242
- dayElem.classList.remove(c);
2243
- });
2244
- continue;
2245
- }
2246
- else if (containsDisabled && !outOfRange)
2247
- continue;
2248
- ["startRange", "inRange", "endRange", "notAllowed"].forEach((c) => {
2249
- dayElem.classList.remove(c);
2250
- });
2251
- if (elem !== undefined) {
2252
- elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
2253
- ? "startRange"
2254
- : "endRange");
2255
- if (initialDate < hoverDate && timestamp === initialDate)
2256
- dayElem.classList.add("startRange");
2257
- else if (initialDate > hoverDate && timestamp === initialDate)
2258
- dayElem.classList.add("endRange");
2259
- if (timestamp >= minRange &&
2260
- (maxRange === 0 || timestamp <= maxRange) &&
2261
- isBetween(timestamp, initialDate, hoverDate))
2262
- dayElem.classList.add("inRange");
2263
- }
2264
- }
2265
- }
2266
- }
2267
- function onResize() {
2268
- if (self.isOpen && !self.config.static && !self.config.inline)
2269
- positionCalendar();
2270
- }
2271
- function open(e, positionElement = self._positionElement) {
2272
- if (self.isMobile === true) {
2273
- if (e) {
2274
- e.preventDefault();
2275
- const eventTarget = getEventTarget(e);
2276
- if (eventTarget) {
2277
- eventTarget.blur();
2278
- }
2279
- }
2280
- if (self.mobileInput !== undefined) {
2281
- self.mobileInput.focus();
2282
- self.mobileInput.click();
2283
- }
2284
- triggerEvent("onOpen");
2285
- return;
2286
- }
2287
- else if (self._input.disabled || self.config.inline) {
2288
- return;
2289
- }
2290
- const wasOpen = self.isOpen;
2291
- self.isOpen = true;
2292
- if (!wasOpen) {
2293
- self.calendarContainer.classList.add("open");
2294
- self._input.classList.add("active");
2295
- triggerEvent("onOpen");
2296
- positionCalendar(positionElement);
2297
- }
2298
- if (self.config.enableTime === true && self.config.noCalendar === true) {
2299
- if (self.config.allowInput === false &&
2300
- (e === undefined ||
2301
- !self.timeContainer.contains(e.relatedTarget))) {
2302
- setTimeout(() => self.hourElement.select(), 50);
2303
- }
2304
- }
2305
- }
2306
- function minMaxDateSetter(type) {
2307
- return (date) => {
2308
- const dateObj = (self.config[`_${type}Date`] = self.parseDate(date, self.config.dateFormat));
2309
- const inverseDateObj = self.config[`_${type === "min" ? "max" : "min"}Date`];
2310
- if (dateObj !== undefined) {
2311
- self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] =
2312
- dateObj.getHours() > 0 ||
2313
- dateObj.getMinutes() > 0 ||
2314
- dateObj.getSeconds() > 0;
2315
- }
2316
- if (self.selectedDates) {
2317
- self.selectedDates = self.selectedDates.filter((d) => isEnabled(d));
2318
- if (!self.selectedDates.length && type === "min")
2319
- setHoursFromDate(dateObj);
2320
- updateValue();
2321
- }
2322
- if (self.daysContainer) {
2323
- redraw();
2324
- if (dateObj !== undefined)
2325
- self.currentYearElement[type] = dateObj.getFullYear().toString();
2326
- else
2327
- self.currentYearElement.removeAttribute(type);
2328
- self.currentYearElement.disabled =
2329
- !!inverseDateObj &&
2330
- dateObj !== undefined &&
2331
- inverseDateObj.getFullYear() === dateObj.getFullYear();
2332
- }
2333
- };
2334
- }
2335
- function parseConfig() {
2336
- const boolOpts = [
2337
- "wrap",
2338
- "weekNumbers",
2339
- "allowInput",
2340
- "allowInvalidPreload",
2341
- "clickOpens",
2342
- "time_24hr",
2343
- "enableTime",
2344
- "noCalendar",
2345
- "altInput",
2346
- "shorthandCurrentMonth",
2347
- "inline",
2348
- "static",
2349
- "enableSeconds",
2350
- "disableMobile",
2351
- ];
2352
- const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
2353
- const formats = {};
2354
- self.config.parseDate = userConfig.parseDate;
2355
- self.config.formatDate = userConfig.formatDate;
2356
- Object.defineProperty(self.config, "enable", {
2357
- get: () => self.config._enable,
2358
- set: (dates) => {
2359
- self.config._enable = parseDateRules(dates);
2360
- },
2361
- });
2362
- Object.defineProperty(self.config, "disable", {
2363
- get: () => self.config._disable,
2364
- set: (dates) => {
2365
- self.config._disable = parseDateRules(dates);
2366
- },
2367
- });
2368
- const timeMode = userConfig.mode === "time";
2369
- if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
2370
- const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
2371
- formats.dateFormat =
2372
- userConfig.noCalendar || timeMode
2373
- ? "H:i" + (userConfig.enableSeconds ? ":S" : "")
2374
- : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
2375
- }
2376
- if (userConfig.altInput &&
2377
- (userConfig.enableTime || timeMode) &&
2378
- !userConfig.altFormat) {
2379
- const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
2380
- formats.altFormat =
2381
- userConfig.noCalendar || timeMode
2382
- ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
2383
- : defaultAltFormat + ` h:i${userConfig.enableSeconds ? ":S" : ""} K`;
2384
- }
2385
- Object.defineProperty(self.config, "minDate", {
2386
- get: () => self.config._minDate,
2387
- set: minMaxDateSetter("min"),
2388
- });
2389
- Object.defineProperty(self.config, "maxDate", {
2390
- get: () => self.config._maxDate,
2391
- set: minMaxDateSetter("max"),
2392
- });
2393
- const minMaxTimeSetter = (type) => (val) => {
2394
- self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
2395
- };
2396
- Object.defineProperty(self.config, "minTime", {
2397
- get: () => self.config._minTime,
2398
- set: minMaxTimeSetter("min"),
2399
- });
2400
- Object.defineProperty(self.config, "maxTime", {
2401
- get: () => self.config._maxTime,
2402
- set: minMaxTimeSetter("max"),
2403
- });
2404
- if (userConfig.mode === "time") {
2405
- self.config.noCalendar = true;
2406
- self.config.enableTime = true;
2407
- }
2408
- Object.assign(self.config, formats, userConfig);
2409
- for (let i = 0; i < boolOpts.length; i++)
2410
- self.config[boolOpts[i]] =
2411
- self.config[boolOpts[i]] === true ||
2412
- self.config[boolOpts[i]] === "true";
2413
- HOOKS.filter((hook) => self.config[hook] !== undefined).forEach((hook) => {
2414
- self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);
2415
- });
2416
- self.isMobile =
2417
- !self.config.disableMobile &&
2418
- !self.config.inline &&
2419
- self.config.mode === "single" &&
2420
- !self.config.disable.length &&
2421
- !self.config.enable &&
2422
- !self.config.weekNumbers &&
2423
- /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
2424
- for (let i = 0; i < self.config.plugins.length; i++) {
2425
- const pluginConf = self.config.plugins[i](self) || {};
2426
- for (const key in pluginConf) {
2427
- if (HOOKS.indexOf(key) > -1) {
2428
- self.config[key] = arrayify(pluginConf[key])
2429
- .map(bindToInstance)
2430
- .concat(self.config[key]);
2431
- }
2432
- else if (typeof userConfig[key] === "undefined")
2433
- self.config[key] = pluginConf[key];
2434
- }
2435
- }
2436
- if (!userConfig.altInputClass) {
2437
- self.config.altInputClass =
2438
- getInputElem().className + " " + self.config.altInputClass;
2439
- }
2440
- triggerEvent("onParseConfig");
2441
- }
2442
- function getInputElem() {
2443
- return self.config.wrap
2444
- ? element.querySelector("[data-input]")
2445
- : element;
2446
- }
2447
- function setupLocale() {
2448
- if (typeof self.config.locale !== "object" &&
2449
- typeof flatpickr.l10ns[self.config.locale] === "undefined")
2450
- self.config.errorHandler(new Error(`flatpickr: invalid locale ${self.config.locale}`));
2451
- self.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
2452
- ? self.config.locale
2453
- : self.config.locale !== "default"
2454
- ? flatpickr.l10ns[self.config.locale]
2455
- : undefined));
2456
- tokenRegex.K = `(${self.l10n.amPM[0]}|${self.l10n.amPM[1]}|${self.l10n.amPM[0].toLowerCase()}|${self.l10n.amPM[1].toLowerCase()})`;
2457
- const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
2458
- if (userConfig.time_24hr === undefined &&
2459
- flatpickr.defaultConfig.time_24hr === undefined) {
2460
- self.config.time_24hr = self.l10n.time_24hr;
2461
- }
2462
- self.formatDate = createDateFormatter(self);
2463
- self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
2464
- }
2465
- function positionCalendar(customPositionElement) {
2466
- if (typeof self.config.position === "function") {
2467
- return void self.config.position(self, customPositionElement);
2468
- }
2469
- if (self.calendarContainer === undefined)
2470
- return;
2471
- triggerEvent("onPreCalendarPosition");
2472
- const positionElement = customPositionElement || self._positionElement;
2473
- const calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, ((acc, child) => acc + child.offsetHeight), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" ||
2474
- (configPosVertical !== "below" &&
2475
- distanceFromBottom < calendarHeight &&
2476
- inputBounds.top > calendarHeight);
2477
- const top = window.pageYOffset +
2478
- inputBounds.top +
2479
- (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
2480
- toggleClass(self.calendarContainer, "arrowTop", !showOnTop);
2481
- toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
2482
- if (self.config.inline)
2483
- return;
2484
- let left = window.pageXOffset + inputBounds.left;
2485
- let isCenter = false;
2486
- let isRight = false;
2487
- if (configPosHorizontal === "center") {
2488
- left -= (calendarWidth - inputBounds.width) / 2;
2489
- isCenter = true;
2490
- }
2491
- else if (configPosHorizontal === "right") {
2492
- left -= calendarWidth - inputBounds.width;
2493
- isRight = true;
2494
- }
2495
- toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
2496
- toggleClass(self.calendarContainer, "arrowCenter", isCenter);
2497
- toggleClass(self.calendarContainer, "arrowRight", isRight);
2498
- const right = window.document.body.offsetWidth -
2499
- (window.pageXOffset + inputBounds.right);
2500
- const rightMost = left + calendarWidth > window.document.body.offsetWidth;
2501
- const centerMost = right + calendarWidth > window.document.body.offsetWidth;
2502
- toggleClass(self.calendarContainer, "rightMost", rightMost);
2503
- if (self.config.static)
2504
- return;
2505
- self.calendarContainer.style.top = `${top}px`;
2506
- if (!rightMost) {
2507
- self.calendarContainer.style.left = `${left}px`;
2508
- self.calendarContainer.style.right = "auto";
2509
- }
2510
- else if (!centerMost) {
2511
- self.calendarContainer.style.left = "auto";
2512
- self.calendarContainer.style.right = `${right}px`;
2513
- }
2514
- else {
2515
- const doc = getDocumentStyleSheet();
2516
- if (doc === undefined)
2517
- return;
2518
- const bodyWidth = window.document.body.offsetWidth;
2519
- const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
2520
- const centerBefore = ".flatpickr-calendar.centerMost:before";
2521
- const centerAfter = ".flatpickr-calendar.centerMost:after";
2522
- const centerIndex = doc.cssRules.length;
2523
- const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;
2524
- toggleClass(self.calendarContainer, "rightMost", false);
2525
- toggleClass(self.calendarContainer, "centerMost", true);
2526
- doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);
2527
- self.calendarContainer.style.left = `${centerLeft}px`;
2528
- self.calendarContainer.style.right = "auto";
2529
- }
2530
- }
2531
- function getDocumentStyleSheet() {
2532
- let editableSheet = null;
2533
- for (let i = 0; i < document.styleSheets.length; i++) {
2534
- const sheet = document.styleSheets[i];
2535
- editableSheet = sheet;
2536
- break;
2537
- }
2538
- return editableSheet != null ? editableSheet : createStyleSheet();
2539
- }
2540
- function createStyleSheet() {
2541
- const style = document.createElement("style");
2542
- document.head.appendChild(style);
2543
- return style.sheet;
2544
- }
2545
- function redraw() {
2546
- if (self.config.noCalendar || self.isMobile)
2547
- return;
2548
- buildMonthSwitch();
2549
- updateNavigationCurrentMonth();
2550
- buildDays();
2551
- }
2552
- function focusAndClose() {
2553
- self._input.focus();
2554
- if (window.navigator.userAgent.indexOf("MSIE") !== -1 ||
2555
- navigator.msMaxTouchPoints !== undefined) {
2556
- setTimeout(self.close, 0);
2557
- }
2558
- else {
2559
- self.close();
2560
- }
2561
- }
2562
- function selectDate(e) {
2563
- e.preventDefault();
2564
- e.stopPropagation();
2565
- const isSelectable = (day) => day.classList &&
2566
- day.classList.contains("flatpickr-day") &&
2567
- !day.classList.contains("flatpickr-disabled") &&
2568
- !day.classList.contains("notAllowed");
2569
- const t = findParent(getEventTarget(e), isSelectable);
2570
- if (t === undefined)
2571
- return;
2572
- const target = t;
2573
- const selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));
2574
- const shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||
2575
- selectedDate.getMonth() >
2576
- self.currentMonth + self.config.showMonths - 1) &&
2577
- self.config.mode !== "range";
2578
- self.selectedDateElem = target;
2579
- if (self.config.mode === "single")
2580
- self.selectedDates = [selectedDate];
2581
- else if (self.config.mode === "multiple") {
2582
- const selectedIndex = isDateSelected(selectedDate);
2583
- if (selectedIndex)
2584
- self.selectedDates.splice(parseInt(selectedIndex), 1);
2585
- else
2586
- self.selectedDates.push(selectedDate);
2587
- }
2588
- else if (self.config.mode === "range") {
2589
- if (self.selectedDates.length === 2) {
2590
- self.clear(false, false);
2591
- }
2592
- self.latestSelectedDateObj = selectedDate;
2593
- self.selectedDates.push(selectedDate);
2594
- if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)
2595
- self.selectedDates.sort((a, b) => a.getTime() - b.getTime());
2596
- }
2597
- setHoursFromInputs();
2598
- if (shouldChangeMonth) {
2599
- const isNewYear = self.currentYear !== selectedDate.getFullYear();
2600
- self.currentYear = selectedDate.getFullYear();
2601
- self.currentMonth = selectedDate.getMonth();
2602
- if (isNewYear) {
2603
- triggerEvent("onYearChange");
2604
- buildMonthSwitch();
2605
- }
2606
- triggerEvent("onMonthChange");
2607
- }
2608
- updateNavigationCurrentMonth();
2609
- buildDays();
2610
- updateValue();
2611
- if (!shouldChangeMonth &&
2612
- self.config.mode !== "range" &&
2613
- self.config.showMonths === 1)
2614
- focusOnDayElem(target);
2615
- else if (self.selectedDateElem !== undefined &&
2616
- self.hourElement === undefined) {
2617
- self.selectedDateElem && self.selectedDateElem.focus();
2618
- }
2619
- if (self.hourElement !== undefined)
2620
- self.hourElement !== undefined && self.hourElement.focus();
2621
- if (self.config.closeOnSelect) {
2622
- const single = self.config.mode === "single" && !self.config.enableTime;
2623
- const range = self.config.mode === "range" &&
2624
- self.selectedDates.length === 2 &&
2625
- !self.config.enableTime;
2626
- if (single || range) {
2627
- focusAndClose();
2628
- }
2629
- }
2630
- triggerChange();
2631
- }
2632
- const CALLBACKS = {
2633
- locale: [setupLocale, updateWeekdays],
2634
- showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
2635
- minDate: [jumpToDate],
2636
- maxDate: [jumpToDate],
2637
- clickOpens: [
2638
- () => {
2639
- if (self.config.clickOpens === true) {
2640
- bind(self._input, "focus", self.open);
2641
- bind(self._input, "click", self.open);
2642
- }
2643
- else {
2644
- self._input.removeEventListener("focus", self.open);
2645
- self._input.removeEventListener("click", self.open);
2646
- }
2647
- },
2648
- ],
2649
- };
2650
- function set(option, value) {
2651
- if (option !== null && typeof option === "object") {
2652
- Object.assign(self.config, option);
2653
- for (const key in option) {
2654
- if (CALLBACKS[key] !== undefined)
2655
- CALLBACKS[key].forEach((x) => x());
2656
- }
2657
- }
2658
- else {
2659
- self.config[option] = value;
2660
- if (CALLBACKS[option] !== undefined)
2661
- CALLBACKS[option].forEach((x) => x());
2662
- else if (HOOKS.indexOf(option) > -1)
2663
- self.config[option] = arrayify(value);
2664
- }
2665
- self.redraw();
2666
- updateValue(true);
2667
- }
2668
- function setSelectedDate(inputDate, format) {
2669
- let dates = [];
2670
- if (inputDate instanceof Array)
2671
- dates = inputDate.map((d) => self.parseDate(d, format));
2672
- else if (inputDate instanceof Date || typeof inputDate === "number")
2673
- dates = [self.parseDate(inputDate, format)];
2674
- else if (typeof inputDate === "string") {
2675
- switch (self.config.mode) {
2676
- case "single":
2677
- case "time":
2678
- dates = [self.parseDate(inputDate, format)];
2679
- break;
2680
- case "multiple":
2681
- dates = inputDate
2682
- .split(self.config.conjunction)
2683
- .map((date) => self.parseDate(date, format));
2684
- break;
2685
- case "range":
2686
- dates = inputDate
2687
- .split(self.l10n.rangeSeparator)
2688
- .map((date) => self.parseDate(date, format));
2689
- break;
2690
- }
2691
- }
2692
- else
2693
- self.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));
2694
- self.selectedDates = (self.config.allowInvalidPreload
2695
- ? dates
2696
- : dates.filter((d) => d instanceof Date && isEnabled(d, false)));
2697
- if (self.config.mode === "range")
2698
- self.selectedDates.sort((a, b) => a.getTime() - b.getTime());
2699
- }
2700
- function setDate(date, triggerChange = false, format = self.config.dateFormat) {
2701
- if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
2702
- return self.clear(triggerChange);
2703
- setSelectedDate(date, format);
2704
- self.latestSelectedDateObj =
2705
- self.selectedDates[self.selectedDates.length - 1];
2706
- self.redraw();
2707
- jumpToDate(undefined, triggerChange);
2708
- setHoursFromDate();
2709
- if (self.selectedDates.length === 0) {
2710
- self.clear(false);
2711
- }
2712
- updateValue(triggerChange);
2713
- if (triggerChange)
2714
- triggerEvent("onChange");
2715
- }
2716
- function parseDateRules(arr) {
2717
- return arr
2718
- .slice()
2719
- .map((rule) => {
2720
- if (typeof rule === "string" ||
2721
- typeof rule === "number" ||
2722
- rule instanceof Date) {
2723
- return self.parseDate(rule, undefined, true);
2724
- }
2725
- else if (rule &&
2726
- typeof rule === "object" &&
2727
- rule.from &&
2728
- rule.to)
2729
- return {
2730
- from: self.parseDate(rule.from, undefined),
2731
- to: self.parseDate(rule.to, undefined),
2732
- };
2733
- return rule;
2734
- })
2735
- .filter((x) => x);
2736
- }
2737
- function setupDates() {
2738
- self.selectedDates = [];
2739
- self.now = self.parseDate(self.config.now) || new Date();
2740
- const preloadedDate = self.config.defaultDate ||
2741
- ((self.input.nodeName === "INPUT" ||
2742
- self.input.nodeName === "TEXTAREA") &&
2743
- self.input.placeholder &&
2744
- self.input.value === self.input.placeholder
2745
- ? null
2746
- : self.input.value);
2747
- if (preloadedDate)
2748
- setSelectedDate(preloadedDate, self.config.dateFormat);
2749
- self._initialDate =
2750
- self.selectedDates.length > 0
2751
- ? self.selectedDates[0]
2752
- : self.config.minDate &&
2753
- self.config.minDate.getTime() > self.now.getTime()
2754
- ? self.config.minDate
2755
- : self.config.maxDate &&
2756
- self.config.maxDate.getTime() < self.now.getTime()
2757
- ? self.config.maxDate
2758
- : self.now;
2759
- self.currentYear = self._initialDate.getFullYear();
2760
- self.currentMonth = self._initialDate.getMonth();
2761
- if (self.selectedDates.length > 0)
2762
- self.latestSelectedDateObj = self.selectedDates[0];
2763
- if (self.config.minTime !== undefined)
2764
- self.config.minTime = self.parseDate(self.config.minTime, "H:i");
2765
- if (self.config.maxTime !== undefined)
2766
- self.config.maxTime = self.parseDate(self.config.maxTime, "H:i");
2767
- self.minDateHasTime =
2768
- !!self.config.minDate &&
2769
- (self.config.minDate.getHours() > 0 ||
2770
- self.config.minDate.getMinutes() > 0 ||
2771
- self.config.minDate.getSeconds() > 0);
2772
- self.maxDateHasTime =
2773
- !!self.config.maxDate &&
2774
- (self.config.maxDate.getHours() > 0 ||
2775
- self.config.maxDate.getMinutes() > 0 ||
2776
- self.config.maxDate.getSeconds() > 0);
2777
- }
2778
- function setupInputs() {
2779
- self.input = getInputElem();
2780
- if (!self.input) {
2781
- self.config.errorHandler(new Error("Invalid input element specified"));
2782
- return;
2783
- }
2784
- self.input._type = self.input.type;
2785
- self.input.type = "text";
2786
- self.input.classList.add("flatpickr-input");
2787
- self._input = self.input;
2788
- if (self.config.altInput) {
2789
- self.altInput = createElement(self.input.nodeName, self.config.altInputClass);
2790
- self._input = self.altInput;
2791
- self.altInput.placeholder = self.input.placeholder;
2792
- self.altInput.disabled = self.input.disabled;
2793
- self.altInput.required = self.input.required;
2794
- self.altInput.tabIndex = self.input.tabIndex;
2795
- self.altInput.type = "text";
2796
- self.input.setAttribute("type", "hidden");
2797
- if (!self.config.static && self.input.parentNode)
2798
- self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
2799
- }
2800
- if (!self.config.allowInput)
2801
- self._input.setAttribute("readonly", "readonly");
2802
- self._positionElement = self.config.positionElement || self._input;
2803
- }
2804
- function setupMobile() {
2805
- const inputType = self.config.enableTime
2806
- ? self.config.noCalendar
2807
- ? "time"
2808
- : "datetime-local"
2809
- : "date";
2810
- self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
2811
- self.mobileInput.tabIndex = 1;
2812
- self.mobileInput.type = inputType;
2813
- self.mobileInput.disabled = self.input.disabled;
2814
- self.mobileInput.required = self.input.required;
2815
- self.mobileInput.placeholder = self.input.placeholder;
2816
- self.mobileFormatStr =
2817
- inputType === "datetime-local"
2818
- ? "Y-m-d\\TH:i:S"
2819
- : inputType === "date"
2820
- ? "Y-m-d"
2821
- : "H:i:S";
2822
- if (self.selectedDates.length > 0) {
2823
- self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);
2824
- }
2825
- if (self.config.minDate)
2826
- self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
2827
- if (self.config.maxDate)
2828
- self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
2829
- if (self.input.getAttribute("step"))
2830
- self.mobileInput.step = String(self.input.getAttribute("step"));
2831
- self.input.type = "hidden";
2832
- if (self.altInput !== undefined)
2833
- self.altInput.type = "hidden";
2834
- try {
2835
- if (self.input.parentNode)
2836
- self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);
2837
- }
2838
- catch (_a) { }
2839
- bind(self.mobileInput, "change", (e) => {
2840
- self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
2841
- triggerEvent("onChange");
2842
- triggerEvent("onClose");
2843
- });
2844
- }
2845
- function toggle(e) {
2846
- if (self.isOpen === true)
2847
- return self.close();
2848
- self.open(e);
2849
- }
2850
- function triggerEvent(event, data) {
2851
- if (self.config === undefined)
2852
- return;
2853
- const hooks = self.config[event];
2854
- if (hooks !== undefined && hooks.length > 0) {
2855
- for (let i = 0; hooks[i] && i < hooks.length; i++)
2856
- hooks[i](self.selectedDates, self.input.value, self, data);
2857
- }
2858
- if (event === "onChange") {
2859
- self.input.dispatchEvent(createEvent("change"));
2860
- self.input.dispatchEvent(createEvent("input"));
2861
- }
2862
- }
2863
- function createEvent(name) {
2864
- const e = document.createEvent("Event");
2865
- e.initEvent(name, true, true);
2866
- return e;
2867
- }
2868
- function isDateSelected(date) {
2869
- for (let i = 0; i < self.selectedDates.length; i++) {
2870
- if (compareDates(self.selectedDates[i], date) === 0)
2871
- return "" + i;
2872
- }
2873
- return false;
2874
- }
2875
- function isDateInRange(date) {
2876
- if (self.config.mode !== "range" || self.selectedDates.length < 2)
2877
- return false;
2878
- return (compareDates(date, self.selectedDates[0]) >= 0 &&
2879
- compareDates(date, self.selectedDates[1]) <= 0);
2880
- }
2881
- function updateNavigationCurrentMonth() {
2882
- if (self.config.noCalendar || self.isMobile || !self.monthNav)
2883
- return;
2884
- self.yearElements.forEach((yearElement, i) => {
2885
- const d = new Date(self.currentYear, self.currentMonth, 1);
2886
- d.setMonth(self.currentMonth + i);
2887
- if (self.config.showMonths > 1 ||
2888
- self.config.monthSelectorType === "static") {
2889
- self.monthElements[i].textContent =
2890
- monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " ";
2891
- }
2892
- else {
2893
- self.monthsDropdownContainer.value = d.getMonth().toString();
2894
- }
2895
- yearElement.value = d.getFullYear().toString();
2896
- });
2897
- self._hidePrevMonthArrow =
2898
- self.config.minDate !== undefined &&
2899
- (self.currentYear === self.config.minDate.getFullYear()
2900
- ? self.currentMonth <= self.config.minDate.getMonth()
2901
- : self.currentYear < self.config.minDate.getFullYear());
2902
- self._hideNextMonthArrow =
2903
- self.config.maxDate !== undefined &&
2904
- (self.currentYear === self.config.maxDate.getFullYear()
2905
- ? self.currentMonth + 1 > self.config.maxDate.getMonth()
2906
- : self.currentYear > self.config.maxDate.getFullYear());
2907
- }
2908
- function getDateStr(format) {
2909
- return self.selectedDates
2910
- .map((dObj) => self.formatDate(dObj, format))
2911
- .filter((d, i, arr) => self.config.mode !== "range" ||
2912
- self.config.enableTime ||
2913
- arr.indexOf(d) === i)
2914
- .join(self.config.mode !== "range"
2915
- ? self.config.conjunction
2916
- : self.l10n.rangeSeparator);
2917
- }
2918
- function updateValue(triggerChange = true) {
2919
- if (self.mobileInput !== undefined && self.mobileFormatStr) {
2920
- self.mobileInput.value =
2921
- self.latestSelectedDateObj !== undefined
2922
- ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)
2923
- : "";
2924
- }
2925
- self.input.value = getDateStr(self.config.dateFormat);
2926
- if (self.altInput !== undefined) {
2927
- self.altInput.value = getDateStr(self.config.altFormat);
2928
- }
2929
- if (triggerChange !== false)
2930
- triggerEvent("onValueUpdate");
2931
- }
2932
- function onMonthNavClick(e) {
2933
- const eventTarget = getEventTarget(e);
2934
- const isPrevMonth = self.prevMonthNav.contains(eventTarget);
2935
- const isNextMonth = self.nextMonthNav.contains(eventTarget);
2936
- if (isPrevMonth || isNextMonth) {
2937
- changeMonth(isPrevMonth ? -1 : 1);
2938
- }
2939
- else if (self.yearElements.indexOf(eventTarget) >= 0) {
2940
- eventTarget.select();
2941
- }
2942
- else if (eventTarget.classList.contains("arrowUp")) {
2943
- self.changeYear(self.currentYear + 1);
2944
- }
2945
- else if (eventTarget.classList.contains("arrowDown")) {
2946
- self.changeYear(self.currentYear - 1);
2947
- }
2948
- }
2949
- function timeWrapper(e) {
2950
- e.preventDefault();
2951
- const isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
2952
- if (self.amPM !== undefined && eventTarget === self.amPM) {
2953
- self.amPM.textContent =
2954
- self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2955
- }
2956
- const min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta ||
2957
- (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);
2958
- let newValue = curValue + step * delta;
2959
- if (typeof input.value !== "undefined" && input.value.length === 2) {
2960
- const isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;
2961
- if (newValue < min) {
2962
- newValue =
2963
- max +
2964
- newValue +
2965
- int(!isHourElem) +
2966
- (int(isHourElem) && int(!self.amPM));
2967
- if (isMinuteElem)
2968
- incrementNumInput(undefined, -1, self.hourElement);
2969
- }
2970
- else if (newValue > max) {
2971
- newValue =
2972
- input === self.hourElement ? newValue - max - int(!self.amPM) : min;
2973
- if (isMinuteElem)
2974
- incrementNumInput(undefined, 1, self.hourElement);
2975
- }
2976
- if (self.amPM &&
2977
- isHourElem &&
2978
- (step === 1
2979
- ? newValue + curValue === 23
2980
- : Math.abs(newValue - curValue) > step)) {
2981
- self.amPM.textContent =
2982
- self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2983
- }
2984
- input.value = pad(newValue);
2985
- }
2986
- }
2987
- init();
2988
- return self;
2989
- }
2990
- function _flatpickr(nodeList, config) {
2991
- const nodes = Array.prototype.slice
2992
- .call(nodeList)
2993
- .filter((x) => x instanceof HTMLElement);
2994
- const instances = [];
2995
- for (let i = 0; i < nodes.length; i++) {
2996
- const node = nodes[i];
2997
- try {
2998
- if (node.getAttribute("data-fp-omit") !== null)
2999
- continue;
3000
- if (node._flatpickr !== undefined) {
3001
- node._flatpickr.destroy();
3002
- node._flatpickr = undefined;
3003
- }
3004
- node._flatpickr = FlatpickrInstance(node, config || {});
3005
- instances.push(node._flatpickr);
3006
- }
3007
- catch (e) {
3008
- console.error(e);
3009
- }
3010
- }
3011
- return instances.length === 1 ? instances[0] : instances;
3012
- }
3013
- if (typeof HTMLElement !== "undefined" &&
3014
- typeof HTMLCollection !== "undefined" &&
3015
- typeof NodeList !== "undefined") {
3016
- HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {
3017
- return _flatpickr(this, config);
3018
- };
3019
- HTMLElement.prototype.flatpickr = function (config) {
3020
- return _flatpickr([this], config);
3021
- };
3022
- }
3023
- var flatpickr = function (selector, config) {
3024
- if (typeof selector === "string") {
3025
- return _flatpickr(window.document.querySelectorAll(selector), config);
3026
- }
3027
- else if (selector instanceof Node) {
3028
- return _flatpickr([selector], config);
3029
- }
3030
- else {
3031
- return _flatpickr(selector, config);
3032
- }
3033
- };
3034
- flatpickr.defaultConfig = {};
3035
- flatpickr.l10ns = {
3036
- en: Object.assign({}, english),
3037
- default: Object.assign({}, english),
3038
- };
3039
- flatpickr.localize = (l10n) => {
3040
- flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);
3041
- };
3042
- flatpickr.setDefaults = (config) => {
3043
- flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);
3044
- };
3045
- flatpickr.parseDate = createDateParser({});
3046
- flatpickr.formatDate = createDateFormatter({});
3047
- flatpickr.compareDates = compareDates;
3048
- if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
3049
- jQuery.fn.flatpickr = function (config) {
3050
- return _flatpickr(this, config);
3051
- };
3052
- }
3053
- Date.prototype.fp_incr = function (days) {
3054
- return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
3055
- };
3056
- if (typeof window !== "undefined") {
3057
- window.flatpickr = flatpickr;
3058
- }
3059
-
3060
1
  /*!
3061
2
  * Font Awesome Pro 5.15.3 by @fontawesome - https://fontawesome.com
3062
3
  * License - https://fontawesome.com/license (Commercial License)
3063
4
  */
3064
5
  (function () {
6
+ "use strict";
3065
7
 
3066
8
  function _typeof(obj) {
3067
9
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
@@ -6005,11 +2947,14 @@ if (typeof window !== "undefined") {
6005
2947
  * License - https://fontawesome.com/license (Commercial License)
6006
2948
  */
6007
2949
  (function () {
2950
+ "use strict";
6008
2951
 
6009
2952
  var _WINDOW = {};
2953
+ var _DOCUMENT = {};
6010
2954
 
6011
2955
  try {
6012
2956
  if (typeof window !== "undefined") _WINDOW = window;
2957
+ if (typeof document !== "undefined") _DOCUMENT = document;
6013
2958
  } catch (e) {}
6014
2959
 
6015
2960
  var _ref = _WINDOW.navigator || {},
@@ -6017,7 +2962,14 @@ if (typeof window !== "undefined") {
6017
2962
  userAgent = _ref$userAgent === void 0 ? "" : _ref$userAgent;
6018
2963
 
6019
2964
  var WINDOW = _WINDOW;
6020
- ~userAgent.indexOf("MSIE") || ~userAgent.indexOf("Trident/");
2965
+ var DOCUMENT = _DOCUMENT;
2966
+ var IS_BROWSER = !!WINDOW.document;
2967
+ var IS_DOM =
2968
+ !!DOCUMENT.documentElement &&
2969
+ !!DOCUMENT.head &&
2970
+ typeof DOCUMENT.addEventListener === "function" &&
2971
+ typeof DOCUMENT.createElement === "function";
2972
+ var IS_IE = ~userAgent.indexOf("MSIE") || ~userAgent.indexOf("Trident/");
6021
2973
 
6022
2974
  var NAMESPACE_IDENTIFIER = "___FONT_AWESOME___";
6023
2975
  var PRODUCTION = (function () {
@@ -19099,1140 +16051,4 @@ if (typeof window !== "undefined") {
19099
16051
  });
19100
16052
  })();
19101
16053
 
19102
- const arrowSvg = (rotate = false) => `<svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="${rotate
19103
- ? 'M0.557948 5.6813L6.06209 0.132167C6.23831 -0.0440556 6.52327 -0.0440556 6.69949 0.132167L7.44187 0.874551C7.61809 1.05077 7.61809 1.33573 7.44187 1.51195L2.99882 6L7.44187 10.488C7.61809 10.6643 7.61809 10.9492 7.44187 11.1254L6.69949 11.8678C6.52327 12.0441 6.23831 12.0441 6.06209 11.8678L0.557948 6.3187C0.381726 6.14248 0.381726 5.85752 0.557948 5.6813Z'
19104
- : 'M7.44187 6.3187L1.93773 11.8678C1.76151 12.0441 1.47655 12.0441 1.30033 11.8678L0.557948 11.1254C0.381726 10.9492 0.381726 10.6643 0.557948 10.488L5.001 6L0.557948 1.51195C0.381726 1.33573 0.381726 1.05077 0.557948 0.874551L1.30033 0.132167C1.47655 -0.0440556 1.76151 -0.0440556 1.93773 0.132167L7.44187 5.6813C7.6181 5.85752 7.6181 6.14248 7.44187 6.3187Z'}" /></svg>`;
19105
- const XplInput$1 = class extends HTMLElement {
19106
- constructor() {
19107
- super();
19108
- this.__registerHost();
19109
- /**
19110
- * See https://flatpickr.js.org/formatting/
19111
- */
19112
- this.dateFormat = 'Y-m-d';
19113
- /**
19114
- * For datepicker inputs, whether to allow only a single
19115
- * date or a range of dates. (Multiple non-consecutive
19116
- * dates planned to be supported in the future.)
19117
- */
19118
- this.mode = 'single';
19119
- /**
19120
- * Whether to render as a singleline text input or
19121
- * as a multiline textarea. (If `true`, `pre` and `post`
19122
- * values will be ignored, if present.)
19123
- */
19124
- this.multiline = false;
19125
- this.type = 'text';
19126
- this.characterCount = 0;
19127
- this.passwordVisible = false;
19128
- }
19129
- updateCharacterCount() {
19130
- this.characterCount = this.input.value.length;
19131
- }
19132
- componentWillLoad() {
19133
- if (this._id === undefined || this._id === null || this._id === '')
19134
- this._id = v4();
19135
- if (this.multiline && this.maxCharacterCount !== undefined) {
19136
- this.characterCount =
19137
- this.value !== undefined ? this.value.length : 0;
19138
- }
19139
- }
19140
- componentDidLoad() {
19141
- if (this.type === 'date') {
19142
- flatpickr(this.input, {
19143
- allowInput: true,
19144
- dateFormat: this.dateFormat,
19145
- defaultDate: this.value,
19146
- maxDate: this.max,
19147
- minDate: this.min,
19148
- mode: this.mode,
19149
- nextArrow: arrowSvg(),
19150
- prevArrow: arrowSvg(true),
19151
- });
19152
- }
19153
- }
19154
- render() {
19155
- let className = 'xpl-input';
19156
- if (this.disabled)
19157
- className += ' xpl-input--disabled';
19158
- let hasError = false;
19159
- if (this.error !== undefined)
19160
- hasError = true;
19161
- if (this.multiline &&
19162
- this.maxCharacterCount !== undefined &&
19163
- this.characterCount > this.maxCharacterCount)
19164
- hasError = true;
19165
- if (hasError)
19166
- className += ' xpl-input--error';
19167
- let type = this.type;
19168
- if (type === 'password' && this.passwordVisible) {
19169
- type = 'text';
19170
- }
19171
- return (h(Host, { class: className }, h("label", { class: "xpl-input-label", htmlFor: this._id }, this.label, this.description && h("small", null, this.description)), h("div", { class: "xpl-input-wrapper" }, this.pre && !this.multiline && (h("label", { class: "xpl-input-pre", htmlFor: this._id }, this.pre)), !this.multiline ? (h("input", { autocomplete: this.type === 'date' ? 'off' : this.autocomplete, disabled: this.disabled, id: this._id, max: this.max, min: this.min, name: this.name, placeholder: this.placeholder, readonly: this.readonly, ref: (el) => {
19172
- this.input = el;
19173
- }, required: this.required, step: this.step, type: type, value: this.value })) : (h("textarea", { disabled: this.disabled, id: this._id, name: this.name, onInput: () => this.updateCharacterCount(), placeholder: this.placeholder, readonly: this.readonly, ref: (el) => {
19174
- this.input = el;
19175
- }, required: this.required }, this.value)), this.type === 'date' && (h("span", { class: "xpl-input-calendar" }, h("i", { class: "far fa-calendar-alt" }))), this.type === 'password' && (h("button", { class: "xpl-input-password", onClick: () => {
19176
- this.passwordVisible = !this.passwordVisible;
19177
- }, role: "presentation" }, h("span", { class: "sr-only" }, "Toggle password visibility"), h("i", { class: "far fa-eye", style: {
19178
- display: this.passwordVisible
19179
- ? 'none'
19180
- : 'block',
19181
- } }), h("i", { class: "far fa-eye-slash", style: {
19182
- display: this.passwordVisible
19183
- ? 'block'
19184
- : 'none',
19185
- } }))), this.post && !this.multiline && (h("label", { class: "xpl-input-post", htmlFor: this._id }, this.post)), this.multiline && this.maxCharacterCount !== undefined && (h("span", { class: "xpl-input-characters" }, this.characterCount, "/", this.maxCharacterCount))), this.error !== undefined && this.error.length > 0 && (h("label", { class: "xpl-input-error", htmlFor: this._id }, h("svg", { width: "10", height: "11", viewBox: "0 0 10 11", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M9.84375 5.25C9.84375 2.59375 7.65625 0.40625 5 0.40625C2.32422 0.40625 0.15625 2.59375 0.15625 5.25C0.15625 7.92578 2.32422 10.0938 5 10.0938C7.65625 10.0938 9.84375 7.92578 9.84375 5.25ZM5 6.22656C5.48828 6.22656 5.89844 6.63672 5.89844 7.125C5.89844 7.63281 5.48828 8.02344 5 8.02344C4.49219 8.02344 4.10156 7.63281 4.10156 7.125C4.10156 6.63672 4.49219 6.22656 5 6.22656ZM4.14062 3.00391C4.12109 2.86719 4.23828 2.75 4.375 2.75H5.60547C5.74219 2.75 5.85938 2.86719 5.83984 3.00391L5.70312 5.66016C5.68359 5.79688 5.58594 5.875 5.46875 5.875H4.51172C4.39453 5.875 4.29688 5.79688 4.27734 5.66016L4.14062 3.00391Z" })), this.error))));
19186
- }
19187
- };
19188
-
19189
- const ListItemCpt = ({ avatar, avatars, badges, href, title, subtext, metadata, }) => {
19190
- const hasRight = avatars || badges || subtext;
19191
- const inner = (h(Fragment, null, avatar &&
19192
- (avatar.slice(0, 1) === '/' || avatar.slice(0, 4) === 'http' ? (h("xpl-avatar", { src: avatar, name: title })) : (h("xpl-avatar", { name: title }, avatar))), h("div", { class: "xpl-list-item-content" }, h("div", { class: "xpl-list-left" }, h("div", null, h("h4", null, title), metadata && (h("ul", { class: "xpl-list-item-metadata" }, metadata.map((d) => {
19193
- if (typeof d === 'string') {
19194
- return h("li", null, d);
19195
- }
19196
- else {
19197
- return (h("li", null, h("span", { class: `far fa-${d.icon}` }), ' ', d.text));
19198
- }
19199
- }))))), hasRight && (h("div", { class: "xpl-list-right" }, subtext && (h("div", { class: "xpl-list-item-subtext" }, subtext)), avatars && (h("div", { class: "xpl-avatar-group xpl-avatar-group--s" }, avatars.map((a) => (h("img", { src: a, alt: "" }))))), badges &&
19200
- badges.map((b) => {
19201
- if (typeof b === 'string') {
19202
- return h("xpl-badge", null, b);
19203
- }
19204
- else {
19205
- return (h("xpl-badge", { dot: b.dot, variant: b.variant }, b.text));
19206
- }
19207
- }))))));
19208
- return href ? (h("a", { class: "xpl-list-item", href: href }, inner)) : (h("div", { class: "xpl-list-item" }, inner));
19209
- };
19210
- const XplList$1 = class extends HTMLElement {
19211
- constructor() {
19212
- super();
19213
- this.__registerHost();
19214
- /**
19215
- * `items` should be an array of objects with the following signature:
19216
- * {
19217
- * avatar?: string; // The URL of the avatar, or the placeholder initials (ex. "SPD").
19218
- * avatars?: string[]; // The URLs of multiple avatars to be displayed in a group on the right.
19219
- * badges?: string[] | { // An array of strings or badge-like objects to be displayed as badges
19220
- * dot?: boolean; // in a group on the right. See <xpl-badge> for more details.
19221
- * text: string;
19222
- * variant?: string;
19223
- * }[];
19224
- * href?: string; // A URL, if this list item is meant to link somewhere.
19225
- * title: string; // The text to be displayed for the list item.
19226
- * metadata?: string[] | { // An array of strings or strings with icons (reference the allowed
19227
- * icon: string; // Font Awesome icons) to be displayed as metadata below the title.
19228
- * text: string;
19229
- * }[];
19230
- * subtext?: string; // Subtext to be displayed on the right.
19231
- * }
19232
- *
19233
- * - Note that you should *only use one of* `avatars`, `badges`, or `subtext`, to avoid cluttering
19234
- * the right-hand side of the list item.
19235
- */
19236
- this.items = [];
19237
- }
19238
- render() {
19239
- return (h(Host, null, this.items.map((item) => (h(ListItemCpt, Object.assign({}, item))))));
19240
- }
19241
- };
19242
-
19243
- const XplMainNav$1 = class extends HTMLElement {
19244
- constructor() {
19245
- super();
19246
- this.__registerHost();
19247
- this.navWidth = createEvent(this, "navWidth", 7);
19248
- /**
19249
- * @property {string} width - The width of the Main Nav.
19250
- */
19251
- this.width = 'default';
19252
- }
19253
- navWidthHandler() {
19254
- this.navWidth.emit(this.width);
19255
- }
19256
- connectedCallback() {
19257
- this.navWidthHandler();
19258
- }
19259
- componentDidUpdate() {
19260
- this.navWidthHandler();
19261
- }
19262
- render() {
19263
- return (h(Host, { class: `xpl-main-nav xpl-main-nav--${this.width}`, "aria-label": "Sidebar" }, h("nav", null, h("header", { "aria-label": "Sidebar Header" }, h("slot", { name: "logo" }), h("slot", { name: "brand-name" })), h("div", { class: "xpl-main-nav__main_section" }, h("slot", { name: "navigation" })), h("footer", { class: "xpl-main-nav__footer", "aria-label": "Sidebar Footer" }, h("slot", { name: "footer" })))));
19264
- }
19265
- };
19266
-
19267
- const XplNavItem$1 = class extends HTMLElement {
19268
- constructor() {
19269
- super();
19270
- this.__registerHost();
19271
- this.navOpen = createEvent(this, "navOpen", 7);
19272
- /**
19273
- * @property {boolean} - Whether or not the item should control the main nav state on click
19274
- */
19275
- this.navControl = false;
19276
- }
19277
- onNavToggle() {
19278
- if (window.innerWidth <= 640) {
19279
- this.navOpen.emit(false);
19280
- }
19281
- }
19282
- render() {
19283
- return (h(Host, { class: "xpl-nav-item", role: "listitem", onClick: () => {
19284
- if (this.navControl) {
19285
- this.onNavToggle();
19286
- }
19287
- } }, h("slot", { name: "link" }, h("slot", { name: "icon" }), h("slot", null))));
19288
- }
19289
- };
19290
-
19291
- const XplPagination$1 = class extends HTMLElement {
19292
- constructor() {
19293
- super();
19294
- this.__registerHost();
19295
- this.page = createEvent(this, "page", 7);
19296
- this.current = 1;
19297
- /**
19298
- * Private `_goto` method respects the `waitForCallback` prop --
19299
- * it will always emit the `page` event, but won't actually update
19300
- * the state of what the current page is, leaving that to the caller
19301
- * to update once (presumably) some other data has loaded.
19302
- */
19303
- this._goto = (n) => {
19304
- this.page.emit(n);
19305
- if (!this.waitForCallback) {
19306
- this.current = n;
19307
- }
19308
- };
19309
- this.goPrev = () => {
19310
- if (this.current > 1)
19311
- this._goto(this.current - 1);
19312
- };
19313
- this.goNext = () => {
19314
- const numPages = Math.ceil(this.total / this.perPage);
19315
- if (this.current < numPages)
19316
- this._goto(this.current + 1);
19317
- };
19318
- }
19319
- /**
19320
- * Calling `goto` with a page number (which should probably be
19321
- * taken from the `page` event) updates the pagination's state
19322
- * and re-renders it, showing the appropriate buttons given the current page.
19323
- * @param n
19324
- */
19325
- async goto(n) {
19326
- this.current = n;
19327
- }
19328
- render() {
19329
- const numPages = Math.ceil(this.total / this.perPage);
19330
- let showing = [1];
19331
- if (numPages < 7)
19332
- showing = [1, 2, 3, 4, 5, 6];
19333
- if (this.current <= 3 || this.current >= numPages - 2) {
19334
- showing = [1, 2, 3, '...', numPages - 2, numPages - 1, numPages];
19335
- }
19336
- else {
19337
- showing = [
19338
- 1,
19339
- '...',
19340
- this.current - 1,
19341
- this.current,
19342
- this.current + 1,
19343
- '...',
19344
- numPages,
19345
- ];
19346
- }
19347
- const showingFirst = (this.current - 1) * this.perPage + 1;
19348
- const showingLast = Math.min(showingFirst + this.perPage - 1, this.total);
19349
- return (h(Host, null, h("div", { class: "xpl-pagination" }, h("div", null, h("p", null, "Showing ", h("span", null, showingFirst), " to", ' ', h("span", null, showingLast), " of", ' ', h("span", null, this.total), " results")), h("div", null, h("nav", { "aria-label": "Pagination" }, h("button", { onClick: this.goPrev, class: "xpl-pagination-prev" }, h("span", null, "Previous"), h("svg", { viewBox: "0 0 20 20", "aria-hidden": "true" }, h("path", { "fill-rule": "evenodd", d: "M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z", "clip-rule": "evenodd" }))), showing.map((n) => {
19350
- if (n === '...') {
19351
- return (h("span", { class: "xpl-pagination-ellipsis" }, "..."));
19352
- }
19353
- if (n === this.current) {
19354
- return (h("button", { "aria-current": "page", class: "xpl-pagination-current" }, n));
19355
- }
19356
- return (h("button", { onClick: () => this._goto(n) }, n));
19357
- }), h("button", { onClick: this.goNext, class: "xpl-pagination-next" }, h("span", null, "Next"), h("svg", { viewBox: "0 0 20 20", "aria-hidden": "true" }, h("path", { "fill-rule": "evenodd", d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z", "clip-rule": "evenodd" }))))))));
19358
- }
19359
- };
19360
-
19361
- const XplRadio$1 = class extends HTMLElement {
19362
- constructor() {
19363
- super();
19364
- this.__registerHost();
19365
- this.radioChange = createEvent(this, "radioChange", 7);
19366
- this.id = v4();
19367
- }
19368
- render() {
19369
- return (h(Host, { class: {
19370
- 'xpl-checkbox-radio-container': true,
19371
- styled: this.styled,
19372
- disabled: this.disabled,
19373
- } }, h("input", { class: "xpl-radio", type: "radio", checked: this.checked, disabled: this.disabled, id: this.id, name: this.name, required: this.required, value: this.value, onChange: () => this.radioChange.emit(true) }), h("label", { class: {
19374
- 'xpl-label': true,
19375
- 'xpl-label--disabled': this.disabled,
19376
- }, htmlFor: this.id }, h("slot", null), this.description && (h("small", { class: {
19377
- 'xpl-description': true,
19378
- 'xpl-description--disabled': this.disabled,
19379
- } }, this.description)))));
19380
- }
19381
- };
19382
-
19383
- const XplSecondaryNav$1 = class extends HTMLElement {
19384
- constructor() {
19385
- super();
19386
- this.__registerHost();
19387
- }
19388
- render() {
19389
- return (h(Host, { class: "xpl-secondary-nav" }, h("nav", { "aria-label": "Secondary Nav" }, h("slot", null))));
19390
- }
19391
- };
19392
-
19393
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
19394
-
19395
- /**
19396
- * lodash (Custom Build) <https://lodash.com/>
19397
- * Build: `lodash modularize exports="npm" -o ./`
19398
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
19399
- * Released under MIT license <https://lodash.com/license>
19400
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
19401
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
19402
- */
19403
-
19404
- /** Used as the `TypeError` message for "Functions" methods. */
19405
- var FUNC_ERROR_TEXT = 'Expected a function';
19406
-
19407
- /** Used as references for various `Number` constants. */
19408
- var NAN = 0 / 0;
19409
-
19410
- /** `Object#toString` result references. */
19411
- var symbolTag = '[object Symbol]';
19412
-
19413
- /** Used to match leading and trailing whitespace. */
19414
- var reTrim = /^\s+|\s+$/g;
19415
-
19416
- /** Used to detect bad signed hexadecimal string values. */
19417
- var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
19418
-
19419
- /** Used to detect binary string values. */
19420
- var reIsBinary = /^0b[01]+$/i;
19421
-
19422
- /** Used to detect octal string values. */
19423
- var reIsOctal = /^0o[0-7]+$/i;
19424
-
19425
- /** Built-in method references without a dependency on `root`. */
19426
- var freeParseInt = parseInt;
19427
-
19428
- /** Detect free variable `global` from Node.js. */
19429
- var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
19430
-
19431
- /** Detect free variable `self`. */
19432
- var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
19433
-
19434
- /** Used as a reference to the global object. */
19435
- var root = freeGlobal || freeSelf || Function('return this')();
19436
-
19437
- /** Used for built-in method references. */
19438
- var objectProto = Object.prototype;
19439
-
19440
- /**
19441
- * Used to resolve the
19442
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
19443
- * of values.
19444
- */
19445
- var objectToString = objectProto.toString;
19446
-
19447
- /* Built-in method references for those with the same name as other `lodash` methods. */
19448
- var nativeMax = Math.max,
19449
- nativeMin = Math.min;
19450
-
19451
- /**
19452
- * Gets the timestamp of the number of milliseconds that have elapsed since
19453
- * the Unix epoch (1 January 1970 00:00:00 UTC).
19454
- *
19455
- * @static
19456
- * @memberOf _
19457
- * @since 2.4.0
19458
- * @category Date
19459
- * @returns {number} Returns the timestamp.
19460
- * @example
19461
- *
19462
- * _.defer(function(stamp) {
19463
- * console.log(_.now() - stamp);
19464
- * }, _.now());
19465
- * // => Logs the number of milliseconds it took for the deferred invocation.
19466
- */
19467
- var now = function() {
19468
- return root.Date.now();
19469
- };
19470
-
19471
- /**
19472
- * Creates a debounced function that delays invoking `func` until after `wait`
19473
- * milliseconds have elapsed since the last time the debounced function was
19474
- * invoked. The debounced function comes with a `cancel` method to cancel
19475
- * delayed `func` invocations and a `flush` method to immediately invoke them.
19476
- * Provide `options` to indicate whether `func` should be invoked on the
19477
- * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
19478
- * with the last arguments provided to the debounced function. Subsequent
19479
- * calls to the debounced function return the result of the last `func`
19480
- * invocation.
19481
- *
19482
- * **Note:** If `leading` and `trailing` options are `true`, `func` is
19483
- * invoked on the trailing edge of the timeout only if the debounced function
19484
- * is invoked more than once during the `wait` timeout.
19485
- *
19486
- * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
19487
- * until to the next tick, similar to `setTimeout` with a timeout of `0`.
19488
- *
19489
- * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
19490
- * for details over the differences between `_.debounce` and `_.throttle`.
19491
- *
19492
- * @static
19493
- * @memberOf _
19494
- * @since 0.1.0
19495
- * @category Function
19496
- * @param {Function} func The function to debounce.
19497
- * @param {number} [wait=0] The number of milliseconds to delay.
19498
- * @param {Object} [options={}] The options object.
19499
- * @param {boolean} [options.leading=false]
19500
- * Specify invoking on the leading edge of the timeout.
19501
- * @param {number} [options.maxWait]
19502
- * The maximum time `func` is allowed to be delayed before it's invoked.
19503
- * @param {boolean} [options.trailing=true]
19504
- * Specify invoking on the trailing edge of the timeout.
19505
- * @returns {Function} Returns the new debounced function.
19506
- * @example
19507
- *
19508
- * // Avoid costly calculations while the window size is in flux.
19509
- * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
19510
- *
19511
- * // Invoke `sendMail` when clicked, debouncing subsequent calls.
19512
- * jQuery(element).on('click', _.debounce(sendMail, 300, {
19513
- * 'leading': true,
19514
- * 'trailing': false
19515
- * }));
19516
- *
19517
- * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
19518
- * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
19519
- * var source = new EventSource('/stream');
19520
- * jQuery(source).on('message', debounced);
19521
- *
19522
- * // Cancel the trailing debounced invocation.
19523
- * jQuery(window).on('popstate', debounced.cancel);
19524
- */
19525
- function debounce(func, wait, options) {
19526
- var lastArgs,
19527
- lastThis,
19528
- maxWait,
19529
- result,
19530
- timerId,
19531
- lastCallTime,
19532
- lastInvokeTime = 0,
19533
- leading = false,
19534
- maxing = false,
19535
- trailing = true;
19536
-
19537
- if (typeof func != 'function') {
19538
- throw new TypeError(FUNC_ERROR_TEXT);
19539
- }
19540
- wait = toNumber(wait) || 0;
19541
- if (isObject(options)) {
19542
- leading = !!options.leading;
19543
- maxing = 'maxWait' in options;
19544
- maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
19545
- trailing = 'trailing' in options ? !!options.trailing : trailing;
19546
- }
19547
-
19548
- function invokeFunc(time) {
19549
- var args = lastArgs,
19550
- thisArg = lastThis;
19551
-
19552
- lastArgs = lastThis = undefined;
19553
- lastInvokeTime = time;
19554
- result = func.apply(thisArg, args);
19555
- return result;
19556
- }
19557
-
19558
- function leadingEdge(time) {
19559
- // Reset any `maxWait` timer.
19560
- lastInvokeTime = time;
19561
- // Start the timer for the trailing edge.
19562
- timerId = setTimeout(timerExpired, wait);
19563
- // Invoke the leading edge.
19564
- return leading ? invokeFunc(time) : result;
19565
- }
19566
-
19567
- function remainingWait(time) {
19568
- var timeSinceLastCall = time - lastCallTime,
19569
- timeSinceLastInvoke = time - lastInvokeTime,
19570
- result = wait - timeSinceLastCall;
19571
-
19572
- return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
19573
- }
19574
-
19575
- function shouldInvoke(time) {
19576
- var timeSinceLastCall = time - lastCallTime,
19577
- timeSinceLastInvoke = time - lastInvokeTime;
19578
-
19579
- // Either this is the first call, activity has stopped and we're at the
19580
- // trailing edge, the system time has gone backwards and we're treating
19581
- // it as the trailing edge, or we've hit the `maxWait` limit.
19582
- return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
19583
- (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
19584
- }
19585
-
19586
- function timerExpired() {
19587
- var time = now();
19588
- if (shouldInvoke(time)) {
19589
- return trailingEdge(time);
19590
- }
19591
- // Restart the timer.
19592
- timerId = setTimeout(timerExpired, remainingWait(time));
19593
- }
19594
-
19595
- function trailingEdge(time) {
19596
- timerId = undefined;
19597
-
19598
- // Only invoke if we have `lastArgs` which means `func` has been
19599
- // debounced at least once.
19600
- if (trailing && lastArgs) {
19601
- return invokeFunc(time);
19602
- }
19603
- lastArgs = lastThis = undefined;
19604
- return result;
19605
- }
19606
-
19607
- function cancel() {
19608
- if (timerId !== undefined) {
19609
- clearTimeout(timerId);
19610
- }
19611
- lastInvokeTime = 0;
19612
- lastArgs = lastCallTime = lastThis = timerId = undefined;
19613
- }
19614
-
19615
- function flush() {
19616
- return timerId === undefined ? result : trailingEdge(now());
19617
- }
19618
-
19619
- function debounced() {
19620
- var time = now(),
19621
- isInvoking = shouldInvoke(time);
19622
-
19623
- lastArgs = arguments;
19624
- lastThis = this;
19625
- lastCallTime = time;
19626
-
19627
- if (isInvoking) {
19628
- if (timerId === undefined) {
19629
- return leadingEdge(lastCallTime);
19630
- }
19631
- if (maxing) {
19632
- // Handle invocations in a tight loop.
19633
- timerId = setTimeout(timerExpired, wait);
19634
- return invokeFunc(lastCallTime);
19635
- }
19636
- }
19637
- if (timerId === undefined) {
19638
- timerId = setTimeout(timerExpired, wait);
19639
- }
19640
- return result;
19641
- }
19642
- debounced.cancel = cancel;
19643
- debounced.flush = flush;
19644
- return debounced;
19645
- }
19646
-
19647
- /**
19648
- * Creates a throttled function that only invokes `func` at most once per
19649
- * every `wait` milliseconds. The throttled function comes with a `cancel`
19650
- * method to cancel delayed `func` invocations and a `flush` method to
19651
- * immediately invoke them. Provide `options` to indicate whether `func`
19652
- * should be invoked on the leading and/or trailing edge of the `wait`
19653
- * timeout. The `func` is invoked with the last arguments provided to the
19654
- * throttled function. Subsequent calls to the throttled function return the
19655
- * result of the last `func` invocation.
19656
- *
19657
- * **Note:** If `leading` and `trailing` options are `true`, `func` is
19658
- * invoked on the trailing edge of the timeout only if the throttled function
19659
- * is invoked more than once during the `wait` timeout.
19660
- *
19661
- * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
19662
- * until to the next tick, similar to `setTimeout` with a timeout of `0`.
19663
- *
19664
- * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
19665
- * for details over the differences between `_.throttle` and `_.debounce`.
19666
- *
19667
- * @static
19668
- * @memberOf _
19669
- * @since 0.1.0
19670
- * @category Function
19671
- * @param {Function} func The function to throttle.
19672
- * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
19673
- * @param {Object} [options={}] The options object.
19674
- * @param {boolean} [options.leading=true]
19675
- * Specify invoking on the leading edge of the timeout.
19676
- * @param {boolean} [options.trailing=true]
19677
- * Specify invoking on the trailing edge of the timeout.
19678
- * @returns {Function} Returns the new throttled function.
19679
- * @example
19680
- *
19681
- * // Avoid excessively updating the position while scrolling.
19682
- * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
19683
- *
19684
- * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
19685
- * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
19686
- * jQuery(element).on('click', throttled);
19687
- *
19688
- * // Cancel the trailing throttled invocation.
19689
- * jQuery(window).on('popstate', throttled.cancel);
19690
- */
19691
- function throttle(func, wait, options) {
19692
- var leading = true,
19693
- trailing = true;
19694
-
19695
- if (typeof func != 'function') {
19696
- throw new TypeError(FUNC_ERROR_TEXT);
19697
- }
19698
- if (isObject(options)) {
19699
- leading = 'leading' in options ? !!options.leading : leading;
19700
- trailing = 'trailing' in options ? !!options.trailing : trailing;
19701
- }
19702
- return debounce(func, wait, {
19703
- 'leading': leading,
19704
- 'maxWait': wait,
19705
- 'trailing': trailing
19706
- });
19707
- }
19708
-
19709
- /**
19710
- * Checks if `value` is the
19711
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
19712
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
19713
- *
19714
- * @static
19715
- * @memberOf _
19716
- * @since 0.1.0
19717
- * @category Lang
19718
- * @param {*} value The value to check.
19719
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
19720
- * @example
19721
- *
19722
- * _.isObject({});
19723
- * // => true
19724
- *
19725
- * _.isObject([1, 2, 3]);
19726
- * // => true
19727
- *
19728
- * _.isObject(_.noop);
19729
- * // => true
19730
- *
19731
- * _.isObject(null);
19732
- * // => false
19733
- */
19734
- function isObject(value) {
19735
- var type = typeof value;
19736
- return !!value && (type == 'object' || type == 'function');
19737
- }
19738
-
19739
- /**
19740
- * Checks if `value` is object-like. A value is object-like if it's not `null`
19741
- * and has a `typeof` result of "object".
19742
- *
19743
- * @static
19744
- * @memberOf _
19745
- * @since 4.0.0
19746
- * @category Lang
19747
- * @param {*} value The value to check.
19748
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
19749
- * @example
19750
- *
19751
- * _.isObjectLike({});
19752
- * // => true
19753
- *
19754
- * _.isObjectLike([1, 2, 3]);
19755
- * // => true
19756
- *
19757
- * _.isObjectLike(_.noop);
19758
- * // => false
19759
- *
19760
- * _.isObjectLike(null);
19761
- * // => false
19762
- */
19763
- function isObjectLike(value) {
19764
- return !!value && typeof value == 'object';
19765
- }
19766
-
19767
- /**
19768
- * Checks if `value` is classified as a `Symbol` primitive or object.
19769
- *
19770
- * @static
19771
- * @memberOf _
19772
- * @since 4.0.0
19773
- * @category Lang
19774
- * @param {*} value The value to check.
19775
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
19776
- * @example
19777
- *
19778
- * _.isSymbol(Symbol.iterator);
19779
- * // => true
19780
- *
19781
- * _.isSymbol('abc');
19782
- * // => false
19783
- */
19784
- function isSymbol(value) {
19785
- return typeof value == 'symbol' ||
19786
- (isObjectLike(value) && objectToString.call(value) == symbolTag);
19787
- }
19788
-
19789
- /**
19790
- * Converts `value` to a number.
19791
- *
19792
- * @static
19793
- * @memberOf _
19794
- * @since 4.0.0
19795
- * @category Lang
19796
- * @param {*} value The value to process.
19797
- * @returns {number} Returns the number.
19798
- * @example
19799
- *
19800
- * _.toNumber(3.2);
19801
- * // => 3.2
19802
- *
19803
- * _.toNumber(Number.MIN_VALUE);
19804
- * // => 5e-324
19805
- *
19806
- * _.toNumber(Infinity);
19807
- * // => Infinity
19808
- *
19809
- * _.toNumber('3.2');
19810
- * // => 3.2
19811
- */
19812
- function toNumber(value) {
19813
- if (typeof value == 'number') {
19814
- return value;
19815
- }
19816
- if (isSymbol(value)) {
19817
- return NAN;
19818
- }
19819
- if (isObject(value)) {
19820
- var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
19821
- value = isObject(other) ? (other + '') : other;
19822
- }
19823
- if (typeof value != 'string') {
19824
- return value === 0 ? value : +value;
19825
- }
19826
- value = value.replace(reTrim, '');
19827
- var isBinary = reIsBinary.test(value);
19828
- return (isBinary || reIsOctal.test(value))
19829
- ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
19830
- : (reIsBadHex.test(value) ? NAN : +value);
19831
- }
19832
-
19833
- var lodash_throttle = throttle;
19834
-
19835
- function tagWidth(text) {
19836
- const context = document.createElement('canvas').getContext('2d');
19837
- context.font =
19838
- "14px apple-system, system-ui, 'Segoe UI', Arial, Helvetica, Roboto, sans-serif";
19839
- return context.measureText(text).width + 44; // = text + l/r padding + margin-right
19840
- }
19841
- const XplSelect$1 = class extends HTMLElement {
19842
- constructor() {
19843
- super();
19844
- this.__registerHost();
19845
- /**
19846
- * An array of choices for the user to choose from.
19847
- * Each choice should be of the form:
19848
- * {
19849
- * label: string;
19850
- * href?: string;
19851
- * value?: string;
19852
- * isGroupHeading?: boolean;
19853
- * }
19854
- */
19855
- this.choices = [];
19856
- /**
19857
- * Whether to allow a single choice or multiple choices.
19858
- */
19859
- this.mode = 'single';
19860
- /**
19861
- * Only used in multi-choice selects. If `true`,
19862
- * badges representing selections that would overflow the
19863
- * container are replaced with "+x more" (where x is the
19864
- * number not shown). If `false`, the container's height will
19865
- * adjust to show all badges representing selections.
19866
- */
19867
- this.truncate = true;
19868
- this.active = false;
19869
- this.id = v4();
19870
- this.keepFocus = false;
19871
- this.value = '';
19872
- this.displayValue = '';
19873
- // infinity isn't real, it's just a mathematical construct, it can't hurt you
19874
- this.visibleChoices = Infinity;
19875
- }
19876
- componentWillLoad() {
19877
- this.selected =
19878
- this.choices && this.choices.length > 0
19879
- ? this.choices.map(() => false)
19880
- : [];
19881
- window.addEventListener('click', (e) => {
19882
- const el = e.target;
19883
- const select = el.closest('.xpl-select');
19884
- if (select === null || select !== this.container) {
19885
- this.active = false;
19886
- }
19887
- });
19888
- window.addEventListener('resize', lodash_throttle(() => {
19889
- this.maybeTruncateChoices();
19890
- }, 250));
19891
- }
19892
- componentDidLoad() {
19893
- this.dropdown = this.container.querySelector('xpl-dropdown');
19894
- }
19895
- maybeTruncateChoices() {
19896
- if (this.mode === 'single' || !this.truncate)
19897
- return;
19898
- const containerWidth = this.container.getBoundingClientRect().width;
19899
- let visibleChoices = 0;
19900
- let visibleChoicesWidth = 0;
19901
- const actualNumSelected = this.selected.filter((a) => a).length;
19902
- for (let i = 0; i < actualNumSelected; i++) {
19903
- visibleChoicesWidth += tagWidth(this.getDisplayValue(i));
19904
- if (visibleChoicesWidth > containerWidth - 140)
19905
- break;
19906
- visibleChoices++;
19907
- }
19908
- if (visibleChoices >= actualNumSelected)
19909
- visibleChoices = Infinity;
19910
- if (visibleChoices < 1)
19911
- visibleChoices = 1;
19912
- this.visibleChoices = visibleChoices;
19913
- }
19914
- flattenChoices() {
19915
- return this.choices.reduce((acc, curr) => [
19916
- ...acc,
19917
- ...(curr.groupName ? curr.options : [curr]),
19918
- ], []);
19919
- }
19920
- getDisplayValue(i) {
19921
- return this.flattenChoices()[i].label || this.flattenChoices()[i].value;
19922
- }
19923
- getActualValue(i) {
19924
- return this.flattenChoices()[i].value || this.flattenChoices()[i].label;
19925
- }
19926
- update() {
19927
- this.selected = this.flattenChoices().map(({ isSelected }) => isSelected);
19928
- if (this.mode === 'single') {
19929
- const selected = this.selected.findIndex((v) => v);
19930
- this.value = selected >= 0 ? this.getActualValue(selected) : '';
19931
- this.displayValue =
19932
- selected >= 0 ? this.getDisplayValue(selected) : '';
19933
- }
19934
- else if (this.mode === 'multi') {
19935
- this.value = this.selected
19936
- .map((v, i) => {
19937
- return v ? this.getActualValue(i) : '';
19938
- })
19939
- .filter((v) => v.length > 0)
19940
- .join('|');
19941
- }
19942
- }
19943
- render() {
19944
- let visibleChoices = 0;
19945
- return (h(Host, { class: {
19946
- 'xpl-select': true,
19947
- 'xpl-select--disabled': this.disabled,
19948
- 'xpl-select--no-truncate': !this.truncate,
19949
- }, onKeyDown: (e) => {
19950
- if (e.key === 'Escape')
19951
- this.active = false;
19952
- }, ref: (el) => (this.container = el) }, this.label || this.description ? (h("label", { class: {
19953
- 'xpl-label': true,
19954
- 'xpl-label--disabled': this.disabled,
19955
- }, htmlFor: this.id }, this.label, this.description && (h("small", { class: {
19956
- 'xpl-description': true,
19957
- 'xpl-description--disabled': this.disabled,
19958
- } }, this.description)))) : null, h("div", { class: {
19959
- 'xpl-input': true,
19960
- 'xpl-input--disabled': this.disabled,
19961
- 'xpl-input--error': this.error !== undefined,
19962
- } }, h("div", { class: "xpl-input-wrapper" }, h("div", { class: {
19963
- 'xpl-select-value': true,
19964
- 'xpl-select-value--active': this.mode === 'multi' &&
19965
- this.value.length > 0,
19966
- 'has-value': this.value.length > 0,
19967
- } }, this.mode === 'single'
19968
- ? this.displayValue || this.placeholder
19969
- : this.value.length > 0
19970
- ? this.selected.map((v, i) => {
19971
- if (!v)
19972
- return null;
19973
- if (visibleChoices >= this.visibleChoices)
19974
- return null;
19975
- visibleChoices++;
19976
- return (h("xpl-tag", { onClose: () => {
19977
- this.flattenChoices().forEach((v, j) => {
19978
- if (i === j)
19979
- v.isSelected =
19980
- false;
19981
- });
19982
- const mapOptions = (option) => {
19983
- option.options =
19984
- option.groupName
19985
- ? option.options.map(mapOptions)
19986
- : undefined;
19987
- return option;
19988
- };
19989
- this.choices =
19990
- this.choices.map(mapOptions);
19991
- this.update();
19992
- this.maybeTruncateChoices();
19993
- } }, this.getDisplayValue(i)));
19994
- })
19995
- : this.placeholder, this.visibleChoices < Infinity &&
19996
- `+ ${this.selected.filter((a) => a).length -
19997
- this.visibleChoices} more`), h("button", { disabled: this.disabled, id: this.id, onKeyDown: (e) => {
19998
- if (e.key === 'Tab')
19999
- this.keepFocus = true;
20000
- }, onClick: () => {
20001
- const { dropdown } = this;
20002
- if (!this.disabled)
20003
- dropdown.isOpen = !dropdown.isOpen;
20004
- } })), !this.disabled && (h("xpl-dropdown", { options: this.choices, mode: this.mode, triggerId: this.id, update: () => {
20005
- this.update();
20006
- this.maybeTruncateChoices();
20007
- } })), this.error !== undefined && this.error.length > 0 && (h("label", { class: "xpl-input-error", htmlFor: this.id }, h("svg", { width: "10", height: "11", viewBox: "0 0 10 11", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M9.84375 5.25C9.84375 2.59375 7.65625 0.40625 5 0.40625C2.32422 0.40625 0.15625 2.59375 0.15625 5.25C0.15625 7.92578 2.32422 10.0938 5 10.0938C7.65625 10.0938 9.84375 7.92578 9.84375 5.25ZM5 6.22656C5.48828 6.22656 5.89844 6.63672 5.89844 7.125C5.89844 7.63281 5.48828 8.02344 5 8.02344C4.49219 8.02344 4.10156 7.63281 4.10156 7.125C4.10156 6.63672 4.49219 6.22656 5 6.22656ZM4.14062 3.00391C4.12109 2.86719 4.23828 2.75 4.375 2.75H5.60547C5.74219 2.75 5.85938 2.86719 5.83984 3.00391L5.70312 5.66016C5.68359 5.79688 5.58594 5.875 5.46875 5.875H4.51172C4.39453 5.875 4.29688 5.79688 4.27734 5.66016L4.14062 3.00391Z" })), this.error))), h("input", { type: "hidden", value: this.value })));
20008
- }
20009
- };
20010
-
20011
- const XplTable$1 = class extends HTMLElement {
20012
- constructor() {
20013
- super();
20014
- this.__registerHost();
20015
- this.tableSelect = createEvent(this, "tableSelect", 7);
20016
- this.areAllSelected = false;
20017
- this.hasScrolled = false;
20018
- this.selectAll = (e) => {
20019
- const { target } = e;
20020
- if (!(target instanceof HTMLInputElement))
20021
- return;
20022
- const { checked } = target;
20023
- this.areAllSelected = checked;
20024
- this.selected = this.selected.map(() => checked);
20025
- this.onChange();
20026
- };
20027
- this.selectOne = (e, i) => {
20028
- const { target } = e;
20029
- if (!(target instanceof HTMLInputElement))
20030
- return;
20031
- const { checked } = target;
20032
- this.areAllSelected = false;
20033
- this.selected = this.selected.map((v, _i) => (_i === i ? checked : v));
20034
- this.onChange();
20035
- };
20036
- this.onChange = () => {
20037
- this.tableSelect.emit({
20038
- selected: this.selected,
20039
- areAllSelected: this.areAllSelected,
20040
- });
20041
- };
20042
- this.onScroll = () => {
20043
- this.hasScrolled = this.container.scrollLeft > 0;
20044
- };
20045
- }
20046
- /**
20047
- * TODO: Need to figure out how this interplays with data
20048
- * received from an API/server
20049
- */
20050
- // private sortBy = (col: number, ascending = true) => {
20051
- // this.rowData.sort((a, b) => {
20052
- // const A = a[col];
20053
- // const B = b[col];
20054
- // if (typeof A === 'number' && typeof B === 'number') {
20055
- // const f = ascending ? 1 : -1;
20056
- // return A > B ? f : -f;
20057
- // }
20058
- // return -1;
20059
- // });
20060
- // this.rowData = Array.from(this.rowData);
20061
- // this.render();
20062
- // };
20063
- componentWillLoad() {
20064
- this.areAllSelected = false;
20065
- this.rowData = this.data !== undefined ? Array.from(this.data) : [];
20066
- this.selected = new Array(this.rowData.length).fill(false);
20067
- }
20068
- render() {
20069
- let className = 'xpl-table';
20070
- if (this.striped)
20071
- className += ' xpl-table--striped';
20072
- if (this.freeze)
20073
- className += ' xpl-table--freeze';
20074
- if (this.hasScrolled)
20075
- className += ' xpl-table--has-scrolled';
20076
- return (h(Host, null, h("div", { class: "xpl-table-container", onScroll: this.onScroll, ref: (el) => (this.container = el) }, h("table", { class: className }, this.columns && (h("thead", null, this.columns.map((column, i) => {
20077
- return (h("th", null, this.multiselect && i === 0 ? (h("label", { htmlFor: "__xpl-table-th" }, h("input", { checked: this.areAllSelected, id: "__xpl-table-th",
20078
- // appear indeterminate when at least one but not all
20079
- // are selected
20080
- indeterminate: !this
20081
- .areAllSelected &&
20082
- this.selected.some((a) => a), onChange: (e) => {
20083
- this.selectAll(e);
20084
- }, type: "checkbox" }), column)) : (column)));
20085
- }))), h("tbody", null, this.rowData.map((row, rowNum) => {
20086
- return (h("tr", { class: this.selected &&
20087
- this.selected[rowNum]
20088
- ? 'xpl-table-row-selected'
20089
- : '' }, row.map((cell, i) => {
20090
- return (h("td", null, this.multiselect &&
20091
- i === 0 ? (h("label", { htmlFor: '__xpl-table-row-' +
20092
- rowNum }, h("input", { id: '__xpl-table-row-' +
20093
- rowNum, checked: this
20094
- .selected[rowNum], type: "checkbox", onChange: (e) => this.selectOne(e, rowNum) }), h("div", { innerHTML: cell }))) : (h("div", { innerHTML: cell }))));
20095
- })));
20096
- }))))));
20097
- }
20098
- };
20099
-
20100
- const XplTag$1 = class extends HTMLElement {
20101
- constructor() {
20102
- super();
20103
- this.__registerHost();
20104
- this.close = createEvent(this, "close", 7);
20105
- }
20106
- render() {
20107
- return (h(Host, { class: "xpl-tag-container" }, h("button", { class: "xpl-tag", onClick: () => {
20108
- this.close.emit();
20109
- } }, h("slot", null)), h("button", { class: "xpl-tag__close", onClick: () => {
20110
- this.close.emit();
20111
- } }, "\u00D7")));
20112
- }
20113
- };
20114
-
20115
- const XplToggle$1 = class extends HTMLElement {
20116
- constructor() {
20117
- super();
20118
- this.__registerHost();
20119
- /**
20120
- * The size of the toggle -- `default` or `small`
20121
- */
20122
- this.variant = 'default';
20123
- this.id = v4();
20124
- }
20125
- render() {
20126
- let containerClassName = 'xpl-toggle-container';
20127
- if (this.disabled)
20128
- containerClassName += ' xpl-toggle-container--disabled';
20129
- let className = 'xpl-toggle';
20130
- if (this.variant === 'small')
20131
- className += ' xpl-toggle--small';
20132
- return (h(Host, { class: containerClassName }, (this.heading || this.description) && (h("label", { class: {
20133
- 'xpl-label': true,
20134
- 'xpl-label--disabled': this.disabled,
20135
- }, htmlFor: this.id }, this.heading, this.description && (h("small", { class: {
20136
- 'xpl-description': true,
20137
- 'xpl-description--disabled': this.disabled,
20138
- } }, this.description)))), h("input", { class: className, type: "checkbox", checked: this.checked, disabled: this.disabled, id: this.id, name: this.name }), this.label && h("label", { htmlFor: this.id }, this.label)));
20139
- }
20140
- };
20141
-
20142
- const XplUtilityBar$1 = class extends HTMLElement {
20143
- constructor() {
20144
- super();
20145
- this.__registerHost();
20146
- this.navOpen = createEvent(this, "navOpen", 7);
20147
- this.open = true;
20148
- this.bars = `
20149
- <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-w-14 xpl-utility-nav__bars" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"></path></svg>
20150
- `;
20151
- }
20152
- onNavToggle() {
20153
- this.open = !this.open;
20154
- this.navOpen.emit(this.open);
20155
- }
20156
- componentWillLoad() {
20157
- this.open =
20158
- this.isNavOpenAtStartup !== undefined
20159
- ? this.isNavOpenAtStartup
20160
- : this.open;
20161
- }
20162
- render() {
20163
- return (h(Host, null, h("nav", { "aria-label": "utility navigation bar", class: "xpl-utility-bar" }, this.navControl ? (h("div", null, h("button", { class: "xpl-utility-bar__nav-control", onClick: () => this.onNavToggle(), innerHTML: `${this.bars}` }), h("slot", { name: "aside" }))) : (h("slot", { name: "aside" })), h("slot", { name: "main" }))));
20164
- }
20165
- };
20166
-
20167
- const XplApplicationShell = /*@__PURE__*/proxyCustomElement(XplApplicationShell$1, [4,"xpl-application-shell",{"withSubnav":[4,"with-subnav"],"withUtility":[4,"with-utility"],"navWidth":[1,"nav-width"],"isNavOpenAtStartup":[4,"is-nav-open-at-startup"],"navOpen":[32]},[[0,"navOpen","navToggleHandler"],[0,"navWidth","navWithHandler"],[9,"resize","onWindowResize"]]]);
20168
- const XplAvatar = /*@__PURE__*/proxyCustomElement(XplAvatar$1, [4,"xpl-avatar",{"color":[1],"disabled":[4],"href":[1],"name":[1],"size":[1],"src":[1],"status":[1],"target":[1]}]);
20169
- const XplBackdrop = /*@__PURE__*/proxyCustomElement(XplBackdrop$1, [0,"xpl-backdrop",{"relative":[4]}]);
20170
- const XplBadge = /*@__PURE__*/proxyCustomElement(XplBadge$1, [4,"xpl-badge",{"dot":[4],"variant":[1]}]);
20171
- const XplBreadcrumbItem = /*@__PURE__*/proxyCustomElement(XplBreadcrumbItem$1, [4,"xpl-breadcrumb-item"]);
20172
- const XplBreadcrumbs = /*@__PURE__*/proxyCustomElement(XplBreadcrumbs$1, [4,"xpl-breadcrumbs"]);
20173
- const XplButton = /*@__PURE__*/proxyCustomElement(XplButton$1, [4,"xpl-button",{"disabled":[4],"link":[4],"iconOnly":[4,"icon-only"],"fullWidth":[4,"full-width"],"name":[1],"size":[1],"type":[1],"value":[1],"variant":[1],"state":[1]}]);
20174
- const XplButtonRow = /*@__PURE__*/proxyCustomElement(XplButtonRow$1, [0,"xpl-button-row",{"primary":[1],"secondary":[1],"tertiary":[1]}]);
20175
- const XplCheckbox = /*@__PURE__*/proxyCustomElement(XplCheckbox$1, [4,"xpl-checkbox",{"checked":[4],"description":[1],"disabled":[4],"indeterminate":[4],"name":[1],"required":[4],"styled":[4],"value":[1],"id":[32]}]);
20176
- const XplChoicelist = /*@__PURE__*/proxyCustomElement(XplChoicelist$1, [0,"xpl-choicelist",{"choices":[16],"description":[1],"heading":[1],"multi":[4],"name":[1],"styled":[4],"selected":[32]}]);
20177
- const XplContentArea = /*@__PURE__*/proxyCustomElement(XplContentArea$1, [4,"xpl-content-area",{"size":[1]}]);
20178
- const XplDivider = /*@__PURE__*/proxyCustomElement(XplDivider$1, [4,"xpl-divider",{"tier":[2]}]);
20179
- const XplDropdown = /*@__PURE__*/proxyCustomElement(XplDropdown$1, [4,"xpl-dropdown",{"isOpen":[1540,"open"],"closeOnSelect":[4,"close-on-select"],"mode":[1],"options":[16],"selectOnFocus":[4,"select-on-focus"],"triggerId":[1,"trigger-id"],"update":[16]}]);
20180
- const XplDropdownGroup = /*@__PURE__*/proxyCustomElement(XplDropdownGroup$1, [4,"xpl-dropdown-group",{"groupName":[1,"label"],"options":[16]}]);
20181
- const XplDropdownHeading = /*@__PURE__*/proxyCustomElement(XplDropdownHeading$1, [4,"xpl-dropdown-heading",{"label":[1]}]);
20182
- const XplDropdownOption = /*@__PURE__*/proxyCustomElement(XplDropdownOption$1, [4,"xpl-dropdown-option",{"isDisabled":[516,"disabled"],"label":[1],"isSelected":[1540,"selected"]}]);
20183
- const XplGrid = /*@__PURE__*/proxyCustomElement(XplGrid$1, [0,"xpl-grid"]);
20184
- const XplGridItem = /*@__PURE__*/proxyCustomElement(XplGridItem$1, [4,"xpl-grid-item",{"xs":[2],"sm":[2],"md":[2],"lg":[2]}]);
20185
- const XplInput = /*@__PURE__*/proxyCustomElement(XplInput$1, [0,"xpl-input",{"_id":[1],"autocomplete":[1],"dateFormat":[1,"date-format"],"description":[1],"disabled":[4],"error":[1],"label":[1],"max":[8],"maxCharacterCount":[2,"max-character-count"],"min":[8],"mode":[1],"multiline":[4],"name":[1],"placeholder":[1],"post":[1],"pre":[1],"readonly":[4],"required":[4],"step":[2],"type":[1],"value":[1],"characterCount":[32],"passwordVisible":[32]}]);
20186
- const XplList = /*@__PURE__*/proxyCustomElement(XplList$1, [0,"xpl-list",{"items":[16]}]);
20187
- const XplMainNav = /*@__PURE__*/proxyCustomElement(XplMainNav$1, [4,"xpl-main-nav",{"width":[1]}]);
20188
- const XplNavItem = /*@__PURE__*/proxyCustomElement(XplNavItem$1, [4,"xpl-nav-item",{"navControl":[4,"nav-control"]}]);
20189
- const XplPagination = /*@__PURE__*/proxyCustomElement(XplPagination$1, [0,"xpl-pagination",{"total":[2],"perPage":[2,"per-page"],"waitForCallback":[4,"wait-for-callback"],"current":[32]}]);
20190
- const XplRadio = /*@__PURE__*/proxyCustomElement(XplRadio$1, [4,"xpl-radio",{"checked":[4],"description":[1],"disabled":[4],"name":[1],"required":[4],"styled":[4],"value":[1],"id":[32]}]);
20191
- const XplSecondaryNav = /*@__PURE__*/proxyCustomElement(XplSecondaryNav$1, [4,"xpl-secondary-nav"]);
20192
- const XplSelect = /*@__PURE__*/proxyCustomElement(XplSelect$1, [0,"xpl-select",{"choices":[16],"description":[1],"disabled":[4],"error":[1],"label":[1],"mode":[1],"placeholder":[1],"truncate":[4],"active":[32],"id":[32],"keepFocus":[32],"selected":[32],"value":[32],"displayValue":[32],"visibleChoices":[32]}]);
20193
- const XplTable = /*@__PURE__*/proxyCustomElement(XplTable$1, [0,"xpl-table",{"columns":[16],"data":[16],"freeze":[4],"multiselect":[4],"striped":[4],"areAllSelected":[32],"rowData":[32],"hasScrolled":[32],"selected":[32]}]);
20194
- const XplTag = /*@__PURE__*/proxyCustomElement(XplTag$1, [4,"xpl-tag"]);
20195
- const XplToggle = /*@__PURE__*/proxyCustomElement(XplToggle$1, [0,"xpl-toggle",{"checked":[4],"description":[1],"disabled":[4],"heading":[1],"label":[1],"name":[1],"variant":[1],"id":[32]}]);
20196
- const XplUtilityBar = /*@__PURE__*/proxyCustomElement(XplUtilityBar$1, [4,"xpl-utility-bar",{"navControl":[4,"nav-control"],"isNavOpenAtStartup":[4,"is-nav-open-at-startup"],"open":[32]}]);
20197
- const defineCustomElements = (opts) => {
20198
- if (typeof customElements !== 'undefined') {
20199
- [
20200
- XplApplicationShell,
20201
- XplAvatar,
20202
- XplBackdrop,
20203
- XplBadge,
20204
- XplBreadcrumbItem,
20205
- XplBreadcrumbs,
20206
- XplButton,
20207
- XplButtonRow,
20208
- XplCheckbox,
20209
- XplChoicelist,
20210
- XplContentArea,
20211
- XplDivider,
20212
- XplDropdown,
20213
- XplDropdownGroup,
20214
- XplDropdownHeading,
20215
- XplDropdownOption,
20216
- XplGrid,
20217
- XplGridItem,
20218
- XplInput,
20219
- XplList,
20220
- XplMainNav,
20221
- XplNavItem,
20222
- XplPagination,
20223
- XplRadio,
20224
- XplSecondaryNav,
20225
- XplSelect,
20226
- XplTable,
20227
- XplTag,
20228
- XplToggle,
20229
- XplUtilityBar
20230
- ].forEach(cmp => {
20231
- if (!customElements.get(cmp.is)) {
20232
- customElements.define(cmp.is, cmp, opts);
20233
- }
20234
- });
20235
- }
20236
- };
20237
-
20238
- export { XplApplicationShell, XplAvatar, XplBackdrop, XplBadge, XplBreadcrumbItem, XplBreadcrumbs, XplButton, XplButtonRow, XplCheckbox, XplChoicelist, XplContentArea, XplDivider, XplDropdown, XplDropdownGroup, XplDropdownHeading, XplDropdownOption, XplGrid, XplGridItem, XplInput, XplList, XplMainNav, XplNavItem, XplPagination, XplRadio, XplSecondaryNav, XplSelect, XplTable, XplTag, XplToggle, XplUtilityBar, defineCustomElements };
16054
+ //# sourceMappingURL=regular-133c23b5.js.map