/* eslint-disable */ /* tslint:disable */ /** * This is an autogenerated file created by the Stencil compiler. * It contains typing information for all components that exist in this project. */ import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime"; import { BranchSlotDay } from "./components/form-elements/branch-slot-dropdown"; import { BranchDateDropdownCopy, BranchDateStep } from "./components/form-elements/branch-date-dropdown"; import { FormHook } from "./features/form-hook/form-hook"; import { ErrorKeys, LanguageKeys, SharedLocales } from "./features/multi-lingual/index"; import { FormElementMapper, FormElementStructure, FormHook as FormHook1, FormInputLocalization, FormSelectFetcher, FormSelectItem } from "./features/form-hook/index"; import { BranchSlotSelection } from "./components/form-elements/branch-slot-picker"; import { BranchSlotDay as BranchSlotDay1, BranchSlotDropdownCopy } from "./components/form-elements/branch-slot-dropdown"; import { BranchSlotSelection as BranchSlotSelection1 } from "./components/form-elements/branch-slot-picker"; import { Endpoint } from "./global/lib/fetch-from"; import { BlazorInvokableFunction, DotNetObjectReference } from "./features/blazor-ref/index"; import { PartLookupDTO } from "./global/types/generated/part/part-lookup-dto"; import { PartLookupMock } from "./features/part-lookup-components/index"; import { DateTypes } from "./global/lib/decode-time-offset"; import { InformationTableColumn } from "./components/components/information-table"; import { ActiveElement } from "./components/part-lookup/part-lookup"; import { AccordionItem } from "./components/components/shift-accordion"; import { FormSelectItem as FormSelectItem1 } from "./components"; import { VehicleLookupDTO } from "./global/types/generated/vehicle-lookup/vehicle-lookup-dto"; import { VerdictState } from "./features/vehicle-info-layout/index"; import { RequestHeadersProvider, VehicleLookupMock } from "./features/vehicle-lookup-component/index"; import { VehicleLookupMock as VehicleLookupMock1 } from "./features/vehicle-lookup-component/types"; import { VehicleServiceItemDTO } from "./global/types/generated/vehicle-lookup/vehicle-service-item-dto"; import { ClaimFormType } from "./locales/vehicleLookup/claimableItems/type"; import { ItemClaimDTO } from "./global/types/generated/vehicle-lookup/item-claim-dto"; import { ActiveElement as ActiveElement1 } from "./components/vehicle-lookup/vehicle-lookup"; import { VehicleSsc } from "./components/vehicle-lookup/vehicle-ssc"; import { vehicleQuotationElementNames } from "./components/forms/vehicle-quotation/element-mapper"; export { BranchSlotDay } from "./components/form-elements/branch-slot-dropdown"; export { BranchDateDropdownCopy, BranchDateStep } from "./components/form-elements/branch-date-dropdown"; export { FormHook } from "./features/form-hook/form-hook"; export { ErrorKeys, LanguageKeys, SharedLocales } from "./features/multi-lingual/index"; export { FormElementMapper, FormElementStructure, FormHook as FormHook1, FormInputLocalization, FormSelectFetcher, FormSelectItem } from "./features/form-hook/index"; export { BranchSlotSelection } from "./components/form-elements/branch-slot-picker"; export { BranchSlotDay as BranchSlotDay1, BranchSlotDropdownCopy } from "./components/form-elements/branch-slot-dropdown"; export { BranchSlotSelection as BranchSlotSelection1 } from "./components/form-elements/branch-slot-picker"; export { Endpoint } from "./global/lib/fetch-from"; export { BlazorInvokableFunction, DotNetObjectReference } from "./features/blazor-ref/index"; export { PartLookupDTO } from "./global/types/generated/part/part-lookup-dto"; export { PartLookupMock } from "./features/part-lookup-components/index"; export { DateTypes } from "./global/lib/decode-time-offset"; export { InformationTableColumn } from "./components/components/information-table"; export { ActiveElement } from "./components/part-lookup/part-lookup"; export { AccordionItem } from "./components/components/shift-accordion"; export { FormSelectItem as FormSelectItem1 } from "./components"; export { VehicleLookupDTO } from "./global/types/generated/vehicle-lookup/vehicle-lookup-dto"; export { VerdictState } from "./features/vehicle-info-layout/index"; export { RequestHeadersProvider, VehicleLookupMock } from "./features/vehicle-lookup-component/index"; export { VehicleLookupMock as VehicleLookupMock1 } from "./features/vehicle-lookup-component/types"; export { VehicleServiceItemDTO } from "./global/types/generated/vehicle-lookup/vehicle-service-item-dto"; export { ClaimFormType } from "./locales/vehicleLookup/claimableItems/type"; export { ItemClaimDTO } from "./global/types/generated/vehicle-lookup/item-claim-dto"; export { ActiveElement as ActiveElement1 } from "./components/vehicle-lookup/vehicle-lookup"; export { VehicleSsc } from "./components/vehicle-lookup/vehicle-ssc"; export { vehicleQuotationElementNames } from "./components/forms/vehicle-quotation/element-mapper"; export namespace Components { /** * Panel half of `branch-date-picker`. * Two panes on one horizontal track — a month grid, then that day's times — * rather than the two stacked sections `branch-slot-dropdown` uses. Only one * decision is on screen at a time, which is the point of the date-picker * variant: a customer who has met a month calendar before recognises step one * immediately, and step two arrives already scoped to the day they picked. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-date-*` variables the picker sets, exactly as the slot panel is. */ interface BranchDateDropdown { /** * @default '' */ "activeDate": string; /** * @default false */ "canGoNext": boolean; /** * @default false */ "canGoPrev": boolean; "copy": BranchDateDropdownCopy; /** * Bookable days, already de-duplicated, sorted and rule-marked by the picker. * @default [] */ "days": BranchSlotDay[]; /** * @default 'ltr' */ "direction": string; "displayTime": (raw: string) => string; "formatDay": (date: string, options: Intl.DateTimeFormatOptions) => string; "formatMonth": (monthKey: string) => string; "formatWeekday": (weekday: number) => string; "handleBack": () => void; "handleDate": (date: string) => void; /** * Tapping the sheet scrim. Unused above 600px, where the scrim is hidden. */ "handleDismiss"?: () => void; "handleMonth": (delta: number) => void; "handleRetry": () => void; "handleTime": (raw: string) => void; /** * @default '' */ "idleText"?: string; /** * @default false */ "isOpen": boolean; /** * `1` when the last month change went forward, `-1` back. Drives the slide. * @default 1 */ "monthDirection": number; /** * The month on screen, as `YYYY-MM`. * @default '' */ "monthKey": string; /** * @default '' */ "name"?: string; /** * @default '' */ "selectedRaw": string; "setElementRef"?: (el: HTMLElement | null) => void; /** * @default 'idle' */ "status": 'idle' | 'loading' | 'ready' | 'empty' | 'error'; /** * @default 'date' */ "step": BranchDateStep; /** * @default '' */ "today": string; /** * `0` Sunday … `6` Saturday — resolved from the locale by the picker. * @default 1 */ "weekStart": number; } /** * Branch-aware booking slot field, month-calendar variant. * Same contract and same data as `branch-slot-picker` — the same endpoint, the * same `slotChange` payload, the same standalone-without-a-form behaviour. The * difference is entirely in the panel: a month grid first, then that day's * times, on a sliding track. Customers who have never used a horizontal day * strip have used a month calendar, and the second step arrives already scoped * to one day rather than sitting under the first. * The two are meant to be interchangeable, so a deployment can pick whichever * its audience reads faster without anything downstream changing. */ interface BranchDatePicker { "branchId": string; "brandId": string; /** * Full URL of the calendar endpoint, e.g. `https://…/api/public/calendar`. */ "calendarApi": string; "closeDropdown": () => Promise; /** * Integration ids. The field stays idle until all four are present. */ "companyId": string; /** * How far ahead to ask. The endpoint caps its own response at 15 days. * @default 30 */ "daysAhead": number; /** * Preselects a slot, in the same `YYYY-MM-DDTHH:mm` form the field emits. */ "defaultValue"?: string; "departmentId": string; /** * One-off blackout dates as `YYYY-MM-DD`, same accepted shapes as above. */ "disabledDates"?: string | string[]; /** * Weekdays the branch never books on, `0` Sunday … `6` Saturday. Accepts an array or a `"5,6"` string. Matching days stay on the grid, struck through, rather than being dropped — see `~lib/slot-day-rules`. */ "disabledWeekdays"?: string | number[]; /** * Optional — omit for standalone use and listen to `slotChange` instead. */ "form"?: FormHook; /** * Gap between the trigger and the panel, matching shift-select's default. * @default 8 */ "gap": number; /** * @default false */ "isDisabled": boolean; /** * @default false */ "isRequired": boolean; "label"?: string; /** * @default 'en' */ "language": LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; /** * Tallest the panel may get before its panes scroll. Also capped to the viewport. * @default 460 */ "maxPanelHeight": number; /** * Floor for the panel width on desktop. The panel is portaled to `` and positioned fixed, so it is free to be wider than the field — and than the form around it — which is the point: seven columns stop reading as a calendar much below this, and form fields are routinely narrower. * @default 380 */ "minPanelWidth": number; /** * Field name. Only meaningful when `form` is supplied. * @default 'bookingDate' */ "name": string; "openDropdown": () => Promise; /** * Lets a host force a refetch, e.g. after a token refresh. */ "refresh": () => Promise; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; /** * First column of the grid, `0` Sunday … `6` Saturday. Left unset it comes from the active locale, which is right far more often than any constant. */ "weekStartsOn"?: number; "wrapperClass": string; "wrapperId": string; } /** * Panel half of `branch-slot-picker`. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-slot-*` variables the picker sets — the same split `shift-select` / * `shift-select-dropdown` use, so the panel escapes any `overflow: hidden` or * stacking context the form puts around the field. */ interface BranchSlotDropdown { /** * @default '' */ "activeDate": string; "copy": BranchSlotDropdownCopy; /** * @default [] */ "days": BranchSlotDay1[]; /** * @default 'ltr' */ "direction": string; "displayTime": (raw: string) => string; "formatDay": (date: string, options: Intl.DateTimeFormatOptions) => string; "handleDay": (date: string) => void; /** * Tapping the sheet scrim. Unused above 600px, where the scrim is hidden. */ "handleDismiss"?: () => void; "handleRetry": () => void; "handleTime": (raw: string) => void; /** * @default '' */ "idleText"?: string; /** * @default false */ "isOpen": boolean; /** * @default '' */ "name"?: string; /** * @default '' */ "selectedRaw": string; "setElementRef"?: (el: HTMLElement | null) => void; /** * @default 'idle' */ "status": 'idle' | 'loading' | 'ready' | 'empty' | 'error'; } /** * Branch-aware booking slot field. * Presents as a normal dropdown — the same `form-input-select` trigger as every * other select in the form — and portals its panel onto `document.body` through * `shift-portal`, exactly as `shift-select` does. * Standalone by design: `form` is optional. Drop `` on any * page, in a PWA or in a native WebView, give it the four ids, and listen to * `slotChange`. */ interface BranchSlotPicker { "branchId": string; "brandId": string; /** * Full URL of the calendar endpoint, e.g. `https://…/api/public/calendar`. */ "calendarApi": string; "closeDropdown": () => Promise; /** * Integration ids. The field stays idle until all four are present. */ "companyId": string; /** * How far ahead to ask. The endpoint caps its own response at 15 days. * @default 30 */ "daysAhead": number; /** * Preselects a slot, in the same `YYYY-MM-DDTHH:mm` form the field emits. */ "defaultValue"?: string; "departmentId": string; /** * One-off blackout dates as `YYYY-MM-DD`, same accepted shapes as above. */ "disabledDates"?: string | string[]; /** * Weekdays the branch never books on, `0` Sunday … `6` Saturday. Accepts an array or a `"5,6"` string. Matching days stay visible but unselectable — see `~lib/slot-day-rules` for why they are not simply dropped. */ "disabledWeekdays"?: string | number[]; /** * Optional — omit for standalone use and listen to `slotChange` instead. */ "form"?: FormHook; /** * Gap between the trigger and the panel, matching shift-select's default. * @default 8 */ "gap": number; /** * @default false */ "isDisabled": boolean; /** * @default false */ "isRequired": boolean; "label"?: string; /** * @default 'en' */ "language": LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; /** * Tallest the panel may get before it scrolls. Also capped to the viewport. * @default 460 */ "maxPanelHeight": number; /** * Floor for the panel width on desktop. The panel is portaled to `` and positioned fixed, so it is free to be wider than the field — and than the form around it — which is the point: a two-column form gives the field ~320px, which squeezed the day strip and the time grid into something that read as clipped. Capped to the viewport at open time. * @default 420 */ "minPanelWidth": number; /** * Field name. Only meaningful when `form` is supplied. * @default 'bookingSlot' */ "name": string; "openDropdown": () => Promise; /** * Lets a host force a refetch, e.g. after a token refresh. */ "refresh": () => Promise; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; "wrapperClass": string; "wrapperId": string; } interface DeadStockLookup { /** * @default false */ "coreOnly": boolean; "endpoint": Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchData": (newData: PartLookupDTO | string) => Promise; "getMockData": () => Promise; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "mockUrl": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: PartLookupMock) => Promise; } interface DistributorLookup { /** * @default false */ "coreOnly": boolean; "endpoint": Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchData": (newData: PartLookupDTO | string) => Promise; "getMockData": () => Promise; /** * @default '' */ "hiddenFields"?: string; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "localizationName"?: string; "manufacturerPartLookupEndpoint": Endpoint; "manufacturerPartLookupTitle"?: string; /** * @default '' */ "mockUrl": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: PartLookupMock) => Promise; } interface FlexibleContainer { "addChildrenAnimation": (child: FlexibleContainer) => Promise; "classes"?: string; "containerClasses"?: string; /** * @default 'auto' */ "height"?: number | 'auto'; /** * @default true */ "isOpened"?: boolean; "onAnimationPlayChanges": (isAnimationStopped: boolean) => Promise; /** * @default false */ "onlyForMounting": boolean; "removeChildrenAnimation": (child: FlexibleContainer) => Promise; /** * @default false */ "stopAnimation"?: boolean; } interface FormCheckbox { "defaultChecked": boolean; "form": FormHook; "inputPrefix": string; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; /** * @default 'text' */ "type": string; "wrapperClass": string; "wrapperId": string; } interface FormDatePicker { "defaultValue"?: string; "disabledDates"?: (date: Date) => boolean; /** * @default 0 */ "firstDayOfWeek"?: number; "form": FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default 'en' */ "language"?: string; "maxDate"?: string; "minDate"?: string; "name": string; "staticValue"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; "wrapperClass": string; "wrapperId": string; } interface FormDialog { /** * @default '' */ "closeText": string; "dialogClosed"?: () => void; "form": FormHook; /** * @default false */ "isError": boolean; /** * @default '' */ "message": string; /** * @default '' */ "successMessage": string; } interface FormFile { "accept"?: string; "accountName"?: string; "containerName"?: string; "form": FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization<{ uploading?: string; upload?: string; failure?: string; success?: string; }>; "maxSize"?: number; /** * @default 1 */ "maxUpload": number; "name": string; "required"?: boolean; /** * @default 'POST' */ "signMethod": 'POST' | 'PUT'; "signPrefix"?: string; "signUrl"?: string; "wrapperClass": string; "wrapperId": string; } interface FormInput { "defaultValue": string; "form": FormHook; "formatter"?: (value: string) => string; "icon"?: any; "iconAction"?: () => void; /** * @default 'end' */ "iconPosition"?: 'start' | 'end'; "inputPrefix": string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; "staticValue"?: string; "type"?: HTMLInputElement['type']; "wrapperClass": string; "wrapperId": string; } interface FormInputPreview { "form": FormHook; /** * @default {} */ "localization"?: FormInputLocalization<{ value?: string }>; "name"?: string; /** * @default {} */ "props"?: any; } interface FormPhoneNumber { /** * @default 'IQ' */ "countryCode"?: string | string[] | { code: string; icon?: string }[]; "defaultValue": string; "form": FormHook; "inputPrefix": string; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; "required"?: boolean; "staticValue"?: string; /** * @default 'text' */ "type": string; "wrapperClass": string; "wrapperId": string; } interface FormPickerInput { "defaultValue": string; "form": FormHook; "format"?: string; "formatter"?: (value: string) => string; "icon"?: any; "iconAction"?: () => void; /** * @default 'end' */ "iconPosition"?: 'start' | 'end'; "inputPrefix": string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "max"?: string | number[]; "min"?: string | number[]; "name": string; "staticValue"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; /** * @default 'datetime-local' */ "type"?: DateTypes; "wrapperClass": string; "wrapperId": string; } interface FormSelect { /** * @default false */ "clearable": boolean; "defaultValue": string; "fetcher": FormSelectFetcher; "fetcherKey": any; /** * @default false */ "forceOpenUpwards"?: boolean; "form": FormHook; "isDisabled": boolean; "isHidden": boolean; "isLoading": boolean; "isRequired": boolean; /** * @default 'en' */ "language": LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; "resetKey": any; /** * @default false */ "reverseOptions"?: boolean; "searchable": boolean; "staticValue"?: FormSelectItem; "wrapperClass": string; "wrapperId": string; } interface FormShadowInput { "form": FormHook; "name": string; /** * @default 'string' */ "type"?: string; "value": string; } interface FormStepper { "form": FormHook; "language"?: string; "name"?: string; "wrapperClass": string; "wrapperId": string; } interface FormStepperControl { "form": FormHook; "isLoading": boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass": string; "wrapperId": string; } interface FormStepperSubmit { "form": FormHook; "isLoading": boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; "step"?: number; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass": string; "wrapperId": string; } interface FormStructure { /** * @default '' */ "errorMessage": string; /** * @default {} */ "fields": object; "form": FormHook; "formElementMapper": FormElementMapper; "formId"?: string; /** * @default {} */ "formLocale": any; /** * @default false */ "isLoading": boolean; /** * @default 'en' */ "language": LanguageKeys; "structure": FormElementStructure; /** * @default '' */ "successMessage": string; "today"?: string; } interface FormStructureError { /** * @default 'en' */ "language": LanguageKeys; } interface FormSubmit { "form": FormHook; "isLoading": boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass": string; "wrapperId": string; } interface FormSwitch { "defaultChecked": boolean; "form": FormHook; "inputPrefix": string; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; /** * @default 'text' */ "type": string; "wrapperClass": string; "wrapperId": string; } interface FormTextArea { "defaultValue": string; "form": FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name": string; "staticValue"?: string; "wrapperClass": string; "wrapperId": string; } interface FormTimePicker { "defaultValue"?: string; "form": FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; "maxTime"?: string; "minTime"?: string; /** * @default 1 */ "minuteStep"?: number; "name": string; "staticValue"?: string; "wrapperClass": string; "wrapperId": string; } interface FormVinInput { "defaultValue": string; "form": FormHook; "inputPrefix": string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization<{ scan: string }>; "name": string; "ocrEndpoint"?: string; "readSticker"?: boolean; /** * @default '' */ "scannerIcon"?: '' | 'qr-code' | 'camera'; "staticValue"?: string; "useOcr"?: boolean; "wrapperClass": string; "wrapperId": string; } interface GeneralForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface GeneralInquiryForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface InformationTable { /** * @default false */ "allowAutoWidth": boolean; /** * @default false */ "allowMultipleExpanded": boolean; /** * @default false */ "customSkeleton": boolean; /** * @default 48 */ "expandColumnWidth": number; /** * @default false */ "expandUsingEntireRow": boolean; "headers": InformationTableColumn[]; /** * @default false */ "isLoading": boolean; /** * @default false */ "isRaw": boolean; /** * @default [] */ "rows": object[]; /** * @default false */ "scrollExpandedIntoView": boolean; /** * @default true */ "showHeader": boolean; /** * @default 'default' */ "size": 'default' | 'small'; /** * @default true */ "stripCells": boolean; "subRowRenderer"?: (row: any) => any; /** * @default {} */ "templateRow": object; } interface LoadingSpinner { "isLoading": boolean; } interface ManufacturerLookup { /** * @default false */ "coreOnly": boolean; "endpoint": Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchData": (newData: PartLookupDTO | string) => Promise; "getMockData": () => Promise; /** * @default '' */ "hiddenFields": string; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "localizationName"?: string; /** * @default '' */ "mockUrl": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: PartLookupMock) => Promise; } interface ManufacturerPartLookup { "closeManufacturerPartLookup"?: boolean; "getHeaders"?: BlazorInvokableFunction<() => any>; "isDev"?: boolean; "language": LanguageKeys; /** * @default '' */ "logId"?: string; "manufacturerPartLookupEndpoint": Endpoint; /** * @default 'Manufacture lookup' */ "manufacturerPartLookupTitle"?: string; "partLookup"?: PartLookupDTO; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; /** * @default true */ "standAlone"?: boolean; } interface PartLookup { /** * @default '' */ "activeElement"?: ActiveElement; "childrenProps"?: string | object; "endpoint": Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchData": (partNumber: string, quantity?: string) => Promise; "getMockData": () => Promise; "handleLoadData": (newResponse: PartLookupDTO, activeElement: any) => Promise; /** * @default false */ "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "mockUrl": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; } interface ServiceBookingForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface ShiftAccordion { "accordionClasses"?: string; "accordionContentClasses"?: string; "items": AccordionItem[]; } interface ShiftCheckbox { "checked": boolean; "componentClass": string; "componentId": string; "disabled": boolean; "getInputRef": () => Promise; "getIsChecked": () => Promise; "label": string; "name": string; "onChange"?: (event: Event) => void; } interface ShiftPortal { /** * @default {} */ "componentProps": Record; /** * @default '' */ "inheritedClasses": string; /** * @default '' */ "tag": string; } interface ShiftSelect { /** * @default false */ "clearable"?: boolean; /** * @default 'ltr' */ "direction"?: string; "disableInput"?: boolean; "fetchingErrorText"?: string | boolean; /** * @default false */ "forceOpenUpwards"?: boolean; "fullRenderOption"?: (option: FormSelectItem1, isSelected: boolean, handleSelection: (option: FormSelectItem1) => void) => any; /** * @default 8 */ "gap": number; "handleSelection": (option: FormSelectItem1) => void; /** * @default true */ "hasArrow": boolean; /** * @default true */ "hasTick": boolean; "isError"?: boolean; "isLoading"?: boolean; /** * @default false */ "isOpen": boolean; /** * @default '' */ "name": string; "noSelectionText"?: string; "onSelection"?: (newSelection: FormSelectItem1) => void; /** * @default [] */ "options": FormSelectItem1[]; "placeholder"?: string; "renderOption"?: (option: FormSelectItem1, isSelected: boolean) => any; /** * @default false */ "reverseOptions"?: boolean; /** * @default '' */ "searchValue": string; /** * @default false */ "searchable"?: boolean; /** * @default '' */ "selectedValue": string; "updateContext": (newValues: Partial<{ isOpen: boolean; searchValue: string; selectedValue: string }>) => void; } interface ShiftSelectDropdown { /** * @default 'ltr' */ "direction": string; "fetchingErrorText"?: string | boolean; "fullRenderOption"?: (option: FormSelectItem, isSelected: boolean, handleSelection: (option: FormSelectItem) => void) => any; "handleSelection": (option: FormSelectItem) => void; /** * @default true */ "hasArrow": boolean; /** * @default true */ "hasTick": boolean; "isLoading"?: boolean; /** * @default false */ "isOpen": boolean; /** * @default '' */ "name"?: string; "noSelectionText"?: string; /** * @default [] */ "options": FormSelectItem[]; "renderOption"?: (option: FormSelectItem, isSelected: boolean) => any; /** * @default false */ "reverseOptions": boolean; /** * @default '' */ "selectedValue": string; "setElementRef"?: (el: HTMLElement | null) => void; } interface ShiftSlider { "activeIndex": number; "components": (() => Node)[]; } interface ShiftSwitch { "checked": boolean; "componentClass": string; "componentId": string; "disabled": boolean; "getInputRef": () => Promise; "getIsChecked": () => Promise; "label": string; "name": string; "onChange"?: (event: Event) => void; } interface ShiftTabContent { "activeComponent": string; "components": { [key: string]: Node }; } interface ShiftTabs { "activeTabIndex": number; "activeTabLabel": string; "changeActiveTab": (activeStatus: { label: string; idx: number }) => void; "containerClasses"?: string; "tabClasses"?: string; "tabs": string[]; } interface SscLookupForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface TestDriveForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VehicleAccessories { "baseUrl": string; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; "today"?: string; } interface VehicleClaimableItems { "activate"?: (vehicleInformation: VehicleLookupDTO) => void; "baseUrl": string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current headers. * @default '' */ "blazorRequestHeadersProvider": string; "claim": (item: VehicleServiceItemDTO) => Promise; /** * @default 'api/vehicle/swift-claim' */ "claimEndPoint": string; "completeClaim": (response: any) => Promise; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default 30 */ "maximumDocumentFileSizeInMb": number; "openTrace": () => Promise; "print"?: (claimResponse: any) => void; /** * @default '' */ "queryString": string; /** * Asked for the current headers before every request this component makes itself (trace, claim); lets a host refresh its token on demand. */ "requestHeadersProvider"?: RequestHeadersProvider; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; /** * @default false */ "showTrace": boolean; "today"?: string; /** * @default true */ "uploadMultipleDocumentsAtTheForm": boolean; } interface VehicleItemClaimForm { "close": (forceClose?: boolean) => Promise; "handleClaiming"?: (documents: File[], payload: ItemClaimDTO) => Promise; "item"?: VehicleServiceItemDTO; "loadingStateChange"?: (isLoading: boolean) => void; "locale": { sharedLocales: SharedLocales } & ClaimFormType; "maximumDocumentFileSizeInMb": number; "open": () => Promise; "setFileUploadProgression": (uploadPercentage: number) => Promise; /** * Shows the claim-failure dialog (replaces the old browser alert()). The caller keeps re-throwing after this — the rejection resets the form's loading state and keeps it open for retry. */ "showError": (message: string) => Promise; /** * @default true */ "uploadMultipleDocuments"?: boolean; "vin"?: string; } interface VehicleLookup { /** * @default '' */ "activeElement"?: ActiveElement1; /** * @default '' */ "baseUrl": string; /** * @default '' */ "blazorDynamicClaimActivate": string; /** * @default '' */ "blazorErrorStateListener": string; /** * @default '' */ "blazorOnLoadingStateChange": string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current request headers. * @default '' */ "blazorRequestHeadersProvider": string; "childrenProps"?: string | object; /** * @default false */ "disableVinValidation": boolean; "dynamicClaimActivate"?: (vehicleInformation: VehicleLookupDTO) => void; "errorStateListener"?: (newError: string) => void; "fetchVin": (vin: string, headers?: any) => Promise; "handleLoadData": (newResponse: VehicleLookupDTO, activeElement: any) => Promise; /** * @default '' */ "hiddenTabs": string; /** * @default false */ "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadingStateChanged"?: (isLoading: boolean) => void; /** * @default false */ "mockRecaptcha": boolean; /** * @default '' */ "mockUrl": string; /** * @default '' */ "queryString": string; /** * Asked for the current request headers before every request a child makes on its own — a trace, a claim, the unauthorized campaign lookup — so a host can refresh its token on demand instead of the children reusing the headers captured at the last search. */ "requestHeadersProvider"?: RequestHeadersProvider; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; /** * Replace every panel's mock map as one operation when a host changes environment. */ "setMockData": (newMockData: VehicleLookupMock) => Promise; /** * Appended to the SSC tab's own lookup request only — e.g. a logging flag — so that only a search made from the SSC tab counts as a campaign check. A search from any other tab leaves the SSC tab in its "check required" state, which names the VIN and offers to run the check itself. Never joins the panel's trace request: a trace re-reads a lookup that was already logged. * @default '' */ "sscQueryString": string; /** * The host's tab strip order, as a comma-separated list of tags, so a switch travels the way the strip reads: content enters from the side the new tab is on and the old content leaves to the other. Defaults to this component's own order; a host whose strip differs passes its own. * @default '' */ "tabOrder": string; /** * ISO calendar date forwarded to every panel. Omit it to use the wall clock. */ "today"?: string; } interface VehiclePaintThickness { "baseUrl": string; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; /** * Host-controlled visibility (e.g. a feature gate). The links themselves come from the lookup response (`paintThicknessCertificateUrls`, one signed URL per print language with its menu label) — the server only issues them to callers allowed to print, so no endpoint, auth headers, fetch or language knowledge live on the client. * @default false */ "showCertificateButton": boolean; "today"?: string; } interface VehicleQuotationForm { "disableScrollToTop"?: boolean; "errorCallback": (error: any, message: string) => Promise; "extraHeader": object; "extraPayload": object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getForm": () => Promise>; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm": boolean; "language": LanguageKeys; "loadingChanges": (loading: boolean) => void; "structure": FormElementStructure | undefined; "structureUrl"?: string; "submit": () => Promise; "successCallback": (data: any, message?: string) => Promise; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VehicleSaleInformation { "baseUrl": string; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; /** * @default 'customerAccountNumber,customerID,brokerInvoiceNumber,brokerInvoiceDate,distributorInvoiceNumber,distributorInvoiceDate,warrantyActivationDate,invoiceDate,invoiceNumber' */ "hiddenFields": string; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; "today"?: string; } interface VehicleServiceHistory { "baseUrl": string; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; "today"?: string; } /** * The build record for a VIN: what this vehicle *is* — model, year, grade, and the codes a parts * counter or a claim form asks for. * It reads five sub-objects and no others (`SpecificationRecord`). Two facts decide what it may * say: `isAuthorized === false` means the distributor has no record, so every value dashes; and an * *empty* record is not a record, so `hasRecords` counts values rather than objects. */ interface VehicleSpecification { "baseUrl": string; /** * Back to "no vehicle": the head leaves the band and the covers come up, then the panel is emptied unseen. */ "clearData": () => Promise; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; /** * The panel's own failure arrives with the head already out of the band, so assigning at once *is* the arrive. Called cold, the card is settled, so the error enters through the leave — otherwise the red pill mounts into a summary row at full opacity. */ "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; "today"?: string; } /** * The Special Service Campaigns (safety recalls) affecting a vehicle, and nothing else: warranty * coverage lives in . Replaces the campaign half of the retired * . * A vehicle is on exactly one of two paths, and the panel must never mix them (the rule is spelled * out on `panelVerdict` in ./components/SscCampaigns.tsx and in * .shift/repos/adp/web-components/vehicle-lookup-invariants.md): * - authorized (in the distributor's records): the campaign list is the verdict; * - unauthorized: the distributor has no records, so the only verdict is the manufacturer's * answer to the reCAPTCHA-gated check — a yes/no, no list. Until it arrives the panel says the * vehicle is not in the records and asserts nothing else. The check is always offered where * the stand-in widget is in use (development, `mockRecaptcha`); the real widget needs the * host's site key, and a production host that configured none gets the notice alone. * A third state is neither: a wrapper that only counts the SSC tab's own request as a campaign * check (`sscQueryString`) tells this panel through `skipLookup` that a vehicle was looked up * without it. The panel then says the check was not run and offers to run it, rather than sitting * blank next to a VIN as if the vehicle had no campaigns. * With `show-trace`, every campaign row can open the evidence behind its repair status: the labor * codes accepted for the campaign, every warranty claim on the vehicle with how it was judged, and * the service-history lines that matched. The trace is fetched on first use with `?trace=ssc`, so * the ordinary lookup response stays small and the host can gate the detail behind a permission. * Every state change is a movement (lookup-motion.css): the outgoing content stays rendered while * the body shuts over it, and the incoming content is swapped in only while the body is shut. The * shared lookup helper waits a second before it asks the server, which is what guarantees the body * has settled shut before a response can land. */ interface VehicleSsc { "baseUrl": string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current headers. * @default '' */ "blazorRequestHeadersProvider": string; /** * @default null */ "brandIntegrationId": string; /** * @default null */ "cityId"?: string; /** * @default null */ "cityIntegrationId"?: string; /** * Back to "no vehicle": the body shuts over what it holds, then the panel is emptied unseen. */ "clearData": () => Promise; /** * @default null */ "companyBranchId"?: string; /** * @default null */ "companyBranchIntegrationId"?: string; /** * @default null */ "companyId"?: string; /** * @default null */ "companyIntegrationId"?: string; /** * @default false */ "coreOnly": boolean; /** * @default null */ "customerEmail"?: string; /** * @default null */ "customerName"?: string; /** * @default null */ "customerPhone"?: string; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Appended to the campaign lookup request only, never to the trace request. A wrapper passes its `sscQueryString` — typically a lookup-logging flag — here rather than into `queryString`, so opening a campaign's evidence (a re-read of a lookup that was already logged) is never counted as another lookup. The host's endpoint must refuse to log traced requests as well. * @default '' */ "lookupQueryString": string; /** * Renders a click-to-pass stand-in for the reCAPTCHA widget. Implied by `isDev`; the real widget is only ever used in production mode. * @default false */ "mockRecaptcha": boolean; /** * @default '' */ "queryString": string; /** * The reCAPTCHA site key the real widget is rendered with. Production needs it to offer the manufacturer check for an unauthorized vehicle; the stand-in widget (`isDev`, `mockRecaptcha`) never talks to Google and needs no key. * @default '' */ "recaptchaKey": string; /** * Asked for the current headers before every request this component makes itself; lets a host refresh its token on demand. */ "requestHeadersProvider"?: RequestHeadersProvider; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; /** * Shows a per-campaign "why this status?" control. The host gates it on its own permission check; the trace lists claim and invoice details. * @default false */ "showTrace": boolean; /** * The other panels were given a vehicle but this one's own lookup was not run for it — a wrapper with `sscQueryString` only counts the SSC tab's own request as a campaign check. The panel says so and offers to run the check itself; the VIN is kept for that. */ "skipLookup": (vin: string) => Promise; "today"?: string; /** * @default '' */ "unauthorizedSscLookupBaseUrl": string; /** * @default '' */ "unauthorizedSscLookupQueryString": string; "unauthorizedSscLookupResponse"?: BlazorInvokableFunction<(sscLookupStatus: number) => void>; /** * @default null */ "userId"?: string; } /** * Warranty coverage as a single dated rail: the standard warranty followed by every * extended coverage in sequence. * This panel shows warranty and nothing else — no campaign table, no reCAPTCHA, no * unauthorized campaign lookup; those belong to `vehicle-ssc`. Hosts point their warranty * tab at this tag and their campaign tab at that one. */ interface VehicleWarrantyTimeline { "baseUrl": string; "clearData": () => Promise; /** * @default false */ "coreOnly": boolean; /** * @default false */ "disableVinValidation": boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "fetchVin": (newData: VehicleLookupDTO | string, headers?: any) => Promise; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers": object; "isDev": boolean; /** * @default 'en' */ "language": LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "queryString": string; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; "setErrorMessage": (message: ErrorKeys) => Promise; "setMockData": (newMockData: VehicleLookupMock) => Promise; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VinExtractor { /** * @default false */ "captureEnvironment": boolean; /** * @default 2000 */ "captureInterval": number; "close": () => Promise; /** * @default false */ "manualCapture": boolean; /** * @default '' */ "manualCaptureHint": string; /** * @default '' */ "manualCaptureLabel": string; "ocrEndpoint": string; "onError"?: ((newError: Error) => void) | string; "onExtract"?: ((vin: string) => void) | string; "onOpenChange"?: ((newError: boolean) => void) | string; "onProcessing"?: ((vin: string) => void) | string; "open": () => Promise; /** * @default false */ "readSticker": boolean; "setBlazorRef": (newBlazorRef: DotNetObjectReference) => Promise; /** * @default false */ "skipValidation": boolean; /** * @default '' */ "title": string; "uploaderButtonId": string; /** * @default false */ "useOcr": boolean; /** * @default false */ "verbose": boolean; } } export interface BranchDatePickerCustomEvent extends CustomEvent { detail: T; target: HTMLBranchDatePickerElement; } export interface BranchSlotPickerCustomEvent extends CustomEvent { detail: T; target: HTMLBranchSlotPickerElement; } export interface VehicleAccessoriesCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleAccessoriesElement; } export interface VehicleClaimableItemsCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleClaimableItemsElement; } export interface VehiclePaintThicknessCustomEvent extends CustomEvent { detail: T; target: HTMLVehiclePaintThicknessElement; } export interface VehicleSaleInformationCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleSaleInformationElement; } export interface VehicleServiceHistoryCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleServiceHistoryElement; } export interface VehicleSpecificationCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleSpecificationElement; } export interface VehicleSscCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleSscElement; } export interface VehicleWarrantyTimelineCustomEvent extends CustomEvent { detail: T; target: HTMLVehicleWarrantyTimelineElement; } declare global { /** * Panel half of `branch-date-picker`. * Two panes on one horizontal track — a month grid, then that day's times — * rather than the two stacked sections `branch-slot-dropdown` uses. Only one * decision is on screen at a time, which is the point of the date-picker * variant: a customer who has met a month calendar before recognises step one * immediately, and step two arrives already scoped to the day they picked. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-date-*` variables the picker sets, exactly as the slot panel is. */ interface HTMLBranchDateDropdownElement extends Components.BranchDateDropdown, HTMLStencilElement { } var HTMLBranchDateDropdownElement: { prototype: HTMLBranchDateDropdownElement; new (): HTMLBranchDateDropdownElement; }; interface HTMLBranchDatePickerElementEventMap { "slotChange": BranchSlotSelection; } /** * Branch-aware booking slot field, month-calendar variant. * Same contract and same data as `branch-slot-picker` — the same endpoint, the * same `slotChange` payload, the same standalone-without-a-form behaviour. The * difference is entirely in the panel: a month grid first, then that day's * times, on a sliding track. Customers who have never used a horizontal day * strip have used a month calendar, and the second step arrives already scoped * to one day rather than sitting under the first. * The two are meant to be interchangeable, so a deployment can pick whichever * its audience reads faster without anything downstream changing. */ interface HTMLBranchDatePickerElement extends Components.BranchDatePicker, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLBranchDatePickerElement, ev: BranchDatePickerCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLBranchDatePickerElement, ev: BranchDatePickerCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLBranchDatePickerElement: { prototype: HTMLBranchDatePickerElement; new (): HTMLBranchDatePickerElement; }; /** * Panel half of `branch-slot-picker`. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-slot-*` variables the picker sets — the same split `shift-select` / * `shift-select-dropdown` use, so the panel escapes any `overflow: hidden` or * stacking context the form puts around the field. */ interface HTMLBranchSlotDropdownElement extends Components.BranchSlotDropdown, HTMLStencilElement { } var HTMLBranchSlotDropdownElement: { prototype: HTMLBranchSlotDropdownElement; new (): HTMLBranchSlotDropdownElement; }; interface HTMLBranchSlotPickerElementEventMap { "slotChange": BranchSlotSelection1; } /** * Branch-aware booking slot field. * Presents as a normal dropdown — the same `form-input-select` trigger as every * other select in the form — and portals its panel onto `document.body` through * `shift-portal`, exactly as `shift-select` does. * Standalone by design: `form` is optional. Drop `` on any * page, in a PWA or in a native WebView, give it the four ids, and listen to * `slotChange`. */ interface HTMLBranchSlotPickerElement extends Components.BranchSlotPicker, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLBranchSlotPickerElement, ev: BranchSlotPickerCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLBranchSlotPickerElement, ev: BranchSlotPickerCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLBranchSlotPickerElement: { prototype: HTMLBranchSlotPickerElement; new (): HTMLBranchSlotPickerElement; }; interface HTMLDeadStockLookupElement extends Components.DeadStockLookup, HTMLStencilElement { } var HTMLDeadStockLookupElement: { prototype: HTMLDeadStockLookupElement; new (): HTMLDeadStockLookupElement; }; interface HTMLDistributorLookupElement extends Components.DistributorLookup, HTMLStencilElement { } var HTMLDistributorLookupElement: { prototype: HTMLDistributorLookupElement; new (): HTMLDistributorLookupElement; }; interface HTMLFlexibleContainerElement extends Components.FlexibleContainer, HTMLStencilElement { } var HTMLFlexibleContainerElement: { prototype: HTMLFlexibleContainerElement; new (): HTMLFlexibleContainerElement; }; interface HTMLFormCheckboxElement extends Components.FormCheckbox, HTMLStencilElement { } var HTMLFormCheckboxElement: { prototype: HTMLFormCheckboxElement; new (): HTMLFormCheckboxElement; }; interface HTMLFormDatePickerElement extends Components.FormDatePicker, HTMLStencilElement { } var HTMLFormDatePickerElement: { prototype: HTMLFormDatePickerElement; new (): HTMLFormDatePickerElement; }; interface HTMLFormDialogElement extends Components.FormDialog, HTMLStencilElement { } var HTMLFormDialogElement: { prototype: HTMLFormDialogElement; new (): HTMLFormDialogElement; }; interface HTMLFormFileElement extends Components.FormFile, HTMLStencilElement { } var HTMLFormFileElement: { prototype: HTMLFormFileElement; new (): HTMLFormFileElement; }; interface HTMLFormInputElement extends Components.FormInput, HTMLStencilElement { } var HTMLFormInputElement: { prototype: HTMLFormInputElement; new (): HTMLFormInputElement; }; interface HTMLFormInputPreviewElement extends Components.FormInputPreview, HTMLStencilElement { } var HTMLFormInputPreviewElement: { prototype: HTMLFormInputPreviewElement; new (): HTMLFormInputPreviewElement; }; interface HTMLFormPhoneNumberElement extends Components.FormPhoneNumber, HTMLStencilElement { } var HTMLFormPhoneNumberElement: { prototype: HTMLFormPhoneNumberElement; new (): HTMLFormPhoneNumberElement; }; interface HTMLFormPickerInputElement extends Components.FormPickerInput, HTMLStencilElement { } var HTMLFormPickerInputElement: { prototype: HTMLFormPickerInputElement; new (): HTMLFormPickerInputElement; }; interface HTMLFormSelectElement extends Components.FormSelect, HTMLStencilElement { } var HTMLFormSelectElement: { prototype: HTMLFormSelectElement; new (): HTMLFormSelectElement; }; interface HTMLFormShadowInputElement extends Components.FormShadowInput, HTMLStencilElement { } var HTMLFormShadowInputElement: { prototype: HTMLFormShadowInputElement; new (): HTMLFormShadowInputElement; }; interface HTMLFormStepperElement extends Components.FormStepper, HTMLStencilElement { } var HTMLFormStepperElement: { prototype: HTMLFormStepperElement; new (): HTMLFormStepperElement; }; interface HTMLFormStepperControlElement extends Components.FormStepperControl, HTMLStencilElement { } var HTMLFormStepperControlElement: { prototype: HTMLFormStepperControlElement; new (): HTMLFormStepperControlElement; }; interface HTMLFormStepperSubmitElement extends Components.FormStepperSubmit, HTMLStencilElement { } var HTMLFormStepperSubmitElement: { prototype: HTMLFormStepperSubmitElement; new (): HTMLFormStepperSubmitElement; }; interface HTMLFormStructureElement extends Components.FormStructure, HTMLStencilElement { } var HTMLFormStructureElement: { prototype: HTMLFormStructureElement; new (): HTMLFormStructureElement; }; interface HTMLFormStructureErrorElement extends Components.FormStructureError, HTMLStencilElement { } var HTMLFormStructureErrorElement: { prototype: HTMLFormStructureErrorElement; new (): HTMLFormStructureErrorElement; }; interface HTMLFormSubmitElement extends Components.FormSubmit, HTMLStencilElement { } var HTMLFormSubmitElement: { prototype: HTMLFormSubmitElement; new (): HTMLFormSubmitElement; }; interface HTMLFormSwitchElement extends Components.FormSwitch, HTMLStencilElement { } var HTMLFormSwitchElement: { prototype: HTMLFormSwitchElement; new (): HTMLFormSwitchElement; }; interface HTMLFormTextAreaElement extends Components.FormTextArea, HTMLStencilElement { } var HTMLFormTextAreaElement: { prototype: HTMLFormTextAreaElement; new (): HTMLFormTextAreaElement; }; interface HTMLFormTimePickerElement extends Components.FormTimePicker, HTMLStencilElement { } var HTMLFormTimePickerElement: { prototype: HTMLFormTimePickerElement; new (): HTMLFormTimePickerElement; }; interface HTMLFormVinInputElement extends Components.FormVinInput, HTMLStencilElement { } var HTMLFormVinInputElement: { prototype: HTMLFormVinInputElement; new (): HTMLFormVinInputElement; }; interface HTMLGeneralFormElement extends Components.GeneralForm, HTMLStencilElement { } var HTMLGeneralFormElement: { prototype: HTMLGeneralFormElement; new (): HTMLGeneralFormElement; }; interface HTMLGeneralInquiryFormElement extends Components.GeneralInquiryForm, HTMLStencilElement { } var HTMLGeneralInquiryFormElement: { prototype: HTMLGeneralInquiryFormElement; new (): HTMLGeneralInquiryFormElement; }; interface HTMLInformationTableElement extends Components.InformationTable, HTMLStencilElement { } var HTMLInformationTableElement: { prototype: HTMLInformationTableElement; new (): HTMLInformationTableElement; }; interface HTMLLoadingSpinnerElement extends Components.LoadingSpinner, HTMLStencilElement { } var HTMLLoadingSpinnerElement: { prototype: HTMLLoadingSpinnerElement; new (): HTMLLoadingSpinnerElement; }; interface HTMLManufacturerLookupElement extends Components.ManufacturerLookup, HTMLStencilElement { } var HTMLManufacturerLookupElement: { prototype: HTMLManufacturerLookupElement; new (): HTMLManufacturerLookupElement; }; interface HTMLManufacturerPartLookupElement extends Components.ManufacturerPartLookup, HTMLStencilElement { } var HTMLManufacturerPartLookupElement: { prototype: HTMLManufacturerPartLookupElement; new (): HTMLManufacturerPartLookupElement; }; interface HTMLPartLookupElement extends Components.PartLookup, HTMLStencilElement { } var HTMLPartLookupElement: { prototype: HTMLPartLookupElement; new (): HTMLPartLookupElement; }; interface HTMLServiceBookingFormElement extends Components.ServiceBookingForm, HTMLStencilElement { } var HTMLServiceBookingFormElement: { prototype: HTMLServiceBookingFormElement; new (): HTMLServiceBookingFormElement; }; interface HTMLShiftAccordionElement extends Components.ShiftAccordion, HTMLStencilElement { } var HTMLShiftAccordionElement: { prototype: HTMLShiftAccordionElement; new (): HTMLShiftAccordionElement; }; interface HTMLShiftCheckboxElement extends Components.ShiftCheckbox, HTMLStencilElement { } var HTMLShiftCheckboxElement: { prototype: HTMLShiftCheckboxElement; new (): HTMLShiftCheckboxElement; }; interface HTMLShiftPortalElement extends Components.ShiftPortal, HTMLStencilElement { } var HTMLShiftPortalElement: { prototype: HTMLShiftPortalElement; new (): HTMLShiftPortalElement; }; interface HTMLShiftSelectElement extends Components.ShiftSelect, HTMLStencilElement { } var HTMLShiftSelectElement: { prototype: HTMLShiftSelectElement; new (): HTMLShiftSelectElement; }; interface HTMLShiftSelectDropdownElement extends Components.ShiftSelectDropdown, HTMLStencilElement { } var HTMLShiftSelectDropdownElement: { prototype: HTMLShiftSelectDropdownElement; new (): HTMLShiftSelectDropdownElement; }; interface HTMLShiftSliderElement extends Components.ShiftSlider, HTMLStencilElement { } var HTMLShiftSliderElement: { prototype: HTMLShiftSliderElement; new (): HTMLShiftSliderElement; }; interface HTMLShiftSwitchElement extends Components.ShiftSwitch, HTMLStencilElement { } var HTMLShiftSwitchElement: { prototype: HTMLShiftSwitchElement; new (): HTMLShiftSwitchElement; }; interface HTMLShiftTabContentElement extends Components.ShiftTabContent, HTMLStencilElement { } var HTMLShiftTabContentElement: { prototype: HTMLShiftTabContentElement; new (): HTMLShiftTabContentElement; }; interface HTMLShiftTabsElement extends Components.ShiftTabs, HTMLStencilElement { } var HTMLShiftTabsElement: { prototype: HTMLShiftTabsElement; new (): HTMLShiftTabsElement; }; interface HTMLSscLookupFormElement extends Components.SscLookupForm, HTMLStencilElement { } var HTMLSscLookupFormElement: { prototype: HTMLSscLookupFormElement; new (): HTMLSscLookupFormElement; }; interface HTMLTestDriveFormElement extends Components.TestDriveForm, HTMLStencilElement { } var HTMLTestDriveFormElement: { prototype: HTMLTestDriveFormElement; new (): HTMLTestDriveFormElement; }; interface HTMLVehicleAccessoriesElementEventMap { "verdictChange": VerdictState; } interface HTMLVehicleAccessoriesElement extends Components.VehicleAccessories, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleAccessoriesElement, ev: VehicleAccessoriesCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleAccessoriesElement, ev: VehicleAccessoriesCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleAccessoriesElement: { prototype: HTMLVehicleAccessoriesElement; new (): HTMLVehicleAccessoriesElement; }; interface HTMLVehicleClaimableItemsElementEventMap { "verdictChange": VerdictState; } interface HTMLVehicleClaimableItemsElement extends Components.VehicleClaimableItems, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleClaimableItemsElement, ev: VehicleClaimableItemsCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleClaimableItemsElement, ev: VehicleClaimableItemsCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleClaimableItemsElement: { prototype: HTMLVehicleClaimableItemsElement; new (): HTMLVehicleClaimableItemsElement; }; interface HTMLVehicleItemClaimFormElement extends Components.VehicleItemClaimForm, HTMLStencilElement { } var HTMLVehicleItemClaimFormElement: { prototype: HTMLVehicleItemClaimFormElement; new (): HTMLVehicleItemClaimFormElement; }; interface HTMLVehicleLookupElement extends Components.VehicleLookup, HTMLStencilElement { } var HTMLVehicleLookupElement: { prototype: HTMLVehicleLookupElement; new (): HTMLVehicleLookupElement; }; interface HTMLVehiclePaintThicknessElementEventMap { "verdictChange": VerdictState; } interface HTMLVehiclePaintThicknessElement extends Components.VehiclePaintThickness, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehiclePaintThicknessElement, ev: VehiclePaintThicknessCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehiclePaintThicknessElement, ev: VehiclePaintThicknessCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehiclePaintThicknessElement: { prototype: HTMLVehiclePaintThicknessElement; new (): HTMLVehiclePaintThicknessElement; }; interface HTMLVehicleQuotationFormElement extends Components.VehicleQuotationForm, HTMLStencilElement { } var HTMLVehicleQuotationFormElement: { prototype: HTMLVehicleQuotationFormElement; new (): HTMLVehicleQuotationFormElement; }; interface HTMLVehicleSaleInformationElementEventMap { "verdictChange": VerdictState; } interface HTMLVehicleSaleInformationElement extends Components.VehicleSaleInformation, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleSaleInformationElement, ev: VehicleSaleInformationCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleSaleInformationElement, ev: VehicleSaleInformationCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleSaleInformationElement: { prototype: HTMLVehicleSaleInformationElement; new (): HTMLVehicleSaleInformationElement; }; interface HTMLVehicleServiceHistoryElementEventMap { "verdictChange": VerdictState; } interface HTMLVehicleServiceHistoryElement extends Components.VehicleServiceHistory, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleServiceHistoryElement, ev: VehicleServiceHistoryCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleServiceHistoryElement, ev: VehicleServiceHistoryCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleServiceHistoryElement: { prototype: HTMLVehicleServiceHistoryElement; new (): HTMLVehicleServiceHistoryElement; }; interface HTMLVehicleSpecificationElementEventMap { "verdictChange": VerdictState; } /** * The build record for a VIN: what this vehicle *is* — model, year, grade, and the codes a parts * counter or a claim form asks for. * It reads five sub-objects and no others (`SpecificationRecord`). Two facts decide what it may * say: `isAuthorized === false` means the distributor has no record, so every value dashes; and an * *empty* record is not a record, so `hasRecords` counts values rather than objects. */ interface HTMLVehicleSpecificationElement extends Components.VehicleSpecification, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleSpecificationElement, ev: VehicleSpecificationCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleSpecificationElement, ev: VehicleSpecificationCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleSpecificationElement: { prototype: HTMLVehicleSpecificationElement; new (): HTMLVehicleSpecificationElement; }; interface HTMLVehicleSscElementEventMap { "verdictChange": VerdictState; } /** * The Special Service Campaigns (safety recalls) affecting a vehicle, and nothing else: warranty * coverage lives in . Replaces the campaign half of the retired * . * A vehicle is on exactly one of two paths, and the panel must never mix them (the rule is spelled * out on `panelVerdict` in ./components/SscCampaigns.tsx and in * .shift/repos/adp/web-components/vehicle-lookup-invariants.md): * - authorized (in the distributor's records): the campaign list is the verdict; * - unauthorized: the distributor has no records, so the only verdict is the manufacturer's * answer to the reCAPTCHA-gated check — a yes/no, no list. Until it arrives the panel says the * vehicle is not in the records and asserts nothing else. The check is always offered where * the stand-in widget is in use (development, `mockRecaptcha`); the real widget needs the * host's site key, and a production host that configured none gets the notice alone. * A third state is neither: a wrapper that only counts the SSC tab's own request as a campaign * check (`sscQueryString`) tells this panel through `skipLookup` that a vehicle was looked up * without it. The panel then says the check was not run and offers to run it, rather than sitting * blank next to a VIN as if the vehicle had no campaigns. * With `show-trace`, every campaign row can open the evidence behind its repair status: the labor * codes accepted for the campaign, every warranty claim on the vehicle with how it was judged, and * the service-history lines that matched. The trace is fetched on first use with `?trace=ssc`, so * the ordinary lookup response stays small and the host can gate the detail behind a permission. * Every state change is a movement (lookup-motion.css): the outgoing content stays rendered while * the body shuts over it, and the incoming content is swapped in only while the body is shut. The * shared lookup helper waits a second before it asks the server, which is what guarantees the body * has settled shut before a response can land. */ interface HTMLVehicleSscElement extends Components.VehicleSsc, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleSscElement, ev: VehicleSscCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleSscElement, ev: VehicleSscCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleSscElement: { prototype: HTMLVehicleSscElement; new (): HTMLVehicleSscElement; }; interface HTMLVehicleWarrantyTimelineElementEventMap { "verdictChange": VerdictState; } /** * Warranty coverage as a single dated rail: the standard warranty followed by every * extended coverage in sequence. * This panel shows warranty and nothing else — no campaign table, no reCAPTCHA, no * unauthorized campaign lookup; those belong to `vehicle-ssc`. Hosts point their warranty * tab at this tag and their campaign tab at that one. */ interface HTMLVehicleWarrantyTimelineElement extends Components.VehicleWarrantyTimeline, HTMLStencilElement { addEventListener(type: K, listener: (this: HTMLVehicleWarrantyTimelineElement, ev: VehicleWarrantyTimelineCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLVehicleWarrantyTimelineElement, ev: VehicleWarrantyTimelineCustomEvent) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } var HTMLVehicleWarrantyTimelineElement: { prototype: HTMLVehicleWarrantyTimelineElement; new (): HTMLVehicleWarrantyTimelineElement; }; interface HTMLVinExtractorElement extends Components.VinExtractor, HTMLStencilElement { } var HTMLVinExtractorElement: { prototype: HTMLVinExtractorElement; new (): HTMLVinExtractorElement; }; interface HTMLElementTagNameMap { "branch-date-dropdown": HTMLBranchDateDropdownElement; "branch-date-picker": HTMLBranchDatePickerElement; "branch-slot-dropdown": HTMLBranchSlotDropdownElement; "branch-slot-picker": HTMLBranchSlotPickerElement; "dead-stock-lookup": HTMLDeadStockLookupElement; "distributor-lookup": HTMLDistributorLookupElement; "flexible-container": HTMLFlexibleContainerElement; "form-checkbox": HTMLFormCheckboxElement; "form-date-picker": HTMLFormDatePickerElement; "form-dialog": HTMLFormDialogElement; "form-file": HTMLFormFileElement; "form-input": HTMLFormInputElement; "form-input-preview": HTMLFormInputPreviewElement; "form-phone-number": HTMLFormPhoneNumberElement; "form-picker-input": HTMLFormPickerInputElement; "form-select": HTMLFormSelectElement; "form-shadow-input": HTMLFormShadowInputElement; "form-stepper": HTMLFormStepperElement; "form-stepper-control": HTMLFormStepperControlElement; "form-stepper-submit": HTMLFormStepperSubmitElement; "form-structure": HTMLFormStructureElement; "form-structure-error": HTMLFormStructureErrorElement; "form-submit": HTMLFormSubmitElement; "form-switch": HTMLFormSwitchElement; "form-text-area": HTMLFormTextAreaElement; "form-time-picker": HTMLFormTimePickerElement; "form-vin-input": HTMLFormVinInputElement; "general-form": HTMLGeneralFormElement; "general-inquiry-form": HTMLGeneralInquiryFormElement; "information-table": HTMLInformationTableElement; "loading-spinner": HTMLLoadingSpinnerElement; "manufacturer-lookup": HTMLManufacturerLookupElement; "manufacturer-part-lookup": HTMLManufacturerPartLookupElement; "part-lookup": HTMLPartLookupElement; "service-booking-form": HTMLServiceBookingFormElement; "shift-accordion": HTMLShiftAccordionElement; "shift-checkbox": HTMLShiftCheckboxElement; "shift-portal": HTMLShiftPortalElement; "shift-select": HTMLShiftSelectElement; "shift-select-dropdown": HTMLShiftSelectDropdownElement; "shift-slider": HTMLShiftSliderElement; "shift-switch": HTMLShiftSwitchElement; "shift-tab-content": HTMLShiftTabContentElement; "shift-tabs": HTMLShiftTabsElement; "ssc-lookup-form": HTMLSscLookupFormElement; "test-drive-form": HTMLTestDriveFormElement; "vehicle-accessories": HTMLVehicleAccessoriesElement; "vehicle-claimable-items": HTMLVehicleClaimableItemsElement; "vehicle-item-claim-form": HTMLVehicleItemClaimFormElement; "vehicle-lookup": HTMLVehicleLookupElement; "vehicle-paint-thickness": HTMLVehiclePaintThicknessElement; "vehicle-quotation-form": HTMLVehicleQuotationFormElement; "vehicle-sale-information": HTMLVehicleSaleInformationElement; "vehicle-service-history": HTMLVehicleServiceHistoryElement; "vehicle-specification": HTMLVehicleSpecificationElement; "vehicle-ssc": HTMLVehicleSscElement; "vehicle-warranty-timeline": HTMLVehicleWarrantyTimelineElement; "vin-extractor": HTMLVinExtractorElement; } } declare namespace LocalJSX { /** * Panel half of `branch-date-picker`. * Two panes on one horizontal track — a month grid, then that day's times — * rather than the two stacked sections `branch-slot-dropdown` uses. Only one * decision is on screen at a time, which is the point of the date-picker * variant: a customer who has met a month calendar before recognises step one * immediately, and step two arrives already scoped to the day they picked. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-date-*` variables the picker sets, exactly as the slot panel is. */ interface BranchDateDropdown { /** * @default '' */ "activeDate"?: string; /** * @default false */ "canGoNext"?: boolean; /** * @default false */ "canGoPrev"?: boolean; "copy": BranchDateDropdownCopy; /** * Bookable days, already de-duplicated, sorted and rule-marked by the picker. * @default [] */ "days"?: BranchSlotDay[]; /** * @default 'ltr' */ "direction"?: string; "displayTime": (raw: string) => string; "formatDay": (date: string, options: Intl.DateTimeFormatOptions) => string; "formatMonth": (monthKey: string) => string; "formatWeekday": (weekday: number) => string; "handleBack": () => void; "handleDate": (date: string) => void; /** * Tapping the sheet scrim. Unused above 600px, where the scrim is hidden. */ "handleDismiss"?: () => void; "handleMonth": (delta: number) => void; "handleRetry": () => void; "handleTime": (raw: string) => void; /** * @default '' */ "idleText"?: string; /** * @default false */ "isOpen"?: boolean; /** * `1` when the last month change went forward, `-1` back. Drives the slide. * @default 1 */ "monthDirection"?: number; /** * The month on screen, as `YYYY-MM`. * @default '' */ "monthKey"?: string; /** * @default '' */ "name"?: string; /** * @default '' */ "selectedRaw"?: string; "setElementRef"?: (el: HTMLElement | null) => void; /** * @default 'idle' */ "status"?: 'idle' | 'loading' | 'ready' | 'empty' | 'error'; /** * @default 'date' */ "step"?: BranchDateStep; /** * @default '' */ "today"?: string; /** * `0` Sunday … `6` Saturday — resolved from the locale by the picker. * @default 1 */ "weekStart"?: number; } /** * Branch-aware booking slot field, month-calendar variant. * Same contract and same data as `branch-slot-picker` — the same endpoint, the * same `slotChange` payload, the same standalone-without-a-form behaviour. The * difference is entirely in the panel: a month grid first, then that day's * times, on a sliding track. Customers who have never used a horizontal day * strip have used a month calendar, and the second step arrives already scoped * to one day rather than sitting under the first. * The two are meant to be interchangeable, so a deployment can pick whichever * its audience reads faster without anything downstream changing. */ interface BranchDatePicker { "branchId"?: string; "brandId"?: string; /** * Full URL of the calendar endpoint, e.g. `https://…/api/public/calendar`. */ "calendarApi"?: string; /** * Integration ids. The field stays idle until all four are present. */ "companyId"?: string; /** * How far ahead to ask. The endpoint caps its own response at 15 days. * @default 30 */ "daysAhead"?: number; /** * Preselects a slot, in the same `YYYY-MM-DDTHH:mm` form the field emits. */ "defaultValue"?: string; "departmentId"?: string; /** * One-off blackout dates as `YYYY-MM-DD`, same accepted shapes as above. */ "disabledDates"?: string | string[]; /** * Weekdays the branch never books on, `0` Sunday … `6` Saturday. Accepts an array or a `"5,6"` string. Matching days stay on the grid, struck through, rather than being dropped — see `~lib/slot-day-rules`. */ "disabledWeekdays"?: string | number[]; /** * Optional — omit for standalone use and listen to `slotChange` instead. */ "form"?: FormHook; /** * Gap between the trigger and the panel, matching shift-select's default. * @default 8 */ "gap"?: number; /** * @default false */ "isDisabled"?: boolean; /** * @default false */ "isRequired"?: boolean; "label"?: string; /** * @default 'en' */ "language"?: LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; /** * Tallest the panel may get before its panes scroll. Also capped to the viewport. * @default 460 */ "maxPanelHeight"?: number; /** * Floor for the panel width on desktop. The panel is portaled to `` and positioned fixed, so it is free to be wider than the field — and than the form around it — which is the point: seven columns stop reading as a calendar much below this, and form fields are routinely narrower. * @default 380 */ "minPanelWidth"?: number; /** * Field name. Only meaningful when `form` is supplied. * @default 'bookingDate' */ "name"?: string; /** * Fires on every confirmed day+time selection. The standalone contract. */ "onSlotChange"?: (event: BranchDatePickerCustomEvent) => void; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; /** * First column of the grid, `0` Sunday … `6` Saturday. Left unset it comes from the active locale, which is right far more often than any constant. */ "weekStartsOn"?: number; "wrapperClass"?: string; "wrapperId"?: string; } /** * Panel half of `branch-slot-picker`. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-slot-*` variables the picker sets — the same split `shift-select` / * `shift-select-dropdown` use, so the panel escapes any `overflow: hidden` or * stacking context the form puts around the field. */ interface BranchSlotDropdown { /** * @default '' */ "activeDate"?: string; "copy": BranchSlotDropdownCopy; /** * @default [] */ "days"?: BranchSlotDay1[]; /** * @default 'ltr' */ "direction"?: string; "displayTime": (raw: string) => string; "formatDay": (date: string, options: Intl.DateTimeFormatOptions) => string; "handleDay": (date: string) => void; /** * Tapping the sheet scrim. Unused above 600px, where the scrim is hidden. */ "handleDismiss"?: () => void; "handleRetry": () => void; "handleTime": (raw: string) => void; /** * @default '' */ "idleText"?: string; /** * @default false */ "isOpen"?: boolean; /** * @default '' */ "name"?: string; /** * @default '' */ "selectedRaw"?: string; "setElementRef"?: (el: HTMLElement | null) => void; /** * @default 'idle' */ "status"?: 'idle' | 'loading' | 'ready' | 'empty' | 'error'; } /** * Branch-aware booking slot field. * Presents as a normal dropdown — the same `form-input-select` trigger as every * other select in the form — and portals its panel onto `document.body` through * `shift-portal`, exactly as `shift-select` does. * Standalone by design: `form` is optional. Drop `` on any * page, in a PWA or in a native WebView, give it the four ids, and listen to * `slotChange`. */ interface BranchSlotPicker { "branchId"?: string; "brandId"?: string; /** * Full URL of the calendar endpoint, e.g. `https://…/api/public/calendar`. */ "calendarApi"?: string; /** * Integration ids. The field stays idle until all four are present. */ "companyId"?: string; /** * How far ahead to ask. The endpoint caps its own response at 15 days. * @default 30 */ "daysAhead"?: number; /** * Preselects a slot, in the same `YYYY-MM-DDTHH:mm` form the field emits. */ "defaultValue"?: string; "departmentId"?: string; /** * One-off blackout dates as `YYYY-MM-DD`, same accepted shapes as above. */ "disabledDates"?: string | string[]; /** * Weekdays the branch never books on, `0` Sunday … `6` Saturday. Accepts an array or a `"5,6"` string. Matching days stay visible but unselectable — see `~lib/slot-day-rules` for why they are not simply dropped. */ "disabledWeekdays"?: string | number[]; /** * Optional — omit for standalone use and listen to `slotChange` instead. */ "form"?: FormHook; /** * Gap between the trigger and the panel, matching shift-select's default. * @default 8 */ "gap"?: number; /** * @default false */ "isDisabled"?: boolean; /** * @default false */ "isRequired"?: boolean; "label"?: string; /** * @default 'en' */ "language"?: LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; /** * Tallest the panel may get before it scrolls. Also capped to the viewport. * @default 460 */ "maxPanelHeight"?: number; /** * Floor for the panel width on desktop. The panel is portaled to `` and positioned fixed, so it is free to be wider than the field — and than the form around it — which is the point: a two-column form gives the field ~320px, which squeezed the day strip and the time grid into something that read as clipped. Capped to the viewport at open time. * @default 420 */ "minPanelWidth"?: number; /** * Field name. Only meaningful when `form` is supplied. * @default 'bookingSlot' */ "name"?: string; /** * Fires on every confirmed day+time selection. The standalone contract. */ "onSlotChange"?: (event: BranchSlotPickerCustomEvent) => void; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface DeadStockLookup { /** * @default false */ "coreOnly"?: boolean; "endpoint"?: Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "mockUrl"?: string; } interface DistributorLookup { /** * @default false */ "coreOnly"?: boolean; "endpoint"?: Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * @default '' */ "hiddenFields"?: string; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "localizationName"?: string; "manufacturerPartLookupEndpoint"?: Endpoint; "manufacturerPartLookupTitle"?: string; /** * @default '' */ "mockUrl"?: string; } interface FlexibleContainer { "classes"?: string; "containerClasses"?: string; /** * @default 'auto' */ "height"?: number | 'auto'; /** * @default true */ "isOpened"?: boolean; /** * @default false */ "onlyForMounting"?: boolean; /** * @default false */ "stopAnimation"?: boolean; } interface FormCheckbox { "defaultChecked"?: boolean; "form"?: FormHook; "inputPrefix"?: string; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; /** * @default 'text' */ "type"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormDatePicker { "defaultValue"?: string; "disabledDates"?: (date: Date) => boolean; /** * @default 0 */ "firstDayOfWeek"?: number; "form"?: FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default 'en' */ "language"?: string; "maxDate"?: string; "minDate"?: string; "name"?: string; "staticValue"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormDialog { /** * @default '' */ "closeText"?: string; "dialogClosed"?: () => void; "form": FormHook; /** * @default false */ "isError"?: boolean; /** * @default '' */ "message"?: string; /** * @default '' */ "successMessage"?: string; } interface FormFile { "accept"?: string; "accountName"?: string; "containerName"?: string; "form"?: FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization<{ uploading?: string; upload?: string; failure?: string; success?: string; }>; "maxSize"?: number; /** * @default 1 */ "maxUpload"?: number; "name"?: string; "required"?: boolean; /** * @default 'POST' */ "signMethod"?: 'POST' | 'PUT'; "signPrefix"?: string; "signUrl"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormInput { "defaultValue"?: string; "form"?: FormHook; "formatter"?: (value: string) => string; "icon"?: any; "iconAction"?: () => void; /** * @default 'end' */ "iconPosition"?: 'start' | 'end'; "inputPrefix"?: string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; "staticValue"?: string; "type"?: HTMLInputElement['type']; "wrapperClass"?: string; "wrapperId"?: string; } interface FormInputPreview { "form"?: FormHook; /** * @default {} */ "localization"?: FormInputLocalization<{ value?: string }>; "name"?: string; /** * @default {} */ "props"?: any; } interface FormPhoneNumber { /** * @default 'IQ' */ "countryCode"?: string | string[] | { code: string; icon?: string }[]; "defaultValue"?: string; "form"?: FormHook; "inputPrefix"?: string; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; "required"?: boolean; "staticValue"?: string; /** * @default 'text' */ "type"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormPickerInput { "defaultValue"?: string; "form"?: FormHook; "format"?: string; "formatter"?: (value: string) => string; "icon"?: any; "iconAction"?: () => void; /** * @default 'end' */ "iconPosition"?: 'start' | 'end'; "inputPrefix"?: string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "max"?: string | number[]; "min"?: string | number[]; "name"?: string; "staticValue"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; /** * @default 'datetime-local' */ "type"?: DateTypes; "wrapperClass"?: string; "wrapperId"?: string; } interface FormSelect { /** * @default false */ "clearable"?: boolean; "defaultValue"?: string; "fetcher"?: FormSelectFetcher; "fetcherKey"?: any; /** * @default false */ "forceOpenUpwards"?: boolean; "form"?: FormHook; "isDisabled"?: boolean; "isHidden"?: boolean; "isLoading"?: boolean; "isRequired"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; "resetKey"?: any; /** * @default false */ "reverseOptions"?: boolean; "searchable"?: boolean; "staticValue"?: FormSelectItem; "wrapperClass"?: string; "wrapperId"?: string; } interface FormShadowInput { "form"?: FormHook; "name"?: string; /** * @default 'string' */ "type"?: string; "value"?: string; } interface FormStepper { "form"?: FormHook; "language"?: string; "name"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormStepperControl { "form"?: FormHook; "isLoading"?: boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormStepperSubmit { "form"?: FormHook; "isLoading"?: boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; "step"?: number; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormStructure { /** * @default '' */ "errorMessage"?: string; /** * @default {} */ "fields"?: object; "form": FormHook; "formElementMapper": FormElementMapper; "formId"?: string; /** * @default {} */ "formLocale"?: any; /** * @default false */ "isLoading"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "structure": FormElementStructure; /** * @default '' */ "successMessage"?: string; "today"?: string; } interface FormStructureError { /** * @default 'en' */ "language"?: LanguageKeys; } interface FormSubmit { "form"?: FormHook; "isLoading"?: boolean; "language"?: string; /** * @default {} */ "localization"?: FormInputLocalization; /** * @default 'submit' */ "submitTextKey"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormSwitch { "defaultChecked"?: boolean; "form"?: FormHook; "inputPrefix"?: string; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; /** * @default 'text' */ "type"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormTextArea { "defaultValue"?: string; "form"?: FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization; "name"?: string; "staticValue"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormTimePicker { "defaultValue"?: string; "form"?: FormHook; "isDisabled"?: boolean; "isLoading"?: boolean; "maxTime"?: string; "minTime"?: string; /** * @default 1 */ "minuteStep"?: number; "name"?: string; "staticValue"?: string; "wrapperClass"?: string; "wrapperId"?: string; } interface FormVinInput { "defaultValue"?: string; "form"?: FormHook; "inputPrefix"?: string; /** * @default {} */ "inputProps"?: any; "isDisabled"?: boolean; "isLoading"?: boolean; /** * @default {} */ "localization"?: FormInputLocalization<{ scan: string }>; "name"?: string; "ocrEndpoint"?: string; "readSticker"?: boolean; /** * @default '' */ "scannerIcon"?: '' | 'qr-code' | 'camera'; "staticValue"?: string; "useOcr"?: boolean; "wrapperClass"?: string; "wrapperId"?: string; } interface GeneralForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface GeneralInquiryForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface InformationTable { /** * @default false */ "allowAutoWidth"?: boolean; /** * @default false */ "allowMultipleExpanded"?: boolean; /** * @default false */ "customSkeleton"?: boolean; /** * @default 48 */ "expandColumnWidth"?: number; /** * @default false */ "expandUsingEntireRow"?: boolean; "headers"?: InformationTableColumn[]; /** * @default false */ "isLoading"?: boolean; /** * @default false */ "isRaw"?: boolean; /** * @default [] */ "rows"?: object[]; /** * @default false */ "scrollExpandedIntoView"?: boolean; /** * @default true */ "showHeader"?: boolean; /** * @default 'default' */ "size"?: 'default' | 'small'; /** * @default true */ "stripCells"?: boolean; "subRowRenderer"?: (row: any) => any; /** * @default {} */ "templateRow"?: object; } interface LoadingSpinner { "isLoading"?: boolean; } interface ManufacturerLookup { /** * @default false */ "coreOnly"?: boolean; "endpoint"?: Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * @default '' */ "hiddenFields"?: string; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "localizationName"?: string; /** * @default '' */ "mockUrl"?: string; } interface ManufacturerPartLookup { "closeManufacturerPartLookup"?: boolean; "getHeaders"?: BlazorInvokableFunction<() => any>; "isDev"?: boolean; "language"?: LanguageKeys; /** * @default '' */ "logId"?: string; "manufacturerPartLookupEndpoint"?: Endpoint; /** * @default 'Manufacture lookup' */ "manufacturerPartLookupTitle"?: string; "partLookup"?: PartLookupDTO; /** * @default true */ "standAlone"?: boolean; } interface PartLookup { /** * @default '' */ "activeElement"?: ActiveElement; "childrenProps"?: string | object; "endpoint"?: Endpoint; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * @default false */ "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedMockDatas"?: BlazorInvokableFunction<(response: any) => void>; "loadedResponse"?: BlazorInvokableFunction<(response: PartLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default '' */ "mockUrl"?: string; } interface ServiceBookingForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface ShiftAccordion { "accordionClasses"?: string; "accordionContentClasses"?: string; "items"?: AccordionItem[]; } interface ShiftCheckbox { "checked"?: boolean; "componentClass"?: string; "componentId"?: string; "disabled"?: boolean; "label"?: string; "name"?: string; "onChange"?: (event: Event) => void; } interface ShiftPortal { /** * @default {} */ "componentProps"?: Record; /** * @default '' */ "inheritedClasses"?: string; /** * @default '' */ "tag"?: string; } interface ShiftSelect { /** * @default false */ "clearable"?: boolean; /** * @default 'ltr' */ "direction"?: string; "disableInput"?: boolean; "fetchingErrorText"?: string | boolean; /** * @default false */ "forceOpenUpwards"?: boolean; "fullRenderOption"?: (option: FormSelectItem1, isSelected: boolean, handleSelection: (option: FormSelectItem1) => void) => any; /** * @default 8 */ "gap"?: number; "handleSelection": (option: FormSelectItem1) => void; /** * @default true */ "hasArrow"?: boolean; /** * @default true */ "hasTick"?: boolean; "isError"?: boolean; "isLoading"?: boolean; /** * @default false */ "isOpen"?: boolean; /** * @default '' */ "name"?: string; "noSelectionText"?: string; "onSelection"?: (newSelection: FormSelectItem1) => void; /** * @default [] */ "options"?: FormSelectItem1[]; "placeholder"?: string; "renderOption"?: (option: FormSelectItem1, isSelected: boolean) => any; /** * @default false */ "reverseOptions"?: boolean; /** * @default '' */ "searchValue"?: string; /** * @default false */ "searchable"?: boolean; /** * @default '' */ "selectedValue"?: string; "updateContext": (newValues: Partial<{ isOpen: boolean; searchValue: string; selectedValue: string }>) => void; } interface ShiftSelectDropdown { /** * @default 'ltr' */ "direction"?: string; "fetchingErrorText"?: string | boolean; "fullRenderOption"?: (option: FormSelectItem, isSelected: boolean, handleSelection: (option: FormSelectItem) => void) => any; "handleSelection": (option: FormSelectItem) => void; /** * @default true */ "hasArrow"?: boolean; /** * @default true */ "hasTick"?: boolean; "isLoading"?: boolean; /** * @default false */ "isOpen"?: boolean; /** * @default '' */ "name"?: string; "noSelectionText"?: string; /** * @default [] */ "options"?: FormSelectItem[]; "renderOption"?: (option: FormSelectItem, isSelected: boolean) => any; /** * @default false */ "reverseOptions"?: boolean; /** * @default '' */ "selectedValue"?: string; "setElementRef"?: (el: HTMLElement | null) => void; } interface ShiftSlider { "activeIndex"?: number; "components"?: (() => Node)[]; } interface ShiftSwitch { "checked"?: boolean; "componentClass"?: string; "componentId"?: string; "disabled"?: boolean; "label"?: string; "name"?: string; "onChange"?: (event: Event) => void; } interface ShiftTabContent { "activeComponent"?: string; "components"?: { [key: string]: Node }; } interface ShiftTabs { "activeTabIndex"?: number; "activeTabLabel"?: string; "changeActiveTab"?: (activeStatus: { label: string; idx: number }) => void; "containerClasses"?: string; "tabClasses"?: string; "tabs"?: string[]; } interface SscLookupForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface TestDriveForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "stepChangeCallback"?: (step: number, currentForm?: any) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; "theme"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VehicleAccessories { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleAccessoriesCustomEvent) => void; /** * @default '' */ "queryString"?: string; "today"?: string; } interface VehicleClaimableItems { "activate"?: (vehicleInformation: VehicleLookupDTO) => void; "baseUrl"?: string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current headers. * @default '' */ "blazorRequestHeadersProvider"?: string; /** * @default 'api/vehicle/swift-claim' */ "claimEndPoint"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * @default 30 */ "maximumDocumentFileSizeInMb"?: number; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleClaimableItemsCustomEvent) => void; "print"?: (claimResponse: any) => void; /** * @default '' */ "queryString"?: string; /** * Asked for the current headers before every request this component makes itself (trace, claim); lets a host refresh its token on demand. */ "requestHeadersProvider"?: RequestHeadersProvider; /** * @default false */ "showTrace"?: boolean; "today"?: string; /** * @default true */ "uploadMultipleDocumentsAtTheForm"?: boolean; } interface VehicleItemClaimForm { "handleClaiming"?: (documents: File[], payload: ItemClaimDTO) => Promise; "item"?: VehicleServiceItemDTO; "loadingStateChange"?: (isLoading: boolean) => void; "locale"?: { sharedLocales: SharedLocales } & ClaimFormType; "maximumDocumentFileSizeInMb"?: number; /** * @default true */ "uploadMultipleDocuments"?: boolean; "vin"?: string; } interface VehicleLookup { /** * @default '' */ "activeElement"?: ActiveElement1; /** * @default '' */ "baseUrl"?: string; /** * @default '' */ "blazorDynamicClaimActivate"?: string; /** * @default '' */ "blazorErrorStateListener"?: string; /** * @default '' */ "blazorOnLoadingStateChange"?: string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current request headers. * @default '' */ "blazorRequestHeadersProvider"?: string; "childrenProps"?: string | object; /** * @default false */ "disableVinValidation"?: boolean; "dynamicClaimActivate"?: (vehicleInformation: VehicleLookupDTO) => void; "errorStateListener"?: (newError: string) => void; /** * @default '' */ "hiddenTabs"?: string; /** * @default false */ "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadingStateChanged"?: (isLoading: boolean) => void; /** * @default false */ "mockRecaptcha"?: boolean; /** * @default '' */ "mockUrl"?: string; /** * @default '' */ "queryString"?: string; /** * Asked for the current request headers before every request a child makes on its own — a trace, a claim, the unauthorized campaign lookup — so a host can refresh its token on demand instead of the children reusing the headers captured at the last search. */ "requestHeadersProvider"?: RequestHeadersProvider; /** * Appended to the SSC tab's own lookup request only — e.g. a logging flag — so that only a search made from the SSC tab counts as a campaign check. A search from any other tab leaves the SSC tab in its "check required" state, which names the VIN and offers to run the check itself. Never joins the panel's trace request: a trace re-reads a lookup that was already logged. * @default '' */ "sscQueryString"?: string; /** * The host's tab strip order, as a comma-separated list of tags, so a switch travels the way the strip reads: content enters from the side the new tab is on and the old content leaves to the other. Defaults to this component's own order; a host whose strip differs passes its own. * @default '' */ "tabOrder"?: string; /** * ISO calendar date forwarded to every panel. Omit it to use the wall clock. */ "today"?: string; } interface VehiclePaintThickness { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehiclePaintThicknessCustomEvent) => void; /** * @default '' */ "queryString"?: string; /** * Host-controlled visibility (e.g. a feature gate). The links themselves come from the lookup response (`paintThicknessCertificateUrls`, one signed URL per print language with its menu label) — the server only issues them to callers allowed to print, so no endpoint, auth headers, fetch or language knowledge live on the client. * @default false */ "showCertificateButton"?: boolean; "today"?: string; } interface VehicleQuotationForm { "disableScrollToTop"?: boolean; "errorCallback"?: (error: any, message: string) => Promise; "extraHeader"?: object; "extraPayload"?: object; "fields"?: object; "formId"?: string; "formReadyCallback"?: () => void; "getMobileToken"?: () => string; "gistId"?: string; /** * @default false */ "isDev"?: boolean; /** * @default false */ "isMobileForm"?: boolean; "language"?: LanguageKeys; "loadingChanges"?: (loading: boolean) => void; "structure"?: FormElementStructure | undefined; "structureUrl"?: string; "successCallback"?: (data: any, message?: string) => Promise; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VehicleSaleInformation { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; /** * @default 'customerAccountNumber,customerID,brokerInvoiceNumber,brokerInvoiceDate,distributorInvoiceNumber,distributorInvoiceDate,warrantyActivationDate,invoiceDate,invoiceNumber' */ "hiddenFields"?: string; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleSaleInformationCustomEvent) => void; /** * @default '' */ "queryString"?: string; "today"?: string; } interface VehicleServiceHistory { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleServiceHistoryCustomEvent) => void; /** * @default '' */ "queryString"?: string; "today"?: string; } /** * The build record for a VIN: what this vehicle *is* — model, year, grade, and the codes a parts * counter or a claim form asks for. * It reads five sub-objects and no others (`SpecificationRecord`). Two facts decide what it may * say: `isAuthorized === false` means the distributor has no record, so every value dashes; and an * *empty* record is not a record, so `hasRecords` counts values rather than objects. */ interface VehicleSpecification { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires on every verdict change, idle included, so a composite can colour its accent from the active panel. */ "onVerdictChange"?: (event: VehicleSpecificationCustomEvent) => void; /** * @default '' */ "queryString"?: string; "today"?: string; } /** * The Special Service Campaigns (safety recalls) affecting a vehicle, and nothing else: warranty * coverage lives in . Replaces the campaign half of the retired * . * A vehicle is on exactly one of two paths, and the panel must never mix them (the rule is spelled * out on `panelVerdict` in ./components/SscCampaigns.tsx and in * .shift/repos/adp/web-components/vehicle-lookup-invariants.md): * - authorized (in the distributor's records): the campaign list is the verdict; * - unauthorized: the distributor has no records, so the only verdict is the manufacturer's * answer to the reCAPTCHA-gated check — a yes/no, no list. Until it arrives the panel says the * vehicle is not in the records and asserts nothing else. The check is always offered where * the stand-in widget is in use (development, `mockRecaptcha`); the real widget needs the * host's site key, and a production host that configured none gets the notice alone. * A third state is neither: a wrapper that only counts the SSC tab's own request as a campaign * check (`sscQueryString`) tells this panel through `skipLookup` that a vehicle was looked up * without it. The panel then says the check was not run and offers to run it, rather than sitting * blank next to a VIN as if the vehicle had no campaigns. * With `show-trace`, every campaign row can open the evidence behind its repair status: the labor * codes accepted for the campaign, every warranty claim on the vehicle with how it was judged, and * the service-history lines that matched. The trace is fetched on first use with `?trace=ssc`, so * the ordinary lookup response stays small and the host can gate the detail behind a permission. * Every state change is a movement (lookup-motion.css): the outgoing content stays rendered while * the body shuts over it, and the incoming content is swapped in only while the body is shut. The * shared lookup helper waits a second before it asks the server, which is what guarantees the body * has settled shut before a response can land. */ interface VehicleSsc { "baseUrl"?: string; /** * Name of a [JSInvokable] method on the Blazor reference that answers with the current headers. * @default '' */ "blazorRequestHeadersProvider"?: string; /** * @default null */ "brandIntegrationId"?: string; /** * @default null */ "cityId"?: string; /** * @default null */ "cityIntegrationId"?: string; /** * @default null */ "companyBranchId"?: string; /** * @default null */ "companyBranchIntegrationId"?: string; /** * @default null */ "companyId"?: string; /** * @default null */ "companyIntegrationId"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default null */ "customerEmail"?: string; /** * @default null */ "customerName"?: string; /** * @default null */ "customerPhone"?: string; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Appended to the campaign lookup request only, never to the trace request. A wrapper passes its `sscQueryString` — typically a lookup-logging flag — here rather than into `queryString`, so opening a campaign's evidence (a re-read of a lookup that was already logged) is never counted as another lookup. The host's endpoint must refuse to log traced requests as well. * @default '' */ "lookupQueryString"?: string; /** * Renders a click-to-pass stand-in for the reCAPTCHA widget. Implied by `isDev`; the real widget is only ever used in production mode. * @default false */ "mockRecaptcha"?: boolean; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleSscCustomEvent) => void; /** * @default '' */ "queryString"?: string; /** * The reCAPTCHA site key the real widget is rendered with. Production needs it to offer the manufacturer check for an unauthorized vehicle; the stand-in widget (`isDev`, `mockRecaptcha`) never talks to Google and needs no key. * @default '' */ "recaptchaKey"?: string; /** * Asked for the current headers before every request this component makes itself; lets a host refresh its token on demand. */ "requestHeadersProvider"?: RequestHeadersProvider; /** * Shows a per-campaign "why this status?" control. The host gates it on its own permission check; the trace lists claim and invoice details. * @default false */ "showTrace"?: boolean; "today"?: string; /** * @default '' */ "unauthorizedSscLookupBaseUrl"?: string; /** * @default '' */ "unauthorizedSscLookupQueryString"?: string; "unauthorizedSscLookupResponse"?: BlazorInvokableFunction<(sscLookupStatus: number) => void>; /** * @default null */ "userId"?: string; } /** * Warranty coverage as a single dated rail: the standard warranty followed by every * extended coverage in sequence. * This panel shows warranty and nothing else — no campaign table, no reCAPTCHA, no * unauthorized campaign lookup; those belong to `vehicle-ssc`. Hosts point their warranty * tab at this tag and their campaign tab at that one. */ interface VehicleWarrantyTimeline { "baseUrl"?: string; /** * @default false */ "coreOnly"?: boolean; /** * @default false */ "disableVinValidation"?: boolean; "errorCallback"?: BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; /** * Static headers the host set on the element. The floor every request starts from. * @default {} */ "headers"?: object; "isDev"?: boolean; /** * @default 'en' */ "language"?: LanguageKeys; "loadedResponse"?: BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "loadingStateChange"?: BlazorInvokableFunction<(isLoading: boolean) => void>; /** * Fires whenever the panel's verdict changes — including back to idle when the vehicle is cleared — so a composite that draws one card for several panels can colour its accent from the active one. */ "onVerdictChange"?: (event: VehicleWarrantyTimelineCustomEvent) => void; /** * @default '' */ "queryString"?: string; /** * ISO calendar date, read as UTC. Omit it to use the wall clock. */ "today"?: string; } interface VinExtractor { /** * @default false */ "captureEnvironment"?: boolean; /** * @default 2000 */ "captureInterval"?: number; /** * @default false */ "manualCapture"?: boolean; /** * @default '' */ "manualCaptureHint"?: string; /** * @default '' */ "manualCaptureLabel"?: string; "ocrEndpoint"?: string; "onError"?: ((newError: Error) => void) | string; "onExtract"?: ((vin: string) => void) | string; "onOpenChange"?: ((newError: boolean) => void) | string; "onProcessing"?: ((vin: string) => void) | string; /** * @default false */ "readSticker"?: boolean; /** * @default false */ "skipValidation"?: boolean; /** * @default '' */ "title"?: string; "uploaderButtonId"?: string; /** * @default false */ "useOcr"?: boolean; /** * @default false */ "verbose"?: boolean; } interface BranchDateDropdownAttributes { "name": string; "isOpen": boolean; "direction": string; "status": 'idle' | 'loading' | 'ready' | 'empty' | 'error'; "monthKey": string; "monthDirection": number; "canGoPrev": boolean; "canGoNext": boolean; "step": BranchDateStep; "activeDate": string; "selectedRaw": string; "today": string; "weekStart": number; "idleText": string; } interface BranchDatePickerAttributes { "name": string; "calendarApi": string; "companyId": string; "branchId": string; "departmentId": string; "brandId": string; "daysAhead": number; "today": string; "disabledWeekdays": string | number[]; "disabledDates": string | string[]; "weekStartsOn": number; "gap": number; "minPanelWidth": number; "maxPanelHeight": number; "label": string; "wrapperId": string; "wrapperClass": string; "isRequired": boolean; "isDisabled": boolean; "language": LanguageKeys; "defaultValue": string; } interface BranchSlotDropdownAttributes { "name": string; "isOpen": boolean; "direction": string; "status": 'idle' | 'loading' | 'ready' | 'empty' | 'error'; "activeDate": string; "selectedRaw": string; "idleText": string; } interface BranchSlotPickerAttributes { "name": string; "calendarApi": string; "companyId": string; "branchId": string; "departmentId": string; "brandId": string; "daysAhead": number; "today": string; "disabledWeekdays": string | number[]; "disabledDates": string | string[]; "gap": number; "minPanelWidth": number; "maxPanelHeight": number; "label": string; "wrapperId": string; "wrapperClass": string; "isRequired": boolean; "isDisabled": boolean; "language": LanguageKeys; "defaultValue": string; } interface DeadStockLookupAttributes { "language": LanguageKeys; "coreOnly": boolean; "mockUrl": string; "isDev": boolean; "endpoint": Endpoint; "loadedMockDatas": BlazorInvokableFunction<(response: any) => void>; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: PartLookupDTO) => void>; } interface DistributorLookupAttributes { "language": LanguageKeys; "coreOnly": boolean; "mockUrl": string; "isDev": boolean; "endpoint": Endpoint; "loadedMockDatas": BlazorInvokableFunction<(response: any) => void>; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: PartLookupDTO) => void>; "hiddenFields": string; "localizationName": string; "manufacturerPartLookupTitle": string; "manufacturerPartLookupEndpoint": Endpoint; } interface FlexibleContainerAttributes { "classes": string; "containerClasses": string; "isOpened": boolean; "stopAnimation": boolean; "height": string; "onlyForMounting": boolean; } interface FormCheckboxAttributes { "name": string; "wrapperId": string; "inputPrefix": string; "wrapperClass": string; "type": string; "defaultChecked": boolean; } interface FormDatePickerAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "isDisabled": boolean; "wrapperClass": string; "staticValue": string; "defaultValue": string; "language": string; "today": string; "minDate": string; "maxDate": string; "firstDayOfWeek": number; } interface FormDialogAttributes { "message": string; "closeText": string; "isError": boolean; "successMessage": string; } interface FormFileAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "wrapperClass": string; "isDisabled": boolean; "accept": string; "maxSize": number; "required": boolean; "signUrl": string; "maxUpload": number; "signMethod": 'POST' | 'PUT'; "signPrefix": string; "accountName": string; "containerName": string; } interface FormInputAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "isDisabled": boolean; "inputPrefix": string; "wrapperClass": string; "staticValue": string; "inputProps": string; "type": HTMLInputElement['type']; "defaultValue": string; "icon": string; "iconPosition": 'start' | 'end'; } interface FormInputPreviewAttributes { "name": string; "props": string; } interface FormPhoneNumberAttributes { "name": string; "wrapperId": string; "required": boolean; "isLoading": boolean; "inputPrefix": string; "wrapperClass": string; "defaultValue": string; "type": string; "isDisabled": boolean; "staticValue": string; "countryCode": string | string[] | { code: string; icon?: string }[]; } interface FormPickerInputAttributes { "name": string; "format": string; "wrapperId": string; "isLoading": boolean; "isDisabled": boolean; "inputPrefix": string; "wrapperClass": string; "staticValue": string; "inputProps": string; "max": string | number[]; "min": string | number[]; "type": DateTypes; "today": string; "defaultValue": string; "icon": string; "iconPosition": 'start' | 'end'; } interface FormSelectAttributes { "name": string; "resetKey": string; "fetcherKey": string; "wrapperId": string; "isHidden": boolean; "isLoading": boolean; "searchable": boolean; "isRequired": boolean; "isDisabled": boolean; "wrapperClass": string; "language": LanguageKeys; "reverseOptions": boolean; "forceOpenUpwards": boolean; "clearable": boolean; "defaultValue": string; } interface FormShadowInputAttributes { "name": string; "value": string; "type": string; } interface FormStepperAttributes { "name": string; "language": string; "wrapperId": string; "wrapperClass": string; } interface FormStepperControlAttributes { "language": string; "wrapperId": string; "isLoading": boolean; "wrapperClass": string; "submitTextKey": string; } interface FormStepperSubmitAttributes { "step": number; "language": string; "wrapperId": string; "isLoading": boolean; "wrapperClass": string; "submitTextKey": string; } interface FormStructureAttributes { "formLocale": string; "language": LanguageKeys; "formId": string; "today": string; "isLoading": boolean; "errorMessage": string; "successMessage": string; } interface FormStructureErrorAttributes { "language": LanguageKeys; } interface FormSubmitAttributes { "language": string; "wrapperId": string; "isLoading": boolean; "wrapperClass": string; "submitTextKey": string; } interface FormSwitchAttributes { "name": string; "wrapperId": string; "inputPrefix": string; "wrapperClass": string; "type": string; "defaultChecked": boolean; } interface FormTextAreaAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "defaultValue": string; "wrapperClass": string; "staticValue": string; "isDisabled": boolean; } interface FormTimePickerAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "isDisabled": boolean; "wrapperClass": string; "staticValue": string; "defaultValue": string; "minTime": string; "maxTime": string; "minuteStep": number; } interface FormVinInputAttributes { "name": string; "wrapperId": string; "isLoading": boolean; "isDisabled": boolean; "inputPrefix": string; "wrapperClass": string; "staticValue": string; "inputProps": string; "ocrEndpoint": string; "defaultValue": string; "useOcr": boolean; "readSticker": boolean; "scannerIcon": '' | 'qr-code' | 'camera'; } interface GeneralFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "theme": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface GeneralInquiryFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "theme": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface InformationTableAttributes { "isLoading": boolean; "showHeader": boolean; "isRaw": boolean; "stripCells": boolean; "customSkeleton": boolean; "size": 'default' | 'small'; "allowAutoWidth": boolean; "expandColumnWidth": number; "expandUsingEntireRow": boolean; "allowMultipleExpanded": boolean; "scrollExpandedIntoView": boolean; } interface LoadingSpinnerAttributes { "isLoading": boolean; } interface ManufacturerLookupAttributes { "language": LanguageKeys; "coreOnly": boolean; "mockUrl": string; "isDev": boolean; "endpoint": Endpoint; "loadedMockDatas": BlazorInvokableFunction<(response: any) => void>; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: PartLookupDTO) => void>; "hiddenFields": string; "localizationName": string; } interface ManufacturerPartLookupAttributes { "language": LanguageKeys; "isDev": boolean; "logId": string; "standAlone": boolean; "manufacturerPartLookupTitle": string; "closeManufacturerPartLookup": boolean; "manufacturerPartLookupEndpoint": Endpoint; "getHeaders": BlazorInvokableFunction<() => any>; } interface PartLookupAttributes { "language": LanguageKeys; "activeElement": ActiveElement; "mockUrl": string; "endpoint": Endpoint; "isDev": boolean; "childrenProps": string | object; "loadedMockDatas": BlazorInvokableFunction<(response: any) => void>; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: PartLookupDTO) => void>; } interface ServiceBookingFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "theme": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface ShiftAccordionAttributes { "accordionClasses": string; "accordionContentClasses": string; } interface ShiftCheckboxAttributes { "name": string; "label": string; "checked": boolean; "disabled": boolean; "componentId": string; "componentClass": string; } interface ShiftPortalAttributes { "tag": string; "inheritedClasses": string; } interface ShiftSelectAttributes { "hasTick": boolean; "hasArrow": boolean; "gap": number; "searchValue": string; "name": string; "isError": boolean; "isLoading": boolean; "placeholder": string; "disableInput": boolean; "isOpen": boolean; "noSelectionText": string; "direction": string; "selectedValue": string; "clearable": boolean; "searchable": boolean; "reverseOptions": boolean; "forceOpenUpwards": boolean; "fetchingErrorText": string; } interface ShiftSelectDropdownAttributes { "hasTick": boolean; "hasArrow": boolean; "name": string; "isLoading": boolean; "isOpen": boolean; "noSelectionText": string; "direction": string; "selectedValue": string; "reverseOptions": boolean; "fetchingErrorText": string; } interface ShiftSliderAttributes { "activeIndex": number; } interface ShiftSwitchAttributes { "name": string; "label": string; "checked": boolean; "disabled": boolean; "componentId": string; "componentClass": string; } interface ShiftTabContentAttributes { "activeComponent": string; } interface ShiftTabsAttributes { "tabClasses": string; "activeTabIndex": number; "activeTabLabel": string; "containerClasses": string; } interface SscLookupFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "theme": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface TestDriveFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "theme": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface VehicleAccessoriesAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; } interface VehicleClaimableItemsAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "uploadMultipleDocumentsAtTheForm": boolean; "blazorRequestHeadersProvider": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "maximumDocumentFileSizeInMb": number; "claimEndPoint": string; "showTrace": boolean; } interface VehicleItemClaimFormAttributes { "vin": string; "maximumDocumentFileSizeInMb": number; "uploadMultipleDocuments": boolean; } interface VehicleLookupAttributes { "language": LanguageKeys; "activeElement": ActiveElement; "baseUrl": string; "isDev": boolean; "today": string; "mockUrl": string; "mockRecaptcha": boolean; "disableVinValidation": boolean; "queryString": string; "sscQueryString": string; "hiddenTabs": string; "tabOrder": string; "childrenProps": string | object; "blazorRequestHeadersProvider": string; "blazorErrorStateListener": string; "blazorOnLoadingStateChange": string; "blazorDynamicClaimActivate": string; } interface VehiclePaintThicknessAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "showCertificateButton": boolean; } interface VehicleQuotationFormAttributes { "language": LanguageKeys; "gistId": string; "structureUrl": string; "formId": string; "isDev": boolean; "today": string; "disableScrollToTop": boolean; "isMobileForm": boolean; } interface VehicleSaleInformationAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "hiddenFields": string; } interface VehicleServiceHistoryAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; } interface VehicleSpecificationAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; } interface VehicleSscAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "lookupQueryString": string; "blazorRequestHeadersProvider": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; "unauthorizedSscLookupResponse": BlazorInvokableFunction<(sscLookupStatus: number) => void>; "showTrace": boolean; "recaptchaKey": string; "mockRecaptcha": boolean; "unauthorizedSscLookupBaseUrl": string; "unauthorizedSscLookupQueryString": string; "cityId": string; "cityIntegrationId": string; "companyId": string; "companyIntegrationId": string; "companyBranchId": string; "companyBranchIntegrationId": string; "userId": string; "brandIntegrationId": string; "customerName": string; "customerPhone": string; "customerEmail": string; } interface VehicleWarrantyTimelineAttributes { "language": LanguageKeys; "coreOnly": boolean; "isDev": boolean; "today": string; "disableVinValidation": boolean; "baseUrl": string; "queryString": string; "errorCallback": BlazorInvokableFunction<(errorMessage: ErrorKeys) => void>; "loadingStateChange": BlazorInvokableFunction<(isLoading: boolean) => void>; "loadedResponse": BlazorInvokableFunction<(response: VehicleLookupDTO) => void>; } interface VinExtractorAttributes { "title": string; "captureInterval": number; "verbose": boolean; "useOcr": boolean; "readSticker": boolean; "uploaderButtonId": string; "captureEnvironment": boolean; "manualCapture": boolean; "skipValidation": boolean; "manualCaptureLabel": string; "manualCaptureHint": string; "ocrEndpoint": string; "onExtract": ((vin: string) => void) | string; "onError": ((newError: Error) => void) | string; "onProcessing": ((vin: string) => void) | string; "onOpenChange": ((newError: boolean) => void) | string; } interface IntrinsicElements { "branch-date-dropdown": Omit & { [K in keyof BranchDateDropdown & keyof BranchDateDropdownAttributes]?: BranchDateDropdown[K] } & { [K in keyof BranchDateDropdown & keyof BranchDateDropdownAttributes as `attr:${K}`]?: BranchDateDropdownAttributes[K] } & { [K in keyof BranchDateDropdown & keyof BranchDateDropdownAttributes as `prop:${K}`]?: BranchDateDropdown[K] }; "branch-date-picker": Omit & { [K in keyof BranchDatePicker & keyof BranchDatePickerAttributes]?: BranchDatePicker[K] } & { [K in keyof BranchDatePicker & keyof BranchDatePickerAttributes as `attr:${K}`]?: BranchDatePickerAttributes[K] } & { [K in keyof BranchDatePicker & keyof BranchDatePickerAttributes as `prop:${K}`]?: BranchDatePicker[K] }; "branch-slot-dropdown": Omit & { [K in keyof BranchSlotDropdown & keyof BranchSlotDropdownAttributes]?: BranchSlotDropdown[K] } & { [K in keyof BranchSlotDropdown & keyof BranchSlotDropdownAttributes as `attr:${K}`]?: BranchSlotDropdownAttributes[K] } & { [K in keyof BranchSlotDropdown & keyof BranchSlotDropdownAttributes as `prop:${K}`]?: BranchSlotDropdown[K] }; "branch-slot-picker": Omit & { [K in keyof BranchSlotPicker & keyof BranchSlotPickerAttributes]?: BranchSlotPicker[K] } & { [K in keyof BranchSlotPicker & keyof BranchSlotPickerAttributes as `attr:${K}`]?: BranchSlotPickerAttributes[K] } & { [K in keyof BranchSlotPicker & keyof BranchSlotPickerAttributes as `prop:${K}`]?: BranchSlotPicker[K] }; "dead-stock-lookup": Omit & { [K in keyof DeadStockLookup & keyof DeadStockLookupAttributes]?: DeadStockLookup[K] } & { [K in keyof DeadStockLookup & keyof DeadStockLookupAttributes as `attr:${K}`]?: DeadStockLookupAttributes[K] } & { [K in keyof DeadStockLookup & keyof DeadStockLookupAttributes as `prop:${K}`]?: DeadStockLookup[K] }; "distributor-lookup": Omit & { [K in keyof DistributorLookup & keyof DistributorLookupAttributes]?: DistributorLookup[K] } & { [K in keyof DistributorLookup & keyof DistributorLookupAttributes as `attr:${K}`]?: DistributorLookupAttributes[K] } & { [K in keyof DistributorLookup & keyof DistributorLookupAttributes as `prop:${K}`]?: DistributorLookup[K] }; "flexible-container": Omit & { [K in keyof FlexibleContainer & keyof FlexibleContainerAttributes]?: FlexibleContainer[K] } & { [K in keyof FlexibleContainer & keyof FlexibleContainerAttributes as `attr:${K}`]?: FlexibleContainerAttributes[K] } & { [K in keyof FlexibleContainer & keyof FlexibleContainerAttributes as `prop:${K}`]?: FlexibleContainer[K] }; "form-checkbox": Omit & { [K in keyof FormCheckbox & keyof FormCheckboxAttributes]?: FormCheckbox[K] } & { [K in keyof FormCheckbox & keyof FormCheckboxAttributes as `attr:${K}`]?: FormCheckboxAttributes[K] } & { [K in keyof FormCheckbox & keyof FormCheckboxAttributes as `prop:${K}`]?: FormCheckbox[K] }; "form-date-picker": Omit & { [K in keyof FormDatePicker & keyof FormDatePickerAttributes]?: FormDatePicker[K] } & { [K in keyof FormDatePicker & keyof FormDatePickerAttributes as `attr:${K}`]?: FormDatePickerAttributes[K] } & { [K in keyof FormDatePicker & keyof FormDatePickerAttributes as `prop:${K}`]?: FormDatePicker[K] }; "form-dialog": Omit & { [K in keyof FormDialog & keyof FormDialogAttributes]?: FormDialog[K] } & { [K in keyof FormDialog & keyof FormDialogAttributes as `attr:${K}`]?: FormDialogAttributes[K] } & { [K in keyof FormDialog & keyof FormDialogAttributes as `prop:${K}`]?: FormDialog[K] }; "form-file": Omit & { [K in keyof FormFile & keyof FormFileAttributes]?: FormFile[K] } & { [K in keyof FormFile & keyof FormFileAttributes as `attr:${K}`]?: FormFileAttributes[K] } & { [K in keyof FormFile & keyof FormFileAttributes as `prop:${K}`]?: FormFile[K] }; "form-input": Omit & { [K in keyof FormInput & keyof FormInputAttributes]?: FormInput[K] } & { [K in keyof FormInput & keyof FormInputAttributes as `attr:${K}`]?: FormInputAttributes[K] } & { [K in keyof FormInput & keyof FormInputAttributes as `prop:${K}`]?: FormInput[K] }; "form-input-preview": Omit & { [K in keyof FormInputPreview & keyof FormInputPreviewAttributes]?: FormInputPreview[K] } & { [K in keyof FormInputPreview & keyof FormInputPreviewAttributes as `attr:${K}`]?: FormInputPreviewAttributes[K] } & { [K in keyof FormInputPreview & keyof FormInputPreviewAttributes as `prop:${K}`]?: FormInputPreview[K] }; "form-phone-number": Omit & { [K in keyof FormPhoneNumber & keyof FormPhoneNumberAttributes]?: FormPhoneNumber[K] } & { [K in keyof FormPhoneNumber & keyof FormPhoneNumberAttributes as `attr:${K}`]?: FormPhoneNumberAttributes[K] } & { [K in keyof FormPhoneNumber & keyof FormPhoneNumberAttributes as `prop:${K}`]?: FormPhoneNumber[K] }; "form-picker-input": Omit & { [K in keyof FormPickerInput & keyof FormPickerInputAttributes]?: FormPickerInput[K] } & { [K in keyof FormPickerInput & keyof FormPickerInputAttributes as `attr:${K}`]?: FormPickerInputAttributes[K] } & { [K in keyof FormPickerInput & keyof FormPickerInputAttributes as `prop:${K}`]?: FormPickerInput[K] }; "form-select": Omit & { [K in keyof FormSelect & keyof FormSelectAttributes]?: FormSelect[K] } & { [K in keyof FormSelect & keyof FormSelectAttributes as `attr:${K}`]?: FormSelectAttributes[K] } & { [K in keyof FormSelect & keyof FormSelectAttributes as `prop:${K}`]?: FormSelect[K] }; "form-shadow-input": Omit & { [K in keyof FormShadowInput & keyof FormShadowInputAttributes]?: FormShadowInput[K] } & { [K in keyof FormShadowInput & keyof FormShadowInputAttributes as `attr:${K}`]?: FormShadowInputAttributes[K] } & { [K in keyof FormShadowInput & keyof FormShadowInputAttributes as `prop:${K}`]?: FormShadowInput[K] }; "form-stepper": Omit & { [K in keyof FormStepper & keyof FormStepperAttributes]?: FormStepper[K] } & { [K in keyof FormStepper & keyof FormStepperAttributes as `attr:${K}`]?: FormStepperAttributes[K] } & { [K in keyof FormStepper & keyof FormStepperAttributes as `prop:${K}`]?: FormStepper[K] }; "form-stepper-control": Omit & { [K in keyof FormStepperControl & keyof FormStepperControlAttributes]?: FormStepperControl[K] } & { [K in keyof FormStepperControl & keyof FormStepperControlAttributes as `attr:${K}`]?: FormStepperControlAttributes[K] } & { [K in keyof FormStepperControl & keyof FormStepperControlAttributes as `prop:${K}`]?: FormStepperControl[K] }; "form-stepper-submit": Omit & { [K in keyof FormStepperSubmit & keyof FormStepperSubmitAttributes]?: FormStepperSubmit[K] } & { [K in keyof FormStepperSubmit & keyof FormStepperSubmitAttributes as `attr:${K}`]?: FormStepperSubmitAttributes[K] } & { [K in keyof FormStepperSubmit & keyof FormStepperSubmitAttributes as `prop:${K}`]?: FormStepperSubmit[K] }; "form-structure": Omit & { [K in keyof FormStructure & keyof FormStructureAttributes]?: FormStructure[K] } & { [K in keyof FormStructure & keyof FormStructureAttributes as `attr:${K}`]?: FormStructureAttributes[K] } & { [K in keyof FormStructure & keyof FormStructureAttributes as `prop:${K}`]?: FormStructure[K] }; "form-structure-error": Omit & { [K in keyof FormStructureError & keyof FormStructureErrorAttributes]?: FormStructureError[K] } & { [K in keyof FormStructureError & keyof FormStructureErrorAttributes as `attr:${K}`]?: FormStructureErrorAttributes[K] } & { [K in keyof FormStructureError & keyof FormStructureErrorAttributes as `prop:${K}`]?: FormStructureError[K] }; "form-submit": Omit & { [K in keyof FormSubmit & keyof FormSubmitAttributes]?: FormSubmit[K] } & { [K in keyof FormSubmit & keyof FormSubmitAttributes as `attr:${K}`]?: FormSubmitAttributes[K] } & { [K in keyof FormSubmit & keyof FormSubmitAttributes as `prop:${K}`]?: FormSubmit[K] }; "form-switch": Omit & { [K in keyof FormSwitch & keyof FormSwitchAttributes]?: FormSwitch[K] } & { [K in keyof FormSwitch & keyof FormSwitchAttributes as `attr:${K}`]?: FormSwitchAttributes[K] } & { [K in keyof FormSwitch & keyof FormSwitchAttributes as `prop:${K}`]?: FormSwitch[K] }; "form-text-area": Omit & { [K in keyof FormTextArea & keyof FormTextAreaAttributes]?: FormTextArea[K] } & { [K in keyof FormTextArea & keyof FormTextAreaAttributes as `attr:${K}`]?: FormTextAreaAttributes[K] } & { [K in keyof FormTextArea & keyof FormTextAreaAttributes as `prop:${K}`]?: FormTextArea[K] }; "form-time-picker": Omit & { [K in keyof FormTimePicker & keyof FormTimePickerAttributes]?: FormTimePicker[K] } & { [K in keyof FormTimePicker & keyof FormTimePickerAttributes as `attr:${K}`]?: FormTimePickerAttributes[K] } & { [K in keyof FormTimePicker & keyof FormTimePickerAttributes as `prop:${K}`]?: FormTimePicker[K] }; "form-vin-input": Omit & { [K in keyof FormVinInput & keyof FormVinInputAttributes]?: FormVinInput[K] } & { [K in keyof FormVinInput & keyof FormVinInputAttributes as `attr:${K}`]?: FormVinInputAttributes[K] } & { [K in keyof FormVinInput & keyof FormVinInputAttributes as `prop:${K}`]?: FormVinInput[K] }; "general-form": Omit & { [K in keyof GeneralForm & keyof GeneralFormAttributes]?: GeneralForm[K] } & { [K in keyof GeneralForm & keyof GeneralFormAttributes as `attr:${K}`]?: GeneralFormAttributes[K] } & { [K in keyof GeneralForm & keyof GeneralFormAttributes as `prop:${K}`]?: GeneralForm[K] }; "general-inquiry-form": Omit & { [K in keyof GeneralInquiryForm & keyof GeneralInquiryFormAttributes]?: GeneralInquiryForm[K] } & { [K in keyof GeneralInquiryForm & keyof GeneralInquiryFormAttributes as `attr:${K}`]?: GeneralInquiryFormAttributes[K] } & { [K in keyof GeneralInquiryForm & keyof GeneralInquiryFormAttributes as `prop:${K}`]?: GeneralInquiryForm[K] }; "information-table": Omit & { [K in keyof InformationTable & keyof InformationTableAttributes]?: InformationTable[K] } & { [K in keyof InformationTable & keyof InformationTableAttributes as `attr:${K}`]?: InformationTableAttributes[K] } & { [K in keyof InformationTable & keyof InformationTableAttributes as `prop:${K}`]?: InformationTable[K] }; "loading-spinner": Omit & { [K in keyof LoadingSpinner & keyof LoadingSpinnerAttributes]?: LoadingSpinner[K] } & { [K in keyof LoadingSpinner & keyof LoadingSpinnerAttributes as `attr:${K}`]?: LoadingSpinnerAttributes[K] } & { [K in keyof LoadingSpinner & keyof LoadingSpinnerAttributes as `prop:${K}`]?: LoadingSpinner[K] }; "manufacturer-lookup": Omit & { [K in keyof ManufacturerLookup & keyof ManufacturerLookupAttributes]?: ManufacturerLookup[K] } & { [K in keyof ManufacturerLookup & keyof ManufacturerLookupAttributes as `attr:${K}`]?: ManufacturerLookupAttributes[K] } & { [K in keyof ManufacturerLookup & keyof ManufacturerLookupAttributes as `prop:${K}`]?: ManufacturerLookup[K] }; "manufacturer-part-lookup": Omit & { [K in keyof ManufacturerPartLookup & keyof ManufacturerPartLookupAttributes]?: ManufacturerPartLookup[K] } & { [K in keyof ManufacturerPartLookup & keyof ManufacturerPartLookupAttributes as `attr:${K}`]?: ManufacturerPartLookupAttributes[K] } & { [K in keyof ManufacturerPartLookup & keyof ManufacturerPartLookupAttributes as `prop:${K}`]?: ManufacturerPartLookup[K] }; "part-lookup": Omit & { [K in keyof PartLookup & keyof PartLookupAttributes]?: PartLookup[K] } & { [K in keyof PartLookup & keyof PartLookupAttributes as `attr:${K}`]?: PartLookupAttributes[K] } & { [K in keyof PartLookup & keyof PartLookupAttributes as `prop:${K}`]?: PartLookup[K] }; "service-booking-form": Omit & { [K in keyof ServiceBookingForm & keyof ServiceBookingFormAttributes]?: ServiceBookingForm[K] } & { [K in keyof ServiceBookingForm & keyof ServiceBookingFormAttributes as `attr:${K}`]?: ServiceBookingFormAttributes[K] } & { [K in keyof ServiceBookingForm & keyof ServiceBookingFormAttributes as `prop:${K}`]?: ServiceBookingForm[K] }; "shift-accordion": Omit & { [K in keyof ShiftAccordion & keyof ShiftAccordionAttributes]?: ShiftAccordion[K] } & { [K in keyof ShiftAccordion & keyof ShiftAccordionAttributes as `attr:${K}`]?: ShiftAccordionAttributes[K] } & { [K in keyof ShiftAccordion & keyof ShiftAccordionAttributes as `prop:${K}`]?: ShiftAccordion[K] }; "shift-checkbox": Omit & { [K in keyof ShiftCheckbox & keyof ShiftCheckboxAttributes]?: ShiftCheckbox[K] } & { [K in keyof ShiftCheckbox & keyof ShiftCheckboxAttributes as `attr:${K}`]?: ShiftCheckboxAttributes[K] } & { [K in keyof ShiftCheckbox & keyof ShiftCheckboxAttributes as `prop:${K}`]?: ShiftCheckbox[K] }; "shift-portal": Omit & { [K in keyof ShiftPortal & keyof ShiftPortalAttributes]?: ShiftPortal[K] } & { [K in keyof ShiftPortal & keyof ShiftPortalAttributes as `attr:${K}`]?: ShiftPortalAttributes[K] } & { [K in keyof ShiftPortal & keyof ShiftPortalAttributes as `prop:${K}`]?: ShiftPortal[K] }; "shift-select": Omit & { [K in keyof ShiftSelect & keyof ShiftSelectAttributes]?: ShiftSelect[K] } & { [K in keyof ShiftSelect & keyof ShiftSelectAttributes as `attr:${K}`]?: ShiftSelectAttributes[K] } & { [K in keyof ShiftSelect & keyof ShiftSelectAttributes as `prop:${K}`]?: ShiftSelect[K] }; "shift-select-dropdown": Omit & { [K in keyof ShiftSelectDropdown & keyof ShiftSelectDropdownAttributes]?: ShiftSelectDropdown[K] } & { [K in keyof ShiftSelectDropdown & keyof ShiftSelectDropdownAttributes as `attr:${K}`]?: ShiftSelectDropdownAttributes[K] } & { [K in keyof ShiftSelectDropdown & keyof ShiftSelectDropdownAttributes as `prop:${K}`]?: ShiftSelectDropdown[K] }; "shift-slider": Omit & { [K in keyof ShiftSlider & keyof ShiftSliderAttributes]?: ShiftSlider[K] } & { [K in keyof ShiftSlider & keyof ShiftSliderAttributes as `attr:${K}`]?: ShiftSliderAttributes[K] } & { [K in keyof ShiftSlider & keyof ShiftSliderAttributes as `prop:${K}`]?: ShiftSlider[K] }; "shift-switch": Omit & { [K in keyof ShiftSwitch & keyof ShiftSwitchAttributes]?: ShiftSwitch[K] } & { [K in keyof ShiftSwitch & keyof ShiftSwitchAttributes as `attr:${K}`]?: ShiftSwitchAttributes[K] } & { [K in keyof ShiftSwitch & keyof ShiftSwitchAttributes as `prop:${K}`]?: ShiftSwitch[K] }; "shift-tab-content": Omit & { [K in keyof ShiftTabContent & keyof ShiftTabContentAttributes]?: ShiftTabContent[K] } & { [K in keyof ShiftTabContent & keyof ShiftTabContentAttributes as `attr:${K}`]?: ShiftTabContentAttributes[K] } & { [K in keyof ShiftTabContent & keyof ShiftTabContentAttributes as `prop:${K}`]?: ShiftTabContent[K] }; "shift-tabs": Omit & { [K in keyof ShiftTabs & keyof ShiftTabsAttributes]?: ShiftTabs[K] } & { [K in keyof ShiftTabs & keyof ShiftTabsAttributes as `attr:${K}`]?: ShiftTabsAttributes[K] } & { [K in keyof ShiftTabs & keyof ShiftTabsAttributes as `prop:${K}`]?: ShiftTabs[K] }; "ssc-lookup-form": Omit & { [K in keyof SscLookupForm & keyof SscLookupFormAttributes]?: SscLookupForm[K] } & { [K in keyof SscLookupForm & keyof SscLookupFormAttributes as `attr:${K}`]?: SscLookupFormAttributes[K] } & { [K in keyof SscLookupForm & keyof SscLookupFormAttributes as `prop:${K}`]?: SscLookupForm[K] }; "test-drive-form": Omit & { [K in keyof TestDriveForm & keyof TestDriveFormAttributes]?: TestDriveForm[K] } & { [K in keyof TestDriveForm & keyof TestDriveFormAttributes as `attr:${K}`]?: TestDriveFormAttributes[K] } & { [K in keyof TestDriveForm & keyof TestDriveFormAttributes as `prop:${K}`]?: TestDriveForm[K] }; "vehicle-accessories": Omit & { [K in keyof VehicleAccessories & keyof VehicleAccessoriesAttributes]?: VehicleAccessories[K] } & { [K in keyof VehicleAccessories & keyof VehicleAccessoriesAttributes as `attr:${K}`]?: VehicleAccessoriesAttributes[K] } & { [K in keyof VehicleAccessories & keyof VehicleAccessoriesAttributes as `prop:${K}`]?: VehicleAccessories[K] }; "vehicle-claimable-items": Omit & { [K in keyof VehicleClaimableItems & keyof VehicleClaimableItemsAttributes]?: VehicleClaimableItems[K] } & { [K in keyof VehicleClaimableItems & keyof VehicleClaimableItemsAttributes as `attr:${K}`]?: VehicleClaimableItemsAttributes[K] } & { [K in keyof VehicleClaimableItems & keyof VehicleClaimableItemsAttributes as `prop:${K}`]?: VehicleClaimableItems[K] }; "vehicle-item-claim-form": Omit & { [K in keyof VehicleItemClaimForm & keyof VehicleItemClaimFormAttributes]?: VehicleItemClaimForm[K] } & { [K in keyof VehicleItemClaimForm & keyof VehicleItemClaimFormAttributes as `attr:${K}`]?: VehicleItemClaimFormAttributes[K] } & { [K in keyof VehicleItemClaimForm & keyof VehicleItemClaimFormAttributes as `prop:${K}`]?: VehicleItemClaimForm[K] }; "vehicle-lookup": Omit & { [K in keyof VehicleLookup & keyof VehicleLookupAttributes]?: VehicleLookup[K] } & { [K in keyof VehicleLookup & keyof VehicleLookupAttributes as `attr:${K}`]?: VehicleLookupAttributes[K] } & { [K in keyof VehicleLookup & keyof VehicleLookupAttributes as `prop:${K}`]?: VehicleLookup[K] }; "vehicle-paint-thickness": Omit & { [K in keyof VehiclePaintThickness & keyof VehiclePaintThicknessAttributes]?: VehiclePaintThickness[K] } & { [K in keyof VehiclePaintThickness & keyof VehiclePaintThicknessAttributes as `attr:${K}`]?: VehiclePaintThicknessAttributes[K] } & { [K in keyof VehiclePaintThickness & keyof VehiclePaintThicknessAttributes as `prop:${K}`]?: VehiclePaintThickness[K] }; "vehicle-quotation-form": Omit & { [K in keyof VehicleQuotationForm & keyof VehicleQuotationFormAttributes]?: VehicleQuotationForm[K] } & { [K in keyof VehicleQuotationForm & keyof VehicleQuotationFormAttributes as `attr:${K}`]?: VehicleQuotationFormAttributes[K] } & { [K in keyof VehicleQuotationForm & keyof VehicleQuotationFormAttributes as `prop:${K}`]?: VehicleQuotationForm[K] }; "vehicle-sale-information": Omit & { [K in keyof VehicleSaleInformation & keyof VehicleSaleInformationAttributes]?: VehicleSaleInformation[K] } & { [K in keyof VehicleSaleInformation & keyof VehicleSaleInformationAttributes as `attr:${K}`]?: VehicleSaleInformationAttributes[K] } & { [K in keyof VehicleSaleInformation & keyof VehicleSaleInformationAttributes as `prop:${K}`]?: VehicleSaleInformation[K] }; "vehicle-service-history": Omit & { [K in keyof VehicleServiceHistory & keyof VehicleServiceHistoryAttributes]?: VehicleServiceHistory[K] } & { [K in keyof VehicleServiceHistory & keyof VehicleServiceHistoryAttributes as `attr:${K}`]?: VehicleServiceHistoryAttributes[K] } & { [K in keyof VehicleServiceHistory & keyof VehicleServiceHistoryAttributes as `prop:${K}`]?: VehicleServiceHistory[K] }; "vehicle-specification": Omit & { [K in keyof VehicleSpecification & keyof VehicleSpecificationAttributes]?: VehicleSpecification[K] } & { [K in keyof VehicleSpecification & keyof VehicleSpecificationAttributes as `attr:${K}`]?: VehicleSpecificationAttributes[K] } & { [K in keyof VehicleSpecification & keyof VehicleSpecificationAttributes as `prop:${K}`]?: VehicleSpecification[K] }; "vehicle-ssc": Omit & { [K in keyof VehicleSsc & keyof VehicleSscAttributes]?: VehicleSsc[K] } & { [K in keyof VehicleSsc & keyof VehicleSscAttributes as `attr:${K}`]?: VehicleSscAttributes[K] } & { [K in keyof VehicleSsc & keyof VehicleSscAttributes as `prop:${K}`]?: VehicleSsc[K] }; "vehicle-warranty-timeline": Omit & { [K in keyof VehicleWarrantyTimeline & keyof VehicleWarrantyTimelineAttributes]?: VehicleWarrantyTimeline[K] } & { [K in keyof VehicleWarrantyTimeline & keyof VehicleWarrantyTimelineAttributes as `attr:${K}`]?: VehicleWarrantyTimelineAttributes[K] } & { [K in keyof VehicleWarrantyTimeline & keyof VehicleWarrantyTimelineAttributes as `prop:${K}`]?: VehicleWarrantyTimeline[K] }; "vin-extractor": Omit & { [K in keyof VinExtractor & keyof VinExtractorAttributes]?: VinExtractor[K] } & { [K in keyof VinExtractor & keyof VinExtractorAttributes as `attr:${K}`]?: VinExtractorAttributes[K] } & { [K in keyof VinExtractor & keyof VinExtractorAttributes as `prop:${K}`]?: VinExtractor[K] }; } } export { LocalJSX as JSX }; declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { /** * Panel half of `branch-date-picker`. * Two panes on one horizontal track — a month grid, then that day's times — * rather than the two stacked sections `branch-slot-dropdown` uses. Only one * decision is on screen at a time, which is the point of the date-picker * variant: a customer who has met a month calendar before recognises step one * immediately, and step two arrives already scoped to the day they picked. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-date-*` variables the picker sets, exactly as the slot panel is. */ "branch-date-dropdown": LocalJSX.IntrinsicElements["branch-date-dropdown"] & JSXBase.HTMLAttributes; /** * Branch-aware booking slot field, month-calendar variant. * Same contract and same data as `branch-slot-picker` — the same endpoint, the * same `slotChange` payload, the same standalone-without-a-form behaviour. The * difference is entirely in the panel: a month grid first, then that day's * times, on a sliding track. Customers who have never used a horizontal day * strip have used a month calendar, and the second step arrives already scoped * to one day rather than sitting under the first. * The two are meant to be interchangeable, so a deployment can pick whichever * its audience reads faster without anything downstream changing. */ "branch-date-picker": LocalJSX.IntrinsicElements["branch-date-picker"] & JSXBase.HTMLAttributes; /** * Panel half of `branch-slot-picker`. * Mounted on `document.body` by `shift-portal` and positioned through the * `--branch-slot-*` variables the picker sets — the same split `shift-select` / * `shift-select-dropdown` use, so the panel escapes any `overflow: hidden` or * stacking context the form puts around the field. */ "branch-slot-dropdown": LocalJSX.IntrinsicElements["branch-slot-dropdown"] & JSXBase.HTMLAttributes; /** * Branch-aware booking slot field. * Presents as a normal dropdown — the same `form-input-select` trigger as every * other select in the form — and portals its panel onto `document.body` through * `shift-portal`, exactly as `shift-select` does. * Standalone by design: `form` is optional. Drop `` on any * page, in a PWA or in a native WebView, give it the four ids, and listen to * `slotChange`. */ "branch-slot-picker": LocalJSX.IntrinsicElements["branch-slot-picker"] & JSXBase.HTMLAttributes; "dead-stock-lookup": LocalJSX.IntrinsicElements["dead-stock-lookup"] & JSXBase.HTMLAttributes; "distributor-lookup": LocalJSX.IntrinsicElements["distributor-lookup"] & JSXBase.HTMLAttributes; "flexible-container": LocalJSX.IntrinsicElements["flexible-container"] & JSXBase.HTMLAttributes; "form-checkbox": LocalJSX.IntrinsicElements["form-checkbox"] & JSXBase.HTMLAttributes; "form-date-picker": LocalJSX.IntrinsicElements["form-date-picker"] & JSXBase.HTMLAttributes; "form-dialog": LocalJSX.IntrinsicElements["form-dialog"] & JSXBase.HTMLAttributes; "form-file": LocalJSX.IntrinsicElements["form-file"] & JSXBase.HTMLAttributes; "form-input": LocalJSX.IntrinsicElements["form-input"] & JSXBase.HTMLAttributes; "form-input-preview": LocalJSX.IntrinsicElements["form-input-preview"] & JSXBase.HTMLAttributes; "form-phone-number": LocalJSX.IntrinsicElements["form-phone-number"] & JSXBase.HTMLAttributes; "form-picker-input": LocalJSX.IntrinsicElements["form-picker-input"] & JSXBase.HTMLAttributes; "form-select": LocalJSX.IntrinsicElements["form-select"] & JSXBase.HTMLAttributes; "form-shadow-input": LocalJSX.IntrinsicElements["form-shadow-input"] & JSXBase.HTMLAttributes; "form-stepper": LocalJSX.IntrinsicElements["form-stepper"] & JSXBase.HTMLAttributes; "form-stepper-control": LocalJSX.IntrinsicElements["form-stepper-control"] & JSXBase.HTMLAttributes; "form-stepper-submit": LocalJSX.IntrinsicElements["form-stepper-submit"] & JSXBase.HTMLAttributes; "form-structure": LocalJSX.IntrinsicElements["form-structure"] & JSXBase.HTMLAttributes; "form-structure-error": LocalJSX.IntrinsicElements["form-structure-error"] & JSXBase.HTMLAttributes; "form-submit": LocalJSX.IntrinsicElements["form-submit"] & JSXBase.HTMLAttributes; "form-switch": LocalJSX.IntrinsicElements["form-switch"] & JSXBase.HTMLAttributes; "form-text-area": LocalJSX.IntrinsicElements["form-text-area"] & JSXBase.HTMLAttributes; "form-time-picker": LocalJSX.IntrinsicElements["form-time-picker"] & JSXBase.HTMLAttributes; "form-vin-input": LocalJSX.IntrinsicElements["form-vin-input"] & JSXBase.HTMLAttributes; "general-form": LocalJSX.IntrinsicElements["general-form"] & JSXBase.HTMLAttributes; "general-inquiry-form": LocalJSX.IntrinsicElements["general-inquiry-form"] & JSXBase.HTMLAttributes; "information-table": LocalJSX.IntrinsicElements["information-table"] & JSXBase.HTMLAttributes; "loading-spinner": LocalJSX.IntrinsicElements["loading-spinner"] & JSXBase.HTMLAttributes; "manufacturer-lookup": LocalJSX.IntrinsicElements["manufacturer-lookup"] & JSXBase.HTMLAttributes; "manufacturer-part-lookup": LocalJSX.IntrinsicElements["manufacturer-part-lookup"] & JSXBase.HTMLAttributes; "part-lookup": LocalJSX.IntrinsicElements["part-lookup"] & JSXBase.HTMLAttributes; "service-booking-form": LocalJSX.IntrinsicElements["service-booking-form"] & JSXBase.HTMLAttributes; "shift-accordion": LocalJSX.IntrinsicElements["shift-accordion"] & JSXBase.HTMLAttributes; "shift-checkbox": LocalJSX.IntrinsicElements["shift-checkbox"] & JSXBase.HTMLAttributes; "shift-portal": LocalJSX.IntrinsicElements["shift-portal"] & JSXBase.HTMLAttributes; "shift-select": LocalJSX.IntrinsicElements["shift-select"] & JSXBase.HTMLAttributes; "shift-select-dropdown": LocalJSX.IntrinsicElements["shift-select-dropdown"] & JSXBase.HTMLAttributes; "shift-slider": LocalJSX.IntrinsicElements["shift-slider"] & JSXBase.HTMLAttributes; "shift-switch": LocalJSX.IntrinsicElements["shift-switch"] & JSXBase.HTMLAttributes; "shift-tab-content": LocalJSX.IntrinsicElements["shift-tab-content"] & JSXBase.HTMLAttributes; "shift-tabs": LocalJSX.IntrinsicElements["shift-tabs"] & JSXBase.HTMLAttributes; "ssc-lookup-form": LocalJSX.IntrinsicElements["ssc-lookup-form"] & JSXBase.HTMLAttributes; "test-drive-form": LocalJSX.IntrinsicElements["test-drive-form"] & JSXBase.HTMLAttributes; "vehicle-accessories": LocalJSX.IntrinsicElements["vehicle-accessories"] & JSXBase.HTMLAttributes; "vehicle-claimable-items": LocalJSX.IntrinsicElements["vehicle-claimable-items"] & JSXBase.HTMLAttributes; "vehicle-item-claim-form": LocalJSX.IntrinsicElements["vehicle-item-claim-form"] & JSXBase.HTMLAttributes; "vehicle-lookup": LocalJSX.IntrinsicElements["vehicle-lookup"] & JSXBase.HTMLAttributes; "vehicle-paint-thickness": LocalJSX.IntrinsicElements["vehicle-paint-thickness"] & JSXBase.HTMLAttributes; "vehicle-quotation-form": LocalJSX.IntrinsicElements["vehicle-quotation-form"] & JSXBase.HTMLAttributes; "vehicle-sale-information": LocalJSX.IntrinsicElements["vehicle-sale-information"] & JSXBase.HTMLAttributes; "vehicle-service-history": LocalJSX.IntrinsicElements["vehicle-service-history"] & JSXBase.HTMLAttributes; /** * The build record for a VIN: what this vehicle *is* — model, year, grade, and the codes a parts * counter or a claim form asks for. * It reads five sub-objects and no others (`SpecificationRecord`). Two facts decide what it may * say: `isAuthorized === false` means the distributor has no record, so every value dashes; and an * *empty* record is not a record, so `hasRecords` counts values rather than objects. */ "vehicle-specification": LocalJSX.IntrinsicElements["vehicle-specification"] & JSXBase.HTMLAttributes; /** * The Special Service Campaigns (safety recalls) affecting a vehicle, and nothing else: warranty * coverage lives in . Replaces the campaign half of the retired * . * A vehicle is on exactly one of two paths, and the panel must never mix them (the rule is spelled * out on `panelVerdict` in ./components/SscCampaigns.tsx and in * .shift/repos/adp/web-components/vehicle-lookup-invariants.md): * - authorized (in the distributor's records): the campaign list is the verdict; * - unauthorized: the distributor has no records, so the only verdict is the manufacturer's * answer to the reCAPTCHA-gated check — a yes/no, no list. Until it arrives the panel says the * vehicle is not in the records and asserts nothing else. The check is always offered where * the stand-in widget is in use (development, `mockRecaptcha`); the real widget needs the * host's site key, and a production host that configured none gets the notice alone. * A third state is neither: a wrapper that only counts the SSC tab's own request as a campaign * check (`sscQueryString`) tells this panel through `skipLookup` that a vehicle was looked up * without it. The panel then says the check was not run and offers to run it, rather than sitting * blank next to a VIN as if the vehicle had no campaigns. * With `show-trace`, every campaign row can open the evidence behind its repair status: the labor * codes accepted for the campaign, every warranty claim on the vehicle with how it was judged, and * the service-history lines that matched. The trace is fetched on first use with `?trace=ssc`, so * the ordinary lookup response stays small and the host can gate the detail behind a permission. * Every state change is a movement (lookup-motion.css): the outgoing content stays rendered while * the body shuts over it, and the incoming content is swapped in only while the body is shut. The * shared lookup helper waits a second before it asks the server, which is what guarantees the body * has settled shut before a response can land. */ "vehicle-ssc": LocalJSX.IntrinsicElements["vehicle-ssc"] & JSXBase.HTMLAttributes; /** * Warranty coverage as a single dated rail: the standard warranty followed by every * extended coverage in sequence. * This panel shows warranty and nothing else — no campaign table, no reCAPTCHA, no * unauthorized campaign lookup; those belong to `vehicle-ssc`. Hosts point their warranty * tab at this tag and their campaign tab at that one. */ "vehicle-warranty-timeline": LocalJSX.IntrinsicElements["vehicle-warranty-timeline"] & JSXBase.HTMLAttributes; "vin-extractor": LocalJSX.IntrinsicElements["vin-extractor"] & JSXBase.HTMLAttributes; } } }