adp-web-components 0.3.19 → 0.3.20

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 (346) hide show
  1. package/dist/cjs/{branch-slot-dropdown_15.cjs.entry.js → branch-date-dropdown_17.cjs.entry.js} +958 -68
  2. package/dist/cjs/dead-stock-lookup_3.cjs.entry.js +9 -9
  3. package/dist/cjs/flexible-container.cjs.entry.js +3 -3
  4. package/dist/cjs/form-checkbox.cjs.entry.js +2 -2
  5. package/dist/cjs/form-date-picker.cjs.entry.js +5 -5
  6. package/dist/cjs/form-input_7.cjs.entry.js +21 -19
  7. package/dist/cjs/form-switch.cjs.entry.js +2 -2
  8. package/dist/cjs/form-time-picker.cjs.entry.js +6 -6
  9. package/dist/cjs/{functions-DL7oNhTD.js → functions-BAUJUMt-.js} +44 -19
  10. package/dist/cjs/general-form.cjs.entry.js +6 -6
  11. package/dist/cjs/general-inquiry-form.cjs.entry.js +6 -6
  12. package/dist/cjs/{get-local-language-BuK1vyX4.js → get-local-language-DI_UK6D5.js} +1 -1
  13. package/dist/cjs/{get-mock-files-D0TNQtTV.js → get-mock-files-B1tNGb9m.js} +1 -1
  14. package/dist/cjs/information-table.cjs.entry.js +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/loading-spinner.cjs.entry.js +2 -2
  17. package/dist/cjs/manufacturer-part-lookup.cjs.entry.js +3 -3
  18. package/dist/cjs/{mappers-BlH-TAo7.js → mappers-DnWgECCv.js} +54 -18
  19. package/dist/cjs/part-lookup.cjs.entry.js +2 -2
  20. package/dist/cjs/service-booking-form.cjs.entry.js +6 -6
  21. package/dist/cjs/shift-accordion.cjs.entry.js +2 -2
  22. package/dist/cjs/shift-checkbox.cjs.entry.js +2 -2
  23. package/dist/cjs/shift-components.cjs.js +1 -1
  24. package/dist/cjs/shift-slider.cjs.entry.js +2 -2
  25. package/dist/cjs/shift-switch.cjs.entry.js +2 -2
  26. package/dist/cjs/shift-tab-content.cjs.entry.js +2 -2
  27. package/dist/cjs/shift-tabs_2.cjs.entry.js +10 -10
  28. package/dist/cjs/ssc-lookup-form.cjs.entry.js +6 -6
  29. package/dist/cjs/test-drive-form.cjs.entry.js +6 -6
  30. package/dist/cjs/vehicle-accessories_8.cjs.entry.js +21 -21
  31. package/dist/cjs/vehicle-lookup.cjs.entry.js +3 -3
  32. package/dist/cjs/vehicle-quotation-form.cjs.entry.js +17 -18
  33. package/dist/collection/collection-manifest.json +2 -0
  34. package/dist/collection/components/components/empty.css +1 -1
  35. package/dist/collection/components/components/flexible-container.css +1 -1
  36. package/dist/collection/components/components/flexible-container.js +2 -2
  37. package/dist/collection/components/components/information-table.css +1 -1
  38. package/dist/collection/components/components/loading-spinner.css +1 -1
  39. package/dist/collection/components/components/loading-spinner.js +1 -1
  40. package/dist/collection/components/components/shift-accordion.css +1 -1
  41. package/dist/collection/components/components/shift-accordion.js +1 -1
  42. package/dist/collection/components/components/shift-checkbox.js +1 -1
  43. package/dist/collection/components/components/shift-portal.css +1 -1
  44. package/dist/collection/components/components/shift-select-dropdown.css +1 -1
  45. package/dist/collection/components/components/shift-select-dropdown.js +2 -2
  46. package/dist/collection/components/components/shift-select.css +1 -1
  47. package/dist/collection/components/components/shift-select.js +3 -3
  48. package/dist/collection/components/components/shift-slider.css +1 -1
  49. package/dist/collection/components/components/shift-slider.js +1 -1
  50. package/dist/collection/components/components/shift-switch.js +1 -1
  51. package/dist/collection/components/components/shift-tab-content.css +1 -1
  52. package/dist/collection/components/components/shift-tab-content.js +1 -1
  53. package/dist/collection/components/components/shift-tabs.css +1 -1
  54. package/dist/collection/components/components/shift-tabs.js +2 -2
  55. package/dist/collection/components/form-elements/branch-date-dropdown.css +1 -0
  56. package/dist/collection/components/form-elements/branch-date-dropdown.js +682 -0
  57. package/dist/collection/components/form-elements/branch-date-picker.css +1 -0
  58. package/dist/collection/components/form-elements/branch-date-picker.js +1197 -0
  59. package/dist/collection/components/form-elements/branch-slot-dropdown.css +1 -1
  60. package/dist/collection/components/form-elements/branch-slot-dropdown.js +11 -6
  61. package/dist/collection/components/form-elements/branch-slot-picker.css +1 -1
  62. package/dist/collection/components/form-elements/branch-slot-picker.js +166 -18
  63. package/dist/collection/components/form-elements/form-checkbox.js +1 -1
  64. package/dist/collection/components/form-elements/form-date-picker-legacy.js +4 -4
  65. package/dist/collection/components/form-elements/form-dialog.css +1 -1
  66. package/dist/collection/components/form-elements/form-dialog.js +1 -1
  67. package/dist/collection/components/form-elements/form-file.js +2 -2
  68. package/dist/collection/components/form-elements/form-input.js +6 -4
  69. package/dist/collection/components/form-elements/form-inputs.css +1 -1
  70. package/dist/collection/components/form-elements/form-phone-number.js +4 -2
  71. package/dist/collection/components/form-elements/form-picker-input.js +6 -4
  72. package/dist/collection/components/form-elements/form-shadow-input.js +1 -1
  73. package/dist/collection/components/form-elements/form-stepper-control.js +2 -2
  74. package/dist/collection/components/form-elements/form-stepper-submit.js +2 -2
  75. package/dist/collection/components/form-elements/form-stepper.js +1 -1
  76. package/dist/collection/components/form-elements/form-structure-error.js +1 -1
  77. package/dist/collection/components/form-elements/form-submit.js +2 -2
  78. package/dist/collection/components/form-elements/form-switch.js +1 -1
  79. package/dist/collection/components/form-elements/form-text-area.js +6 -4
  80. package/dist/collection/components/form-elements/form-time-picker-legacy.js +5 -5
  81. package/dist/collection/components/form-elements/form-vin-input.js +6 -4
  82. package/dist/collection/components/forms/defaults/mappers.js +54 -18
  83. package/dist/collection/components/forms/defaults/style.css +1 -1
  84. package/dist/collection/components/forms/general-form.js +2 -2
  85. package/dist/collection/components/forms/general-inquiry.js +2 -2
  86. package/dist/collection/components/forms/service-booking.js +2 -2
  87. package/dist/collection/components/forms/ssc-lookup.js +2 -2
  88. package/dist/collection/components/forms/test-drive.js +2 -2
  89. package/dist/collection/components/forms/vehicle-quotation/themes.css +1 -1
  90. package/dist/collection/components/forms/vehicle-quotation.js +15 -16
  91. package/dist/collection/components/part-lookup/dead-stock-lookup.css +1 -1
  92. package/dist/collection/components/part-lookup/dead-stock-lookup.js +2 -2
  93. package/dist/collection/components/part-lookup/distributor-lookup.css +1 -1
  94. package/dist/collection/components/part-lookup/distributor-lookup.js +2 -2
  95. package/dist/collection/components/part-lookup/manufacturer-lookup.css +1 -1
  96. package/dist/collection/components/part-lookup/manufacturer-part-lookup.css +1 -1
  97. package/dist/collection/components/part-lookup/manufacturer-part-lookup.js +1 -1
  98. package/dist/collection/components/part-lookup/part-lookup.css +1 -1
  99. package/dist/collection/components/vehicle-lookup/vehicle-accessories.css +1 -1
  100. package/dist/collection/components/vehicle-lookup/vehicle-accessories.js +2 -2
  101. package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.css +1 -1
  102. package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.js +5 -5
  103. package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.css +1 -1
  104. package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.js +6 -6
  105. package/dist/collection/components/vehicle-lookup/vehicle-lookup.css +1 -1
  106. package/dist/collection/components/vehicle-lookup/vehicle-paint-thickness.css +1 -1
  107. package/dist/collection/components/vehicle-lookup/vehicle-sale-information.css +1 -1
  108. package/dist/collection/components/vehicle-lookup/vehicle-sale-information.js +2 -2
  109. package/dist/collection/components/vehicle-lookup/vehicle-service-history.css +1 -1
  110. package/dist/collection/components/vehicle-lookup/vehicle-service-history.js +1 -1
  111. package/dist/collection/components/vehicle-lookup/vehicle-specification.css +1 -1
  112. package/dist/collection/components/vehicle-lookup/vehicle-specification.js +1 -1
  113. package/dist/collection/components/vehicle-lookup/vehicle-warranty-details.css +1 -1
  114. package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.css +1 -1
  115. package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.js +1 -1
  116. package/dist/collection/components/vin-extractor/vin-extractor.css +1 -1
  117. package/dist/collection/components/vin-extractor/vin-extractor.js +1 -1
  118. package/dist/collection/features/form-hook/functions.js +42 -18
  119. package/dist/collection/global/lib/slot-day-rules.js +65 -0
  120. package/dist/collection/templates/assets/favicon.svg +17 -0
  121. package/dist/collection/templates/forms/docs-content/params.js +1199 -0
  122. package/dist/collection/templates/forms/docs-content/structure.js +1153 -0
  123. package/dist/collection/templates/forms/docs-content/theming.js +1240 -0
  124. package/dist/collection/templates/harness.js +595 -84
  125. package/dist/collection/templates/highlight.js +194 -0
  126. package/dist/collection/templates/nav.js +320 -0
  127. package/dist/collection/templates/site-header.js +642 -0
  128. package/dist/collection/templates/site-locales.js +771 -0
  129. package/dist/components/branch-date-dropdown.d.ts +11 -0
  130. package/dist/components/branch-date-dropdown.js +5 -0
  131. package/dist/components/branch-date-picker.d.ts +11 -0
  132. package/dist/components/branch-date-picker.js +5 -0
  133. package/dist/components/branch-slot-dropdown.js +1 -1
  134. package/dist/components/branch-slot-picker.js +1 -1
  135. package/dist/components/dead-stock-lookup.js +1 -1
  136. package/dist/components/distributor-lookup.js +1 -1
  137. package/dist/components/flexible-container.js +1 -1
  138. package/dist/components/form-checkbox.js +1 -1
  139. package/dist/components/form-date-picker.js +1 -1
  140. package/dist/components/form-dialog.js +1 -1
  141. package/dist/components/form-file.js +1 -1
  142. package/dist/components/form-input-preview.js +1 -1
  143. package/dist/components/form-input.js +1 -1
  144. package/dist/components/form-phone-number.js +1 -1
  145. package/dist/components/form-picker-input.js +1 -1
  146. package/dist/components/form-select.js +1 -1
  147. package/dist/components/form-shadow-input.js +1 -1
  148. package/dist/components/form-stepper-control.js +1 -1
  149. package/dist/components/form-stepper-submit.js +1 -1
  150. package/dist/components/form-stepper.js +1 -1
  151. package/dist/components/form-structure-error.js +1 -1
  152. package/dist/components/form-structure.js +1 -1
  153. package/dist/components/form-submit.js +1 -1
  154. package/dist/components/form-switch.js +1 -1
  155. package/dist/components/form-text-area.js +1 -1
  156. package/dist/components/form-time-picker.js +1 -1
  157. package/dist/components/form-vin-input.js +1 -1
  158. package/dist/components/general-form.js +1 -1
  159. package/dist/components/general-inquiry-form.js +1 -1
  160. package/dist/components/information-table.js +1 -1
  161. package/dist/components/loading-spinner.js +1 -1
  162. package/dist/components/manufacturer-lookup.js +1 -1
  163. package/dist/components/manufacturer-part-lookup.js +1 -1
  164. package/dist/components/p--lk4OUJg.js +5 -0
  165. package/dist/components/{p-DbnN292R.js → p-38ox9qxm.js} +1 -1
  166. package/dist/components/p-5OD_mwiD.js +5 -0
  167. package/dist/components/{p-l2FHTMzv.js → p-68bjv9gT.js} +1 -1
  168. package/dist/components/p-B0_5_VvS.js +5 -0
  169. package/dist/components/p-B1xVBTqj.js +5 -0
  170. package/dist/components/{p-B7G2HjX0.js → p-B2bD-55K.js} +1 -1
  171. package/dist/components/{p-BKzXBxxc.js → p-BI5NL1Rh.js} +1 -1
  172. package/dist/components/{p-CL5G_ZDE.js → p-BPXRokES.js} +1 -1
  173. package/dist/components/{p-D7Sj02XY.js → p-BULuujHY.js} +1 -1
  174. package/dist/components/{p-CC16uGpN.js → p-BWlX-Nz-.js} +1 -1
  175. package/dist/components/p-Bc5HIbcj.js +5 -0
  176. package/dist/components/p-BcWJAP8j.js +5 -0
  177. package/dist/components/p-BpB_86n0.js +5 -0
  178. package/dist/components/p-BpHkd1L9.js +5 -0
  179. package/dist/components/{p-Qh1y1RV2.js → p-BsnGFZeT.js} +1 -1
  180. package/dist/components/{p-Dd_Xnn2b.js → p-BvLVCp-j.js} +1 -1
  181. package/dist/components/p-C3KLOUbk.js +5 -0
  182. package/dist/components/{p-BaZAgTxG.js → p-CJtTHErI.js} +1 -1
  183. package/dist/components/{p-R_rAJ4hF.js → p-CMAmzdM7.js} +1 -1
  184. package/dist/components/p-CVpbr1tR.js +5 -0
  185. package/dist/components/{p-6RmAcc2q.js → p-CXbi5iPZ.js} +1 -1
  186. package/dist/components/p-C_1_eN4N.js +5 -0
  187. package/dist/components/{p-B9xLzbPr.js → p-Ce2mazYo.js} +1 -1
  188. package/dist/components/p-Cg6Prz81.js +5 -0
  189. package/dist/components/{p-CwbJMZVZ.js → p-Cpjvk1pk.js} +1 -1
  190. package/dist/components/p-CqJiXtPb.js +5 -0
  191. package/dist/components/p-CrPyvAdX.js +5 -0
  192. package/dist/components/{p-C6U9Fs9H.js → p-CsU_c7eX.js} +1 -1
  193. package/dist/components/{p-LkNhSGDO.js → p-D42YuMNZ.js} +1 -1
  194. package/dist/components/{p-CIPh05sT.js → p-DCpRGVqe.js} +1 -1
  195. package/dist/components/{p-DcMgXNpe.js → p-DCsMDWbS.js} +1 -1
  196. package/dist/components/{p-B8hl68AM.js → p-DQ0uTCi2.js} +1 -1
  197. package/dist/components/p-DTmI_Yx0.js +5 -0
  198. package/dist/components/p-DnspXuVN.js +5 -0
  199. package/dist/components/p-DqSdjh2n.js +5 -0
  200. package/dist/components/p-Dv2j7fhS.js +5 -0
  201. package/dist/components/{p-C8S2P4sw.js → p-K-OF4DG-.js} +1 -1
  202. package/dist/components/p-KSvRVGk-.js +5 -0
  203. package/dist/components/p-KbiYvxzP.js +5 -0
  204. package/dist/components/{p-B2w49gNR.js → p-OY4Ixaeq.js} +1 -1
  205. package/dist/components/{p-Dsk1SNut.js → p-SIS25ChD.js} +1 -1
  206. package/dist/components/p-Wgb4y0H3.js +5 -0
  207. package/dist/components/p-X3AzJ0KD.js +5 -0
  208. package/dist/components/{p-Cm94OAx9.js → p-bCeQwUKM.js} +1 -1
  209. package/dist/components/p-d3ZIPeEC.js +5 -0
  210. package/dist/components/{p-DpXLfNHS.js → p-ikaUQvOO.js} +1 -1
  211. package/dist/components/p-mbVTvSJF.js +5 -0
  212. package/dist/components/{p-BbQAkWw4.js → p-rQ3Z9EnS.js} +1 -1
  213. package/dist/components/{p-BdPZ7u2w.js → p-uYkn8a0m.js} +1 -1
  214. package/dist/components/part-lookup.js +1 -1
  215. package/dist/components/service-booking-form.js +1 -1
  216. package/dist/components/shift-accordion.js +1 -1
  217. package/dist/components/shift-checkbox.js +1 -1
  218. package/dist/components/shift-portal.js +1 -1
  219. package/dist/components/shift-select-dropdown.js +1 -1
  220. package/dist/components/shift-select.js +1 -1
  221. package/dist/components/shift-slider.js +1 -1
  222. package/dist/components/shift-switch.js +1 -1
  223. package/dist/components/shift-tab-content.js +1 -1
  224. package/dist/components/shift-tabs.js +1 -1
  225. package/dist/components/ssc-lookup-form.js +1 -1
  226. package/dist/components/test-drive-form.js +1 -1
  227. package/dist/components/vehicle-accessories.js +1 -1
  228. package/dist/components/vehicle-claimable-items.js +1 -1
  229. package/dist/components/vehicle-item-claim-form.js +1 -1
  230. package/dist/components/vehicle-lookup.js +1 -1
  231. package/dist/components/vehicle-paint-thickness.js +1 -1
  232. package/dist/components/vehicle-quotation-form.js +1 -1
  233. package/dist/components/vehicle-sale-information.js +1 -1
  234. package/dist/components/vehicle-service-history.js +1 -1
  235. package/dist/components/vehicle-specification.js +1 -1
  236. package/dist/components/vehicle-warranty-details.js +1 -1
  237. package/dist/components/vehicle-warranty-timeline.js +1 -1
  238. package/dist/components/vin-extractor.js +1 -1
  239. package/dist/esm/{branch-slot-dropdown_15.entry.js → branch-date-dropdown_17.entry.js} +957 -69
  240. package/dist/esm/dead-stock-lookup_3.entry.js +9 -9
  241. package/dist/esm/flexible-container.entry.js +3 -3
  242. package/dist/esm/form-checkbox.entry.js +2 -2
  243. package/dist/esm/form-date-picker.entry.js +5 -5
  244. package/dist/esm/form-input_7.entry.js +21 -19
  245. package/dist/esm/form-switch.entry.js +2 -2
  246. package/dist/esm/form-time-picker.entry.js +6 -6
  247. package/dist/esm/{functions-Ccrile_u.js → functions-DSwc1YVL.js} +44 -20
  248. package/dist/esm/general-form.entry.js +6 -6
  249. package/dist/esm/general-inquiry-form.entry.js +6 -6
  250. package/dist/esm/{get-local-language-oNw84Rsz.js → get-local-language-DdSAPSCV.js} +1 -1
  251. package/dist/esm/{get-mock-files-C26lznN1.js → get-mock-files-D4naDetb.js} +1 -1
  252. package/dist/esm/information-table.entry.js +1 -1
  253. package/dist/esm/loader.js +1 -1
  254. package/dist/esm/loading-spinner.entry.js +2 -2
  255. package/dist/esm/manufacturer-part-lookup.entry.js +3 -3
  256. package/dist/esm/{mappers-9IKbvPiR.js → mappers-CZs2R7k6.js} +54 -18
  257. package/dist/esm/part-lookup.entry.js +2 -2
  258. package/dist/esm/service-booking-form.entry.js +6 -6
  259. package/dist/esm/shift-accordion.entry.js +2 -2
  260. package/dist/esm/shift-checkbox.entry.js +2 -2
  261. package/dist/esm/shift-components.js +1 -1
  262. package/dist/esm/shift-slider.entry.js +2 -2
  263. package/dist/esm/shift-switch.entry.js +2 -2
  264. package/dist/esm/shift-tab-content.entry.js +2 -2
  265. package/dist/esm/shift-tabs_2.entry.js +10 -10
  266. package/dist/esm/ssc-lookup-form.entry.js +6 -6
  267. package/dist/esm/test-drive-form.entry.js +6 -6
  268. package/dist/esm/vehicle-accessories_8.entry.js +21 -21
  269. package/dist/esm/vehicle-lookup.entry.js +3 -3
  270. package/dist/esm/vehicle-quotation-form.entry.js +17 -18
  271. package/dist/integration-manifest.json +1 -1
  272. package/dist/shift-components/{p-9b13a82b.entry.js → p-0b576888.entry.js} +1 -1
  273. package/dist/shift-components/p-11ffa908.entry.js +5 -0
  274. package/dist/shift-components/{p-f2a546db.entry.js → p-152057de.entry.js} +1 -1
  275. package/dist/shift-components/p-198333fa.entry.js +5 -0
  276. package/dist/shift-components/{p-d58404bd.entry.js → p-247ac2db.entry.js} +1 -1
  277. package/dist/shift-components/{p-d59276b6.entry.js → p-295e445f.entry.js} +1 -1
  278. package/dist/shift-components/p-431522f2.entry.js +5 -0
  279. package/dist/shift-components/{p-c9ba7fd5.entry.js → p-49dc6d73.entry.js} +1 -1
  280. package/dist/shift-components/{p-eb265a3e.entry.js → p-4b6f801a.entry.js} +1 -1
  281. package/dist/shift-components/{p-0da97a29.entry.js → p-4cdeab63.entry.js} +1 -1
  282. package/dist/shift-components/{p-31718ec2.entry.js → p-52530fba.entry.js} +1 -1
  283. package/dist/shift-components/p-5ad4d072.entry.js +5 -0
  284. package/dist/shift-components/{p-3aad8840.entry.js → p-5e8e5ed7.entry.js} +1 -1
  285. package/dist/shift-components/{p-09a0fd99.entry.js → p-68e41217.entry.js} +1 -1
  286. package/dist/shift-components/{p-a15fdf1e.entry.js → p-76b0ea8c.entry.js} +1 -1
  287. package/dist/shift-components/{p-68722c7b.entry.js → p-85d43a41.entry.js} +1 -1
  288. package/dist/shift-components/p-B9INqdFT.js +5 -0
  289. package/dist/shift-components/{p-urLq-GEs.js → p-D2Ofzg_i.js} +1 -1
  290. package/dist/shift-components/p-DDtDRGFL.js +5 -0
  291. package/dist/shift-components/{p-BugYpTL6.js → p-OfPuHUYc.js} +1 -1
  292. package/dist/shift-components/p-b44b2c00.entry.js +5 -0
  293. package/dist/shift-components/{p-1355934b.entry.js → p-b4544d10.entry.js} +1 -1
  294. package/dist/shift-components/{p-e90c354a.entry.js → p-bfe0661c.entry.js} +1 -1
  295. package/dist/shift-components/{p-138af7f3.entry.js → p-c7fc8d5f.entry.js} +1 -1
  296. package/dist/shift-components/{p-30e84a3b.entry.js → p-ca0683e9.entry.js} +1 -1
  297. package/dist/shift-components/{p-53cd54e8.entry.js → p-cbdc1c2e.entry.js} +1 -1
  298. package/dist/shift-components/p-d3bbba07.entry.js +5 -0
  299. package/dist/shift-components/{p-63713eae.entry.js → p-df0c7ac1.entry.js} +1 -1
  300. package/dist/shift-components/p-f4679148.entry.js +5 -0
  301. package/dist/shift-components/{p-729d8d4b.entry.js → p-feb443ec.entry.js} +1 -1
  302. package/dist/shift-components/shift-components.esm.js +1 -1
  303. package/dist/stencil-docs.json +1677 -12
  304. package/dist/templates/production-host/vehicle-service-history.html +14 -0
  305. package/dist/types/components/form-elements/branch-date-dropdown.d.ts +74 -0
  306. package/dist/types/components/form-elements/branch-date-picker.d.ts +174 -0
  307. package/dist/types/components/form-elements/branch-slot-dropdown.d.ts +6 -0
  308. package/dist/types/components/form-elements/branch-slot-picker.d.ts +27 -0
  309. package/dist/types/components/forms/defaults/mappers.d.ts +15 -9
  310. package/dist/types/components.d.ts +533 -6
  311. package/dist/types/features/form-hook/functions.d.ts +14 -0
  312. package/dist/types/global/lib/slot-day-rules.d.ts +25 -0
  313. package/dist/types/locales/vehicleLookup/serviceHistory/type.d.ts +2 -2
  314. package/dist/types/locales/vehicleLookup/warrantyTimeline/type.d.ts +4 -4
  315. package/dist/types/locales/vehicleLookup/wrapper-type.d.ts +2 -2
  316. package/package.json +6 -1
  317. package/dist/components/p-1fzw9lBq.js +0 -5
  318. package/dist/components/p-7Gq_FyNj.js +0 -5
  319. package/dist/components/p-8jIkK-Kb.js +0 -5
  320. package/dist/components/p-BUepGDZV.js +0 -5
  321. package/dist/components/p-B__72-PA.js +0 -5
  322. package/dist/components/p-Bb2xDuqh.js +0 -5
  323. package/dist/components/p-Bj3cvdzl.js +0 -5
  324. package/dist/components/p-BvMcY9Sk.js +0 -5
  325. package/dist/components/p-C-yTwaAA.js +0 -5
  326. package/dist/components/p-C8B9jarP.js +0 -5
  327. package/dist/components/p-CCounVqq.js +0 -5
  328. package/dist/components/p-CKwgX_v0.js +0 -5
  329. package/dist/components/p-CPBmhspv.js +0 -5
  330. package/dist/components/p-ClT5CzCZ.js +0 -5
  331. package/dist/components/p-DWjIts4C.js +0 -5
  332. package/dist/components/p-DeipsN8N.js +0 -5
  333. package/dist/components/p-DkagL-e-.js +0 -5
  334. package/dist/components/p-DtZM3yHS.js +0 -5
  335. package/dist/components/p-G7teNuSi.js +0 -5
  336. package/dist/components/p-_apNp6J3.js +0 -5
  337. package/dist/shift-components/p-12e295ba.entry.js +0 -5
  338. package/dist/shift-components/p-323ffb6e.entry.js +0 -5
  339. package/dist/shift-components/p-327fddd8.entry.js +0 -5
  340. package/dist/shift-components/p-34e9053b.entry.js +0 -5
  341. package/dist/shift-components/p-8374f629.entry.js +0 -5
  342. package/dist/shift-components/p-awXOnuq1.js +0 -5
  343. package/dist/shift-components/p-c25a6c0d.entry.js +0 -5
  344. package/dist/shift-components/p-dacdff2a.entry.js +0 -5
  345. package/dist/shift-components/p-hABirfUj.js +0 -5
  346. /package/dist/collection/templates/{vehicle-lookup → prototypes}/prototype-assets/extended-warranty/adp-logo.svg +0 -0
@@ -0,0 +1,1197 @@
1
+ /*!
2
+ * Built by ShiftSoftware
3
+ * Copyright (c)
4
+ */
5
+ import { Host, h } from "@stencil/core";
6
+ import cn from "../../global/lib/cn";
7
+ import { ArrowUpIcon } from "../../global/assets/arrow-up-icon";
8
+ import getCustomClassesForPortal from "../../global/lib/get-custom-classes-for-portal";
9
+ import { isDayBlocked, parseDateList, parseWeekdayList } from "../../global/lib/slot-day-rules";
10
+ import { getInputLocalization } from "../../features/form-hook/index";
11
+ import { FormInputLabel } from "./components/form-input-label";
12
+ import { FormErrorMessage } from "./components/form-error-message";
13
+ const FALLBACK_COPY = {
14
+ en: {
15
+ date: 'Pick a date',
16
+ time: 'Pick a time',
17
+ slots: 'slots',
18
+ back: 'Change date',
19
+ noTimes: 'Nothing left on this day',
20
+ closed: 'Closed on this day',
21
+ idle: 'Choose a branch first',
22
+ empty: 'No times available at this branch',
23
+ error: "Couldn't load available times",
24
+ retry: 'Try again',
25
+ choose: 'Choose date & time',
26
+ loading: 'Loading times…',
27
+ },
28
+ ar: {
29
+ date: 'اختر التاريخ',
30
+ time: 'اختر الوقت',
31
+ slots: 'موعداً',
32
+ back: 'تغيير التاريخ',
33
+ noTimes: 'لا توجد مواعيد في هذا اليوم',
34
+ closed: 'مغلق في هذا اليوم',
35
+ idle: 'اختر الفرع أولاً',
36
+ empty: 'لا توجد أوقات متاحة في هذا الفرع',
37
+ error: 'تعذّر تحميل الأوقات المتاحة',
38
+ retry: 'أعد المحاولة',
39
+ choose: 'اختر التاريخ والوقت',
40
+ loading: 'جارٍ تحميل الأوقات…',
41
+ },
42
+ ku: {
43
+ date: 'بەروارێک هەڵبژێرە',
44
+ time: 'کاتێک هەڵبژێرە',
45
+ slots: 'کات',
46
+ back: 'گۆڕینی بەروار',
47
+ noTimes: 'هیچ کاتێک نەماوە لەم ڕۆژەدا',
48
+ closed: 'داخراوە لەم ڕۆژەدا',
49
+ idle: 'سەرەتا لقێک هەڵبژێرە',
50
+ empty: 'هیچ کاتێکی بەردەست نییە لەم لقەدا',
51
+ error: 'نەتوانرا کاتە بەردەستەکان باربکرێن',
52
+ retry: 'دووبارە هەوڵ بدە',
53
+ choose: 'بەروار و کات هەڵبژێرە',
54
+ loading: 'کاتەکان باردەکرێن…',
55
+ },
56
+ ru: {
57
+ date: 'Выберите дату',
58
+ time: 'Выберите время',
59
+ slots: 'слотов',
60
+ back: 'Сменить дату',
61
+ noTimes: 'На этот день ничего не осталось',
62
+ closed: 'В этот день закрыто',
63
+ idle: 'Сначала выберите филиал',
64
+ empty: 'В этом филиале нет свободного времени',
65
+ error: 'Не удалось загрузить свободное время',
66
+ retry: 'Повторить',
67
+ choose: 'Выберите дату и время',
68
+ loading: 'Загрузка времени…',
69
+ },
70
+ };
71
+ /**
72
+ * Branch-aware booking slot field, month-calendar variant.
73
+ *
74
+ * Same contract and same data as `branch-slot-picker` — the same endpoint, the
75
+ * same `slotChange` payload, the same standalone-without-a-form behaviour. The
76
+ * difference is entirely in the panel: a month grid first, then that day's
77
+ * times, on a sliding track. Customers who have never used a horizontal day
78
+ * strip have used a month calendar, and the second step arrives already scoped
79
+ * to one day rather than sitting under the first.
80
+ *
81
+ * The two are meant to be interchangeable, so a deployment can pick whichever
82
+ * its audience reads faster without anything downstream changing.
83
+ */
84
+ export class BranchDatePicker {
85
+ constructor() {
86
+ /** Field name. Only meaningful when `form` is supplied. */
87
+ this.name = 'bookingDate';
88
+ /** How far ahead to ask. The endpoint caps its own response at 15 days. */
89
+ this.daysAhead = 30;
90
+ /** Gap between the trigger and the panel, matching shift-select's default. */
91
+ this.gap = 8;
92
+ /**
93
+ * Floor for the panel width on desktop. The panel is portaled to `<body>` and
94
+ * positioned fixed, so it is free to be wider than the field — and than the
95
+ * form around it — which is the point: seven columns stop reading as a
96
+ * calendar much below this, and form fields are routinely narrower.
97
+ */
98
+ this.minPanelWidth = 380;
99
+ /** Tallest the panel may get before its panes scroll. Also capped to the viewport. */
100
+ this.maxPanelHeight = 460;
101
+ this.isRequired = false;
102
+ this.isDisabled = false;
103
+ this.language = 'en';
104
+ this.localization = {};
105
+ this.status = 'idle';
106
+ this.days = [];
107
+ this.selectedDate = '';
108
+ this.selectedRaw = '';
109
+ this.isOpen = false;
110
+ this.dropdownAncestorClasses = '';
111
+ /**
112
+ * The day whose times are on the second pane. Kept apart from `selectedDate`
113
+ * so browsing the calendar and then dismissing the panel leaves the committed
114
+ * selection untouched.
115
+ */
116
+ this.draftDate = '';
117
+ this.step = 'date';
118
+ /** Month on screen as `YYYY-MM`, and which way the last change travelled. */
119
+ this.monthKey = '';
120
+ this.monthDirection = 1;
121
+ /**
122
+ * The response as it arrived, before the disable rules are layered on. Kept so
123
+ * a rule change re-decorates without a refetch.
124
+ */
125
+ this.fetchedDays = [];
126
+ this.dropdownEl = null;
127
+ this.lockedScrollY = 0;
128
+ this.boundKeyDown = (event) => this.handleKeyDown(event);
129
+ this.displayTime = (raw) => {
130
+ const total = this.minutesOf(raw);
131
+ const date = new Date(2000, 0, 1, Math.floor(total / 60), total % 60);
132
+ return new Intl.DateTimeFormat(this.intlLocales, { hour: 'numeric', minute: '2-digit' }).format(date);
133
+ };
134
+ this.formatDay = (date, options) => {
135
+ // Midday, not midnight: a midnight Date in a negative-offset zone rolls back
136
+ // a day, which silently mislabels every cell.
137
+ const [y, m, d] = date.split('-').map(x => parseInt(x, 10));
138
+ return new Intl.DateTimeFormat(this.intlLocales, options).format(new Date(y, m - 1, d, 12));
139
+ };
140
+ this.formatMonth = (monthKey) => {
141
+ if (!monthKey)
142
+ return '';
143
+ const [y, m] = monthKey.split('-').map(x => parseInt(x, 10));
144
+ return new Intl.DateTimeFormat(this.intlLocales, { month: 'long', year: 'numeric' }).format(new Date(y, m - 1, 1, 12));
145
+ };
146
+ /** 7 January 2024 was a Sunday, so it indexes weekdays without a lookup table. */
147
+ this.formatWeekday = (weekday) => {
148
+ return new Intl.DateTimeFormat(this.intlLocales, { weekday: 'short' }).format(new Date(2024, 0, 7 + weekday, 12));
149
+ };
150
+ this.setDropdownRef = (el) => {
151
+ this.dropdownEl = el;
152
+ };
153
+ /** Anchor to the trigger, flip up when space below is short. */
154
+ this.adjustDropdownPosition = () => {
155
+ const dropdown = this.dropdownEl;
156
+ const trigger = this.getTriggerEl();
157
+ if (!dropdown || !trigger)
158
+ return;
159
+ // Sheet mode is viewport-anchored; CSS owns it entirely.
160
+ if (this.isSheet)
161
+ return;
162
+ const rect = trigger.getBoundingClientRect();
163
+ // Scrolled out of sight — a panel floating over unrelated content is worse
164
+ // than no panel.
165
+ if (!this.isTriggerInView(rect)) {
166
+ this.isOpen = false;
167
+ return;
168
+ }
169
+ // clientWidth, not innerWidth: innerWidth includes the classic scrollbar, so
170
+ // measuring against it pushes the panel a scrollbar's width off the edge.
171
+ const viewportWidth = document.documentElement.clientWidth;
172
+ const width = Math.round(Math.min(Math.max(rect.width, this.minPanelWidth), viewportWidth - this.gap * 2));
173
+ dropdown.style.setProperty('--branch-date-width', `${width}px`);
174
+ const spaceBelow = window.innerHeight - rect.bottom - this.gap * 2;
175
+ const spaceAbove = rect.top - this.gap * 2;
176
+ const openUpwards = dropdown.offsetHeight > spaceBelow && spaceAbove > spaceBelow;
177
+ // The body is a constant height, so this only ever clips it in a viewport
178
+ // too short to hold the calendar — the panes scroll inside what is left.
179
+ const room = Math.max(220, Math.min(this.maxPanelHeight, openUpwards ? spaceAbove : spaceBelow));
180
+ dropdown.style.setProperty('--branch-date-max-height', `${room}px`);
181
+ // Keep it on-screen horizontally — the panel has a min-width, so a field
182
+ // near the right edge would otherwise hang off it.
183
+ const left = Math.max(this.gap, Math.min(rect.left, viewportWidth - width - this.gap));
184
+ dropdown.style.setProperty('--branch-date-left', `${left}px`);
185
+ // Pinned by whichever edge touches the field. Anchoring upwards by `bottom`
186
+ // rather than `top` means the animated body height cannot drag the panel
187
+ // across the trigger as it grows.
188
+ if (openUpwards) {
189
+ dropdown.style.setProperty('--branch-date-top', 'auto');
190
+ dropdown.style.setProperty('--branch-date-bottom', `${window.innerHeight - rect.top + this.gap}px`);
191
+ }
192
+ else {
193
+ dropdown.style.setProperty('--branch-date-top', `${rect.bottom + this.gap}px`);
194
+ dropdown.style.setProperty('--branch-date-bottom', 'auto');
195
+ }
196
+ };
197
+ this.handleResize = () => {
198
+ if (this.isOpen)
199
+ this.adjustDropdownPosition();
200
+ };
201
+ this.handleScroll = (event) => {
202
+ if (!this.isOpen)
203
+ return;
204
+ // The sheet does not move with the page, and the page is locked anyway.
205
+ if (this.isSheet)
206
+ return;
207
+ const target = event.target;
208
+ if (this.dropdownEl && (this.dropdownEl === target || this.dropdownEl.contains(target)))
209
+ return;
210
+ this.adjustDropdownPosition();
211
+ };
212
+ this.closeOnOutsideClick = (event) => {
213
+ const path = event.composedPath();
214
+ if (path.includes(this.el))
215
+ return;
216
+ if (this.dropdownEl && path.includes(this.dropdownEl))
217
+ return;
218
+ this.isOpen = false;
219
+ };
220
+ this.toggle = () => {
221
+ if (this.isOpen)
222
+ this.isOpen = false;
223
+ else if (this.status === 'error')
224
+ this.load();
225
+ else
226
+ this.openDropdown();
227
+ };
228
+ /** Months with nothing bookable in them are not worth walking into. */
229
+ this.handleMonth = (delta) => {
230
+ if (!this.monthKey)
231
+ return;
232
+ const [year, month] = this.monthKey.split('-').map(part => parseInt(part, 10));
233
+ const moved = new Date(year, month - 1 + delta, 1, 12);
234
+ const next = `${moved.getFullYear()}-${this.pad(moved.getMonth() + 1)}`;
235
+ const { min, max } = this.monthBounds;
236
+ if (next < min || next > max)
237
+ return;
238
+ this.monthDirection = delta < 0 ? -1 : 1;
239
+ this.monthKey = next;
240
+ };
241
+ this.handleDate = (date) => {
242
+ var _a;
243
+ if ((_a = this.days.find(day => day.date === date)) === null || _a === void 0 ? void 0 : _a.disabled)
244
+ return;
245
+ this.draftDate = date;
246
+ this.step = 'time';
247
+ };
248
+ this.handleBack = () => {
249
+ this.step = 'date';
250
+ // Coming back from a day in another month should land on that day's month,
251
+ // not on whatever the calendar was last scrolled to.
252
+ if (this.draftDate)
253
+ this.monthKey = this.draftDate.slice(0, 7);
254
+ };
255
+ this.handleTime = (raw) => {
256
+ this.selectedDate = raw.split(' ')[0];
257
+ this.selectedRaw = raw;
258
+ this.isOpen = false;
259
+ // The form pulls values — it calls getValue() on every subscribed element at
260
+ // submit time — so there is nothing to push. This only fires the public
261
+ // event, which is what standalone hosts listen to.
262
+ this.slotChange.emit({ date: this.selectedDate, raw, value: this.toFormValue(raw) });
263
+ };
264
+ }
265
+ componentWillLoad() {
266
+ var _a;
267
+ (_a = this.form) === null || _a === void 0 ? void 0 : _a.subscribe(this.name, this);
268
+ this.load();
269
+ }
270
+ componentDidLoad() {
271
+ document.addEventListener('click', this.closeOnOutsideClick);
272
+ document.addEventListener('keydown', this.boundKeyDown);
273
+ window.addEventListener('resize', this.handleResize);
274
+ window.addEventListener('scroll', this.handleScroll, true);
275
+ // The panel is portaled out of the form, so theme classes have to travel
276
+ // with it or it renders unstyled against the host page.
277
+ this.dropdownAncestorClasses = `${this.name}-date-picker ${getCustomClassesForPortal(this.el)}`;
278
+ }
279
+ disconnectedCallback() {
280
+ var _a, _b;
281
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
282
+ (_b = this.form) === null || _b === void 0 ? void 0 : _b.unsubscribe(this.name);
283
+ document.removeEventListener('click', this.closeOnOutsideClick);
284
+ document.removeEventListener('keydown', this.boundKeyDown);
285
+ window.removeEventListener('resize', this.handleResize);
286
+ window.removeEventListener('scroll', this.handleScroll, true);
287
+ // A teardown while the sheet is open would otherwise leave the page frozen.
288
+ this.releaseScroll();
289
+ }
290
+ onOpenChange(isOpen) {
291
+ // Only the sheet needs this. An anchored panel repositions on scroll and
292
+ // freezing the page under it would be wrong.
293
+ if (!this.isSheet)
294
+ return;
295
+ if (isOpen)
296
+ this.lockScroll();
297
+ else
298
+ this.releaseScroll();
299
+ }
300
+ /**
301
+ * Pinning the body position rather than just hiding overflow: on iOS,
302
+ * `overflow: hidden` alone still lets the page rubber-band behind the sheet.
303
+ */
304
+ lockScroll() {
305
+ if (document.body.style.position === 'fixed')
306
+ return;
307
+ this.lockedScrollY = window.scrollY;
308
+ Object.assign(document.body.style, { position: 'fixed', top: `-${this.lockedScrollY}px`, left: '0', right: '0', width: '100%' });
309
+ }
310
+ releaseScroll() {
311
+ if (document.body.style.position !== 'fixed')
312
+ return;
313
+ Object.assign(document.body.style, { position: '', top: '', left: '', right: '', width: '' });
314
+ window.scrollTo(0, this.lockedScrollY);
315
+ }
316
+ onRulesChange() {
317
+ var _a, _b, _c, _d;
318
+ this.days = this.applyDayRules(this.fetchedDays);
319
+ // The committed slot may have just become unbookable, and a draft pointing
320
+ // at a now-blocked day would leave the times pane empty with no way back.
321
+ if (this.selectedDate && ((_a = this.days.find(day => day.date === this.selectedDate)) === null || _a === void 0 ? void 0 : _a.disabled)) {
322
+ this.selectedDate = '';
323
+ this.selectedRaw = '';
324
+ }
325
+ if (!this.draftDate || ((_b = this.days.find(day => day.date === this.draftDate)) === null || _b === void 0 ? void 0 : _b.disabled)) {
326
+ this.draftDate = (_d = (_c = this.firstOpenDay()) === null || _c === void 0 ? void 0 : _c.date) !== null && _d !== void 0 ? _d : '';
327
+ this.step = 'date';
328
+ }
329
+ if (this.status === 'ready' && !this.days.some(day => !day.disabled))
330
+ this.status = 'empty';
331
+ else if (this.status === 'empty' && this.days.some(day => !day.disabled))
332
+ this.status = 'ready';
333
+ }
334
+ onTargetChange() {
335
+ // A different branch invalidates the whole selection, not just the times.
336
+ this.selectedDate = '';
337
+ this.selectedRaw = '';
338
+ this.draftDate = '';
339
+ this.step = 'date';
340
+ this.isOpen = false;
341
+ this.load();
342
+ }
343
+ /** FormElement contract. */
344
+ reset(newValue) {
345
+ var _a;
346
+ this.defaultValue = (_a = newValue) !== null && _a !== void 0 ? _a : '';
347
+ this.selectedDate = '';
348
+ this.selectedRaw = '';
349
+ this.draftDate = '';
350
+ this.step = 'date';
351
+ }
352
+ getValue() {
353
+ return this.selectedRaw ? this.toFormValue(this.selectedRaw) : this.defaultValue || '';
354
+ }
355
+ /** Lets a host force a refetch, e.g. after a token refresh. */
356
+ async refresh() {
357
+ this.load();
358
+ }
359
+ async openDropdown() {
360
+ var _a, _b, _c, _d;
361
+ if (this.status === 'idle')
362
+ return;
363
+ const landing = (_d = (_b = (_a = this.days.find(day => day.date === this.selectedDate && !day.disabled)) === null || _a === void 0 ? void 0 : _a.date) !== null && _b !== void 0 ? _b : (_c = this.firstOpenDay()) === null || _c === void 0 ? void 0 : _c.date) !== null && _d !== void 0 ? _d : '';
364
+ this.draftDate = landing;
365
+ this.monthKey = landing.slice(0, 7);
366
+ // Reopening a committed slot lands on the times, where the change is most
367
+ // likely to be; a first open has nothing to show there yet.
368
+ this.step = this.selectedRaw ? 'time' : 'date';
369
+ this.adjustDropdownPosition();
370
+ this.isOpen = true;
371
+ }
372
+ async closeDropdown() {
373
+ this.isOpen = false;
374
+ }
375
+ get isRtl() {
376
+ return this.language === 'ar' || this.language === 'ku';
377
+ }
378
+ get copy() {
379
+ var _a;
380
+ return (_a = FALLBACK_COPY[this.language]) !== null && _a !== void 0 ? _a : FALLBACK_COPY.en;
381
+ }
382
+ get intlLocales() {
383
+ // An array lets Intl fall back on its own when a locale is unavailable —
384
+ // ckb has patchy support in older Android WebViews.
385
+ if (this.language === 'ar')
386
+ return ['ar-IQ', 'ar', 'en-GB'];
387
+ if (this.language === 'ku')
388
+ return ['ckb-IQ', 'ckb', 'ar-IQ', 'en-GB'];
389
+ if (this.language === 'ru')
390
+ return ['ru-RU', 'en-GB'];
391
+ return ['en-GB'];
392
+ }
393
+ /**
394
+ * `0` Sunday … `6` Saturday. `getWeekInfo` is the only thing that knows the
395
+ * region's answer; it is missing on older WebViews, hence the guard and the
396
+ * Monday default the rest of Intl assumes.
397
+ */
398
+ get weekStart() {
399
+ var _a, _b;
400
+ if (this.weekStartsOn !== undefined && this.weekStartsOn !== null)
401
+ return ((+this.weekStartsOn % 7) + 7) % 7;
402
+ try {
403
+ const locale = new Intl.Locale(this.intlLocales[0]);
404
+ const info = (_b = (_a = locale.getWeekInfo) === null || _a === void 0 ? void 0 : _a.call(locale)) !== null && _b !== void 0 ? _b : locale.weekInfo;
405
+ // ISO numbering: 1 is Monday, 7 is Sunday.
406
+ if (info === null || info === void 0 ? void 0 : info.firstDay)
407
+ return info.firstDay % 7;
408
+ }
409
+ catch (_c) {
410
+ /* fall through to the default */
411
+ }
412
+ return 1;
413
+ }
414
+ pad(n) {
415
+ return String(n).padStart(2, '0');
416
+ }
417
+ get todayIso() {
418
+ const now = new Date();
419
+ return `${now.getFullYear()}-${this.pad(now.getMonth() + 1)}-${this.pad(now.getDate())}`;
420
+ }
421
+ /** `2026-08-13 09:00 AM` → minutes since midnight. */
422
+ minutesOf(raw) {
423
+ var _a, _b;
424
+ const parts = raw.split(' ');
425
+ const clock = (_a = parts[1]) !== null && _a !== void 0 ? _a : '00:00';
426
+ const meridiem = ((_b = parts[2]) !== null && _b !== void 0 ? _b : '').toUpperCase();
427
+ const [h, m] = clock.split(':').map(x => parseInt(x, 10) || 0);
428
+ let hour = h % 12;
429
+ if (meridiem === 'PM')
430
+ hour += 12;
431
+ return hour * 60 + m;
432
+ }
433
+ toFormValue(raw) {
434
+ const date = raw.split(' ')[0];
435
+ const total = this.minutesOf(raw);
436
+ return `${date}T${this.pad(Math.floor(total / 60))}:${this.pad(total % 60)}`;
437
+ }
438
+ queryUrl() {
439
+ if (!this.calendarApi || !this.companyId || !this.branchId || !this.departmentId || !this.brandId)
440
+ return null;
441
+ const from = new Date();
442
+ const to = new Date();
443
+ to.setDate(to.getDate() + this.daysAhead);
444
+ const iso = (d) => `${d.getFullYear()}-${this.pad(d.getMonth() + 1)}-${this.pad(d.getDate())}`;
445
+ const qs = new URLSearchParams({
446
+ from: iso(from),
447
+ to: iso(to),
448
+ companyId: this.companyId,
449
+ branchId: this.branchId,
450
+ departmentId: this.departmentId,
451
+ brandId: this.brandId,
452
+ });
453
+ return `${this.calendarApi}${this.calendarApi.includes('?') ? '&' : '?'}${qs.toString()}`;
454
+ }
455
+ /**
456
+ * Overlapping work periods of equal priority make the endpoint emit the same
457
+ * slot more than once, and a merged response is not necessarily ordered. Both
458
+ * are fixed here rather than in the panel, so anything reading `days` gets
459
+ * clean data.
460
+ */
461
+ normalise(raw) {
462
+ return raw
463
+ .filter(entry => entry && entry.Date && Array.isArray(entry.Times) && entry.Times.length)
464
+ .map(entry => ({
465
+ date: entry.Date,
466
+ times: Array.from(new Set(entry.Times)).sort((a, b) => this.minutesOf(a) - this.minutesOf(b)),
467
+ }))
468
+ .sort((a, b) => a.date.localeCompare(b.date));
469
+ }
470
+ /** Layers the disable rules over the response without discarding anything. */
471
+ applyDayRules(days) {
472
+ const weekdays = parseWeekdayList(this.disabledWeekdays);
473
+ const dates = parseDateList(this.disabledDates);
474
+ if (!weekdays.length && !dates.length)
475
+ return days.map(day => (Object.assign(Object.assign({}, day), { disabled: false })));
476
+ return days.map(day => (Object.assign(Object.assign({}, day), { disabled: isDayBlocked(day.date, weekdays, dates) })));
477
+ }
478
+ firstOpenDay() {
479
+ return this.days.find(day => !day.disabled);
480
+ }
481
+ lastOpenDay() {
482
+ return [...this.days].reverse().find(day => !day.disabled);
483
+ }
484
+ async load() {
485
+ var _a;
486
+ const url = this.queryUrl();
487
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
488
+ if (!url) {
489
+ this.status = 'idle';
490
+ this.days = [];
491
+ return;
492
+ }
493
+ this.abortController = new AbortController();
494
+ this.status = 'loading';
495
+ try {
496
+ const response = await fetch(url, {
497
+ signal: this.abortController.signal,
498
+ headers: { 'Accept-Language': this.language },
499
+ });
500
+ if (!response.ok)
501
+ throw new Error(`calendar ${response.status}`);
502
+ this.fetchedDays = this.normalise(await response.json());
503
+ this.days = this.applyDayRules(this.fetchedDays);
504
+ const firstOpen = this.firstOpenDay();
505
+ // Every day blocked reads to a customer exactly as no days at all, so it
506
+ // gets the empty copy rather than a month of dead cells.
507
+ if (!firstOpen) {
508
+ this.status = 'empty';
509
+ return;
510
+ }
511
+ const preset = this.days.find(day => !day.disabled && this.defaultValue && this.defaultValue.startsWith(day.date));
512
+ this.draftDate = (preset !== null && preset !== void 0 ? preset : firstOpen).date;
513
+ this.monthKey = this.draftDate.slice(0, 7);
514
+ this.status = 'ready';
515
+ }
516
+ catch (error) {
517
+ if ((error === null || error === void 0 ? void 0 : error.name) === 'AbortError')
518
+ return;
519
+ this.status = 'error';
520
+ }
521
+ }
522
+ getTriggerEl() {
523
+ return this.el.getElementsByClassName('form-input-select')[0];
524
+ }
525
+ isTriggerInView(rect) {
526
+ return rect.bottom > 0 && rect.top < window.innerHeight && rect.right > 0 && rect.left < window.innerWidth;
527
+ }
528
+ /**
529
+ * Below this width the panel is a bottom sheet pinned to the viewport, so it
530
+ * is not anchored to anything and none of the positioning below applies. Kept
531
+ * in sync with the media query in branch-date-dropdown.css.
532
+ */
533
+ get isSheet() {
534
+ return typeof window !== 'undefined' && window.matchMedia('(max-width: 599px)').matches;
535
+ }
536
+ handleKeyDown(event) {
537
+ if (!this.isOpen)
538
+ return;
539
+ // Escape steps back through the panel before it dismisses it — the times
540
+ // pane is a drill-down, so leaving the field entirely would overshoot.
541
+ if (event.key !== 'Escape')
542
+ return;
543
+ if (this.step === 'time')
544
+ this.step = 'date';
545
+ else
546
+ this.isOpen = false;
547
+ }
548
+ get monthBounds() {
549
+ var _a, _b, _c, _d;
550
+ return {
551
+ min: ((_b = (_a = this.firstOpenDay()) === null || _a === void 0 ? void 0 : _a.date) !== null && _b !== void 0 ? _b : '').slice(0, 7),
552
+ max: ((_d = (_c = this.lastOpenDay()) === null || _c === void 0 ? void 0 : _c.date) !== null && _d !== void 0 ? _d : '').slice(0, 7),
553
+ };
554
+ }
555
+ /** What the trigger shows: the committed slot, or why it cannot be opened. */
556
+ triggerText() {
557
+ if (this.status === 'idle')
558
+ return this.copy.idle;
559
+ if (this.status === 'loading')
560
+ return this.copy.loading;
561
+ if (this.status === 'empty')
562
+ return this.copy.empty;
563
+ if (this.status === 'error')
564
+ return this.copy.error;
565
+ if (!this.selectedRaw)
566
+ return '';
567
+ const day = this.formatDay(this.selectedDate, { weekday: 'short', day: 'numeric', month: 'short' });
568
+ return `${day} · ${this.displayTime(this.selectedRaw)}`;
569
+ }
570
+ render() {
571
+ var _a, _b, _c, _d, _e;
572
+ // Inside a form, required/disabled/error come from the form's own state, so
573
+ // this field validates and reports exactly like every other one. Standalone,
574
+ // there is no form to ask and the props stand on their own.
575
+ const state = (_a = this.form) === null || _a === void 0 ? void 0 : _a.getInputState(this.name);
576
+ const localised = this.form ? getInputLocalization(this, state === null || state === void 0 ? void 0 : state.meta, state === null || state === void 0 ? void 0 : state.errorMessage) : null;
577
+ const label = (localised === null || localised === void 0 ? void 0 : localised.label) || ((_c = (_b = this.localization) === null || _b === void 0 ? void 0 : _b[this.language]) === null || _c === void 0 ? void 0 : _c.label) || this.label;
578
+ const placeholder = (localised === null || localised === void 0 ? void 0 : localised.placeholder) || ((_e = (_d = this.localization) === null || _d === void 0 ? void 0 : _d[this.language]) === null || _e === void 0 ? void 0 : _e.placeholder) || this.copy.choose;
579
+ const isRequired = (state === null || state === void 0 ? void 0 : state.isRequired) || this.isRequired;
580
+ // Idle/loading/empty cannot be opened; error can, because the trigger then
581
+ // doubles as the retry affordance.
582
+ const blocked = this.isDisabled || (state === null || state === void 0 ? void 0 : state.disabled) || this.status === 'idle' || this.status === 'loading' || this.status === 'empty';
583
+ const { min, max } = this.monthBounds;
584
+ const dropdownProps = {
585
+ name: this.name,
586
+ days: this.days,
587
+ copy: this.copy,
588
+ status: this.status,
589
+ isOpen: this.isOpen,
590
+ idleText: this.copy.idle,
591
+ step: this.step,
592
+ today: this.todayIso,
593
+ weekStart: this.weekStart,
594
+ monthKey: this.monthKey,
595
+ monthDirection: this.monthDirection,
596
+ canGoPrev: !!this.monthKey && this.monthKey > min,
597
+ canGoNext: !!this.monthKey && this.monthKey < max,
598
+ activeDate: this.draftDate,
599
+ selectedRaw: this.selectedRaw,
600
+ handleMonth: this.handleMonth,
601
+ handleDate: this.handleDate,
602
+ handleTime: this.handleTime,
603
+ handleBack: this.handleBack,
604
+ handleRetry: () => this.load(),
605
+ handleDismiss: () => (this.isOpen = false),
606
+ formatDay: this.formatDay,
607
+ formatMonth: this.formatMonth,
608
+ formatWeekday: this.formatWeekday,
609
+ displayTime: this.displayTime,
610
+ setElementRef: this.setDropdownRef,
611
+ direction: this.isRtl ? 'rtl' : 'ltr',
612
+ };
613
+ return (h(Host, { key: '6cf14a9b79e19272e42b5ab2fbefd14a57787bc5', translate: "no" }, h("label", { key: '6cce5fb1d4dcaed2265d1e7816f6cd820d0d5d3b', part: `${this.name}`, id: this.wrapperId, class: cn('form-input-label-container', this.wrapperClass, { disabled: blocked }) }, h(FormInputLabel, { key: 'c43d00c631b979b4f5674772b9faa1cd9b95be9a', name: this.name, label: label, isRequired: isRequired }), h("div", { key: '177a6ba1c45531a41cc35fe8ac3b790f1c2022d9', part: `${this.name}-container form-input-container`, class: cn('form-input-container', { open: this.isOpen, disabled: blocked }) }, h("input", { key: '18ae12a635aa249ca3f17f2667e451d5fa508d52', type: "text", readOnly: true, disabled: blocked, value: this.triggerText(), placeholder: placeholder, onClick: this.toggle, part: `${this.name}-input-select form-input-select`, class: "form-input-style form-input-select branch-date-trigger" }), h("div", { key: '6990d22fb601d9253db9c5d94c0aaa45383b1441', part: `${this.name}-select-icon-container form-input-select-icon-container`, class: "form-input-select-icon-container" }, h(ArrowUpIcon, { key: '9728f5b499eb506ada107b7cb8eccaa7017bbf85', part: `${this.name}-arrow-icon select-arrow`, class: "form-input-select-icon pointer-events-none! arrow cursor-pointer" })),
614
+ // Stencil only bundles a lazily-portaled component if it also sees
615
+ // the tag in a template. Same guard shift-select uses.
616
+ // @ts-ignore
617
+ false && h("branch-date-dropdown", { key: '67ac2f94834ed15cc40f3c20796779f2d930ab21' }), h("shift-portal", { key: '670754237059fb71f55834b5f25b4575d8094383', tag: "branch-date-dropdown", inheritedClasses: this.dropdownAncestorClasses, componentProps: dropdownProps })), h(FormErrorMessage, { key: '6813b316028e062a518cbd05eaf69b7a114ab36c', name: this.name, isError: !!(state === null || state === void 0 ? void 0 : state.isError), errorMessage: (localised === null || localised === void 0 ? void 0 : localised.errorTextMessage) || '' }))));
618
+ }
619
+ static get is() { return "branch-date-picker"; }
620
+ static get originalStyleUrls() {
621
+ return {
622
+ "$": ["branch-date-picker.css"]
623
+ };
624
+ }
625
+ static get styleUrls() {
626
+ return {
627
+ "$": ["branch-date-picker.css"]
628
+ };
629
+ }
630
+ static get properties() {
631
+ return {
632
+ "name": {
633
+ "type": "string",
634
+ "mutable": false,
635
+ "complexType": {
636
+ "original": "string",
637
+ "resolved": "string",
638
+ "references": {}
639
+ },
640
+ "required": false,
641
+ "optional": false,
642
+ "docs": {
643
+ "tags": [],
644
+ "text": "Field name. Only meaningful when `form` is supplied."
645
+ },
646
+ "getter": false,
647
+ "setter": false,
648
+ "reflect": false,
649
+ "attribute": "name",
650
+ "defaultValue": "'bookingDate'"
651
+ },
652
+ "form": {
653
+ "type": "unknown",
654
+ "mutable": false,
655
+ "complexType": {
656
+ "original": "FormHook<any>",
657
+ "resolved": "FormHook<any>",
658
+ "references": {
659
+ "FormHook": {
660
+ "location": "import",
661
+ "path": "~features/form-hook/form-hook",
662
+ "id": "src/features/form-hook/form-hook.ts::FormHook",
663
+ "referenceLocation": "FormHook"
664
+ }
665
+ }
666
+ },
667
+ "required": false,
668
+ "optional": true,
669
+ "docs": {
670
+ "tags": [],
671
+ "text": "Optional \u2014 omit for standalone use and listen to `slotChange` instead."
672
+ },
673
+ "getter": false,
674
+ "setter": false
675
+ },
676
+ "calendarApi": {
677
+ "type": "string",
678
+ "mutable": false,
679
+ "complexType": {
680
+ "original": "string",
681
+ "resolved": "string",
682
+ "references": {}
683
+ },
684
+ "required": false,
685
+ "optional": false,
686
+ "docs": {
687
+ "tags": [],
688
+ "text": "Full URL of the calendar endpoint, e.g. `https://\u2026/api/public/calendar`."
689
+ },
690
+ "getter": false,
691
+ "setter": false,
692
+ "reflect": false,
693
+ "attribute": "calendar-api"
694
+ },
695
+ "companyId": {
696
+ "type": "string",
697
+ "mutable": false,
698
+ "complexType": {
699
+ "original": "string",
700
+ "resolved": "string",
701
+ "references": {}
702
+ },
703
+ "required": false,
704
+ "optional": false,
705
+ "docs": {
706
+ "tags": [],
707
+ "text": "Integration ids. The field stays idle until all four are present."
708
+ },
709
+ "getter": false,
710
+ "setter": false,
711
+ "reflect": false,
712
+ "attribute": "company-id"
713
+ },
714
+ "branchId": {
715
+ "type": "string",
716
+ "mutable": false,
717
+ "complexType": {
718
+ "original": "string",
719
+ "resolved": "string",
720
+ "references": {}
721
+ },
722
+ "required": false,
723
+ "optional": false,
724
+ "docs": {
725
+ "tags": [],
726
+ "text": ""
727
+ },
728
+ "getter": false,
729
+ "setter": false,
730
+ "reflect": false,
731
+ "attribute": "branch-id"
732
+ },
733
+ "departmentId": {
734
+ "type": "string",
735
+ "mutable": false,
736
+ "complexType": {
737
+ "original": "string",
738
+ "resolved": "string",
739
+ "references": {}
740
+ },
741
+ "required": false,
742
+ "optional": false,
743
+ "docs": {
744
+ "tags": [],
745
+ "text": ""
746
+ },
747
+ "getter": false,
748
+ "setter": false,
749
+ "reflect": false,
750
+ "attribute": "department-id"
751
+ },
752
+ "brandId": {
753
+ "type": "string",
754
+ "mutable": false,
755
+ "complexType": {
756
+ "original": "string",
757
+ "resolved": "string",
758
+ "references": {}
759
+ },
760
+ "required": false,
761
+ "optional": false,
762
+ "docs": {
763
+ "tags": [],
764
+ "text": ""
765
+ },
766
+ "getter": false,
767
+ "setter": false,
768
+ "reflect": false,
769
+ "attribute": "brand-id"
770
+ },
771
+ "daysAhead": {
772
+ "type": "number",
773
+ "mutable": false,
774
+ "complexType": {
775
+ "original": "number",
776
+ "resolved": "number",
777
+ "references": {}
778
+ },
779
+ "required": false,
780
+ "optional": false,
781
+ "docs": {
782
+ "tags": [],
783
+ "text": "How far ahead to ask. The endpoint caps its own response at 15 days."
784
+ },
785
+ "getter": false,
786
+ "setter": false,
787
+ "reflect": false,
788
+ "attribute": "days-ahead",
789
+ "defaultValue": "30"
790
+ },
791
+ "disabledWeekdays": {
792
+ "type": "string",
793
+ "mutable": false,
794
+ "complexType": {
795
+ "original": "string | number[]",
796
+ "resolved": "number[] | string",
797
+ "references": {}
798
+ },
799
+ "required": false,
800
+ "optional": true,
801
+ "docs": {
802
+ "tags": [],
803
+ "text": "Weekdays the branch never books on, `0` Sunday \u2026 `6` Saturday. Accepts an\narray or a `\"5,6\"` string. Matching days stay on the grid, struck through,\nrather than being dropped \u2014 see `~lib/slot-day-rules`."
804
+ },
805
+ "getter": false,
806
+ "setter": false,
807
+ "reflect": false,
808
+ "attribute": "disabled-weekdays"
809
+ },
810
+ "disabledDates": {
811
+ "type": "string",
812
+ "mutable": false,
813
+ "complexType": {
814
+ "original": "string | string[]",
815
+ "resolved": "string | string[]",
816
+ "references": {}
817
+ },
818
+ "required": false,
819
+ "optional": true,
820
+ "docs": {
821
+ "tags": [],
822
+ "text": "One-off blackout dates as `YYYY-MM-DD`, same accepted shapes as above."
823
+ },
824
+ "getter": false,
825
+ "setter": false,
826
+ "reflect": false,
827
+ "attribute": "disabled-dates"
828
+ },
829
+ "weekStartsOn": {
830
+ "type": "number",
831
+ "mutable": false,
832
+ "complexType": {
833
+ "original": "number",
834
+ "resolved": "number",
835
+ "references": {}
836
+ },
837
+ "required": false,
838
+ "optional": true,
839
+ "docs": {
840
+ "tags": [],
841
+ "text": "First column of the grid, `0` Sunday \u2026 `6` Saturday. Left unset it comes\nfrom the active locale, which is right far more often than any constant."
842
+ },
843
+ "getter": false,
844
+ "setter": false,
845
+ "reflect": false,
846
+ "attribute": "week-starts-on"
847
+ },
848
+ "gap": {
849
+ "type": "number",
850
+ "mutable": false,
851
+ "complexType": {
852
+ "original": "number",
853
+ "resolved": "number",
854
+ "references": {}
855
+ },
856
+ "required": false,
857
+ "optional": false,
858
+ "docs": {
859
+ "tags": [],
860
+ "text": "Gap between the trigger and the panel, matching shift-select's default."
861
+ },
862
+ "getter": false,
863
+ "setter": false,
864
+ "reflect": false,
865
+ "attribute": "gap",
866
+ "defaultValue": "8"
867
+ },
868
+ "minPanelWidth": {
869
+ "type": "number",
870
+ "mutable": false,
871
+ "complexType": {
872
+ "original": "number",
873
+ "resolved": "number",
874
+ "references": {}
875
+ },
876
+ "required": false,
877
+ "optional": false,
878
+ "docs": {
879
+ "tags": [],
880
+ "text": "Floor for the panel width on desktop. The panel is portaled to `<body>` and\npositioned fixed, so it is free to be wider than the field \u2014 and than the\nform around it \u2014 which is the point: seven columns stop reading as a\ncalendar much below this, and form fields are routinely narrower."
881
+ },
882
+ "getter": false,
883
+ "setter": false,
884
+ "reflect": false,
885
+ "attribute": "min-panel-width",
886
+ "defaultValue": "380"
887
+ },
888
+ "maxPanelHeight": {
889
+ "type": "number",
890
+ "mutable": false,
891
+ "complexType": {
892
+ "original": "number",
893
+ "resolved": "number",
894
+ "references": {}
895
+ },
896
+ "required": false,
897
+ "optional": false,
898
+ "docs": {
899
+ "tags": [],
900
+ "text": "Tallest the panel may get before its panes scroll. Also capped to the viewport."
901
+ },
902
+ "getter": false,
903
+ "setter": false,
904
+ "reflect": false,
905
+ "attribute": "max-panel-height",
906
+ "defaultValue": "460"
907
+ },
908
+ "label": {
909
+ "type": "string",
910
+ "mutable": false,
911
+ "complexType": {
912
+ "original": "string",
913
+ "resolved": "string",
914
+ "references": {}
915
+ },
916
+ "required": false,
917
+ "optional": true,
918
+ "docs": {
919
+ "tags": [],
920
+ "text": ""
921
+ },
922
+ "getter": false,
923
+ "setter": false,
924
+ "reflect": false,
925
+ "attribute": "label"
926
+ },
927
+ "wrapperId": {
928
+ "type": "string",
929
+ "mutable": false,
930
+ "complexType": {
931
+ "original": "string",
932
+ "resolved": "string",
933
+ "references": {}
934
+ },
935
+ "required": false,
936
+ "optional": false,
937
+ "docs": {
938
+ "tags": [],
939
+ "text": ""
940
+ },
941
+ "getter": false,
942
+ "setter": false,
943
+ "reflect": false,
944
+ "attribute": "wrapper-id"
945
+ },
946
+ "wrapperClass": {
947
+ "type": "string",
948
+ "mutable": false,
949
+ "complexType": {
950
+ "original": "string",
951
+ "resolved": "string",
952
+ "references": {}
953
+ },
954
+ "required": false,
955
+ "optional": false,
956
+ "docs": {
957
+ "tags": [],
958
+ "text": ""
959
+ },
960
+ "getter": false,
961
+ "setter": false,
962
+ "reflect": false,
963
+ "attribute": "wrapper-class"
964
+ },
965
+ "isRequired": {
966
+ "type": "boolean",
967
+ "mutable": false,
968
+ "complexType": {
969
+ "original": "boolean",
970
+ "resolved": "boolean",
971
+ "references": {}
972
+ },
973
+ "required": false,
974
+ "optional": false,
975
+ "docs": {
976
+ "tags": [],
977
+ "text": ""
978
+ },
979
+ "getter": false,
980
+ "setter": false,
981
+ "reflect": false,
982
+ "attribute": "is-required",
983
+ "defaultValue": "false"
984
+ },
985
+ "isDisabled": {
986
+ "type": "boolean",
987
+ "mutable": false,
988
+ "complexType": {
989
+ "original": "boolean",
990
+ "resolved": "boolean",
991
+ "references": {}
992
+ },
993
+ "required": false,
994
+ "optional": false,
995
+ "docs": {
996
+ "tags": [],
997
+ "text": ""
998
+ },
999
+ "getter": false,
1000
+ "setter": false,
1001
+ "reflect": false,
1002
+ "attribute": "is-disabled",
1003
+ "defaultValue": "false"
1004
+ },
1005
+ "language": {
1006
+ "type": "string",
1007
+ "mutable": false,
1008
+ "complexType": {
1009
+ "original": "LanguageKeys",
1010
+ "resolved": "\"ar\" | \"en\" | \"ku\" | \"ru\"",
1011
+ "references": {
1012
+ "LanguageKeys": {
1013
+ "location": "import",
1014
+ "path": "~features/multi-lingual",
1015
+ "id": "src/features/multi-lingual/index.ts::LanguageKeys",
1016
+ "referenceLocation": "LanguageKeys"
1017
+ }
1018
+ }
1019
+ },
1020
+ "required": false,
1021
+ "optional": false,
1022
+ "docs": {
1023
+ "tags": [],
1024
+ "text": ""
1025
+ },
1026
+ "getter": false,
1027
+ "setter": false,
1028
+ "reflect": false,
1029
+ "attribute": "language",
1030
+ "defaultValue": "'en'"
1031
+ },
1032
+ "localization": {
1033
+ "type": "unknown",
1034
+ "mutable": false,
1035
+ "complexType": {
1036
+ "original": "FormInputLocalization",
1037
+ "resolved": "T",
1038
+ "references": {
1039
+ "FormInputLocalization": {
1040
+ "location": "import",
1041
+ "path": "~features/form-hook",
1042
+ "id": "src/features/form-hook/index.ts::FormInputLocalization",
1043
+ "referenceLocation": "FormInputLocalization"
1044
+ }
1045
+ }
1046
+ },
1047
+ "required": false,
1048
+ "optional": true,
1049
+ "docs": {
1050
+ "tags": [],
1051
+ "text": ""
1052
+ },
1053
+ "getter": false,
1054
+ "setter": false,
1055
+ "defaultValue": "{}"
1056
+ },
1057
+ "defaultValue": {
1058
+ "type": "string",
1059
+ "mutable": true,
1060
+ "complexType": {
1061
+ "original": "string",
1062
+ "resolved": "string",
1063
+ "references": {}
1064
+ },
1065
+ "required": false,
1066
+ "optional": true,
1067
+ "docs": {
1068
+ "tags": [],
1069
+ "text": "Preselects a slot, in the same `YYYY-MM-DDTHH:mm` form the field emits."
1070
+ },
1071
+ "getter": false,
1072
+ "setter": false,
1073
+ "reflect": false,
1074
+ "attribute": "default-value"
1075
+ }
1076
+ };
1077
+ }
1078
+ static get states() {
1079
+ return {
1080
+ "status": {},
1081
+ "days": {},
1082
+ "selectedDate": {},
1083
+ "selectedRaw": {},
1084
+ "isOpen": {},
1085
+ "dropdownAncestorClasses": {},
1086
+ "draftDate": {},
1087
+ "step": {},
1088
+ "monthKey": {},
1089
+ "monthDirection": {}
1090
+ };
1091
+ }
1092
+ static get events() {
1093
+ return [{
1094
+ "method": "slotChange",
1095
+ "name": "slotChange",
1096
+ "bubbles": true,
1097
+ "cancelable": true,
1098
+ "composed": true,
1099
+ "docs": {
1100
+ "tags": [],
1101
+ "text": "Fires on every confirmed day+time selection. The standalone contract."
1102
+ },
1103
+ "complexType": {
1104
+ "original": "BranchSlotSelection",
1105
+ "resolved": "BranchSlotSelection",
1106
+ "references": {
1107
+ "BranchSlotSelection": {
1108
+ "location": "import",
1109
+ "path": "./branch-slot-picker",
1110
+ "id": "src/components/form-elements/branch-slot-picker.tsx::BranchSlotSelection",
1111
+ "referenceLocation": "BranchSlotSelection"
1112
+ }
1113
+ }
1114
+ }
1115
+ }];
1116
+ }
1117
+ static get methods() {
1118
+ return {
1119
+ "refresh": {
1120
+ "complexType": {
1121
+ "signature": "() => Promise<void>",
1122
+ "parameters": [],
1123
+ "references": {
1124
+ "Promise": {
1125
+ "location": "global",
1126
+ "id": "global::Promise"
1127
+ }
1128
+ },
1129
+ "return": "Promise<void>"
1130
+ },
1131
+ "docs": {
1132
+ "text": "Lets a host force a refetch, e.g. after a token refresh.",
1133
+ "tags": []
1134
+ }
1135
+ },
1136
+ "openDropdown": {
1137
+ "complexType": {
1138
+ "signature": "() => Promise<void>",
1139
+ "parameters": [],
1140
+ "references": {
1141
+ "Promise": {
1142
+ "location": "global",
1143
+ "id": "global::Promise"
1144
+ }
1145
+ },
1146
+ "return": "Promise<void>"
1147
+ },
1148
+ "docs": {
1149
+ "text": "",
1150
+ "tags": []
1151
+ }
1152
+ },
1153
+ "closeDropdown": {
1154
+ "complexType": {
1155
+ "signature": "() => Promise<void>",
1156
+ "parameters": [],
1157
+ "references": {
1158
+ "Promise": {
1159
+ "location": "global",
1160
+ "id": "global::Promise"
1161
+ }
1162
+ },
1163
+ "return": "Promise<void>"
1164
+ },
1165
+ "docs": {
1166
+ "text": "",
1167
+ "tags": []
1168
+ }
1169
+ }
1170
+ };
1171
+ }
1172
+ static get elementRef() { return "el"; }
1173
+ static get watchers() {
1174
+ return [{
1175
+ "propName": "isOpen",
1176
+ "methodName": "onOpenChange"
1177
+ }, {
1178
+ "propName": "disabledWeekdays",
1179
+ "methodName": "onRulesChange"
1180
+ }, {
1181
+ "propName": "disabledDates",
1182
+ "methodName": "onRulesChange"
1183
+ }, {
1184
+ "propName": "branchId",
1185
+ "methodName": "onTargetChange"
1186
+ }, {
1187
+ "propName": "departmentId",
1188
+ "methodName": "onTargetChange"
1189
+ }, {
1190
+ "propName": "brandId",
1191
+ "methodName": "onTargetChange"
1192
+ }, {
1193
+ "propName": "companyId",
1194
+ "methodName": "onTargetChange"
1195
+ }];
1196
+ }
1197
+ }