adp-web-components 0.3.19 → 0.3.21

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 (339) hide show
  1. package/dist/cjs/{branch-slot-dropdown_15.cjs.entry.js → branch-date-dropdown_17.cjs.entry.js} +961 -70
  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 +19 -17
  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-COlPGX7F.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-rWhci9Es.js} +1 -1
  13. package/dist/cjs/{get-mock-files-D0TNQtTV.js → get-mock-files-Cceb_318.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 +1 -1
  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 +1 -1
  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.js +1 -1
  41. package/dist/collection/components/components/shift-checkbox.js +1 -1
  42. package/dist/collection/components/components/shift-portal.css +1 -1
  43. package/dist/collection/components/components/shift-select-dropdown.js +2 -2
  44. package/dist/collection/components/components/shift-select.js +3 -3
  45. package/dist/collection/components/components/shift-slider.js +1 -1
  46. package/dist/collection/components/components/shift-switch.js +1 -1
  47. package/dist/collection/components/components/shift-tab-content.css +1 -1
  48. package/dist/collection/components/components/shift-tab-content.js +1 -1
  49. package/dist/collection/components/components/shift-tabs.css +1 -1
  50. package/dist/collection/components/components/shift-tabs.js +2 -2
  51. package/dist/collection/components/form-elements/branch-date-dropdown.css +1 -0
  52. package/dist/collection/components/form-elements/branch-date-dropdown.js +682 -0
  53. package/dist/collection/components/form-elements/branch-date-picker.css +1 -0
  54. package/dist/collection/components/form-elements/branch-date-picker.js +1197 -0
  55. package/dist/collection/components/form-elements/branch-slot-dropdown.css +1 -1
  56. package/dist/collection/components/form-elements/branch-slot-dropdown.js +11 -6
  57. package/dist/collection/components/form-elements/branch-slot-picker.css +1 -1
  58. package/dist/collection/components/form-elements/branch-slot-picker.js +166 -18
  59. package/dist/collection/components/form-elements/form-checkbox.js +1 -1
  60. package/dist/collection/components/form-elements/form-date-picker-legacy.js +4 -4
  61. package/dist/collection/components/form-elements/form-dialog.css +1 -1
  62. package/dist/collection/components/form-elements/form-dialog.js +1 -1
  63. package/dist/collection/components/form-elements/form-file.js +2 -2
  64. package/dist/collection/components/form-elements/form-input.js +6 -4
  65. package/dist/collection/components/form-elements/form-inputs.css +1 -1
  66. package/dist/collection/components/form-elements/form-phone-number.js +4 -2
  67. package/dist/collection/components/form-elements/form-picker-input.js +6 -4
  68. package/dist/collection/components/form-elements/form-shadow-input.js +1 -1
  69. package/dist/collection/components/form-elements/form-stepper-control.js +2 -2
  70. package/dist/collection/components/form-elements/form-stepper-submit.js +2 -2
  71. package/dist/collection/components/form-elements/form-stepper.js +1 -1
  72. package/dist/collection/components/form-elements/form-structure-error.js +1 -1
  73. package/dist/collection/components/form-elements/form-structure.js +3 -2
  74. package/dist/collection/components/form-elements/form-submit.js +2 -2
  75. package/dist/collection/components/form-elements/form-switch.js +1 -1
  76. package/dist/collection/components/form-elements/form-text-area.js +6 -4
  77. package/dist/collection/components/form-elements/form-time-picker-legacy.js +5 -5
  78. package/dist/collection/components/form-elements/form-vin-input.js +6 -4
  79. package/dist/collection/components/forms/defaults/mappers.js +54 -18
  80. package/dist/collection/components/forms/defaults/style.css +1 -1
  81. package/dist/collection/components/forms/general-form.js +2 -2
  82. package/dist/collection/components/forms/general-inquiry.js +2 -2
  83. package/dist/collection/components/forms/service-booking.js +2 -2
  84. package/dist/collection/components/forms/ssc-lookup.js +2 -2
  85. package/dist/collection/components/forms/test-drive.js +2 -2
  86. package/dist/collection/components/forms/vehicle-quotation/themes.css +1 -1
  87. package/dist/collection/components/forms/vehicle-quotation.js +15 -16
  88. package/dist/collection/components/part-lookup/dead-stock-lookup.css +1 -1
  89. package/dist/collection/components/part-lookup/dead-stock-lookup.js +2 -2
  90. package/dist/collection/components/part-lookup/distributor-lookup.css +1 -1
  91. package/dist/collection/components/part-lookup/distributor-lookup.js +2 -2
  92. package/dist/collection/components/part-lookup/manufacturer-lookup.css +1 -1
  93. package/dist/collection/components/part-lookup/manufacturer-part-lookup.css +1 -1
  94. package/dist/collection/components/part-lookup/manufacturer-part-lookup.js +1 -1
  95. package/dist/collection/components/part-lookup/part-lookup.css +1 -1
  96. package/dist/collection/components/vehicle-lookup/vehicle-accessories.css +1 -1
  97. package/dist/collection/components/vehicle-lookup/vehicle-accessories.js +2 -2
  98. package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.css +1 -1
  99. package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.js +5 -5
  100. package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.css +1 -1
  101. package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.js +6 -6
  102. package/dist/collection/components/vehicle-lookup/vehicle-lookup.css +1 -1
  103. package/dist/collection/components/vehicle-lookup/vehicle-paint-thickness.css +1 -1
  104. package/dist/collection/components/vehicle-lookup/vehicle-sale-information.css +1 -1
  105. package/dist/collection/components/vehicle-lookup/vehicle-sale-information.js +2 -2
  106. package/dist/collection/components/vehicle-lookup/vehicle-service-history.css +1 -1
  107. package/dist/collection/components/vehicle-lookup/vehicle-service-history.js +1 -1
  108. package/dist/collection/components/vehicle-lookup/vehicle-specification.css +1 -1
  109. package/dist/collection/components/vehicle-lookup/vehicle-specification.js +1 -1
  110. package/dist/collection/components/vehicle-lookup/vehicle-warranty-details.css +1 -1
  111. package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.css +1 -1
  112. package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.js +1 -1
  113. package/dist/collection/components/vin-extractor/vin-extractor.css +1 -1
  114. package/dist/collection/components/vin-extractor/vin-extractor.js +1 -1
  115. package/dist/collection/features/form-hook/functions.js +42 -18
  116. package/dist/collection/global/lib/slot-day-rules.js +65 -0
  117. package/dist/collection/templates/assets/favicon.svg +17 -0
  118. package/dist/collection/templates/forms/docs-content/params.js +1199 -0
  119. package/dist/collection/templates/forms/docs-content/structure.js +1153 -0
  120. package/dist/collection/templates/forms/docs-content/theming.js +1240 -0
  121. package/dist/collection/templates/harness.js +595 -84
  122. package/dist/collection/templates/highlight.js +194 -0
  123. package/dist/collection/templates/nav.js +320 -0
  124. package/dist/collection/templates/site-header.js +642 -0
  125. package/dist/collection/templates/site-locales.js +771 -0
  126. package/dist/components/branch-date-dropdown.d.ts +11 -0
  127. package/dist/components/branch-date-dropdown.js +5 -0
  128. package/dist/components/branch-date-picker.d.ts +11 -0
  129. package/dist/components/branch-date-picker.js +5 -0
  130. package/dist/components/branch-slot-dropdown.js +1 -1
  131. package/dist/components/branch-slot-picker.js +1 -1
  132. package/dist/components/dead-stock-lookup.js +1 -1
  133. package/dist/components/distributor-lookup.js +1 -1
  134. package/dist/components/flexible-container.js +1 -1
  135. package/dist/components/form-checkbox.js +1 -1
  136. package/dist/components/form-date-picker.js +1 -1
  137. package/dist/components/form-dialog.js +1 -1
  138. package/dist/components/form-file.js +1 -1
  139. package/dist/components/form-input-preview.js +1 -1
  140. package/dist/components/form-input.js +1 -1
  141. package/dist/components/form-phone-number.js +1 -1
  142. package/dist/components/form-picker-input.js +1 -1
  143. package/dist/components/form-select.js +1 -1
  144. package/dist/components/form-shadow-input.js +1 -1
  145. package/dist/components/form-stepper-control.js +1 -1
  146. package/dist/components/form-stepper-submit.js +1 -1
  147. package/dist/components/form-stepper.js +1 -1
  148. package/dist/components/form-structure-error.js +1 -1
  149. package/dist/components/form-structure.js +1 -1
  150. package/dist/components/form-submit.js +1 -1
  151. package/dist/components/form-switch.js +1 -1
  152. package/dist/components/form-text-area.js +1 -1
  153. package/dist/components/form-time-picker.js +1 -1
  154. package/dist/components/form-vin-input.js +1 -1
  155. package/dist/components/general-form.js +1 -1
  156. package/dist/components/general-inquiry-form.js +1 -1
  157. package/dist/components/information-table.js +1 -1
  158. package/dist/components/loading-spinner.js +1 -1
  159. package/dist/components/manufacturer-lookup.js +1 -1
  160. package/dist/components/manufacturer-part-lookup.js +1 -1
  161. package/dist/components/p--lk4OUJg.js +5 -0
  162. package/dist/components/p-3450p9UN.js +5 -0
  163. package/dist/components/{p-Dd_Xnn2b.js → p-3kY-T9ID.js} +1 -1
  164. package/dist/components/p-40jijfEq.js +5 -0
  165. package/dist/components/{p-_apNp6J3.js → p-BJrbtmnU.js} +1 -1
  166. package/dist/components/p-BTt7sEhA.js +5 -0
  167. package/dist/components/p-BcbFXFPI.js +5 -0
  168. package/dist/components/{p-DpXLfNHS.js → p-BgJljKxp.js} +1 -1
  169. package/dist/components/{p-1fzw9lBq.js → p-BiTpOAiT.js} +1 -1
  170. package/dist/components/p-BoQgpmtN.js +5 -0
  171. package/dist/components/p-BpHkd1L9.js +5 -0
  172. package/dist/components/{p-CC16uGpN.js → p-BwKzJeLy.js} +1 -1
  173. package/dist/components/{p-C8S2P4sw.js → p-BwcxrN3h.js} +1 -1
  174. package/dist/components/{p-CwbJMZVZ.js → p-C1I6zBo7.js} +1 -1
  175. package/dist/components/{p-DcMgXNpe.js → p-CC5K40ze.js} +1 -1
  176. package/dist/components/{p-B8hl68AM.js → p-CDdYNb7K.js} +1 -1
  177. package/dist/components/p-CE9wNugx.js +5 -0
  178. package/dist/components/p-CU0gZwVU.js +5 -0
  179. package/dist/components/{p-BdPZ7u2w.js → p-CUTQhKeo.js} +1 -1
  180. package/dist/components/{p-BbQAkWw4.js → p-CXigg5tn.js} +1 -1
  181. package/dist/components/p-CYuQunRn.js +5 -0
  182. package/dist/components/{p-B9xLzbPr.js → p-Ce2mazYo.js} +1 -1
  183. package/dist/components/p-CjQ2hRI-.js +5 -0
  184. package/dist/components/{p-l2FHTMzv.js → p-CjdYtmBI.js} +1 -1
  185. package/dist/components/{p-C6U9Fs9H.js → p-CmIFPUXD.js} +1 -1
  186. package/dist/components/{p-ClT5CzCZ.js → p-CsXGhc7r.js} +1 -1
  187. package/dist/components/{p-7Gq_FyNj.js → p-D1JLecvO.js} +1 -1
  188. package/dist/components/p-DDhVlLOx.js +5 -0
  189. package/dist/components/{p-D7Sj02XY.js → p-DFKEx7TJ.js} +1 -1
  190. package/dist/components/p-DQSUv7pB.js +5 -0
  191. package/dist/components/{p-Bb2xDuqh.js → p-DU9WzEFX.js} +1 -1
  192. package/dist/components/{p-LkNhSGDO.js → p-DaQOYb2R.js} +1 -1
  193. package/dist/components/p-Dd_3uKgv.js +5 -0
  194. package/dist/components/{p-DbnN292R.js → p-DdgLsuaX.js} +1 -1
  195. package/dist/components/p-DeeDRJ2C.js +5 -0
  196. package/dist/components/{p-Dsk1SNut.js → p-Dl0BmrLe.js} +1 -1
  197. package/dist/components/{p-B2w49gNR.js → p-Dsu3xdDz.js} +1 -1
  198. package/dist/components/{p-B7G2HjX0.js → p-Dts2Iuoc.js} +1 -1
  199. package/dist/components/p-DvcOTV3l.js +5 -0
  200. package/dist/components/{p-BaZAgTxG.js → p-HpXp7TBt.js} +1 -1
  201. package/dist/components/p-KSvRVGk-.js +5 -0
  202. package/dist/components/{p-BKzXBxxc.js → p-O0AragmD.js} +1 -1
  203. package/dist/components/{p-CL5G_ZDE.js → p-OdEwTuBq.js} +1 -1
  204. package/dist/components/{p-R_rAJ4hF.js → p-UeoCFDF-.js} +1 -1
  205. package/dist/components/{p-Qh1y1RV2.js → p-Wfd6v4yE.js} +1 -1
  206. package/dist/components/p-g-v1c-Sz.js +5 -0
  207. package/dist/components/{p-DtZM3yHS.js → p-kvRYCMvP.js} +1 -1
  208. package/dist/components/p-nX_t9aCK.js +5 -0
  209. package/dist/components/p-yWyKiQgx.js +5 -0
  210. package/dist/components/p-zeGxLJvE.js +5 -0
  211. package/dist/components/part-lookup.js +1 -1
  212. package/dist/components/service-booking-form.js +1 -1
  213. package/dist/components/shift-accordion.js +1 -1
  214. package/dist/components/shift-checkbox.js +1 -1
  215. package/dist/components/shift-portal.js +1 -1
  216. package/dist/components/shift-select-dropdown.js +1 -1
  217. package/dist/components/shift-select.js +1 -1
  218. package/dist/components/shift-slider.js +1 -1
  219. package/dist/components/shift-switch.js +1 -1
  220. package/dist/components/shift-tab-content.js +1 -1
  221. package/dist/components/shift-tabs.js +1 -1
  222. package/dist/components/ssc-lookup-form.js +1 -1
  223. package/dist/components/test-drive-form.js +1 -1
  224. package/dist/components/vehicle-accessories.js +1 -1
  225. package/dist/components/vehicle-claimable-items.js +1 -1
  226. package/dist/components/vehicle-item-claim-form.js +1 -1
  227. package/dist/components/vehicle-lookup.js +1 -1
  228. package/dist/components/vehicle-paint-thickness.js +1 -1
  229. package/dist/components/vehicle-quotation-form.js +1 -1
  230. package/dist/components/vehicle-sale-information.js +1 -1
  231. package/dist/components/vehicle-service-history.js +1 -1
  232. package/dist/components/vehicle-specification.js +1 -1
  233. package/dist/components/vehicle-warranty-details.js +1 -1
  234. package/dist/components/vehicle-warranty-timeline.js +1 -1
  235. package/dist/components/vin-extractor.js +1 -1
  236. package/dist/esm/{branch-slot-dropdown_15.entry.js → branch-date-dropdown_17.entry.js} +960 -71
  237. package/dist/esm/dead-stock-lookup_3.entry.js +9 -9
  238. package/dist/esm/flexible-container.entry.js +3 -3
  239. package/dist/esm/form-checkbox.entry.js +2 -2
  240. package/dist/esm/form-date-picker.entry.js +5 -5
  241. package/dist/esm/form-input_7.entry.js +19 -17
  242. package/dist/esm/form-switch.entry.js +2 -2
  243. package/dist/esm/form-time-picker.entry.js +6 -6
  244. package/dist/esm/{functions-Ccrile_u.js → functions-DJ_k25ew.js} +44 -20
  245. package/dist/esm/general-form.entry.js +6 -6
  246. package/dist/esm/general-inquiry-form.entry.js +6 -6
  247. package/dist/esm/{get-local-language-oNw84Rsz.js → get-local-language-Bx6zWD91.js} +1 -1
  248. package/dist/esm/{get-mock-files-C26lznN1.js → get-mock-files-BBSjMVMQ.js} +1 -1
  249. package/dist/esm/information-table.entry.js +1 -1
  250. package/dist/esm/loader.js +1 -1
  251. package/dist/esm/loading-spinner.entry.js +2 -2
  252. package/dist/esm/manufacturer-part-lookup.entry.js +3 -3
  253. package/dist/esm/{mappers-9IKbvPiR.js → mappers-CZs2R7k6.js} +54 -18
  254. package/dist/esm/part-lookup.entry.js +2 -2
  255. package/dist/esm/service-booking-form.entry.js +6 -6
  256. package/dist/esm/shift-accordion.entry.js +1 -1
  257. package/dist/esm/shift-checkbox.entry.js +2 -2
  258. package/dist/esm/shift-components.js +1 -1
  259. package/dist/esm/shift-slider.entry.js +1 -1
  260. package/dist/esm/shift-switch.entry.js +2 -2
  261. package/dist/esm/shift-tab-content.entry.js +2 -2
  262. package/dist/esm/shift-tabs_2.entry.js +10 -10
  263. package/dist/esm/ssc-lookup-form.entry.js +6 -6
  264. package/dist/esm/test-drive-form.entry.js +6 -6
  265. package/dist/esm/vehicle-accessories_8.entry.js +21 -21
  266. package/dist/esm/vehicle-lookup.entry.js +3 -3
  267. package/dist/esm/vehicle-quotation-form.entry.js +17 -18
  268. package/dist/integration-manifest.json +1 -1
  269. package/dist/shift-components/{p-BugYpTL6.js → p--hCDlSpp.js} +1 -1
  270. package/dist/shift-components/p-020fbe81.entry.js +5 -0
  271. package/dist/shift-components/p-0398f3c4.entry.js +5 -0
  272. package/dist/shift-components/{p-0da97a29.entry.js → p-10882717.entry.js} +1 -1
  273. package/dist/shift-components/p-165ff895.entry.js +5 -0
  274. package/dist/shift-components/{p-d59276b6.entry.js → p-1a0b40e6.entry.js} +1 -1
  275. package/dist/shift-components/{p-e90c354a.entry.js → p-1be40385.entry.js} +1 -1
  276. package/dist/shift-components/{p-31718ec2.entry.js → p-327774de.entry.js} +1 -1
  277. package/dist/shift-components/{p-urLq-GEs.js → p-3YRvA44H.js} +1 -1
  278. package/dist/shift-components/{p-323ffb6e.entry.js → p-79e08717.entry.js} +1 -1
  279. package/dist/shift-components/{p-34e9053b.entry.js → p-7b1c5abb.entry.js} +1 -1
  280. package/dist/shift-components/{p-30e84a3b.entry.js → p-7e89d3fc.entry.js} +1 -1
  281. package/dist/shift-components/{p-729d8d4b.entry.js → p-7f2e2763.entry.js} +1 -1
  282. package/dist/shift-components/{p-eb265a3e.entry.js → p-81257775.entry.js} +1 -1
  283. package/dist/shift-components/{p-3aad8840.entry.js → p-8870420e.entry.js} +1 -1
  284. package/dist/shift-components/{p-c9ba7fd5.entry.js → p-8d205235.entry.js} +1 -1
  285. package/dist/shift-components/{p-09a0fd99.entry.js → p-95a4096f.entry.js} +1 -1
  286. package/dist/shift-components/p-B9INqdFT.js +5 -0
  287. package/dist/shift-components/p-DwFtCPcT.js +5 -0
  288. package/dist/shift-components/{p-d58404bd.entry.js → p-a0dc1bcc.entry.js} +1 -1
  289. package/dist/shift-components/{p-53cd54e8.entry.js → p-a1b97bce.entry.js} +1 -1
  290. package/dist/shift-components/p-bd1a0763.entry.js +5 -0
  291. package/dist/shift-components/{p-a15fdf1e.entry.js → p-c197b86b.entry.js} +1 -1
  292. package/dist/shift-components/{p-63713eae.entry.js → p-c2512cb2.entry.js} +1 -1
  293. package/dist/shift-components/{p-f2a546db.entry.js → p-cc900265.entry.js} +1 -1
  294. package/dist/shift-components/{p-1355934b.entry.js → p-d23d9d1f.entry.js} +1 -1
  295. package/dist/shift-components/p-ddf6c6f6.entry.js +5 -0
  296. package/dist/shift-components/{p-68722c7b.entry.js → p-e02f3a3f.entry.js} +1 -1
  297. package/dist/shift-components/{p-9b13a82b.entry.js → p-e72947e0.entry.js} +1 -1
  298. package/dist/shift-components/p-f30a355a.entry.js +5 -0
  299. package/dist/shift-components/shift-components.esm.js +1 -1
  300. package/dist/stencil-docs.json +1677 -12
  301. package/dist/templates/production-host/vehicle-service-history.html +14 -0
  302. package/dist/types/components/form-elements/branch-date-dropdown.d.ts +74 -0
  303. package/dist/types/components/form-elements/branch-date-picker.d.ts +174 -0
  304. package/dist/types/components/form-elements/branch-slot-dropdown.d.ts +6 -0
  305. package/dist/types/components/form-elements/branch-slot-picker.d.ts +27 -0
  306. package/dist/types/components/forms/defaults/mappers.d.ts +15 -9
  307. package/dist/types/components.d.ts +533 -6
  308. package/dist/types/features/form-hook/functions.d.ts +14 -0
  309. package/dist/types/global/lib/slot-day-rules.d.ts +25 -0
  310. package/dist/types/locales/vehicleLookup/serviceHistory/type.d.ts +2 -2
  311. package/dist/types/locales/vehicleLookup/warrantyTimeline/type.d.ts +4 -4
  312. package/dist/types/locales/vehicleLookup/wrapper-type.d.ts +2 -2
  313. package/package.json +6 -1
  314. package/dist/components/p-6RmAcc2q.js +0 -5
  315. package/dist/components/p-8jIkK-Kb.js +0 -5
  316. package/dist/components/p-BUepGDZV.js +0 -5
  317. package/dist/components/p-B__72-PA.js +0 -5
  318. package/dist/components/p-Bj3cvdzl.js +0 -5
  319. package/dist/components/p-BvMcY9Sk.js +0 -5
  320. package/dist/components/p-C-yTwaAA.js +0 -5
  321. package/dist/components/p-C8B9jarP.js +0 -5
  322. package/dist/components/p-CCounVqq.js +0 -5
  323. package/dist/components/p-CIPh05sT.js +0 -5
  324. package/dist/components/p-CKwgX_v0.js +0 -5
  325. package/dist/components/p-CPBmhspv.js +0 -5
  326. package/dist/components/p-Cm94OAx9.js +0 -5
  327. package/dist/components/p-DWjIts4C.js +0 -5
  328. package/dist/components/p-DeipsN8N.js +0 -5
  329. package/dist/components/p-DkagL-e-.js +0 -5
  330. package/dist/components/p-G7teNuSi.js +0 -5
  331. package/dist/shift-components/p-12e295ba.entry.js +0 -5
  332. package/dist/shift-components/p-138af7f3.entry.js +0 -5
  333. package/dist/shift-components/p-327fddd8.entry.js +0 -5
  334. package/dist/shift-components/p-8374f629.entry.js +0 -5
  335. package/dist/shift-components/p-awXOnuq1.js +0 -5
  336. package/dist/shift-components/p-c25a6c0d.entry.js +0 -5
  337. package/dist/shift-components/p-dacdff2a.entry.js +0 -5
  338. package/dist/shift-components/p-hABirfUj.js +0 -5
  339. /package/dist/collection/templates/{vehicle-lookup → prototypes}/prototype-assets/extended-warranty/adp-logo.svg +0 -0
@@ -0,0 +1,642 @@
1
+ /**
2
+ * The landing page's top bar, as one implementation that two pages can mount.
3
+ *
4
+ * It used to be 340 lines of markup inside src/index.html plus the half of
5
+ * `landing()` that fed it. A second documentation page needed the same
6
+ * navigation, and the only honest way to give it one is to have one copy — so
7
+ * the markup, the state and the path arithmetic all live here, and index.html
8
+ * renders this rather than owning it.
9
+ *
10
+ * ── Mounting ──────────────────────────────────────────────────────────────────
11
+ * A page with no Alpine state of its own needs one module tag and nothing else:
12
+ *
13
+ * <script src="/templates/harness-theme.js"></script>
14
+ * <script src="/templates/site-locales.js"></script>
15
+ * <script type="module">
16
+ * import { mountSiteHeader } from '../site-header.js';
17
+ * mountSiteHeader();
18
+ * </script>
19
+ * <script defer src="/templates/vendor/alpine.js"></script>
20
+ *
21
+ * That stamps the header wrapped in its own `x-data` scope. Order matters twice
22
+ * over. The two classic scripts are BLOCKING because theme and text direction
23
+ * are decided before first paint. And this module must sit ahead of the Alpine
24
+ * tag: deferred and module scripts share one queue in document order, Alpine
25
+ * evaluates `x-data` at walk time, and a module behind it stamps markup that
26
+ * Alpine has already walked past.
27
+ *
28
+ * A page that already has a scope covering the header passes
29
+ * `{ alpineScope: false }` and builds its own data object out of `siteHeader()`.
30
+ * index.html does, because `landing()` drives the body from the same catalog and
31
+ * the `:inert` on <main> and <footer> reads the header's `mobile` — a second
32
+ * nested scope would shadow it.
33
+ *
34
+ * ── Paths ─────────────────────────────────────────────────────────────────────
35
+ * Catalog paths are site-absolute (`/templates/…`), which only resolves when the
36
+ * site IS the server root. index.html sits at depth 0, a demo page at depth 2,
37
+ * and the built site can be mounted under any prefix — so every path is
38
+ * re-resolved against the directory this module was loaded from. `nav.js` and
39
+ * `harness.js` carry the same two lines for the same reason: the release build
40
+ * rewrites `src=` and `href=` attributes but never an import specifier or a
41
+ * string, so anything computed has to compute itself.
42
+ */
43
+
44
+ /** The site root: this file is always <root>/templates/site-header.js. */
45
+ const SITE_ROOT = new URL('../', import.meta.url);
46
+
47
+ /**
48
+ * How far the CURRENT page sits below that root, as a relative prefix.
49
+ *
50
+ * Relative, rather than the absolute `.pathname` that nav.js produces, because
51
+ * index.html's own `site()` produced relative hrefs and this has to render the
52
+ * identical attribute. Depth 0 gives '', depth 2 gives '../../', and a mount
53
+ * under /docs/ cancels out of both sides.
54
+ */
55
+ const PATH_PREFIX = (() => {
56
+ const root = SITE_ROOT.pathname;
57
+ const here = new URL('.', window.location.href).pathname;
58
+ const depth = here.startsWith(root) ? here.slice(root.length).split('/').filter(Boolean).length : 0;
59
+
60
+ return '../'.repeat(depth);
61
+ })();
62
+
63
+ /*
64
+ * The three product areas, in presentation order. Declared here rather than read
65
+ * from the catalog on purpose: a group with nothing published has no catalog
66
+ * entry at all, and disappearing from the menu is a different message from "the
67
+ * demo is pending".
68
+ */
69
+ const COMPONENT_GROUPS = ['vehicle-lookup', 'part-lookup', 'forms'];
70
+
71
+ /**
72
+ * Neither file the header reads is required to exist: the build stamp ships only
73
+ * in a released site, and the catalog only after `npm start` or `npm run
74
+ * release` has run. Either one failing has to leave a readable page.
75
+ */
76
+ async function read(url) {
77
+ try {
78
+ const response = await fetch(url);
79
+
80
+ return response.ok ? await response.json() : null;
81
+ } catch {
82
+ return null;
83
+ }
84
+ }
85
+
86
+ /**
87
+ * The header's Alpine state, plus anything the host page adds.
88
+ *
89
+ * `extra` is merged through property DESCRIPTORS rather than spread, because a
90
+ * spread invokes every getter and copies the result — `version`, `groups` and
91
+ * `pageCount` here, and several more on the page that hosts this, would all
92
+ * freeze at their boot-time values.
93
+ */
94
+ export function siteHeader(extra = {}) {
95
+ if (!window.siteLocales || !window.harnessTheme) {
96
+ throw new Error('site-header.js needs templates/site-locales.js and templates/harness-theme.js loaded (blocking, in <head>) before it runs');
97
+ }
98
+
99
+ const state = {
100
+ catalog: { areas: [], pages: [] },
101
+ build: null,
102
+ language: window.siteLocales.current(),
103
+ languages: window.siteLocales.languages,
104
+ theme: window.harnessTheme.current(),
105
+ open: null,
106
+ mobile: false,
107
+ expanded: null,
108
+ filter: '',
109
+
110
+ async init() {
111
+ const [catalog, build] = await Promise.all([read(new URL('catalog.json', import.meta.url)), read(new URL('build-info.json', SITE_ROOT))]);
112
+
113
+ if (catalog) this.catalog = catalog;
114
+ if (build) this.build = build;
115
+ },
116
+
117
+ /* ---------- copy ---------- */
118
+
119
+ t(key) {
120
+ return window.siteLocales.t(this.language, key);
121
+ },
122
+
123
+ get languageLabel() {
124
+ return this.languages.find(option => option.code === this.language)?.label ?? this.language;
125
+ },
126
+
127
+ /* ---------- catalog ---------- */
128
+
129
+ /*
130
+ * The build stamp first. It records the version the site was BUILT against,
131
+ * which is a published one; catalog.json carries package.json's version,
132
+ * which is whatever is being prepared next and is routinely not installable
133
+ * yet.
134
+ */
135
+ get version() {
136
+ return this.build?.componentVersion ?? this.catalog.package?.version ?? '';
137
+ },
138
+
139
+ get pageCount() {
140
+ return this.catalog.pages.length;
141
+ },
142
+
143
+ get groups() {
144
+ const needle = this.filter.trim().toLowerCase();
145
+
146
+ return COMPONENT_GROUPS.map(id => ({
147
+ id,
148
+ label: this.t('groups.' + id),
149
+ blurb: this.t('blurb.' + id),
150
+ pages: this.catalog.pages.filter(page => page.area === id && (!needle || (page.title + ' ' + page.path).toLowerCase().includes(needle))),
151
+ }));
152
+ },
153
+
154
+ /* ---------- controls ---------- */
155
+
156
+ toggle(id) {
157
+ this.open = this.open === id ? null : id;
158
+ },
159
+
160
+ expand(id) {
161
+ this.expanded = this.expanded === id ? null : id;
162
+ },
163
+
164
+ setLanguage(code) {
165
+ this.language = window.siteLocales.apply(code);
166
+ this.open = null;
167
+ },
168
+
169
+ setTheme(theme) {
170
+ this.theme = theme;
171
+ window.harnessTheme.apply(theme);
172
+ this.open = null;
173
+ },
174
+
175
+ /** A catalog path, as an href valid from wherever this page sits. */
176
+ // Is this catalog page the one being viewed? Resolved against the document so it
177
+ // survives any mount depth, and tolerant of the trailing-slash/.html rewriting the
178
+ // host does — /forms/ticket-forms, /forms/ticket-forms.html and /forms/ticket-forms/
179
+ // are the same page.
180
+ isCurrentPage(path) {
181
+ if (typeof window === 'undefined' || !path) return false;
182
+
183
+ const strip = p =>
184
+ p
185
+ .replace(/\/index\.html$/, '/')
186
+ .replace(/\.html$/, '')
187
+ .replace(/\/$/, '');
188
+
189
+ try {
190
+ return strip(new URL(this.site(path), window.location.href).pathname) === strip(window.location.pathname);
191
+ } catch {
192
+ return false;
193
+ }
194
+ },
195
+
196
+ site(value) {
197
+ const relative = PATH_PREFIX + String(value).replace(/^\//, '');
198
+
199
+ return relative || './';
200
+ },
201
+ };
202
+
203
+ Object.defineProperties(state, Object.getOwnPropertyDescriptors(extra));
204
+
205
+ return state;
206
+ }
207
+
208
+ /*
209
+ * Alpine resolves `x-data` against the global scope, and index.html's page script
210
+ * is a CLASSIC script that cannot import — the same reason window.adpHighlight
211
+ * exists. So the factory is hung on window as well as exported.
212
+ */
213
+ window.siteHeader = siteHeader;
214
+
215
+ /**
216
+ * The markup, lifted out of index.html — comments included, because they explain
217
+ * choices the classes do not. The indentation is the six spaces it had in that
218
+ * file, so the rendered DOM is what index.html produced before the extraction.
219
+ *
220
+ * ── The padding on the three popovers is geometry, not taste ──────────────────
221
+ * Concentric corners only look concentric when the outer radius equals the inner
222
+ * radius plus the padding between them. All three popovers are `rounded-box`
223
+ * (--radius-box, 12px), so:
224
+ *
225
+ * groups menu rows are rounded-lg (8px) -> p-1 (4px). 4 + 8 = 12
226
+ * language menu daisyUI menu rows take -> p-1.5 (6px). 6 + 6 = 12
227
+ * theme menu --radius-field (6px) -> p-1.5 (6px). 6 + 6 = 12
228
+ *
229
+ * Round the padding off to a "tidier" number and the rows stop tracking the
230
+ * shell: too little and they look square inside a round box, too much and the
231
+ * corners read as two unrelated curves. If --radius-box or --radius-field moves
232
+ * in harness.src.css, these three move with it.
233
+ */
234
+ const MARKUP = /* html */ `
235
+ <header class="bg-base-100/90 border-base-300 sticky top-0 z-30 border-b backdrop-blur">
236
+ <div class="mx-auto flex max-w-[1240px] items-center gap-3 px-5 py-2.5 sm:px-8">
237
+ <!--
238
+ The wordmark sits on a gold TILE rather than being painted gold.
239
+ #F9CB4B measures 1.54:1 against white, so gold text is not a brand
240
+ colour on a light page, it is invisible text — which is why the
241
+ stylesheet splits the brand into \`primary\` (fills) and \`accent\`
242
+ (anything that must read as a colour). A fill carrying ink is the one
243
+ place the real gold appears at full strength: 10.48:1, and it matches
244
+ the favicon and the docs site.
245
+ -->
246
+ <a :href="site('/')" class="group flex shrink-0 items-center gap-3" :aria-label="t('nav.home')">
247
+ <span class="bg-primary flex items-center justify-center rounded-lg px-2.5 py-2 transition-opacity group-hover:opacity-85">
248
+ <span class="adp-logo text-primary-content h-4 w-[42px]" aria-hidden="true"></span>
249
+ </span>
250
+ <span class="hidden text-base font-semibold tracking-tight sm:inline">
251
+ <span>SHFT</span>
252
+ <span class="text-base-content/60 group-hover:text-base-content font-normal transition-colors">your day</span>
253
+ </span>
254
+ </a>
255
+
256
+ <span class="badge badge-sm badge-ghost font-mono" x-show="version" x-text="'v' + version"></span>
257
+
258
+ <!-- ── wide: inline controls ── -->
259
+ <div class="ms-auto hidden items-center gap-1 lg:flex" @click.outside="open = null">
260
+ <div class="relative">
261
+ <button type="button" class="btn btn-sm btn-ghost gap-1.5" :aria-expanded="open === 'groups'" aria-controls="menu-groups" @click="toggle('groups')">
262
+ <span x-text="t('nav.components')"></span>
263
+ <svg
264
+ class="h-3 w-3 opacity-60 transition-transform"
265
+ :class="open === 'groups' && 'rotate-180'"
266
+ viewBox="0 0 24 24"
267
+ fill="none"
268
+ stroke="currentColor"
269
+ stroke-width="2.5"
270
+ stroke-linecap="round"
271
+ aria-hidden="true"
272
+ >
273
+ <path d="m6 9 6 6 6-6" />
274
+ </svg>
275
+ </button>
276
+
277
+ <div
278
+ id="menu-groups"
279
+ class="bg-base-100 border-base-300 rounded-box absolute end-0 top-full z-50 mt-1 max-h-[70vh] w-[min(24rem,calc(100vw-2rem))] overflow-y-auto border p-1 shadow-xl"
280
+ x-show="open === 'groups'"
281
+ x-cloak
282
+ x-transition:enter="transition ease-out duration-150"
283
+ x-transition:enter-start="opacity-0 -translate-y-1"
284
+ x-transition:leave="transition ease-in duration-100"
285
+ x-transition:leave-end="opacity-0"
286
+ >
287
+ <label class="input input-sm mb-2 w-full" x-show="pageCount > 7">
288
+ <svg class="h-4 w-4 opacity-50" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
289
+ <circle cx="11" cy="11" r="7" />
290
+ <path d="m20 20-3.5-3.5" stroke-linecap="round" />
291
+ </svg>
292
+ <input x-model="filter" type="search" :placeholder="t('nav.filter')" :aria-label="t('nav.filter')" />
293
+ </label>
294
+
295
+ <template x-for="group in groups" :key="group.id">
296
+ <div>
297
+ <!--
298
+ Three shapes, because a group's page count changes what the
299
+ row IS. None: a label, not a control — there is nothing to
300
+ open. One: a link, because a disclosure revealing a single
301
+ item is a click for nothing. More: a closed disclosure.
302
+ -->
303
+ <template x-if="!group.pages.length && !filter">
304
+ <p class="flex items-center justify-between gap-2 px-3 py-2">
305
+ <span class="text-base-content/70 text-sm" x-text="group.label"></span>
306
+ <span class="badge badge-xs badge-outline shrink-0" x-text="t('components.soon')"></span>
307
+ </p>
308
+ </template>
309
+
310
+ <template x-if="group.pages.length === 1">
311
+ <a
312
+ :href="site(group.pages[0].path)"
313
+ class="hover:bg-base-200 flex items-center justify-between gap-2 rounded-lg px-3 py-2 text-sm transition-colors"
314
+ :class="isCurrentPage(group.pages[0].path) && 'bg-primary/15 font-semibold'"
315
+ :aria-current="isCurrentPage(group.pages[0].path) ? 'page' : null"
316
+ >
317
+ <span x-text="group.label"></span>
318
+ <span class="text-base-content/65 truncate text-xs" x-text="group.pages[0].title"></span>
319
+ </a>
320
+ </template>
321
+
322
+ <template x-if="group.pages.length > 1">
323
+ <div>
324
+ <button
325
+ type="button"
326
+ class="hover:bg-base-200 flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors"
327
+ :aria-expanded="expanded === group.id"
328
+ :class="group.pages.some(p => isCurrentPage(p.path)) && 'font-semibold'"
329
+ @click="expand(group.id)"
330
+ >
331
+ <svg
332
+ class="h-3 w-3 shrink-0 opacity-50 transition-transform rtl:-scale-x-100"
333
+ :class="expanded === group.id && 'rotate-90'"
334
+ viewBox="0 0 24 24"
335
+ fill="none"
336
+ stroke="currentColor"
337
+ stroke-width="2.5"
338
+ stroke-linecap="round"
339
+ aria-hidden="true"
340
+ >
341
+ <path d="m9 6 6 6-6 6" />
342
+ </svg>
343
+ <span x-text="group.label"></span>
344
+ <span class="badge badge-xs badge-ghost ms-auto tabular-nums" x-text="group.pages.length"></span>
345
+ </button>
346
+
347
+ <ul
348
+ class="menu menu-sm w-full p-0 ps-4"
349
+ x-show="expanded === group.id"
350
+ x-transition:enter="transition ease-out duration-150"
351
+ x-transition:enter-start="opacity-0 -translate-y-1"
352
+ x-transition:leave="transition ease-in duration-100"
353
+ x-transition:leave-end="opacity-0"
354
+ >
355
+ <template x-for="page in group.pages" :key="page.path">
356
+ <li>
357
+ <a
358
+ :href="site(page.path)"
359
+ class="truncate"
360
+ :class="isCurrentPage(page.path) && 'bg-primary/15 font-semibold'"
361
+ :aria-current="isCurrentPage(page.path) ? 'page' : null"
362
+ x-text="page.title"
363
+ ></a>
364
+ </li>
365
+ </template>
366
+ </ul>
367
+ </div>
368
+ </template>
369
+ </div>
370
+ </template>
371
+ </div>
372
+ </div>
373
+
374
+ <a class="btn btn-sm btn-ghost" href="https://adp.shift.software/" target="_blank" rel="noreferrer" x-text="t('nav.docs')"></a>
375
+
376
+ <span class="bg-base-300 mx-1 h-6 w-px" aria-hidden="true"></span>
377
+
378
+ <div class="relative">
379
+ <!-- The accessible name carries the CURRENT value, not just the
380
+ category: a bare aria-label="Language" overrides the visible
381
+ "English", so voice control cannot reach it by what it says. -->
382
+ <button
383
+ type="button"
384
+ class="btn btn-sm btn-ghost gap-1.5"
385
+ :aria-expanded="open === 'language'"
386
+ aria-controls="menu-language"
387
+ :aria-label="t('nav.language') + ': ' + languageLabel"
388
+ @click="toggle('language')"
389
+ >
390
+ <svg class="h-4 w-4 opacity-70" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
391
+ <circle cx="12" cy="12" r="9" />
392
+ <path d="M3.5 9h17M3.5 15h17M12 3a15 15 0 0 1 0 18 15 15 0 0 1 0-18" />
393
+ </svg>
394
+ <span :lang="language" x-text="languageLabel"></span>
395
+ </button>
396
+
397
+ <ul
398
+ id="menu-language"
399
+ class="menu menu-sm bg-base-100 border-base-300 rounded-box absolute end-0 top-full z-50 mt-1 w-44 border p-1.5 shadow-xl"
400
+ x-show="open === 'language'"
401
+ x-cloak
402
+ x-transition:enter="transition ease-out duration-150"
403
+ x-transition:enter-start="opacity-0 -translate-y-1"
404
+ x-transition:leave="transition ease-in duration-100"
405
+ x-transition:leave-end="opacity-0"
406
+ >
407
+ <template x-for="option in languages" :key="option.code">
408
+ <li>
409
+ <button
410
+ type="button"
411
+ :class="language === option.code && 'menu-active'"
412
+ :aria-current="language === option.code ? 'true' : null"
413
+ @click="setLanguage(option.code)"
414
+ >
415
+ <span :lang="option.code" x-text="option.label"></span>
416
+ <span class="badge badge-xs badge-ghost ms-auto font-mono uppercase" x-text="option.code"></span>
417
+ </button>
418
+ </li>
419
+ </template>
420
+ </ul>
421
+ </div>
422
+
423
+ <div class="relative">
424
+ <button
425
+ type="button"
426
+ class="btn btn-sm btn-ghost gap-1.5"
427
+ :aria-expanded="open === 'theme'"
428
+ aria-controls="menu-theme"
429
+ :aria-label="t('nav.theme') + ': ' + t('theme.' + theme)"
430
+ @click="toggle('theme')"
431
+ >
432
+ <svg class="h-4 w-4 opacity-70" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
433
+ <circle cx="12" cy="12" r="4.5" />
434
+ <path d="M12 2.5v2M12 19.5v2M2.5 12h2M19.5 12h2M5.2 5.2l1.4 1.4M17.4 17.4l1.4 1.4M18.8 5.2l-1.4 1.4M6.6 17.4l-1.4 1.4" />
435
+ </svg>
436
+ <span x-text="t('theme.' + theme)"></span>
437
+ </button>
438
+
439
+ <ul
440
+ id="menu-theme"
441
+ class="menu menu-sm bg-base-100 border-base-300 rounded-box absolute end-0 top-full z-50 mt-1 w-36 border p-1.5 shadow-xl"
442
+ x-show="open === 'theme'"
443
+ x-cloak
444
+ x-transition:enter="transition ease-out duration-150"
445
+ x-transition:enter-start="opacity-0 -translate-y-1"
446
+ x-transition:leave="transition ease-in duration-100"
447
+ x-transition:leave-end="opacity-0"
448
+ >
449
+ <template x-for="option in ['system', 'light', 'dark']" :key="option">
450
+ <li>
451
+ <button
452
+ type="button"
453
+ :class="theme === option && 'menu-active'"
454
+ :aria-current="theme === option ? 'true' : null"
455
+ @click="setTheme(option)"
456
+ x-text="t('theme.' + option)"
457
+ ></button>
458
+ </li>
459
+ </template>
460
+ </ul>
461
+ </div>
462
+ </div>
463
+
464
+ <button
465
+ type="button"
466
+ class="btn btn-sm btn-ghost ms-auto lg:hidden"
467
+ :aria-expanded="mobile"
468
+ aria-controls="mobile-sheet"
469
+ :aria-label="t('nav.menu')"
470
+ @click="mobile = true"
471
+ >
472
+ <svg class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" aria-hidden="true">
473
+ <path d="M4 7h16M4 12h16M4 17h16" />
474
+ </svg>
475
+ </button>
476
+ </div>
477
+ </header>
478
+
479
+ <!-- ═══════════════════════════ mobile sheet ═══════════════════════════ -->
480
+ <div class="fixed inset-0 z-50 lg:hidden" x-show="mobile" x-cloak role="dialog" aria-modal="true" :aria-label="t('nav.menu')" id="mobile-sheet">
481
+ <div class="bg-base-content/40 absolute inset-0 backdrop-blur-sm" x-show="mobile" x-transition.opacity @click="mobile = false"></div>
482
+
483
+ <div
484
+ class="bg-base-100 absolute inset-y-0 end-0 flex w-full flex-col shadow-2xl sm:w-[22rem]"
485
+ x-show="mobile"
486
+ x-transition:enter="transition ease-out duration-200"
487
+ x-transition:enter-start="translate-x-full rtl:-translate-x-full"
488
+ x-transition:leave="transition ease-in duration-150"
489
+ x-transition:leave-end="translate-x-full rtl:-translate-x-full"
490
+ >
491
+ <div class="border-base-300 flex items-center justify-between border-b px-4 py-3">
492
+ <span class="bg-primary flex items-center justify-center rounded-lg px-2.5 py-2">
493
+ <span class="adp-logo text-primary-content h-4 w-[42px]" aria-hidden="true"></span>
494
+ </span>
495
+ <button type="button" class="btn btn-sm btn-ghost" :aria-label="t('nav.close')" @click="mobile = false">
496
+ <svg class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" aria-hidden="true">
497
+ <path d="M6 6l12 12M18 6L6 18" />
498
+ </svg>
499
+ </button>
500
+ </div>
501
+
502
+ <div class="flex-1 overflow-y-auto overscroll-contain px-4 py-4">
503
+ <p class="eyebrow text-base-content/65 mb-2" x-text="t('nav.components')"></p>
504
+
505
+ <template x-for="group in groups" :key="group.id">
506
+ <div class="mb-1">
507
+ <template x-if="!group.pages.length && !filter">
508
+ <p class="flex items-center justify-between gap-2 py-2">
509
+ <span class="text-base-content/70 text-sm" x-text="group.label"></span>
510
+ <span class="badge badge-xs badge-outline shrink-0" x-text="t('components.soon')"></span>
511
+ </p>
512
+ </template>
513
+
514
+ <template x-if="group.pages.length === 1">
515
+ <a
516
+ :href="site(group.pages[0].path)"
517
+ class="hover:bg-base-200 -mx-2 block rounded-lg px-2 py-2 text-sm"
518
+ :class="isCurrentPage(group.pages[0].path) && 'bg-primary/15 font-semibold'"
519
+ :aria-current="isCurrentPage(group.pages[0].path) ? 'page' : null"
520
+ x-text="group.label"
521
+ ></a>
522
+ </template>
523
+
524
+ <template x-if="group.pages.length > 1">
525
+ <div>
526
+ <button
527
+ type="button"
528
+ class="hover:bg-base-200 -mx-2 flex w-full items-center gap-2 rounded-lg px-2 py-2 text-start text-sm"
529
+ :aria-expanded="expanded === group.id"
530
+ @click="expand(group.id)"
531
+ >
532
+ <svg
533
+ class="h-3 w-3 shrink-0 opacity-50 transition-transform rtl:-scale-x-100"
534
+ :class="expanded === group.id && 'rotate-90'"
535
+ viewBox="0 0 24 24"
536
+ fill="none"
537
+ stroke="currentColor"
538
+ stroke-width="2.5"
539
+ stroke-linecap="round"
540
+ aria-hidden="true"
541
+ >
542
+ <path d="m9 6 6 6-6 6" />
543
+ </svg>
544
+ <span x-text="group.label"></span>
545
+ <span class="badge badge-xs badge-ghost ms-auto tabular-nums" x-text="group.pages.length"></span>
546
+ </button>
547
+
548
+ <ul
549
+ class="menu menu-sm w-full p-0 ps-4"
550
+ x-show="expanded === group.id"
551
+ x-transition:enter="transition ease-out duration-150"
552
+ x-transition:enter-start="opacity-0 -translate-y-1"
553
+ >
554
+ <template x-for="page in group.pages" :key="page.path">
555
+ <li>
556
+ <a
557
+ :href="site(page.path)"
558
+ class="truncate"
559
+ :class="isCurrentPage(page.path) && 'bg-primary/15 font-semibold'"
560
+ :aria-current="isCurrentPage(page.path) ? 'page' : null"
561
+ x-text="page.title"
562
+ ></a>
563
+ </li>
564
+ </template>
565
+ </ul>
566
+ </div>
567
+ </template>
568
+ </div>
569
+ </template>
570
+
571
+ <div class="border-base-300 mt-4 border-t pt-4">
572
+ <a class="btn btn-sm btn-ghost w-full justify-start" href="https://adp.shift.software/" target="_blank" rel="noreferrer" x-text="t('nav.docs')"></a>
573
+ </div>
574
+
575
+ <p class="eyebrow text-base-content/65 mt-6 mb-2" x-text="t('nav.language')"></p>
576
+ <div class="grid grid-cols-2 gap-1.5">
577
+ <template x-for="option in languages" :key="option.code">
578
+ <button
579
+ type="button"
580
+ class="btn btn-sm justify-start"
581
+ :class="language === option.code ? 'btn-primary' : 'btn-outline'"
582
+ :aria-pressed="language === option.code"
583
+ @click="setLanguage(option.code)"
584
+ >
585
+ <span :lang="option.code" x-text="option.label"></span>
586
+ </button>
587
+ </template>
588
+ </div>
589
+
590
+ <p class="eyebrow text-base-content/65 mt-6 mb-2" x-text="t('nav.theme')"></p>
591
+ <div class="grid grid-cols-3 gap-1.5">
592
+ <template x-for="option in ['system', 'light', 'dark']" :key="option">
593
+ <button
594
+ type="button"
595
+ class="btn btn-sm"
596
+ :class="theme === option ? 'btn-primary' : 'btn-outline'"
597
+ :aria-pressed="theme === option"
598
+ @click="setTheme(option)"
599
+ x-text="t('theme.' + option)"
600
+ ></button>
601
+ </template>
602
+ </div>
603
+ </div>
604
+ </div>
605
+ </div>
606
+ `.trim();
607
+
608
+ /** Whether the header has already been stamped into this document. */
609
+ let mounted = false;
610
+
611
+ /**
612
+ * Stamps the header — and the mobile sheet that belongs to it — into the page.
613
+ *
614
+ * target element, or selector for one, to REPLACE. Defaults to the first
615
+ * `[data-site-header]` placeholder; with none in the page, the
616
+ * header is prepended to <body>. Replaced rather than filled, so
617
+ * the placeholder leaves no wrapper of its own behind.
618
+ * alpineScope wrap the markup in its own `x-data`. Pass false when the page
619
+ * already has a scope built from `siteHeader()`.
620
+ *
621
+ * Returns the mounted <header>.
622
+ */
623
+ export function mountSiteHeader({ target = '[data-site-header]', alpineScope = true } = {}) {
624
+ if (mounted) return document.querySelector('header');
625
+
626
+ const placeholder = typeof target === 'string' ? document.querySelector(target) : target;
627
+
628
+ // A <template> parses without executing or fetching anything, and keeps the
629
+ // comments and the whitespace text nodes exactly as written.
630
+ const parsed = document.createElement('template');
631
+
632
+ parsed.innerHTML = alpineScope ? `<div x-data="siteHeader()" @keydown.escape.window="open = null; mobile = false">\n${MARKUP}\n</div>` : MARKUP;
633
+
634
+ const nodes = [...parsed.content.childNodes];
635
+
636
+ if (placeholder) placeholder.replaceWith(...nodes);
637
+ else document.body.prepend(...nodes);
638
+
639
+ mounted = true;
640
+
641
+ return document.querySelector('header');
642
+ }