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.
- package/dist/cjs/{branch-slot-dropdown_15.cjs.entry.js → branch-date-dropdown_17.cjs.entry.js} +961 -70
- package/dist/cjs/dead-stock-lookup_3.cjs.entry.js +9 -9
- package/dist/cjs/flexible-container.cjs.entry.js +3 -3
- package/dist/cjs/form-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/form-date-picker.cjs.entry.js +5 -5
- package/dist/cjs/form-input_7.cjs.entry.js +19 -17
- package/dist/cjs/form-switch.cjs.entry.js +2 -2
- package/dist/cjs/form-time-picker.cjs.entry.js +6 -6
- package/dist/cjs/{functions-DL7oNhTD.js → functions-COlPGX7F.js} +44 -19
- package/dist/cjs/general-form.cjs.entry.js +6 -6
- package/dist/cjs/general-inquiry-form.cjs.entry.js +6 -6
- package/dist/cjs/{get-local-language-BuK1vyX4.js → get-local-language-rWhci9Es.js} +1 -1
- package/dist/cjs/{get-mock-files-D0TNQtTV.js → get-mock-files-Cceb_318.js} +1 -1
- package/dist/cjs/information-table.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/loading-spinner.cjs.entry.js +2 -2
- package/dist/cjs/manufacturer-part-lookup.cjs.entry.js +3 -3
- package/dist/cjs/{mappers-BlH-TAo7.js → mappers-DnWgECCv.js} +54 -18
- package/dist/cjs/part-lookup.cjs.entry.js +2 -2
- package/dist/cjs/service-booking-form.cjs.entry.js +6 -6
- package/dist/cjs/shift-accordion.cjs.entry.js +1 -1
- package/dist/cjs/shift-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/shift-components.cjs.js +1 -1
- package/dist/cjs/shift-slider.cjs.entry.js +1 -1
- package/dist/cjs/shift-switch.cjs.entry.js +2 -2
- package/dist/cjs/shift-tab-content.cjs.entry.js +2 -2
- package/dist/cjs/shift-tabs_2.cjs.entry.js +10 -10
- package/dist/cjs/ssc-lookup-form.cjs.entry.js +6 -6
- package/dist/cjs/test-drive-form.cjs.entry.js +6 -6
- package/dist/cjs/vehicle-accessories_8.cjs.entry.js +21 -21
- package/dist/cjs/vehicle-lookup.cjs.entry.js +3 -3
- package/dist/cjs/vehicle-quotation-form.cjs.entry.js +17 -18
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/components/empty.css +1 -1
- package/dist/collection/components/components/flexible-container.css +1 -1
- package/dist/collection/components/components/flexible-container.js +2 -2
- package/dist/collection/components/components/information-table.css +1 -1
- package/dist/collection/components/components/loading-spinner.css +1 -1
- package/dist/collection/components/components/loading-spinner.js +1 -1
- package/dist/collection/components/components/shift-accordion.js +1 -1
- package/dist/collection/components/components/shift-checkbox.js +1 -1
- package/dist/collection/components/components/shift-portal.css +1 -1
- package/dist/collection/components/components/shift-select-dropdown.js +2 -2
- package/dist/collection/components/components/shift-select.js +3 -3
- package/dist/collection/components/components/shift-slider.js +1 -1
- package/dist/collection/components/components/shift-switch.js +1 -1
- package/dist/collection/components/components/shift-tab-content.css +1 -1
- package/dist/collection/components/components/shift-tab-content.js +1 -1
- package/dist/collection/components/components/shift-tabs.css +1 -1
- package/dist/collection/components/components/shift-tabs.js +2 -2
- package/dist/collection/components/form-elements/branch-date-dropdown.css +1 -0
- package/dist/collection/components/form-elements/branch-date-dropdown.js +682 -0
- package/dist/collection/components/form-elements/branch-date-picker.css +1 -0
- package/dist/collection/components/form-elements/branch-date-picker.js +1197 -0
- package/dist/collection/components/form-elements/branch-slot-dropdown.css +1 -1
- package/dist/collection/components/form-elements/branch-slot-dropdown.js +11 -6
- package/dist/collection/components/form-elements/branch-slot-picker.css +1 -1
- package/dist/collection/components/form-elements/branch-slot-picker.js +166 -18
- package/dist/collection/components/form-elements/form-checkbox.js +1 -1
- package/dist/collection/components/form-elements/form-date-picker-legacy.js +4 -4
- package/dist/collection/components/form-elements/form-dialog.css +1 -1
- package/dist/collection/components/form-elements/form-dialog.js +1 -1
- package/dist/collection/components/form-elements/form-file.js +2 -2
- package/dist/collection/components/form-elements/form-input.js +6 -4
- package/dist/collection/components/form-elements/form-inputs.css +1 -1
- package/dist/collection/components/form-elements/form-phone-number.js +4 -2
- package/dist/collection/components/form-elements/form-picker-input.js +6 -4
- package/dist/collection/components/form-elements/form-shadow-input.js +1 -1
- package/dist/collection/components/form-elements/form-stepper-control.js +2 -2
- package/dist/collection/components/form-elements/form-stepper-submit.js +2 -2
- package/dist/collection/components/form-elements/form-stepper.js +1 -1
- package/dist/collection/components/form-elements/form-structure-error.js +1 -1
- package/dist/collection/components/form-elements/form-structure.js +3 -2
- package/dist/collection/components/form-elements/form-submit.js +2 -2
- package/dist/collection/components/form-elements/form-switch.js +1 -1
- package/dist/collection/components/form-elements/form-text-area.js +6 -4
- package/dist/collection/components/form-elements/form-time-picker-legacy.js +5 -5
- package/dist/collection/components/form-elements/form-vin-input.js +6 -4
- package/dist/collection/components/forms/defaults/mappers.js +54 -18
- package/dist/collection/components/forms/defaults/style.css +1 -1
- package/dist/collection/components/forms/general-form.js +2 -2
- package/dist/collection/components/forms/general-inquiry.js +2 -2
- package/dist/collection/components/forms/service-booking.js +2 -2
- package/dist/collection/components/forms/ssc-lookup.js +2 -2
- package/dist/collection/components/forms/test-drive.js +2 -2
- package/dist/collection/components/forms/vehicle-quotation/themes.css +1 -1
- package/dist/collection/components/forms/vehicle-quotation.js +15 -16
- package/dist/collection/components/part-lookup/dead-stock-lookup.css +1 -1
- package/dist/collection/components/part-lookup/dead-stock-lookup.js +2 -2
- package/dist/collection/components/part-lookup/distributor-lookup.css +1 -1
- package/dist/collection/components/part-lookup/distributor-lookup.js +2 -2
- package/dist/collection/components/part-lookup/manufacturer-lookup.css +1 -1
- package/dist/collection/components/part-lookup/manufacturer-part-lookup.css +1 -1
- package/dist/collection/components/part-lookup/manufacturer-part-lookup.js +1 -1
- package/dist/collection/components/part-lookup/part-lookup.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-accessories.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-accessories.js +2 -2
- package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-claimable-items.js +5 -5
- package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-item-claim-form.js +6 -6
- package/dist/collection/components/vehicle-lookup/vehicle-lookup.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-paint-thickness.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-sale-information.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-sale-information.js +2 -2
- package/dist/collection/components/vehicle-lookup/vehicle-service-history.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-service-history.js +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-specification.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-specification.js +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-warranty-details.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.css +1 -1
- package/dist/collection/components/vehicle-lookup/vehicle-warranty-timeline.js +1 -1
- package/dist/collection/components/vin-extractor/vin-extractor.css +1 -1
- package/dist/collection/components/vin-extractor/vin-extractor.js +1 -1
- package/dist/collection/features/form-hook/functions.js +42 -18
- package/dist/collection/global/lib/slot-day-rules.js +65 -0
- package/dist/collection/templates/assets/favicon.svg +17 -0
- package/dist/collection/templates/forms/docs-content/params.js +1199 -0
- package/dist/collection/templates/forms/docs-content/structure.js +1153 -0
- package/dist/collection/templates/forms/docs-content/theming.js +1240 -0
- package/dist/collection/templates/harness.js +595 -84
- package/dist/collection/templates/highlight.js +194 -0
- package/dist/collection/templates/nav.js +320 -0
- package/dist/collection/templates/site-header.js +642 -0
- package/dist/collection/templates/site-locales.js +771 -0
- package/dist/components/branch-date-dropdown.d.ts +11 -0
- package/dist/components/branch-date-dropdown.js +5 -0
- package/dist/components/branch-date-picker.d.ts +11 -0
- package/dist/components/branch-date-picker.js +5 -0
- package/dist/components/branch-slot-dropdown.js +1 -1
- package/dist/components/branch-slot-picker.js +1 -1
- package/dist/components/dead-stock-lookup.js +1 -1
- package/dist/components/distributor-lookup.js +1 -1
- package/dist/components/flexible-container.js +1 -1
- package/dist/components/form-checkbox.js +1 -1
- package/dist/components/form-date-picker.js +1 -1
- package/dist/components/form-dialog.js +1 -1
- package/dist/components/form-file.js +1 -1
- package/dist/components/form-input-preview.js +1 -1
- package/dist/components/form-input.js +1 -1
- package/dist/components/form-phone-number.js +1 -1
- package/dist/components/form-picker-input.js +1 -1
- package/dist/components/form-select.js +1 -1
- package/dist/components/form-shadow-input.js +1 -1
- package/dist/components/form-stepper-control.js +1 -1
- package/dist/components/form-stepper-submit.js +1 -1
- package/dist/components/form-stepper.js +1 -1
- package/dist/components/form-structure-error.js +1 -1
- package/dist/components/form-structure.js +1 -1
- package/dist/components/form-submit.js +1 -1
- package/dist/components/form-switch.js +1 -1
- package/dist/components/form-text-area.js +1 -1
- package/dist/components/form-time-picker.js +1 -1
- package/dist/components/form-vin-input.js +1 -1
- package/dist/components/general-form.js +1 -1
- package/dist/components/general-inquiry-form.js +1 -1
- package/dist/components/information-table.js +1 -1
- package/dist/components/loading-spinner.js +1 -1
- package/dist/components/manufacturer-lookup.js +1 -1
- package/dist/components/manufacturer-part-lookup.js +1 -1
- package/dist/components/p--lk4OUJg.js +5 -0
- package/dist/components/p-3450p9UN.js +5 -0
- package/dist/components/{p-Dd_Xnn2b.js → p-3kY-T9ID.js} +1 -1
- package/dist/components/p-40jijfEq.js +5 -0
- package/dist/components/{p-_apNp6J3.js → p-BJrbtmnU.js} +1 -1
- package/dist/components/p-BTt7sEhA.js +5 -0
- package/dist/components/p-BcbFXFPI.js +5 -0
- package/dist/components/{p-DpXLfNHS.js → p-BgJljKxp.js} +1 -1
- package/dist/components/{p-1fzw9lBq.js → p-BiTpOAiT.js} +1 -1
- package/dist/components/p-BoQgpmtN.js +5 -0
- package/dist/components/p-BpHkd1L9.js +5 -0
- package/dist/components/{p-CC16uGpN.js → p-BwKzJeLy.js} +1 -1
- package/dist/components/{p-C8S2P4sw.js → p-BwcxrN3h.js} +1 -1
- package/dist/components/{p-CwbJMZVZ.js → p-C1I6zBo7.js} +1 -1
- package/dist/components/{p-DcMgXNpe.js → p-CC5K40ze.js} +1 -1
- package/dist/components/{p-B8hl68AM.js → p-CDdYNb7K.js} +1 -1
- package/dist/components/p-CE9wNugx.js +5 -0
- package/dist/components/p-CU0gZwVU.js +5 -0
- package/dist/components/{p-BdPZ7u2w.js → p-CUTQhKeo.js} +1 -1
- package/dist/components/{p-BbQAkWw4.js → p-CXigg5tn.js} +1 -1
- package/dist/components/p-CYuQunRn.js +5 -0
- package/dist/components/{p-B9xLzbPr.js → p-Ce2mazYo.js} +1 -1
- package/dist/components/p-CjQ2hRI-.js +5 -0
- package/dist/components/{p-l2FHTMzv.js → p-CjdYtmBI.js} +1 -1
- package/dist/components/{p-C6U9Fs9H.js → p-CmIFPUXD.js} +1 -1
- package/dist/components/{p-ClT5CzCZ.js → p-CsXGhc7r.js} +1 -1
- package/dist/components/{p-7Gq_FyNj.js → p-D1JLecvO.js} +1 -1
- package/dist/components/p-DDhVlLOx.js +5 -0
- package/dist/components/{p-D7Sj02XY.js → p-DFKEx7TJ.js} +1 -1
- package/dist/components/p-DQSUv7pB.js +5 -0
- package/dist/components/{p-Bb2xDuqh.js → p-DU9WzEFX.js} +1 -1
- package/dist/components/{p-LkNhSGDO.js → p-DaQOYb2R.js} +1 -1
- package/dist/components/p-Dd_3uKgv.js +5 -0
- package/dist/components/{p-DbnN292R.js → p-DdgLsuaX.js} +1 -1
- package/dist/components/p-DeeDRJ2C.js +5 -0
- package/dist/components/{p-Dsk1SNut.js → p-Dl0BmrLe.js} +1 -1
- package/dist/components/{p-B2w49gNR.js → p-Dsu3xdDz.js} +1 -1
- package/dist/components/{p-B7G2HjX0.js → p-Dts2Iuoc.js} +1 -1
- package/dist/components/p-DvcOTV3l.js +5 -0
- package/dist/components/{p-BaZAgTxG.js → p-HpXp7TBt.js} +1 -1
- package/dist/components/p-KSvRVGk-.js +5 -0
- package/dist/components/{p-BKzXBxxc.js → p-O0AragmD.js} +1 -1
- package/dist/components/{p-CL5G_ZDE.js → p-OdEwTuBq.js} +1 -1
- package/dist/components/{p-R_rAJ4hF.js → p-UeoCFDF-.js} +1 -1
- package/dist/components/{p-Qh1y1RV2.js → p-Wfd6v4yE.js} +1 -1
- package/dist/components/p-g-v1c-Sz.js +5 -0
- package/dist/components/{p-DtZM3yHS.js → p-kvRYCMvP.js} +1 -1
- package/dist/components/p-nX_t9aCK.js +5 -0
- package/dist/components/p-yWyKiQgx.js +5 -0
- package/dist/components/p-zeGxLJvE.js +5 -0
- package/dist/components/part-lookup.js +1 -1
- package/dist/components/service-booking-form.js +1 -1
- package/dist/components/shift-accordion.js +1 -1
- package/dist/components/shift-checkbox.js +1 -1
- package/dist/components/shift-portal.js +1 -1
- package/dist/components/shift-select-dropdown.js +1 -1
- package/dist/components/shift-select.js +1 -1
- package/dist/components/shift-slider.js +1 -1
- package/dist/components/shift-switch.js +1 -1
- package/dist/components/shift-tab-content.js +1 -1
- package/dist/components/shift-tabs.js +1 -1
- package/dist/components/ssc-lookup-form.js +1 -1
- package/dist/components/test-drive-form.js +1 -1
- package/dist/components/vehicle-accessories.js +1 -1
- package/dist/components/vehicle-claimable-items.js +1 -1
- package/dist/components/vehicle-item-claim-form.js +1 -1
- package/dist/components/vehicle-lookup.js +1 -1
- package/dist/components/vehicle-paint-thickness.js +1 -1
- package/dist/components/vehicle-quotation-form.js +1 -1
- package/dist/components/vehicle-sale-information.js +1 -1
- package/dist/components/vehicle-service-history.js +1 -1
- package/dist/components/vehicle-specification.js +1 -1
- package/dist/components/vehicle-warranty-details.js +1 -1
- package/dist/components/vehicle-warranty-timeline.js +1 -1
- package/dist/components/vin-extractor.js +1 -1
- package/dist/esm/{branch-slot-dropdown_15.entry.js → branch-date-dropdown_17.entry.js} +960 -71
- package/dist/esm/dead-stock-lookup_3.entry.js +9 -9
- package/dist/esm/flexible-container.entry.js +3 -3
- package/dist/esm/form-checkbox.entry.js +2 -2
- package/dist/esm/form-date-picker.entry.js +5 -5
- package/dist/esm/form-input_7.entry.js +19 -17
- package/dist/esm/form-switch.entry.js +2 -2
- package/dist/esm/form-time-picker.entry.js +6 -6
- package/dist/esm/{functions-Ccrile_u.js → functions-DJ_k25ew.js} +44 -20
- package/dist/esm/general-form.entry.js +6 -6
- package/dist/esm/general-inquiry-form.entry.js +6 -6
- package/dist/esm/{get-local-language-oNw84Rsz.js → get-local-language-Bx6zWD91.js} +1 -1
- package/dist/esm/{get-mock-files-C26lznN1.js → get-mock-files-BBSjMVMQ.js} +1 -1
- package/dist/esm/information-table.entry.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loading-spinner.entry.js +2 -2
- package/dist/esm/manufacturer-part-lookup.entry.js +3 -3
- package/dist/esm/{mappers-9IKbvPiR.js → mappers-CZs2R7k6.js} +54 -18
- package/dist/esm/part-lookup.entry.js +2 -2
- package/dist/esm/service-booking-form.entry.js +6 -6
- package/dist/esm/shift-accordion.entry.js +1 -1
- package/dist/esm/shift-checkbox.entry.js +2 -2
- package/dist/esm/shift-components.js +1 -1
- package/dist/esm/shift-slider.entry.js +1 -1
- package/dist/esm/shift-switch.entry.js +2 -2
- package/dist/esm/shift-tab-content.entry.js +2 -2
- package/dist/esm/shift-tabs_2.entry.js +10 -10
- package/dist/esm/ssc-lookup-form.entry.js +6 -6
- package/dist/esm/test-drive-form.entry.js +6 -6
- package/dist/esm/vehicle-accessories_8.entry.js +21 -21
- package/dist/esm/vehicle-lookup.entry.js +3 -3
- package/dist/esm/vehicle-quotation-form.entry.js +17 -18
- package/dist/integration-manifest.json +1 -1
- package/dist/shift-components/{p-BugYpTL6.js → p--hCDlSpp.js} +1 -1
- package/dist/shift-components/p-020fbe81.entry.js +5 -0
- package/dist/shift-components/p-0398f3c4.entry.js +5 -0
- package/dist/shift-components/{p-0da97a29.entry.js → p-10882717.entry.js} +1 -1
- package/dist/shift-components/p-165ff895.entry.js +5 -0
- package/dist/shift-components/{p-d59276b6.entry.js → p-1a0b40e6.entry.js} +1 -1
- package/dist/shift-components/{p-e90c354a.entry.js → p-1be40385.entry.js} +1 -1
- package/dist/shift-components/{p-31718ec2.entry.js → p-327774de.entry.js} +1 -1
- package/dist/shift-components/{p-urLq-GEs.js → p-3YRvA44H.js} +1 -1
- package/dist/shift-components/{p-323ffb6e.entry.js → p-79e08717.entry.js} +1 -1
- package/dist/shift-components/{p-34e9053b.entry.js → p-7b1c5abb.entry.js} +1 -1
- package/dist/shift-components/{p-30e84a3b.entry.js → p-7e89d3fc.entry.js} +1 -1
- package/dist/shift-components/{p-729d8d4b.entry.js → p-7f2e2763.entry.js} +1 -1
- package/dist/shift-components/{p-eb265a3e.entry.js → p-81257775.entry.js} +1 -1
- package/dist/shift-components/{p-3aad8840.entry.js → p-8870420e.entry.js} +1 -1
- package/dist/shift-components/{p-c9ba7fd5.entry.js → p-8d205235.entry.js} +1 -1
- package/dist/shift-components/{p-09a0fd99.entry.js → p-95a4096f.entry.js} +1 -1
- package/dist/shift-components/p-B9INqdFT.js +5 -0
- package/dist/shift-components/p-DwFtCPcT.js +5 -0
- package/dist/shift-components/{p-d58404bd.entry.js → p-a0dc1bcc.entry.js} +1 -1
- package/dist/shift-components/{p-53cd54e8.entry.js → p-a1b97bce.entry.js} +1 -1
- package/dist/shift-components/p-bd1a0763.entry.js +5 -0
- package/dist/shift-components/{p-a15fdf1e.entry.js → p-c197b86b.entry.js} +1 -1
- package/dist/shift-components/{p-63713eae.entry.js → p-c2512cb2.entry.js} +1 -1
- package/dist/shift-components/{p-f2a546db.entry.js → p-cc900265.entry.js} +1 -1
- package/dist/shift-components/{p-1355934b.entry.js → p-d23d9d1f.entry.js} +1 -1
- package/dist/shift-components/p-ddf6c6f6.entry.js +5 -0
- package/dist/shift-components/{p-68722c7b.entry.js → p-e02f3a3f.entry.js} +1 -1
- package/dist/shift-components/{p-9b13a82b.entry.js → p-e72947e0.entry.js} +1 -1
- package/dist/shift-components/p-f30a355a.entry.js +5 -0
- package/dist/shift-components/shift-components.esm.js +1 -1
- package/dist/stencil-docs.json +1677 -12
- package/dist/templates/production-host/vehicle-service-history.html +14 -0
- package/dist/types/components/form-elements/branch-date-dropdown.d.ts +74 -0
- package/dist/types/components/form-elements/branch-date-picker.d.ts +174 -0
- package/dist/types/components/form-elements/branch-slot-dropdown.d.ts +6 -0
- package/dist/types/components/form-elements/branch-slot-picker.d.ts +27 -0
- package/dist/types/components/forms/defaults/mappers.d.ts +15 -9
- package/dist/types/components.d.ts +533 -6
- package/dist/types/features/form-hook/functions.d.ts +14 -0
- package/dist/types/global/lib/slot-day-rules.d.ts +25 -0
- package/dist/types/locales/vehicleLookup/serviceHistory/type.d.ts +2 -2
- package/dist/types/locales/vehicleLookup/warrantyTimeline/type.d.ts +4 -4
- package/dist/types/locales/vehicleLookup/wrapper-type.d.ts +2 -2
- package/package.json +6 -1
- package/dist/components/p-6RmAcc2q.js +0 -5
- package/dist/components/p-8jIkK-Kb.js +0 -5
- package/dist/components/p-BUepGDZV.js +0 -5
- package/dist/components/p-B__72-PA.js +0 -5
- package/dist/components/p-Bj3cvdzl.js +0 -5
- package/dist/components/p-BvMcY9Sk.js +0 -5
- package/dist/components/p-C-yTwaAA.js +0 -5
- package/dist/components/p-C8B9jarP.js +0 -5
- package/dist/components/p-CCounVqq.js +0 -5
- package/dist/components/p-CIPh05sT.js +0 -5
- package/dist/components/p-CKwgX_v0.js +0 -5
- package/dist/components/p-CPBmhspv.js +0 -5
- package/dist/components/p-Cm94OAx9.js +0 -5
- package/dist/components/p-DWjIts4C.js +0 -5
- package/dist/components/p-DeipsN8N.js +0 -5
- package/dist/components/p-DkagL-e-.js +0 -5
- package/dist/components/p-G7teNuSi.js +0 -5
- package/dist/shift-components/p-12e295ba.entry.js +0 -5
- package/dist/shift-components/p-138af7f3.entry.js +0 -5
- package/dist/shift-components/p-327fddd8.entry.js +0 -5
- package/dist/shift-components/p-8374f629.entry.js +0 -5
- package/dist/shift-components/p-awXOnuq1.js +0 -5
- package/dist/shift-components/p-c25a6c0d.entry.js +0 -5
- package/dist/shift-components/p-dacdff2a.entry.js +0 -5
- package/dist/shift-components/p-hABirfUj.js +0 -5
- /package/dist/collection/templates/{vehicle-lookup → prototypes}/prototype-assets/extended-warranty/adp-logo.svg +0 -0
|
@@ -0,0 +1,771 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Landing-page copy in the four languages the components themselves support,
|
|
3
|
+
* plus the language state that goes with it.
|
|
4
|
+
*
|
|
5
|
+
* Loaded as a plain blocking script in <head> — deliberately not a module, for
|
|
6
|
+
* the same reason as `harness-theme.js`: a module is deferred, and the page
|
|
7
|
+
* would paint left-to-right before an RTL choice was applied. Direction is a
|
|
8
|
+
* layout property; it cannot be corrected after first paint without a visible
|
|
9
|
+
* jump.
|
|
10
|
+
*
|
|
11
|
+
* Scope is the landing page and the 404 page. Harness pages have their own
|
|
12
|
+
* language control inside `harness()`, because there the language is an input to
|
|
13
|
+
* the component under test rather than a property of the page. Both use the same
|
|
14
|
+
* `?lang=` parameter, so a choice survives navigating between them.
|
|
15
|
+
*
|
|
16
|
+
* ── Accuracy ──────────────────────────────────────────────────────────────────
|
|
17
|
+
* Several claims here were wrong in the first pass and were corrected against the
|
|
18
|
+
* source. Keep them honest; an integrator finds a false claim within an hour and
|
|
19
|
+
* then trusts nothing else on the page. In particular:
|
|
20
|
+
*
|
|
21
|
+
* • Credentials are the HOST's job. Every lookup element takes a `headers`
|
|
22
|
+
* prop and `fetchVin(vin, headers)`; the element sends none of its own.
|
|
23
|
+
* • There is NO retry. A failed request stays failed.
|
|
24
|
+
* • The lookup elements reset inherited styles and are not host-themeable.
|
|
25
|
+
* • The form elements portal their dropdowns and dialogs onto document.body,
|
|
26
|
+
* so those DO inherit host styles.
|
|
27
|
+
* • `base-url` is a path prefix the element concatenates onto — the trailing
|
|
28
|
+
* slash matters.
|
|
29
|
+
* • `fetchVin` validates the ISO 3779 check digit, so an invented 17-character
|
|
30
|
+
* string is rejected.
|
|
31
|
+
* • A document can register a custom element tag once. Two versions, or the
|
|
32
|
+
* whole-library bundle plus per-component modules, is a runtime failure.
|
|
33
|
+
*
|
|
34
|
+
* Translations are machine-written and want a native pass before this is shown
|
|
35
|
+
* to anyone outside the team — the English is the source of truth.
|
|
36
|
+
*/
|
|
37
|
+
(function () {
|
|
38
|
+
const KEY = 'adp-site-language';
|
|
39
|
+
|
|
40
|
+
const LANGUAGES = [
|
|
41
|
+
{ code: 'en', label: 'English', dir: 'ltr' },
|
|
42
|
+
{ code: 'ar', label: 'العربية', dir: 'rtl' },
|
|
43
|
+
{ code: 'ku', label: 'کوردی', dir: 'rtl' },
|
|
44
|
+
{ code: 'ru', label: 'Русский', dir: 'ltr' },
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const STRINGS = {
|
|
48
|
+
en: {
|
|
49
|
+
'skip': 'Skip to content',
|
|
50
|
+
'nav.components': 'Components',
|
|
51
|
+
'nav.docs': 'Documentation',
|
|
52
|
+
'nav.home': 'Home',
|
|
53
|
+
'nav.menu': 'Menu',
|
|
54
|
+
'nav.close': 'Close',
|
|
55
|
+
'nav.filter': 'Filter pages…',
|
|
56
|
+
'nav.empty': 'No demo pages published yet — the elements ship in the package.',
|
|
57
|
+
'nav.language': 'Language',
|
|
58
|
+
'nav.theme': 'Theme',
|
|
59
|
+
'theme.system': 'System',
|
|
60
|
+
'theme.light': 'Light',
|
|
61
|
+
'theme.dark': 'Dark',
|
|
62
|
+
|
|
63
|
+
'hero.eyebrow': 'Shift Framework · Automotive Dealer Platform',
|
|
64
|
+
'hero.title': 'Embed ADP lookups and forms in your site',
|
|
65
|
+
'hero.lede':
|
|
66
|
+
'Custom elements that render Automotive Dealer Platform vehicle, part and service data on any page — no framework, no build step. Load one module, place the element, give it the base URL your platform operator issued, then call one method.',
|
|
67
|
+
'hero.primary': 'Quickstart',
|
|
68
|
+
'hero.secondary': 'Installation',
|
|
69
|
+
'hero.package': 'Package',
|
|
70
|
+
'hero.version': 'Latest version',
|
|
71
|
+
'hero.registry': 'Release history',
|
|
72
|
+
|
|
73
|
+
'quickstart.title': 'Quickstart',
|
|
74
|
+
'quickstart.lede': 'A working embed in three steps. This is the whole integration.',
|
|
75
|
+
'quickstart.steps': [
|
|
76
|
+
{ name: 'Load the package', body: 'One module tag. It registers every element and lazy-loads each one’s code the first time that element appears on the page.' },
|
|
77
|
+
{ name: 'Place the element', body: 'Give it your base URL and the language the page is in. Keep the trailing slash — the element appends the identifier to it.' },
|
|
78
|
+
{ name: 'Ask it a question', body: 'Call the element’s method with a VIN or a part number. It owns the request, the loading state and the error state from there.' },
|
|
79
|
+
],
|
|
80
|
+
'quickstart.note':
|
|
81
|
+
'Your base URL and the access that goes with it are issued by the platform operator — ask before you start, and allow-list the origins you will embed on. The VIN must be real: fetchVin verifies the ISO check digit and rejects an invented 17-character string.',
|
|
82
|
+
'quickstart.network':
|
|
83
|
+
'Three hosts must be reachable from the browser, and they need two different Content-Security-Policy directives. In connect-src: your base URL, and the CDN, from which the element fetches its own translation files — including when you install from npm. In style-src and font-src: fonts.googleapis.com and fonts.gstatic.com, because the package appends a font stylesheet to your document head on load. Miss the first and the element renders with empty labels and no error; miss the second and it renders in the wrong typeface.',
|
|
84
|
+
|
|
85
|
+
'install.title': 'Install',
|
|
86
|
+
'install.lede':
|
|
87
|
+
'Load the whole package from the CDN at @latest. It registers every element but downloads code only for the ones your page actually uses, when it uses them — so the recommended path is also the one you have to think about least.',
|
|
88
|
+
'install.library': 'Whole package',
|
|
89
|
+
'install.single': 'One element',
|
|
90
|
+
'install.recommended': 'Recommended',
|
|
91
|
+
'install.libraryNote':
|
|
92
|
+
'One tag, nothing to build. Every element is registered, but code is fetched per element at runtime, the first time that element appears — a page using one component downloads one component.',
|
|
93
|
+
'install.singleNote': 'The loader registers exactly the elements you name. Worth it only if you embed one element on a page where every kilobyte is argued over.',
|
|
94
|
+
'install.version': 'Version',
|
|
95
|
+
'install.pinned': 'Pinned',
|
|
96
|
+
'install.latest': 'Always latest',
|
|
97
|
+
'install.pinnedNote': 'Freezes behaviour at a version you tested. Choose this when a release has to be signed off before it can reach production.',
|
|
98
|
+
'install.latestNote':
|
|
99
|
+
'Recommended. Always the newest release, so a fix reaches your page without a redeploy. The one rule that still binds: a single document must never end up holding two versions — see below.',
|
|
100
|
+
'install.bundler': 'Using a bundler? npm install adp-web-components — then keep every import in the application on one version.',
|
|
101
|
+
'install.copy': 'Copy',
|
|
102
|
+
'install.copied': 'Copied',
|
|
103
|
+
'install.copyLabel': 'Copy code',
|
|
104
|
+
|
|
105
|
+
'versions.title': 'Versions and compatibility',
|
|
106
|
+
'versions.lede': 'Three rules. Breaking any of them fails at runtime, not at build time, and the symptom rarely points at the cause.',
|
|
107
|
+
'versions.items': [
|
|
108
|
+
{
|
|
109
|
+
name: 'One version per document',
|
|
110
|
+
body: 'A browser can register a custom element tag once and can never re-register it. If a page ends up holding two versions of this package, the second silently loses every tag it shares with the first — you get undefined rendered into the page, or a type error thrown while reading a form structure. In a single-page application every route shares one document, so they all move together.',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'Do not mix loading styles',
|
|
114
|
+
body: 'The whole-package bundle and the per-element modules are two separate runtimes. Loading both in one document has exactly the same effect as loading two versions. Pick one and keep to it.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'Pin deliberately',
|
|
118
|
+
body: 'Pinning an exact version freezes behaviour; @latest moves when we publish. Either is supported — what is not supported is different parts of one page disagreeing about which they use.',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
'versions.note': 'If one page genuinely cannot move to the same version as the rest, isolate it in an iframe. A separate document has its own element registry.',
|
|
122
|
+
|
|
123
|
+
'overview.title': 'What the element does, and what you do',
|
|
124
|
+
'overview.lede':
|
|
125
|
+
'Ready-to-embed elements, not a toolkit. Each one is a finished piece of product: a VIN lookup that renders a whole service history, a part search across three sources, a form that raises a real ticket. You place it and hand it a base URL — it does the rest.',
|
|
126
|
+
'overview.elementTitle': 'The element handles',
|
|
127
|
+
'overview.elementItems': [
|
|
128
|
+
'Calling the platform and reading what comes back',
|
|
129
|
+
'Its own loading, empty and error states',
|
|
130
|
+
'Formatting and text direction in four languages',
|
|
131
|
+
'Rendering inside a shadow root, so your CSS stays yours',
|
|
132
|
+
'Fetching its own code the first time it appears on a page',
|
|
133
|
+
],
|
|
134
|
+
'overview.youTitle': 'You provide',
|
|
135
|
+
'overview.youItems': ['A base URL, and the access issued with it', 'One line of markup where you want it to appear', 'One method call with a VIN or a part number'],
|
|
136
|
+
'overview.body3':
|
|
137
|
+
'That keeps the integration contract small: an element, a base URL, and the identifier you are asking about. The element owns the request, the response shape, the loading and error states, and the language. You own the base URL and the access it needs — and the element never retries, so a failed request stays failed until you ask again.',
|
|
138
|
+
|
|
139
|
+
'features.title': 'What you get',
|
|
140
|
+
'features.lede': 'What the element handles, and what it needs from your page.',
|
|
141
|
+
'features.items': [
|
|
142
|
+
{
|
|
143
|
+
name: 'Framework-agnostic',
|
|
144
|
+
body: 'Custom elements, not React or Blazor components — the same element works in plain HTML, React, Angular, Vue and Blazor. Strings and booleans pass as attributes anywhere. Object properties and methods such as fetchVin need a DOM reference, and Blazor needs setBlazorRef before callbacks fire.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'Style-isolated',
|
|
148
|
+
body: 'The elements you embed render in a shadow root: your CSS cannot break them, and their CSS stays out of your stylesheet. One exception to plan for — the form elements mount their dropdowns and dialogs on document.body so they can escape a clipping container, and those do inherit your page styles.',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'Right-to-left included',
|
|
152
|
+
body: 'English, Arabic, Kurdish and Russian. Set the language and the element re-renders, text direction included — the direction is read from the locale, not guessed.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'Fixed presentation',
|
|
156
|
+
body: 'The lookup elements ship their own layout and type and reset inherited styles, so a host stylesheet cannot shift them — and cannot restyle them either. The form elements are the configurable ones: they expose named parts and take a theme class.',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'Build before you have data',
|
|
160
|
+
body: 'Set is-dev on a lookup element and it answers from sample data instead of the network. The container elements ship their own; a standalone element takes yours through setMockData. On the form elements is-dev means something different — it points the submission at the non-production endpoint.',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
|
|
164
|
+
'groups.vehicle-lookup': 'Vehicle lookup',
|
|
165
|
+
'groups.part-lookup': 'Part lookup',
|
|
166
|
+
'groups.forms': 'Ticket forms',
|
|
167
|
+
'blurb.vehicle-lookup': 'VIN-driven lookups — specification, warranty, service history, paint thickness and claimable items.',
|
|
168
|
+
'blurb.part-lookup': 'Part number lookups across distributor, dead stock and manufacturer sources.',
|
|
169
|
+
'blurb.forms': 'Structure-driven forms that raise a ticket — inquiry, service booking, test drive and quotation.',
|
|
170
|
+
|
|
171
|
+
'components.title': 'Components',
|
|
172
|
+
'components.lede':
|
|
173
|
+
'Grouped by the part of the platform they read from. Every element listed here ships in the package today — where a group has no demo page yet, it is the demo that is pending, not the code.',
|
|
174
|
+
'components.empty': 'Demo pages are still being published. The elements are already in the package.',
|
|
175
|
+
'components.soon': 'Demo pending',
|
|
176
|
+
'components.page': 'page',
|
|
177
|
+
'components.pages': 'pages',
|
|
178
|
+
|
|
179
|
+
'stack.title': 'Where it sits',
|
|
180
|
+
'stack.lede':
|
|
181
|
+
'You call one package. It calls the ADP services over HTTPS, and everything behind that — data, rules, identity — stays the platform’s problem rather than your site’s.',
|
|
182
|
+
'stack.items': [
|
|
183
|
+
{ name: 'Shift Framework', body: 'ShiftEntity, ShiftIdentity and TypeAuth — entities, identity and type-safe authorization, shared by every Shift product.' },
|
|
184
|
+
{ name: 'ADP services', body: 'Lookup, synchronisation and domain models built on that foundation. They own the data and the rules.' },
|
|
185
|
+
{ name: 'adp-web-components', body: 'This package. Custom elements that call those services and render what comes back.' },
|
|
186
|
+
{ name: 'Your site', body: 'A module tag and an element.' },
|
|
187
|
+
],
|
|
188
|
+
|
|
189
|
+
'support.title': 'Next steps',
|
|
190
|
+
'support.ecosystem': 'More from ShiftSoftware',
|
|
191
|
+
'support.items': [
|
|
192
|
+
{ name: 'Documentation', body: 'Component reference, integration guides and the form structure schema.' },
|
|
193
|
+
{ name: 'Release history', body: 'Published versions and what shipped in each, on the registry.' },
|
|
194
|
+
{
|
|
195
|
+
name: 'Report a problem',
|
|
196
|
+
body: 'Send the package version, the element tag, the browser, and what the network tab shows for the failing request. Version and origin are what make a report reproducible.',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
'support.links': ['Open the documentation', 'View releases', null],
|
|
200
|
+
|
|
201
|
+
'footer.tagline': 'Part of the Automotive Dealer Platform by ShiftSoftware, built on the Shift Framework.',
|
|
202
|
+
'footer.built': 'Built from',
|
|
203
|
+
|
|
204
|
+
'notFound.title': 'This page is not published',
|
|
205
|
+
'notFound.body': 'The page you asked for is not part of this site yet. It may still be in development, or it may have moved.',
|
|
206
|
+
'notFound.home': 'Back to the landing page',
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
ar: {
|
|
210
|
+
'skip': 'تخطّي إلى المحتوى',
|
|
211
|
+
'nav.components': 'المكوّنات',
|
|
212
|
+
'nav.docs': 'التوثيق',
|
|
213
|
+
'nav.home': 'الرئيسية',
|
|
214
|
+
'nav.menu': 'القائمة',
|
|
215
|
+
'nav.close': 'إغلاق',
|
|
216
|
+
'nav.filter': 'تصفية الصفحات…',
|
|
217
|
+
'nav.empty': 'لم تُنشر صفحات تجريبية بعد — والعناصر نفسها موجودة في الحزمة.',
|
|
218
|
+
'nav.language': 'اللغة',
|
|
219
|
+
'nav.theme': 'المظهر',
|
|
220
|
+
'theme.system': 'النظام',
|
|
221
|
+
'theme.light': 'فاتح',
|
|
222
|
+
'theme.dark': 'داكن',
|
|
223
|
+
|
|
224
|
+
'hero.eyebrow': 'Shift Framework · Automotive Dealer Platform',
|
|
225
|
+
'hero.title': 'ضَع استعلامات ADP ونماذجها في موقعك',
|
|
226
|
+
'hero.lede':
|
|
227
|
+
'عناصر مخصّصة تعرض بيانات المركبات وقطع الغيار والخدمة في Automotive Dealer Platform على أي صفحة — بلا إطار عمل وبلا خطوة بناء. حمّل وحدة واحدة، وضَع العنصر، وأعطه العنوان الأساسي الصادر لك من مشغّل المنصّة، ثم استدعِ دالة واحدة.',
|
|
228
|
+
'hero.primary': 'البداية السريعة',
|
|
229
|
+
'hero.secondary': 'التثبيت',
|
|
230
|
+
'hero.package': 'الحزمة',
|
|
231
|
+
'hero.version': 'أحدث إصدار',
|
|
232
|
+
'hero.registry': 'سجلّ الإصدارات',
|
|
233
|
+
|
|
234
|
+
'quickstart.title': 'البداية السريعة',
|
|
235
|
+
'quickstart.lede': 'تضمين عامل في ثلاث خطوات. هذا هو التكامل كلّه.',
|
|
236
|
+
'quickstart.steps': [
|
|
237
|
+
{ name: 'حمّل الحزمة', body: 'وسم وحدة واحد. يسجّل كل العناصر ويحمّل شيفرة كل عنصر عند أول ظهور له في الصفحة.' },
|
|
238
|
+
{ name: 'ضَع العنصر', body: 'أعطه عنوانك الأساسي ولغة الصفحة. وأبقِ الشرطة المائلة في آخره — فالعنصر يُلحق المعرّف به.' },
|
|
239
|
+
{ name: 'اطرح السؤال', body: 'استدعِ دالة العنصر بـ VIN أو رقم القطعة. ومن تلك اللحظة يتولّى الطلب وحالة التحميل وحالة الخطأ.' },
|
|
240
|
+
],
|
|
241
|
+
'quickstart.note':
|
|
242
|
+
'يصدر مشغّل المنصّة عنوانك الأساسي والصلاحية المرافقة له — اسأل قبل أن تبدأ، وأدرج النطاقات التي ستضمّن فيها في قائمة السماح. ويجب أن يكون VIN حقيقيًا: تتحقق fetchVin من رقم التدقيق وفق ISO وترفض أي سلسلة مؤلَّفة من 17 حرفًا.',
|
|
243
|
+
'quickstart.network':
|
|
244
|
+
'يجب أن تكون ثلاثة مضيفات قابلة للوصول من المتصفّح، وتحتاج إلى توجيهين مختلفين في سياسة أمان المحتوى. في connect-src: عنوانك الأساسي، و CDN الذي يجلب منه العنصر ملفات الترجمة الخاصة به — حتى عند التثبيت من npm. وفي style-src و font-src: fonts.googleapis.com و fonts.gstatic.com، لأن الحزمة تُلحق ورقة أنماط خطوط برأس مستندك عند التحميل. فإن أغفلت الأول ظهر العنصر بعناوين فارغة وبلا خطأ، وإن أغفلت الثاني ظهر بخط غير صحيح.',
|
|
245
|
+
|
|
246
|
+
'install.title': 'التثبيت',
|
|
247
|
+
'install.lede':
|
|
248
|
+
'حمّل الحزمة كاملة من CDN على @latest. تسجّل كل العناصر، لكنها لا تنزّل شيفرة إلا للعناصر التي تستخدمها صفحتك فعلًا، وعند استخدامها — فالطريق الموصى به هو أقلّها حاجة إلى تفكير.',
|
|
249
|
+
'install.library': 'الحزمة كاملة',
|
|
250
|
+
'install.single': 'عنصر واحد',
|
|
251
|
+
'install.recommended': 'موصى به',
|
|
252
|
+
'install.libraryNote':
|
|
253
|
+
'وسم واحد، وبلا بناء. تُسجَّل كل العناصر، لكن الشيفرة تُجلب لكل عنصر وقت التشغيل عند أول ظهور له — فالصفحة التي تستخدم مكوّنًا واحدًا تنزّل مكوّنًا واحدًا.',
|
|
254
|
+
'install.singleNote': 'يسجّل المُحمِّل العناصر التي تسمّيها فقط. ولا يستحق العناء إلا إن ضمّنت عنصرًا واحدًا في صفحة يُحاسَب فيها كل كيلوبايت.',
|
|
255
|
+
'install.version': 'الإصدار',
|
|
256
|
+
'install.pinned': 'مثبّت',
|
|
257
|
+
'install.latest': 'الأحدث دائمًا',
|
|
258
|
+
'install.pinnedNote': 'يجمّد السلوك عند إصدار اختبرته. اختره حين يلزم اعتماد الإصدار قبل وصوله إلى الإنتاج.',
|
|
259
|
+
'install.latestNote':
|
|
260
|
+
'موصى به. أحدث إصدار دائمًا، فيصل الإصلاح إلى صفحتك بلا إعادة نشر. والقاعدة الوحيدة التي تبقى ملزمة: ألّا يحمل المستند الواحد إصدارين أبدًا — انظر أدناه.',
|
|
261
|
+
'install.bundler': 'تستخدم مُجمِّعًا؟ npm install adp-web-components — ثم أبقِ كل عمليات الاستيراد في التطبيق على إصدار واحد.',
|
|
262
|
+
'install.copy': 'نسخ',
|
|
263
|
+
'install.copied': 'تم النسخ',
|
|
264
|
+
'install.copyLabel': 'نسخ الشيفرة',
|
|
265
|
+
|
|
266
|
+
'versions.title': 'الإصدارات والتوافق',
|
|
267
|
+
'versions.lede': 'ثلاث قواعد. مخالفة أي منها تفشل وقت التشغيل لا وقت البناء، ونادرًا ما يدلّ العَرَض على السبب.',
|
|
268
|
+
'versions.items': [
|
|
269
|
+
{
|
|
270
|
+
name: 'إصدار واحد لكل مستند',
|
|
271
|
+
body: 'يسجّل المتصفّح وسم العنصر المخصّص مرة واحدة ولا يمكنه إعادة تسجيله أبدًا. فإن حملت الصفحة إصدارين من هذه الحزمة، فقد الثاني بصمت كل وسم يشترك فيه مع الأول — فتظهر undefined في الصفحة، أو يُرمى خطأ نوع أثناء قراءة بنية نموذج. وفي تطبيق أحادي الصفحة تتشارك كل المسارات مستندًا واحدًا، فتنتقل جميعها معًا.',
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'لا تخلط أسلوبَي التحميل',
|
|
275
|
+
body: 'حزمة المكتبة كاملة ووحدات العناصر المفردة زمنا تشغيل منفصلان. وتحميلهما معًا في مستند واحد أثره نفسه أثر تحميل إصدارين. اختر واحدًا والتزم به.',
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: 'ثبّت عن قصد',
|
|
279
|
+
body: 'تثبيت إصدار محدّد يجمّد السلوك، و@latest يتحرّك عند كل نشر. وكلاهما مدعوم — غير المدعوم هو أن تختلف أجزاء الصفحة الواحدة على أيّهما تستخدم.',
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
'versions.note': 'إن تعذّر فعلًا نقل صفحة واحدة إلى إصدار البقية، فاعزلها في إطار iframe. فللمستند المنفصل سجلّ عناصر خاص به.',
|
|
283
|
+
|
|
284
|
+
'overview.title': 'ما يفعله العنصر، وما تفعله أنت',
|
|
285
|
+
'overview.lede':
|
|
286
|
+
'عناصر جاهزة للتضمين، لا مجموعة أدوات. كل عنصر منها منتج مكتمل: استعلام بـ VIN يعرض سجل خدمة كاملًا، وبحث عن قطعة عبر ثلاثة مصادر، ونموذج يُنشئ طلبًا حقيقيًا. أنت تضعه وتعطيه عنوانًا أساسيًا — وهو يتكفّل بالباقي.',
|
|
287
|
+
'overview.elementTitle': 'العنصر يتكفّل بـ',
|
|
288
|
+
'overview.elementItems': [
|
|
289
|
+
'استدعاء المنصّة وقراءة ما يعود منها',
|
|
290
|
+
'حالات التحميل والفراغ والخطأ الخاصة به',
|
|
291
|
+
'التنسيق واتجاه النص في أربع لغات',
|
|
292
|
+
'العرض داخل shadow root، فتبقى أنماطك لك',
|
|
293
|
+
'جلب شيفرته عند أول ظهور له في الصفحة',
|
|
294
|
+
],
|
|
295
|
+
'overview.youTitle': 'وأنت تقدّم',
|
|
296
|
+
'overview.youItems': ['عنوانًا أساسيًا، والصلاحية الصادرة معه', 'سطرًا واحدًا من الوسوم حيث تريده أن يظهر', 'استدعاءً واحدًا للدالة بـ VIN أو رقم قطعة'],
|
|
297
|
+
'overview.body3':
|
|
298
|
+
'وهذا يُبقي عقد التكامل صغيرًا: عنصر، وعنوان أساسي، والمعرّف الذي تسأل عنه. العنصر يملك الطلب وشكل الاستجابة وحالات التحميل والخطأ واللغة. وأنت تملك العنوان الأساسي والصلاحية التي يحتاجها — والعنصر لا يعيد المحاولة أبدًا، فالطلب الفاشل يبقى فاشلًا حتى تسأل من جديد.',
|
|
299
|
+
|
|
300
|
+
'features.title': 'ماذا تحصل عليه',
|
|
301
|
+
'features.lede': 'ما يتكفّل به العنصر، وما يحتاجه من صفحتك.',
|
|
302
|
+
'features.items': [
|
|
303
|
+
{
|
|
304
|
+
name: 'مستقل عن أطر العمل',
|
|
305
|
+
body: 'عناصر مخصّصة، لا مكوّنات React أو Blazor — العنصر نفسه يعمل في HTML الصِّرف و React و Angular و Vue و Blazor. تُمرَّر النصوص والقيم المنطقية كسمات في كل مكان. أما الخصائص الكائنية والدوال مثل fetchVin فتحتاج مرجع DOM، و Blazor يحتاج setBlazorRef قبل أن تعمل ردود النداء.',
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'معزول التنسيق',
|
|
309
|
+
body: 'العناصر التي تضمّنها تُعرض داخل shadow root: لا تستطيع أنماطك كسرها، ولا تتسرّب أنماطها إلى ورقة أنماطك. مع استثناء واحد خطّط له — عناصر النماذج تركّب قوائمها ونوافذها على document.body لتفلت من حاوية قاصّة، وتلك ترث أنماط صفحتك.',
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
name: 'يدعم الكتابة من اليمين',
|
|
313
|
+
body: 'الإنجليزية والعربية والكردية والروسية. اضبط اللغة فيُعاد عرض العنصر، مع اتجاه النص — والاتجاه يُقرأ من ملف اللغة لا يُخمَّن.',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'عرض ثابت',
|
|
317
|
+
body: 'عناصر الاستعلام تحمل تخطيطها وخطوطها وتعيد ضبط الأنماط الموروثة، فلا تستطيع ورقة أنماط مضيفة أن تزحزحها — ولا أن تعيد تنسيقها. أما عناصر النماذج فهي القابلة للضبط: تكشف أجزاءً مسمّاة وتقبل صنف مظهر.',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
name: 'ابنِ قبل أن تحصل على البيانات',
|
|
321
|
+
body: 'اضبط is-dev على عنصر استعلام فيجيب من بيانات نموذجية بدل الشبكة. العناصر الحاوية تحمل بياناتها، والعنصر المفرد يأخذ بياناتك عبر setMockData. وعلى عناصر النماذج يعني is-dev شيئًا آخر — إذ يوجّه الإرسال إلى نقطة غير الإنتاج.',
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
|
|
325
|
+
'groups.vehicle-lookup': 'البحث عن المركبات',
|
|
326
|
+
'groups.part-lookup': 'البحث عن قطع الغيار',
|
|
327
|
+
'groups.forms': 'نماذج الطلبات',
|
|
328
|
+
'blurb.vehicle-lookup': 'استعلامات بحسب VIN — المواصفات والضمان وسجل الخدمة وسماكة الطلاء والبنود القابلة للمطالبة.',
|
|
329
|
+
'blurb.part-lookup': 'استعلامات بأرقام القطع عبر مصادر الموزّع والمخزون الراكد والمُصنّع.',
|
|
330
|
+
'blurb.forms': 'نماذج مبنية على بنية معرّفة تُنشئ طلبًا — استفسار وحجز خدمة وقيادة تجريبية وعرض سعر.',
|
|
331
|
+
|
|
332
|
+
'components.title': 'المكوّنات',
|
|
333
|
+
'components.lede': 'مجمّعة حسب الجزء الذي تقرأ منه في المنصّة. وكل عنصر مذكور هنا موجود في الحزمة اليوم — فحيث لا توجد صفحة تجريبية بعد، فالمعلَّق هو العرض لا الشيفرة.',
|
|
334
|
+
'components.empty': 'ما تزال الصفحات التجريبية قيد النشر. أما العناصر فهي في الحزمة أصلًا.',
|
|
335
|
+
'components.soon': 'العرض قريبًا',
|
|
336
|
+
'components.page': 'صفحة',
|
|
337
|
+
'components.pages': 'صفحة',
|
|
338
|
+
|
|
339
|
+
'stack.title': 'موقعها في المنظومة',
|
|
340
|
+
'stack.lede': 'أنت تستدعي حزمة واحدة. وهي تستدعي خدمات ADP عبر HTTPS، وكل ما خلف ذلك — البيانات والقواعد والهوية — يبقى شأن المنصّة لا شأن موقعك.',
|
|
341
|
+
'stack.items': [
|
|
342
|
+
{ name: 'Shift Framework', body: 'ShiftEntity و ShiftIdentity و TypeAuth — الكيانات والهوية والتفويض الآمن نوعيًا، وتشترك فيها جميع منتجات Shift.' },
|
|
343
|
+
{ name: 'خدمات ADP', body: 'الاستعلام والمزامنة ونماذج المجال المبنية على ذلك الأساس. وهي التي تملك البيانات والقواعد.' },
|
|
344
|
+
{ name: 'adp-web-components', body: 'هذه الحزمة. عناصر مخصّصة تستدعي تلك الخدمات وتعرض ما يعود منها.' },
|
|
345
|
+
{ name: 'موقعك', body: 'وسم وحدة وعنصر واحد.' },
|
|
346
|
+
],
|
|
347
|
+
|
|
348
|
+
'support.title': 'الخطوات التالية',
|
|
349
|
+
'support.ecosystem': 'المزيد من ShiftSoftware',
|
|
350
|
+
'support.items': [
|
|
351
|
+
{ name: 'التوثيق', body: 'مرجع المكوّنات وأدلة التكامل ومخطّط بنية النماذج.' },
|
|
352
|
+
{ name: 'سجلّ الإصدارات', body: 'الإصدارات المنشورة وما صدر في كل منها، على السجلّ.' },
|
|
353
|
+
{
|
|
354
|
+
name: 'الإبلاغ عن مشكلة',
|
|
355
|
+
body: 'أرسل إصدار الحزمة، ووسم العنصر، والمتصفّح، وما يظهره تبويب الشبكة للطلب الفاشل. فالإصدار والنطاق هما ما يجعل البلاغ قابلًا لإعادة الإنتاج.',
|
|
356
|
+
},
|
|
357
|
+
],
|
|
358
|
+
'support.links': ['افتح التوثيق', 'عرض الإصدارات', null],
|
|
359
|
+
|
|
360
|
+
'footer.tagline': 'جزء من Automotive Dealer Platform من ShiftSoftware، مبنيّة على Shift Framework.',
|
|
361
|
+
'footer.built': 'مبني من',
|
|
362
|
+
|
|
363
|
+
'notFound.title': 'هذه الصفحة غير منشورة',
|
|
364
|
+
'notFound.body': 'الصفحة المطلوبة ليست جزءًا من هذا الموقع بعد. قد تكون قيد التطوير أو تكون قد نُقلت.',
|
|
365
|
+
'notFound.home': 'العودة إلى الصفحة الرئيسية',
|
|
366
|
+
},
|
|
367
|
+
|
|
368
|
+
ku: {
|
|
369
|
+
'skip': 'بازدان بۆ ناوەڕۆک',
|
|
370
|
+
'nav.components': 'پێکهاتەکان',
|
|
371
|
+
'nav.docs': 'بەڵگەنامە',
|
|
372
|
+
'nav.home': 'سەرەتا',
|
|
373
|
+
'nav.menu': 'پێڕست',
|
|
374
|
+
'nav.close': 'داخستن',
|
|
375
|
+
'nav.filter': 'پاڵاوتنی لاپەڕەکان…',
|
|
376
|
+
'nav.empty': 'هێشتا هیچ لاپەڕەیەکی نموونە بڵاو نەکراوەتەوە — بەڵام توخمەکان لە پاکێجەکەدان.',
|
|
377
|
+
'nav.language': 'زمان',
|
|
378
|
+
'nav.theme': 'ڕووکار',
|
|
379
|
+
'theme.system': 'سیستەم',
|
|
380
|
+
'theme.light': 'ڕووناک',
|
|
381
|
+
'theme.dark': 'تاریک',
|
|
382
|
+
|
|
383
|
+
'hero.eyebrow': 'Shift Framework · Automotive Dealer Platform',
|
|
384
|
+
'hero.title': 'گەڕان و فۆرمەکانی ADP بخە ناو ماڵپەڕەکەت',
|
|
385
|
+
'hero.lede':
|
|
386
|
+
'توخمی تایبەت کە داتای ئۆتۆمبێل و پارچە و خزمەتگوزاری Automotive Dealer Platform لە هەر لاپەڕەیەکدا پیشان دەدەن — بەبێ چوارچێوە، بەبێ هەنگاوی بنیاتنان. یەک مۆدیول باربکە، توخمەکە دابنێ، ئەو ناونیشانە بنەڕەتییەی بەڕێوەبەری پلاتفۆرم پێیداویت بیدەرێ، ئینجا یەک دەستەواژە بانگ بکە.',
|
|
387
|
+
'hero.primary': 'دەستپێکی خێرا',
|
|
388
|
+
'hero.secondary': 'دامەزراندن',
|
|
389
|
+
'hero.package': 'پاکێج',
|
|
390
|
+
'hero.version': 'دوایین وەشان',
|
|
391
|
+
'hero.registry': 'مێژووی وەشانەکان',
|
|
392
|
+
|
|
393
|
+
'quickstart.title': 'دەستپێکی خێرا',
|
|
394
|
+
'quickstart.lede': 'یەکخستنێکی کارا بە سێ هەنگاو. ئەمە هەموو یەکخستنەکەیە.',
|
|
395
|
+
'quickstart.steps': [
|
|
396
|
+
{ name: 'پاکێجەکە باربکە', body: 'یەک تاگی مۆدیول. هەموو توخمەکان تۆمار دەکات و کۆدی هەر توخمێک لە یەکەم دەرکەوتنیدا لە لاپەڕەکەدا دەهێنێت.' },
|
|
397
|
+
{ name: 'توخمەکە دابنێ', body: 'ناونیشانی بنەڕەتی و زمانی لاپەڕەکەی پێبدە. سلاشەکەی کۆتایی بهێڵەوە — چونکە توخمەکە ناسنامەکەی پێوە دەلکێنێت.' },
|
|
398
|
+
{ name: 'پرسیارەکە بکە', body: 'میسۆدی توخمەکە بە VIN یان ژمارەی پارچە بانگ بکە. لەوێوە خۆی داواکاری و دۆخی بارکردن و دۆخی هەڵە بەڕێوە دەبات.' },
|
|
399
|
+
],
|
|
400
|
+
'quickstart.note':
|
|
401
|
+
'ناونیشانی بنەڕەتی و ئەو دەستگەیشتنەی لەگەڵیدایە لەلایەن بەڕێوەبەری پلاتفۆرمەوە دەردەکرێن — پێش دەستپێکردن بپرسە، و ئەو سەرچاوانەی تێیاندا دایدەنێیت لە لیستی ڕێگەپێدراودا دابنێ. VIN دەبێت ڕاستەقینە بێت: fetchVin ژمارەی پشکنینی ISO تاقی دەکاتەوە و ڕیزێکی داتاشراوی ١٧ پیتی ڕەت دەکاتەوە.',
|
|
402
|
+
'quickstart.network':
|
|
403
|
+
'دەبێت سێ خانەخوێ لە وێبگەڕەوە بەردەست بن، و پێویستیان بە دوو ئاراستەی جیاوازی Content-Security-Policy هەیە. لە connect-src: ناونیشانی بنەڕەتیت، و CDN کە توخمەکە فایلە وەرگێڕدراوەکانی خۆی لێوە دەهێنێت — تەنانەت کاتێک لە npm دایدەمەزرێنیت. لە style-src و font-src: fonts.googleapis.com و fonts.gstatic.com، چونکە پاکێجەکە لە کاتی بارکردندا ورقەی شێوازی فۆنت بۆ سەری بەڵگەنامەکەت زیاد دەکات. ئەگەر یەکەمیان لەبیر بکەیت توخمەکە بە ناونیشانی بەتاڵ دەردەکەوێت، و ئەگەر دووەمیان لەبیر بکەیت بە فۆنتێکی هەڵە.',
|
|
404
|
+
|
|
405
|
+
'install.title': 'دامەزراندن',
|
|
406
|
+
'install.lede':
|
|
407
|
+
'پاکێجەکە بە تەواوی لە CDN و لەسەر @latest باربکە. هەموو توخمەکان تۆمار دەکات، بەڵام تەنیا کۆدی ئەو توخمانە دادەبەزێنێت کە بەڕاستی لاپەڕەکەت بەکاریان دەهێنێت، لە کاتی بەکارهێنانیاندا — بۆیە ڕێگا پێشنیارکراوەکە هەر ئەوەیە کە کەمترین بیرکردنەوەی دەوێت.',
|
|
408
|
+
'install.library': 'پاکێجی تەواو',
|
|
409
|
+
'install.single': 'یەک توخم',
|
|
410
|
+
'install.recommended': 'پێشنیارکراو',
|
|
411
|
+
'install.libraryNote':
|
|
412
|
+
'یەک تاگ، بەبێ هیچ بنیاتنانێک. هەموو توخمەکان تۆمار دەکرێن، بەڵام کۆد بۆ هەر توخمێک لە کاتی کارکردندا دەهێنرێت، لە یەکەم دەرکەوتنیدا — لاپەڕەیەک کە یەک پێکهاتە بەکاردەهێنێت یەک پێکهاتە دادەبەزێنێت.',
|
|
413
|
+
'install.singleNote':
|
|
414
|
+
'بارکەرەکە تەنیا ئەو توخمانە تۆمار دەکات کە ناویان دەبەیت. تەنیا کاتێک دەیەرزێت کە یەک توخم لە لاپەڕەیەکدا دابنێیت کە هەر کیلۆبایتێکی لەسەر مشتومڕ دەکرێت.',
|
|
415
|
+
'install.version': 'وەشان',
|
|
416
|
+
'install.pinned': 'بەستراو',
|
|
417
|
+
'install.latest': 'هەمیشە نوێترین',
|
|
418
|
+
'install.pinnedNote': 'ڕەفتار لەسەر ئەو وەشانە دەبەستێتەوە کە تاقیت کردووەتەوە. ئەمە هەڵبژێرە کاتێک پێویستە بڵاوکردنەوەیەک پەسەند بکرێت پێش ئەوەی بگاتە بەرهەمهێنان.',
|
|
419
|
+
'install.latestNote':
|
|
420
|
+
'پێشنیارکراوە. هەمیشە نوێترین بڵاوکردنەوە، بۆیە چاککردنێک بەبێ بڵاوکردنەوەی دووبارە دەگاتە لاپەڕەکەت. ئەو یاسایەی دەمێنێتەوە: نابێت یەک بەڵگەنامە هەرگیز دوو وەشانی تێدا بێت — لە خوارەوە بیبینە.',
|
|
421
|
+
'install.bundler': 'بەستەرێک بەکاردەهێنیت؟ npm install adp-web-components — ئینجا هەموو هێنانەوەکانی ئەپەکە لەسەر یەک وەشان بهێڵەوە.',
|
|
422
|
+
'install.copy': 'لەبەرگرتنەوە',
|
|
423
|
+
'install.copied': 'لەبەرگیرایەوە',
|
|
424
|
+
'install.copyLabel': 'کۆدەکە لەبەربگرەوە',
|
|
425
|
+
|
|
426
|
+
'versions.title': 'وەشان و گونجاندن',
|
|
427
|
+
'versions.lede': 'سێ یاسا. شکاندنی هەر یەکێکیان لە کاتی کارکردندا شکست دەهێنێت نەک لە کاتی بنیاتناندا، و بەزۆری نیشانەکە ئاماژە بە هۆکارەکە ناکات.',
|
|
428
|
+
'versions.items': [
|
|
429
|
+
{
|
|
430
|
+
name: 'یەک وەشان بۆ هەر بەڵگەنامەیەک',
|
|
431
|
+
body: 'وێبگەڕ تاگی توخمی تایبەت تەنیا جارێک تۆمار دەکات و هەرگیز ناتوانێت دووبارە تۆماری بکات. ئەگەر لاپەڕەیەک دوو وەشانی ئەم پاکێجەی تێدا بێت، وەشانی دووەم بێدەنگ هەموو ئەو تاگانە لەدەست دەدات کە لەگەڵ یەکەمدا هاوبەشن — ئەنجامەکەی undefined لە لاپەڕەکەدا دەردەکەوێت، یان هەڵەی جۆر لە کاتی خوێندنەوەی پێکهاتەی فۆرمێکدا دەدرێت. لە ئەپێکی تاک-لاپەڕەدا هەموو ڕێڕەوەکان یەک بەڵگەنامە هاوبەش دەکەن، بۆیە هەموویان پێکەوە دەجوڵێن.',
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
name: 'شێوازی بارکردن تێکەڵ مەکە',
|
|
435
|
+
body: 'پاکێجی تەواو و مۆدیولی توخمی تاک دوو کاتی کارکردنی جیاوازن. بارکردنی هەردووکیان لە یەک بەڵگەنامەدا هەمان کاریگەری بارکردنی دوو وەشانی هەیە. یەکێکیان هەڵبژێرە و لەسەری بمێنەوە.',
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
name: 'بە ئەنقەست ببەستە',
|
|
439
|
+
body: 'بەستنی وەشانێکی دیاریکراو ڕەفتار دەبەستێتەوە، و @latest لە هەر بڵاوکردنەوەیەکدا دەجوڵێت. هەردووکیان پشتگیری دەکرێن — ئەوەی پشتگیری ناکرێت ئەوەیە کە بەشەکانی یەک لاپەڕە لەسەر ئەوەی کامیان بەکاردەهێنن ناکۆک بن.',
|
|
440
|
+
},
|
|
441
|
+
],
|
|
442
|
+
'versions.note': 'ئەگەر بەڕاستی لاپەڕەیەک ناتوانێت بچێتە سەر هەمان وەشانی ئەوانی تر، لە iframe جیای بکەرەوە. بەڵگەنامەی جیاواز تۆمارگەی توخمی خۆی هەیە.',
|
|
443
|
+
|
|
444
|
+
'overview.title': 'توخمەکە چی دەکات، و تۆ چی دەکەیت',
|
|
445
|
+
'overview.lede':
|
|
446
|
+
'توخمی ئامادە بۆ دانان، نەک کۆمەڵە ئامرازێک. هەر یەکێکیان بەرهەمێکی تەواوە: گەڕانێک بە VIN کە مێژووی خزمەتگوزاری تەواو پیشان دەدات، گەڕانی پارچە بەناو سێ سەرچاوەدا، و فۆرمێک کە داواکارییەکی ڕاستەقینە دروست دەکات. تۆ دایدەنێیت و ناونیشانێکی بنەڕەتی پێدەدەیت — ئەویش ئەوی تر دەکات.',
|
|
447
|
+
'overview.elementTitle': 'توخمەکە ئەمانە بەڕێوە دەبات',
|
|
448
|
+
'overview.elementItems': [
|
|
449
|
+
'بانگکردنی پلاتفۆرم و خوێندنەوەی ئەوەی دەگەڕێتەوە',
|
|
450
|
+
'دۆخەکانی بارکردن و بەتاڵی و هەڵەی خۆی',
|
|
451
|
+
'ڕێکخستن و ئاراستەی نووسین بە چوار زمان',
|
|
452
|
+
'پیشاندان لە ناو shadow root، بۆیە CSS-ی تۆ هی خۆت دەمێنێتەوە',
|
|
453
|
+
'هێنانی کۆدی خۆی لە یەکەم دەرکەوتنیدا لە لاپەڕەکەدا',
|
|
454
|
+
],
|
|
455
|
+
'overview.youTitle': 'تۆ ئەمانە دابین دەکەیت',
|
|
456
|
+
'overview.youItems': [
|
|
457
|
+
'ناونیشانێکی بنەڕەتی، و ئەو دەستگەیشتنەی لەگەڵیدا دەردەکرێت',
|
|
458
|
+
'یەک دێڕ کۆد لەو شوێنەی دەتەوێت دەربکەوێت',
|
|
459
|
+
'یەک بانگکردنی میسۆد بە VIN یان ژمارەی پارچە',
|
|
460
|
+
],
|
|
461
|
+
'overview.body3':
|
|
462
|
+
'ئەمە گرێبەستی یەکخستن بچووک ڕادەگرێت: توخمێک، ناونیشانێکی بنەڕەتی، و ئەو ناسنامەیەی پرسیاری لێدەکەیت. توخمەکە خاوەنی داواکاری و شێوەی وەڵام و دۆخی بارکردن و هەڵە و زمانە. تۆ خاوەنی ناونیشانی بنەڕەتی و ئەو دەستگەیشتنەیت کە پێویستی پێیەتی — و توخمەکە هەرگیز دووبارە هەوڵ نادات، بۆیە داواکارییەکی شکستخواردوو شکستخواردوو دەمێنێتەوە هەتا دووبارە داوا دەکەیت.',
|
|
463
|
+
|
|
464
|
+
'features.title': 'چی وەردەگریت',
|
|
465
|
+
'features.lede': 'توخمەکە چی بەڕێوە دەبات، و چی لە لاپەڕەکەت دەخوازێت.',
|
|
466
|
+
'features.items': [
|
|
467
|
+
{
|
|
468
|
+
name: 'سەربەخۆ لە چوارچێوە',
|
|
469
|
+
body: 'توخمی تایبەت، نەک پێکهاتەی React یان Blazor — هەمان توخم لە HTML-ی ساکار و React و Angular و Vue و Blazor کاردەکات. ڕشتە و بەهای بوولی لە هەموو شوێنێک وەک تایبەتمەندی دەگوازرێنەوە. بەڵام خاسیەتە تەنەکان و میسۆدەکان وەک fetchVin پێویستیان بە ئاماژەی DOM هەیە، و Blazor پێویستی بە setBlazorRef هەیە پێش ئەوەی بانگەوازەکان کار بکەن.',
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'شێواز-جیاکراوە',
|
|
473
|
+
body: 'ئەو توخمانەی دایاندەنێیت لە ناو shadow rootدا پیشان دەدرێن: CSS-ی تۆ ناتوانێت بیانشکێنێت، و CSS-ی ئەوانیش لە ورقەی شێوازەکەت دەرەوە دەمێنێتەوە. یەک ئیستیسنا پلانی بۆ دابنێ — توخمەکانی فۆرم لیستە و دیالۆگەکانیان لەسەر document.body دادەنێن تا لە هەڵگرێکی بڕاو دەرباز بن، و ئەوانە شێوازەکانی لاپەڕەکەت وەردەگرن.',
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
name: 'ڕاست-بۆ-چەپیش تێدایە',
|
|
477
|
+
body: 'ئینگلیزی و عەرەبی و کوردی و ڕووسی. زمانەکە دیاری بکە، توخمەکە دووبارە پیشان دەدرێت، لەگەڵ ئاراستەی نووسین — ئاراستەکە لە فایلی زمانەوە دەخوێنرێتەوە، نە خەمڵێنراوە.',
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
name: 'پیشاندانی جێگیر',
|
|
481
|
+
body: 'توخمەکانی گەڕان تەرح و فۆنتی خۆیان هەڵدەگرن و شێوازە وەرگیراوەکان ڕێک دەخەنەوە، بۆیە ورقەی شێوازی خانەخوێ ناتوانێت بیانجوڵێنێت — و ناشتوانێت دووبارە ڕایانبخات. توخمەکانی فۆرم ئەوانەن کە دەکرێن ڕێک بخرێن: بەشی ناودار دەردەخەن و پۆلی ڕووکار وەردەگرن.',
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'بنیاتنان پێش هەبوونی داتا',
|
|
485
|
+
body: 'is-dev لەسەر توخمێکی گەڕان دابنێ، ئەویش لە جیاتی تۆڕ لە داتای نموونەوە وەڵام دەداتەوە. توخمە هەڵگرەکان داتای خۆیان هەڵدەگرن؛ توخمی تاک داتای تۆ لە ڕێگەی setMockData وەردەگرێت. لەسەر توخمەکانی فۆرم is-dev واتایەکی جیاوازی هەیە — ناردنەکە ئاراستەی خاڵێکی نا-بەرهەمهێنان دەکات.',
|
|
486
|
+
},
|
|
487
|
+
],
|
|
488
|
+
|
|
489
|
+
'groups.vehicle-lookup': 'گەڕانی ئۆتۆمبێل',
|
|
490
|
+
'groups.part-lookup': 'گەڕانی پارچە',
|
|
491
|
+
'groups.forms': 'فۆرمی داواکاری',
|
|
492
|
+
'blurb.vehicle-lookup': 'گەڕان بەپێی VIN — تایبەتمەندی، گەرەنتی، مێژووی خزمەتگوزاری، ئەستووری بۆیە و بڕگە داواکراوەکان.',
|
|
493
|
+
'blurb.part-lookup': 'گەڕانی ژمارەی پارچە بەناو سەرچاوەکانی دابەشکەر و کۆگای وەستاو و بەرهەمهێنەردا.',
|
|
494
|
+
'blurb.forms': 'فۆرمی پێکهاتەیی کە داواکاری دروست دەکەن — پرسیار، حجزی خزمەتگوزاری، لێخوڕینی تاقیکردنەوە و نرخاندن.',
|
|
495
|
+
|
|
496
|
+
'components.title': 'پێکهاتەکان',
|
|
497
|
+
'components.lede':
|
|
498
|
+
'بەپێی ئەو بەشەی پلاتفۆرم کە لێی دەخوێننەوە کۆکراونەتەوە. هەر توخمێکی لێرە ناوبراو ئەمڕۆ لە پاکێجەکەدایە — لەو شوێنانەی هێشتا لاپەڕەی نموونە نییە، ئەوەی ماوە پیشاندانەکەیە نەک کۆدەکە.',
|
|
499
|
+
'components.empty': 'لاپەڕە نموونەییەکان هێشتا لە بڵاوکردنەوەدان. بەڵام توخمەکان پێشتر لە پاکێجەکەدان.',
|
|
500
|
+
'components.soon': 'نموونە بەم زووانە',
|
|
501
|
+
'components.page': 'لاپەڕە',
|
|
502
|
+
'components.pages': 'لاپەڕە',
|
|
503
|
+
|
|
504
|
+
'stack.title': 'شوێنی لە زنجیرەکەدا',
|
|
505
|
+
'stack.lede':
|
|
506
|
+
'تۆ یەک پاکێج بانگ دەکەیت. ئەویش خزمەتگوزارییەکانی ADP بە HTTPS بانگ دەکات، و هەرچی لە پشتییەوەیە — داتا، یاسا، ناسنامە — کێشەی پلاتفۆرم دەمێنێتەوە نەک هی ماڵپەڕەکەت.',
|
|
507
|
+
'stack.items': [
|
|
508
|
+
{ name: 'Shift Framework', body: 'ShiftEntity و ShiftIdentity و TypeAuth — ئێنتیتی و ناسنامە و مۆڵەتپێدانی جۆر-پارێزراو، هاوبەش لەنێوان هەموو بەرهەمەکانی Shift.' },
|
|
509
|
+
{ name: 'خزمەتگوزارییەکانی ADP', body: 'گەڕان و هاوکاتکردن و مۆدێلەکانی بواری، لەسەر ئەو بنەمایە بنیات نراون. ئەوان خاوەنی داتا و یاساکانن.' },
|
|
510
|
+
{ name: 'adp-web-components', body: 'ئەم پاکێجە. توخمی تایبەت کە ئەو خزمەتگوزاریانە بانگ دەکەن و ئەنجامەکە پیشان دەدەن.' },
|
|
511
|
+
{ name: 'ماڵپەڕەکەت', body: 'تاگێکی مۆدیول و توخمێک.' },
|
|
512
|
+
],
|
|
513
|
+
|
|
514
|
+
'support.title': 'هەنگاوەکانی داهاتوو',
|
|
515
|
+
'support.ecosystem': 'زیاتر لە ShiftSoftware',
|
|
516
|
+
'support.items': [
|
|
517
|
+
{ name: 'بەڵگەنامە', body: 'سەرچاوەی پێکهاتەکان و ڕێنمایی یەکخستن و پێکهاتەی فۆرمەکان.' },
|
|
518
|
+
{ name: 'مێژووی وەشانەکان', body: 'وەشانە بڵاوکراوەکان و ئەوەی لە هەر یەکێکیاندا هاتووە، لەسەر تۆمارگەکە.' },
|
|
519
|
+
{
|
|
520
|
+
name: 'ڕاپۆرتی کێشە',
|
|
521
|
+
body: 'وەشانی پاکێج، تاگی توخم، وێبگەڕ، و ئەوەی تابی تۆڕ بۆ داواکارییە شکستخواردووەکە پیشانی دەدات بنێرە. وەشان و سەرچاوە ئەوانەن کە ڕاپۆرتێک دووبارە بەرهەمهێنراو دەکەن.',
|
|
522
|
+
},
|
|
523
|
+
],
|
|
524
|
+
'support.links': ['بەڵگەنامەکە بکەرەوە', 'وەشانەکان ببینە', null],
|
|
525
|
+
|
|
526
|
+
'footer.tagline': 'بەشێکە لە Automotive Dealer Platform لەلایەن ShiftSoftware، بنیات نراوە لەسەر Shift Framework.',
|
|
527
|
+
'footer.built': 'بنیات نراوە لە',
|
|
528
|
+
|
|
529
|
+
'notFound.title': 'ئەم لاپەڕەیە بڵاو نەکراوەتەوە',
|
|
530
|
+
'notFound.body': 'ئەو لاپەڕەیەی داوات کرد هێشتا بەشێک نییە لەم ماڵپەڕە. لەوانەیە هێشتا لە گەشەپێداندا بێت، یان گواستراوەتەوە.',
|
|
531
|
+
'notFound.home': 'گەڕانەوە بۆ لاپەڕەی سەرەکی',
|
|
532
|
+
},
|
|
533
|
+
|
|
534
|
+
ru: {
|
|
535
|
+
'skip': 'Перейти к содержимому',
|
|
536
|
+
'nav.components': 'Компоненты',
|
|
537
|
+
'nav.docs': 'Документация',
|
|
538
|
+
'nav.home': 'Главная',
|
|
539
|
+
'nav.menu': 'Меню',
|
|
540
|
+
'nav.close': 'Закрыть',
|
|
541
|
+
'nav.filter': 'Фильтр страниц…',
|
|
542
|
+
'nav.empty': 'Демо-страницы ещё не опубликованы — сами элементы есть в пакете.',
|
|
543
|
+
'nav.language': 'Язык',
|
|
544
|
+
'nav.theme': 'Тема',
|
|
545
|
+
'theme.system': 'Системная',
|
|
546
|
+
'theme.light': 'Светлая',
|
|
547
|
+
'theme.dark': 'Тёмная',
|
|
548
|
+
|
|
549
|
+
'hero.eyebrow': 'Shift Framework · Automotive Dealer Platform',
|
|
550
|
+
'hero.title': 'Встройте запросы и формы ADP в свой сайт',
|
|
551
|
+
'hero.lede':
|
|
552
|
+
'Пользовательские элементы, которые выводят данные Automotive Dealer Platform по автомобилям, запчастям и сервису на любой странице — без фреймворка и без сборки. Подключите один модуль, поставьте элемент, задайте базовый URL, выданный оператором платформы, и вызовите один метод.',
|
|
553
|
+
'hero.primary': 'Быстрый старт',
|
|
554
|
+
'hero.secondary': 'Установка',
|
|
555
|
+
'hero.package': 'Пакет',
|
|
556
|
+
'hero.version': 'Последняя версия',
|
|
557
|
+
'hero.registry': 'История релизов',
|
|
558
|
+
|
|
559
|
+
'quickstart.title': 'Быстрый старт',
|
|
560
|
+
'quickstart.lede': 'Рабочая вставка за три шага. Это и есть вся интеграция.',
|
|
561
|
+
'quickstart.steps': [
|
|
562
|
+
{ name: 'Подключите пакет', body: 'Один тег модуля. Он регистрирует все элементы и подгружает код каждого при первом его появлении на странице.' },
|
|
563
|
+
{ name: 'Разместите элемент', body: 'Задайте базовый URL и язык страницы. Оставьте завершающий слеш — элемент дописывает к адресу идентификатор.' },
|
|
564
|
+
{ name: 'Задайте вопрос', body: 'Вызовите метод элемента с VIN или номером детали. Дальше он сам ведёт запрос, состояние загрузки и состояние ошибки.' },
|
|
565
|
+
],
|
|
566
|
+
'quickstart.note':
|
|
567
|
+
'Базовый URL и выданный вместе с ним доступ предоставляет оператор платформы — спросите до начала работы и добавьте в список разрешённых те домены, где будете встраивать. VIN должен быть настоящим: fetchVin проверяет контрольную цифру по ISO и отклоняет выдуманную строку из 17 символов.',
|
|
568
|
+
'quickstart.network':
|
|
569
|
+
'Из браузера должны быть доступны три хоста, и им нужны две разные директивы Content-Security-Policy. В connect-src: ваш базовый URL и CDN, откуда элемент берёт собственные файлы переводов, — в том числе при установке из npm. В style-src и font-src: fonts.googleapis.com и fonts.gstatic.com, потому что при загрузке пакет добавляет таблицу стилей шрифтов в head вашего документа. Пропустите первое — элемент отрисуется с пустыми подписями и без ошибки; пропустите второе — не тем шрифтом.',
|
|
570
|
+
|
|
571
|
+
'install.title': 'Установка',
|
|
572
|
+
'install.lede':
|
|
573
|
+
'Подключите пакет целиком с CDN на @latest. Он регистрирует все элементы, но код скачивает только для тех, что действительно есть на странице, и в момент их появления — поэтому рекомендуемый путь и есть тот, о котором меньше всего нужно думать.',
|
|
574
|
+
'install.library': 'Пакет целиком',
|
|
575
|
+
'install.single': 'Один элемент',
|
|
576
|
+
'install.recommended': 'Рекомендуется',
|
|
577
|
+
'install.libraryNote':
|
|
578
|
+
'Один тег, ничего собирать не нужно. Регистрируются все элементы, но код подгружается поэлементно во время работы, при первом появлении, — страница с одним компонентом скачивает один компонент.',
|
|
579
|
+
'install.singleNote':
|
|
580
|
+
'Загрузчик регистрирует ровно те элементы, которые вы назвали. Оправданно, только если вы встраиваете один элемент на страницу, где считают каждый килобайт.',
|
|
581
|
+
'install.version': 'Версия',
|
|
582
|
+
'install.pinned': 'Зафиксирована',
|
|
583
|
+
'install.latest': 'Всегда последняя',
|
|
584
|
+
'install.pinnedNote': 'Фиксирует поведение на версии, которую вы протестировали. Выбирайте, когда релиз должен быть согласован до выхода в продакшн.',
|
|
585
|
+
'install.latestNote':
|
|
586
|
+
'Рекомендуется. Всегда самый свежий релиз, поэтому исправление доходит до страницы без передеплоя. Единственное правило, которое остаётся: в одном документе никогда не должно оказаться двух версий — см. ниже.',
|
|
587
|
+
'install.bundler': 'Используете сборщик? npm install adp-web-components — и держите все импорты в приложении на одной версии.',
|
|
588
|
+
'install.copy': 'Копировать',
|
|
589
|
+
'install.copied': 'Скопировано',
|
|
590
|
+
'install.copyLabel': 'Скопировать код',
|
|
591
|
+
|
|
592
|
+
'versions.title': 'Версии и совместимость',
|
|
593
|
+
'versions.lede': 'Три правила. Нарушение любого из них ломается во время работы, а не сборки, и симптом редко указывает на причину.',
|
|
594
|
+
'versions.items': [
|
|
595
|
+
{
|
|
596
|
+
name: 'Одна версия на документ',
|
|
597
|
+
body: 'Браузер регистрирует тег пользовательского элемента один раз и не может перерегистрировать его никогда. Если на странице окажутся две версии этого пакета, вторая молча потеряет все теги, общие с первой: в разметку попадёт undefined или возникнет ошибка типа при чтении структуры формы. В одностраничном приложении все маршруты делят один документ, поэтому обновляются вместе.',
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
name: 'Не смешивайте способы подключения',
|
|
601
|
+
body: 'Пакет целиком и модули отдельных элементов — два разных рантайма. Подключить оба в одном документе — то же самое, что подключить две версии. Выберите один и держитесь его.',
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
name: 'Фиксируйте осознанно',
|
|
605
|
+
body: 'Фиксация точной версии замораживает поведение, @latest смещается при каждой публикации. Поддерживаются оба варианта — не поддерживается ситуация, когда части одной страницы расходятся в том, какой из них используют.',
|
|
606
|
+
},
|
|
607
|
+
],
|
|
608
|
+
'versions.note': 'Если одна страница действительно не может перейти на общую версию, изолируйте её в iframe: у отдельного документа собственный реестр элементов.',
|
|
609
|
+
|
|
610
|
+
'overview.title': 'Что делает элемент, а что делаете вы',
|
|
611
|
+
'overview.lede':
|
|
612
|
+
'Готовые к встраиванию элементы, а не набор инструментов. Каждый — законченный продукт: запрос по VIN, отрисовывающий всю историю обслуживания, поиск детали по трём источникам, форма, создающая настоящее обращение. Вы ставите его и передаёте базовый URL — остальное он делает сам.',
|
|
613
|
+
'overview.elementTitle': 'Элемент берёт на себя',
|
|
614
|
+
'overview.elementItems': [
|
|
615
|
+
'Обращение к платформе и разбор ответа',
|
|
616
|
+
'Собственные состояния загрузки, пустоты и ошибки',
|
|
617
|
+
'Форматирование и направление текста на четырёх языках',
|
|
618
|
+
'Отрисовку внутри shadow root, так что ваш CSS остаётся вашим',
|
|
619
|
+
'Загрузку собственного кода при первом появлении на странице',
|
|
620
|
+
],
|
|
621
|
+
'overview.youTitle': 'Вы предоставляете',
|
|
622
|
+
'overview.youItems': ['Базовый URL и выданный вместе с ним доступ', 'Одну строку разметки там, где он должен появиться', 'Один вызов метода с VIN или номером детали'],
|
|
623
|
+
'overview.body3':
|
|
624
|
+
'Благодаря этому контракт интеграции остаётся небольшим: элемент, базовый URL и идентификатор, о котором вы спрашиваете. Элементу принадлежат запрос, форма ответа, состояния загрузки и ошибки и язык. Вам — базовый URL и нужный ему доступ. Повторных попыток элемент не делает: неудачный запрос останется неудачным, пока вы не спросите снова.',
|
|
625
|
+
|
|
626
|
+
'features.title': 'Что вы получаете',
|
|
627
|
+
'features.lede': 'Что элемент берёт на себя и что ему нужно от вашей страницы.',
|
|
628
|
+
'features.items': [
|
|
629
|
+
{
|
|
630
|
+
name: 'Независимость от фреймворка',
|
|
631
|
+
body: 'Пользовательские элементы, а не компоненты React или Blazor — один и тот же элемент работает в чистом HTML, React, Angular, Vue и Blazor. Строки и логические значения везде передаются атрибутами. Объектные свойства и методы вроде fetchVin требуют ссылки на DOM, а Blazor — вызова setBlazorRef до того, как сработают колбэки.',
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
name: 'Изоляция стилей',
|
|
635
|
+
body: 'Встраиваемые элементы отрисовываются в shadow root: ваш CSS не может их сломать, а их CSS не попадёт в вашу таблицу стилей. Одно исключение, которое стоит учесть: элементы форм монтируют свои выпадающие списки и диалоги на document.body, чтобы выйти за обрезающий контейнер, и они наследуют стили вашей страницы.',
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
name: 'Поддержка справа налево',
|
|
639
|
+
body: 'Английский, арабский, курдский и русский. Задайте язык — элемент перерисуется вместе с направлением текста; направление читается из файла локали, а не угадывается.',
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
name: 'Фиксированное оформление',
|
|
643
|
+
body: 'Элементы поиска несут собственную вёрстку и типографику и сбрасывают унаследованные стили, поэтому таблица стилей хоста не может их сдвинуть — но и не может переоформить. Настраиваемые — это элементы форм: они открывают именованные части и принимают класс темы.',
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
name: 'Разработка без данных',
|
|
647
|
+
body: 'Поставьте is-dev на элемент поиска, и он ответит из тестовых данных вместо сети. Контейнерные элементы несут свои данные, отдельный элемент принимает ваши через setMockData. У элементов форм is-dev означает другое — он направляет отправку на непродакшн-адрес.',
|
|
648
|
+
},
|
|
649
|
+
],
|
|
650
|
+
|
|
651
|
+
'groups.vehicle-lookup': 'Поиск по автомобилю',
|
|
652
|
+
'groups.part-lookup': 'Поиск запчастей',
|
|
653
|
+
'groups.forms': 'Формы обращений',
|
|
654
|
+
'blurb.vehicle-lookup': 'Запросы по VIN — комплектация, гарантия, история обслуживания, толщина покрытия и позиции к возмещению.',
|
|
655
|
+
'blurb.part-lookup': 'Поиск по номеру детали в источниках дистрибьютора, неликвидов и производителя.',
|
|
656
|
+
'blurb.forms': 'Формы на основе описанной структуры, создающие обращение: запрос, запись на сервис, тест-драйв и расчёт стоимости.',
|
|
657
|
+
|
|
658
|
+
'components.title': 'Компоненты',
|
|
659
|
+
'components.lede':
|
|
660
|
+
'Сгруппированы по той части платформы, из которой они читают. Каждый перечисленный элемент уже есть в пакете — там, где у группы пока нет демо-страницы, не хватает именно демо, а не кода.',
|
|
661
|
+
'components.empty': 'Демо-страницы ещё публикуются. Сами элементы уже в пакете.',
|
|
662
|
+
'components.soon': 'Демо готовится',
|
|
663
|
+
'components.page': 'стр.',
|
|
664
|
+
'components.pages': 'стр.',
|
|
665
|
+
|
|
666
|
+
'stack.title': 'Место в экосистеме',
|
|
667
|
+
'stack.lede':
|
|
668
|
+
'Вы обращаетесь к одному пакету. Он обращается к сервисам ADP по HTTPS, а всё, что за ними, — данные, правила, идентификация — остаётся заботой платформы, а не вашего сайта.',
|
|
669
|
+
'stack.items': [
|
|
670
|
+
{ name: 'Shift Framework', body: 'ShiftEntity, ShiftIdentity и TypeAuth — сущности, идентификация и типобезопасная авторизация, общие для всех продуктов Shift.' },
|
|
671
|
+
{ name: 'Сервисы ADP', body: 'Поиск, синхронизация и доменные модели поверх этой основы. Им принадлежат данные и правила.' },
|
|
672
|
+
{ name: 'adp-web-components', body: 'Этот пакет. Пользовательские элементы, которые вызывают эти сервисы и отображают ответ.' },
|
|
673
|
+
{ name: 'Ваш сайт', body: 'Тег модуля и элемент.' },
|
|
674
|
+
],
|
|
675
|
+
|
|
676
|
+
'support.title': 'Что дальше',
|
|
677
|
+
'support.ecosystem': 'Ещё от ShiftSoftware',
|
|
678
|
+
'support.items': [
|
|
679
|
+
{ name: 'Документация', body: 'Справочник компонентов, руководства по интеграции и схема структуры форм.' },
|
|
680
|
+
{ name: 'История релизов', body: 'Опубликованные версии и что вошло в каждую — в реестре.' },
|
|
681
|
+
{
|
|
682
|
+
name: 'Сообщить о проблеме',
|
|
683
|
+
body: 'Пришлите версию пакета, тег элемента, браузер и то, что показывает вкладка сети по неудачному запросу. Версия и домен — это то, что делает отчёт воспроизводимым.',
|
|
684
|
+
},
|
|
685
|
+
],
|
|
686
|
+
'support.links': ['Открыть документацию', 'Смотреть релизы', null],
|
|
687
|
+
|
|
688
|
+
'footer.tagline': 'Часть Automotive Dealer Platform от ShiftSoftware, построено на Shift Framework.',
|
|
689
|
+
'footer.built': 'Собрано из',
|
|
690
|
+
|
|
691
|
+
'notFound.title': 'Эта страница не опубликована',
|
|
692
|
+
'notFound.body': 'Запрошенная страница пока не входит в этот сайт. Возможно, она ещё в разработке или была перемещена.',
|
|
693
|
+
'notFound.home': 'Вернуться на главную',
|
|
694
|
+
},
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
const codes = LANGUAGES.map(language => language.code);
|
|
698
|
+
const directionOf = code => LANGUAGES.find(language => language.code === code)?.dir ?? 'ltr';
|
|
699
|
+
|
|
700
|
+
function stored() {
|
|
701
|
+
// A private window and blocked site data both throw rather than return null.
|
|
702
|
+
try {
|
|
703
|
+
return localStorage.getItem(KEY);
|
|
704
|
+
} catch {
|
|
705
|
+
return null;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/*
|
|
710
|
+
* `?lang=` wins over the stored choice: a link is a deliberate act, and the
|
|
711
|
+
* harness pages already put the language there, so following one of those
|
|
712
|
+
* links back to the landing page lands in the same language.
|
|
713
|
+
*/
|
|
714
|
+
function initial() {
|
|
715
|
+
const requested = new URLSearchParams(window.location.search).get('lang');
|
|
716
|
+
|
|
717
|
+
if (codes.includes(requested)) return requested;
|
|
718
|
+
if (codes.includes(stored())) return stored();
|
|
719
|
+
|
|
720
|
+
// The browser's preference, but only among languages actually translated.
|
|
721
|
+
for (const candidate of navigator.languages ?? []) {
|
|
722
|
+
const code = String(candidate).slice(0, 2).toLowerCase();
|
|
723
|
+
if (codes.includes(code)) return code;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
return 'en';
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
function apply(code) {
|
|
730
|
+
const language = codes.includes(code) ? code : 'en';
|
|
731
|
+
|
|
732
|
+
document.documentElement.lang = language;
|
|
733
|
+
document.documentElement.dir = directionOf(language);
|
|
734
|
+
|
|
735
|
+
try {
|
|
736
|
+
localStorage.setItem(KEY, language);
|
|
737
|
+
} catch {
|
|
738
|
+
// Not persisting is survivable; rendering in the wrong direction is not.
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// Kept in the URL so a reload holds and so links copied out carry the choice.
|
|
742
|
+
const url = new URL(window.location.href);
|
|
743
|
+
|
|
744
|
+
url.searchParams.set('lang', language);
|
|
745
|
+
window.history.replaceState({}, '', url);
|
|
746
|
+
|
|
747
|
+
return language;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
window.siteLocales = {
|
|
751
|
+
languages: LANGUAGES,
|
|
752
|
+
current: initial,
|
|
753
|
+
direction: directionOf,
|
|
754
|
+
apply,
|
|
755
|
+
|
|
756
|
+
/**
|
|
757
|
+
* Falls back to English rather than rendering a key. A missing translation
|
|
758
|
+
* should read as untranslated text, not as a broken page.
|
|
759
|
+
*/
|
|
760
|
+
t(code, key) {
|
|
761
|
+
const table = STRINGS[code] ?? STRINGS.en;
|
|
762
|
+
|
|
763
|
+
return table[key] ?? STRINGS.en[key] ?? key;
|
|
764
|
+
},
|
|
765
|
+
};
|
|
766
|
+
|
|
767
|
+
// Before first paint: direction is layout, and correcting it afterwards is a
|
|
768
|
+
// visible jump on every load in Arabic or Kurdish.
|
|
769
|
+
document.documentElement.lang = initial();
|
|
770
|
+
document.documentElement.dir = directionOf(initial());
|
|
771
|
+
})();
|