@opendoor/partner-sdk-client-react 0.0.1-alpha.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -0
- package/dist/OpendoorContext.d.ts +4 -0
- package/dist/OpendoorContext.d.ts.map +1 -0
- package/dist/components/AddressEntry/index.d.ts +45 -0
- package/dist/components/AddressEntry/index.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQContext.d.ts +30 -0
- package/dist/components/QualificationQuestions/QQContext.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQLayout.d.ts +12 -0
- package/dist/components/QualificationQuestions/QQLayout.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQNavigation.d.ts +4 -0
- package/dist/components/QualificationQuestions/QQNavigation.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/QQPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQProvider.d.ts +30 -0
- package/dist/components/QualificationQuestions/QQProvider.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQReviewCard.d.ts +11 -0
- package/dist/components/QualificationQuestions/QQReviewCard.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QQSidebar.d.ts +8 -0
- package/dist/components/QualificationQuestions/QQSidebar.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/QualificationQuestions.d.ts +35 -0
- package/dist/components/QualificationQuestions/QualificationQuestions.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/CardSelectField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/CardSelectField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/CheckboxField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/CheckboxField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/CurrencyField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/CurrencyField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/DropdownField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/DropdownField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/FieldRenderer.d.ts +6 -0
- package/dist/components/QualificationQuestions/fields/FieldRenderer.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/FieldWrapper.d.ts +10 -0
- package/dist/components/QualificationQuestions/fields/FieldWrapper.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/InputField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/InputField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/RadioField.d.ts +5 -0
- package/dist/components/QualificationQuestions/fields/RadioField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/ToggleField.d.ts +6 -0
- package/dist/components/QualificationQuestions/fields/ToggleField.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/index.d.ts +11 -0
- package/dist/components/QualificationQuestions/fields/index.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/fields/types.d.ts +7 -0
- package/dist/components/QualificationQuestions/fields/types.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/icons.d.ts +7 -0
- package/dist/components/QualificationQuestions/icons.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/index.d.ts +3 -0
- package/dist/components/QualificationQuestions/index.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/additionalDetailsPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/pages/additionalDetailsPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/conditionPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/pages/conditionPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/contactInfoPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/pages/contactInfoPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/featuresPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/pages/featuresPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/homeDetailsPage.d.ts +4 -0
- package/dist/components/QualificationQuestions/pages/homeDetailsPage.d.ts.map +1 -0
- package/dist/components/QualificationQuestions/pages/index.d.ts +6 -0
- package/dist/components/QualificationQuestions/pages/index.d.ts.map +1 -0
- package/dist/components/questionnaire/formLogic.d.ts +45 -0
- package/dist/components/questionnaire/formLogic.d.ts.map +1 -0
- package/dist/components/questionnaire/formatters.d.ts +11 -0
- package/dist/components/questionnaire/formatters.d.ts.map +1 -0
- package/dist/components/questionnaire/types.d.ts +240 -0
- package/dist/components/questionnaire/types.d.ts.map +1 -0
- package/dist/components/questionnaire/utils.d.ts +7 -0
- package/dist/components/questionnaire/utils.d.ts.map +1 -0
- package/dist/components/shared/PoweredByOpendoor.d.ts +12 -0
- package/dist/components/shared/PoweredByOpendoor.d.ts.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4620 -0
- package/dist/provider.d.ts +9 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/services/partnerApi.d.ts +96 -0
- package/dist/services/partnerApi.d.ts.map +1 -0
- package/dist/store/config.d.ts +15 -0
- package/dist/store/config.d.ts.map +1 -0
- package/dist/store/index.d.ts +133 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/index.d.ts +121 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/questionnaire.d.ts +105 -0
- package/dist/types/questionnaire.d.ts.map +1 -0
- package/dist/useOpendoorClient.d.ts +4 -0
- package/dist/useOpendoorClient.d.ts.map +1 -0
- package/dist/utils/applyAppearance.d.ts +8 -0
- package/dist/utils/applyAppearance.d.ts.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { OpendoorClient } from '@opendoor/partner-sdk-client-js-core';
|
|
3
|
+
|
|
4
|
+
export interface OpendoorProviderProps {
|
|
5
|
+
client: OpendoorClient;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const OpendoorProvider: React.FC<OpendoorProviderProps>;
|
|
9
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAS5D,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { AddressData } from '../types';
|
|
2
|
+
|
|
3
|
+
export interface OfferRequestCreateParams {
|
|
4
|
+
partnerId: string;
|
|
5
|
+
addressInput: {
|
|
6
|
+
street1: string;
|
|
7
|
+
street2?: string;
|
|
8
|
+
city: string;
|
|
9
|
+
state: string;
|
|
10
|
+
postalCode: string;
|
|
11
|
+
};
|
|
12
|
+
correlationId?: string;
|
|
13
|
+
salesAssociateEmail?: string;
|
|
14
|
+
salesAssociateName?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface OfferRequestCreateResponse {
|
|
17
|
+
success: boolean;
|
|
18
|
+
offerRequest?: {
|
|
19
|
+
offerStatus: string;
|
|
20
|
+
opendoorOfferRequestId: string;
|
|
21
|
+
denialInfo?: {
|
|
22
|
+
code: string;
|
|
23
|
+
deniedAt: string;
|
|
24
|
+
explanation: string;
|
|
25
|
+
} | null;
|
|
26
|
+
};
|
|
27
|
+
address?: {
|
|
28
|
+
street1: string;
|
|
29
|
+
street2?: string;
|
|
30
|
+
city: string;
|
|
31
|
+
state: string;
|
|
32
|
+
postalCode: string;
|
|
33
|
+
};
|
|
34
|
+
error?: string;
|
|
35
|
+
details?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface OfferRequestUpdateParams {
|
|
38
|
+
partnerId: string;
|
|
39
|
+
opendoorOfferRequestId: string;
|
|
40
|
+
offerInput: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface OfferRequestUpdateResponse {
|
|
43
|
+
success: boolean;
|
|
44
|
+
offerRequest?: {
|
|
45
|
+
offerStatus: string;
|
|
46
|
+
opendoorOfferRequestId: string;
|
|
47
|
+
};
|
|
48
|
+
error?: string;
|
|
49
|
+
details?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface OfferStatusParams {
|
|
52
|
+
partnerId: string;
|
|
53
|
+
opendoorOfferRequestId: string;
|
|
54
|
+
}
|
|
55
|
+
export interface OfferStatusResponse {
|
|
56
|
+
success: boolean;
|
|
57
|
+
offerRequest?: {
|
|
58
|
+
opendoorOfferRequestId: string;
|
|
59
|
+
offerStatus: string;
|
|
60
|
+
denialInfo?: {
|
|
61
|
+
code: string;
|
|
62
|
+
} | null;
|
|
63
|
+
offerData?: {
|
|
64
|
+
headlinePriceCents: number;
|
|
65
|
+
} | null;
|
|
66
|
+
};
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
export declare function createOfferRequest(params: OfferRequestCreateParams, testMode?: boolean): Promise<OfferRequestCreateResponse>;
|
|
70
|
+
export declare function updateOfferRequest(params: OfferRequestUpdateParams, testMode?: boolean): Promise<OfferRequestUpdateResponse>;
|
|
71
|
+
export declare function getOfferStatus(params: OfferStatusParams, testMode?: boolean): Promise<OfferStatusResponse>;
|
|
72
|
+
export interface HomeDetailParams {
|
|
73
|
+
partnerId: string;
|
|
74
|
+
opendoorOfferRequestId: string;
|
|
75
|
+
}
|
|
76
|
+
export interface HomeDetailResponse {
|
|
77
|
+
success: boolean;
|
|
78
|
+
answerPrefills?: Record<string, {
|
|
79
|
+
source: string;
|
|
80
|
+
value: unknown;
|
|
81
|
+
}>;
|
|
82
|
+
error?: string;
|
|
83
|
+
}
|
|
84
|
+
export declare function getHomeDetail(params: HomeDetailParams, testMode?: boolean): Promise<HomeDetailResponse>;
|
|
85
|
+
export declare function transformAddressForApi(address: AddressData): {
|
|
86
|
+
street1: string;
|
|
87
|
+
street2?: string;
|
|
88
|
+
city: string;
|
|
89
|
+
state: string;
|
|
90
|
+
postalCode: string;
|
|
91
|
+
};
|
|
92
|
+
export declare function transformQuestionnaireForApi(questionnaire: {
|
|
93
|
+
homeFeatures: Record<string, unknown>;
|
|
94
|
+
homeConditions: Record<string, unknown>;
|
|
95
|
+
}): Record<string, unknown>;
|
|
96
|
+
//# sourceMappingURL=partnerApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partnerApi.d.ts","sourceRoot":"","sources":["../../src/services/partnerApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SDKConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
interface InitializeSDKOptions {
|
|
4
|
+
partnerId: string;
|
|
5
|
+
salesAssociateEmail?: string;
|
|
6
|
+
salesAssociateName?: string;
|
|
7
|
+
testMode?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function initializeSDK(options: InitializeSDKOptions): SDKConfig;
|
|
10
|
+
export declare function getConfig(): SDKConfig;
|
|
11
|
+
export declare function getApiBaseUrl(testMode?: boolean): string;
|
|
12
|
+
export declare function isInitialized(): boolean;
|
|
13
|
+
export declare function resetConfig(): void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/store/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAYtE;AAED,wBAAgB,SAAS,IAAI,SAAS,CAOrC;AAED,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAGxD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { AddressData, SDKConfig, SDKStep, SDKError } from '../types';
|
|
2
|
+
import { QuestionnaireStep, QuestionnaireAnswers, AnswerValue } from '../types/questionnaire';
|
|
3
|
+
|
|
4
|
+
export { initializeSDK, getApiBaseUrl, getConfig } from './config';
|
|
5
|
+
/**
|
|
6
|
+
* Zustand store state and actions for managing SDK flow.
|
|
7
|
+
* Use `useSDKStore()` hook to access this store in React components.
|
|
8
|
+
*/
|
|
9
|
+
export interface SDKState {
|
|
10
|
+
/** SDK configuration (partner ID, NHC info, test mode, session ID) */
|
|
11
|
+
config: SDKConfig | null;
|
|
12
|
+
/** Current error state, if any */
|
|
13
|
+
error: SDKError | null;
|
|
14
|
+
/** Current step in the overall SDK flow */
|
|
15
|
+
currentStep: SDKStep;
|
|
16
|
+
/** Validated address data from address entry step */
|
|
17
|
+
address: AddressData | null;
|
|
18
|
+
/** Opendoor offer request ID (seller input UUID) created from address */
|
|
19
|
+
offerId: string | null;
|
|
20
|
+
/** Whether initial offer request creation is in progress */
|
|
21
|
+
isCreatingLead: boolean;
|
|
22
|
+
/** Current step in the questionnaire flow */
|
|
23
|
+
questionnaireStep: QuestionnaireStep;
|
|
24
|
+
/** Questionnaire answers (flat structure with dot notation keys) */
|
|
25
|
+
questionnaireAnswers: Partial<QuestionnaireAnswers> & Record<string, AnswerValue>;
|
|
26
|
+
/** Whether home details are being loaded from API */
|
|
27
|
+
isLoadingHomeDetails: boolean;
|
|
28
|
+
/** Whether questionnaire is being submitted */
|
|
29
|
+
isSubmittingQuestionnaire: boolean;
|
|
30
|
+
/** Current offer status (PENDING, EVALUATING_REQUEST, OFFERED, DENIED) */
|
|
31
|
+
offerStatus: string | null;
|
|
32
|
+
/** Headline offer price in cents, if available */
|
|
33
|
+
headlinePrice: number | null;
|
|
34
|
+
/** Denial information if offer was denied */
|
|
35
|
+
denialInfo: {
|
|
36
|
+
code: string;
|
|
37
|
+
} | null;
|
|
38
|
+
/** Whether offer status polling is active */
|
|
39
|
+
isPolling: boolean;
|
|
40
|
+
/** Internal timeout ID for polling (used to cancel) */
|
|
41
|
+
pollTimeoutId: number | null;
|
|
42
|
+
/** Internal poll session token to prevent duplicate polling */
|
|
43
|
+
pollSessionToken: string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the SDK store with partner credentials.
|
|
46
|
+
* Must be called before using any SDK components.
|
|
47
|
+
*
|
|
48
|
+
* @param partnerId - Partner API key provided by Opendoor
|
|
49
|
+
* @param salesAssociateEmail - Sales associate email (optional)
|
|
50
|
+
* @param salesAssociateName - Sales associate name (optional)
|
|
51
|
+
* @param testMode - Use staging environment (default: false)
|
|
52
|
+
*/
|
|
53
|
+
initializeStore: (partnerId: string, salesAssociateEmail?: string, salesAssociateName?: string, testMode?: boolean) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Set address and create initial offer request.
|
|
56
|
+
* This automatically calls the Opendoor API to create a lead.
|
|
57
|
+
*/
|
|
58
|
+
setAddress: (address: AddressData) => Promise<void>;
|
|
59
|
+
/** Manually set the current step in the overall SDK flow */
|
|
60
|
+
setCurrentStep: (step: SDKStep) => void;
|
|
61
|
+
/** Set or clear error state */
|
|
62
|
+
setError: (error: SDKError | null) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Set the current questionnaire step.
|
|
65
|
+
*/
|
|
66
|
+
setQuestionnaireStep: (step: QuestionnaireStep) => void;
|
|
67
|
+
/**
|
|
68
|
+
* Update a single questionnaire answer.
|
|
69
|
+
* Accepts any string key for forward compatibility with new question flows.
|
|
70
|
+
*/
|
|
71
|
+
setQuestionnaireAnswer: (key: string, value: AnswerValue) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Load home details from API and pre-fill questionnaire answers.
|
|
74
|
+
*/
|
|
75
|
+
loadHomeDetails: (sellerInputUuid: string) => Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Submit questionnaire data to Opendoor API and start polling for offer status.
|
|
78
|
+
*/
|
|
79
|
+
submitQuestionnaire: (sellerInputUuid: string) => Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Start polling for offer status.
|
|
82
|
+
*/
|
|
83
|
+
startOfferPolling: (sellerInputUuid: string) => void;
|
|
84
|
+
/**
|
|
85
|
+
* Stop offer status polling.
|
|
86
|
+
*/
|
|
87
|
+
stopOfferPolling: () => void;
|
|
88
|
+
/** Update offer status (used internally by polling) */
|
|
89
|
+
setOfferStatus: (status: string, headlinePrice?: number | null, denialInfo?: {
|
|
90
|
+
code: string;
|
|
91
|
+
} | null) => void;
|
|
92
|
+
/**
|
|
93
|
+
* Reset all state to initial values.
|
|
94
|
+
* Generates a new session ID.
|
|
95
|
+
*/
|
|
96
|
+
reset: () => void;
|
|
97
|
+
}
|
|
98
|
+
export declare const useSDKStore: import('zustand').UseBoundStore<Omit<import('zustand').StoreApi<SDKState>, "persist"> & {
|
|
99
|
+
persist: {
|
|
100
|
+
setOptions: (options: Partial<import('zustand/middleware').PersistOptions<SDKState, {
|
|
101
|
+
config: SDKConfig | null;
|
|
102
|
+
address: AddressData | null;
|
|
103
|
+
offerId: string | null;
|
|
104
|
+
currentStep: SDKStep;
|
|
105
|
+
questionnaireStep: QuestionnaireStep;
|
|
106
|
+
questionnaireAnswers: Partial<QuestionnaireAnswers> & Record<string, AnswerValue>;
|
|
107
|
+
offerStatus: string | null;
|
|
108
|
+
headlinePrice: number | null;
|
|
109
|
+
denialInfo: {
|
|
110
|
+
code: string;
|
|
111
|
+
} | null;
|
|
112
|
+
}>>) => void;
|
|
113
|
+
clearStorage: () => void;
|
|
114
|
+
rehydrate: () => Promise<void> | void;
|
|
115
|
+
hasHydrated: () => boolean;
|
|
116
|
+
onHydrate: (fn: (state: SDKState) => void) => () => void;
|
|
117
|
+
onFinishHydration: (fn: (state: SDKState) => void) => () => void;
|
|
118
|
+
getOptions: () => Partial<import('zustand/middleware').PersistOptions<SDKState, {
|
|
119
|
+
config: SDKConfig | null;
|
|
120
|
+
address: AddressData | null;
|
|
121
|
+
offerId: string | null;
|
|
122
|
+
currentStep: SDKStep;
|
|
123
|
+
questionnaireStep: QuestionnaireStep;
|
|
124
|
+
questionnaireAnswers: Partial<QuestionnaireAnswers> & Record<string, AnswerValue>;
|
|
125
|
+
offerStatus: string | null;
|
|
126
|
+
headlinePrice: number | null;
|
|
127
|
+
denialInfo: {
|
|
128
|
+
code: string;
|
|
129
|
+
} | null;
|
|
130
|
+
}>>;
|
|
131
|
+
};
|
|
132
|
+
}>;
|
|
133
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAUhC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,QAAQ;IAKvB,sEAAsE;IACtE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAEzB,kCAAkC;IAClC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEvB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IAMrB,qDAAqD;IACrD,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAE5B,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,4DAA4D;IAC5D,cAAc,EAAE,OAAO,CAAC;IAMxB,6CAA6C;IAC7C,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,oEAAoE;IACpE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACjD,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE9B,qDAAqD;IACrD,oBAAoB,EAAE,OAAO,CAAC;IAE9B,+CAA+C;IAC/C,yBAAyB,EAAE,OAAO,CAAC;IAMnC,0EAA0E;IAC1E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,6CAA6C;IAC7C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEpC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IAEnB,uDAAuD;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAMhC;;;;;;;;OAQG;IACH,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,kBAAkB,CAAC,EAAE,MAAM,EAC3B,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;IAEV;;;OAGG;IACH,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,4DAA4D;IAC5D,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAExC,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAExD;;;OAGG;IACH,sBAAsB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAElE;;OAEG;IACH,eAAe,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACH,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,iBAAiB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAErD;;OAEG;IACH,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B,uDAAuD;IACvD,cAAc,EAAE,CACd,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KACjC,IAAI,CAAC;IAEV;;;OAGG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AA4BD,eAAO,MAAM,WAAW;;;;;;;;;;;;sBAlHF,MAAM;;;;;;;;;;;;;;;;;;sBAAN,MAAM;;;;EAyhB3B,CAAC"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._attribution_11y4r_7{display:flex;align-items:center;justify-content:center;gap:4px;padding:var(--od-spacing-tight) var(--od-spacing);margin-top:var(--od-spacing-tight)}._text_11y4r_16{font-family:var(--od-font-family);font-size:var(--od-font-size-attribution);color:var(--od-color-text-tertiary);letter-spacing:-.336px;line-height:1.12}._attribution_11y4r_7 svg{color:var(--od-color-text-tertiary);flex-shrink:0}._container_tu90h_8{width:100%;max-width:800px;container-type:inline-size}._inputSection_tu90h_16{position:relative}._inputWrapper_tu90h_22{position:relative;display:flex;align-items:center;justify-content:space-between;background:var(--od-color-background);border:var(--od-border-width) solid var(--od-color-border);border-radius:var(--od-border-radius);padding:9px 9px 9px var(--od-spacing-wide);transition:border-color .2s ease,box-shadow .2s ease;min-height:var(--od-input-min-height)}._inputWrapper_tu90h_22:focus-within{box-shadow:var(--od-shadow-focus)}._input_tu90h_16{flex:1;border:none;outline:none;font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:400;color:var(--od-color-text);background:transparent;padding-right:var(--od-spacing);letter-spacing:-.432px;line-height:1.45}._input_tu90h_16::placeholder{color:var(--od-color-text-secondary)}._inputIcon_tu90h_63{display:flex;align-items:center;justify-content:center;color:var(--od-color-text-secondary);pointer-events:none;flex-shrink:0;padding:0 var(--od-spacing)}._inputIcon_tu90h_63 svg{width:24px;height:24px}._button_tu90h_80{background:var(--od-color-primary);border:none;padding:18px var(--od-button-padding-x);border-radius:var(--od-border-radius);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:15px;color:var(--od-color-primary-text);font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);transition:all .2s ease;flex-shrink:0;height:var(--od-button-height);white-space:nowrap}._button_tu90h_80:hover:not(:disabled){background:var(--od-color-primary-hover);transform:translateY(-1px)}._button_tu90h_80:active:not(:disabled){transform:translateY(0)}._button_tu90h_80:disabled{opacity:.6;cursor:not-allowed}._button_tu90h_80 svg{width:20px;height:20px}._spinner_tu90h_121{animation:_spin_tu90h_121 1s linear infinite}@keyframes _spin_tu90h_121{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._suggestions_tu90h_136{position:absolute;top:calc(100% + var(--od-spacing-tight));left:0;right:0;background:var(--od-color-background);border:var(--od-border-width) solid var(--od-color-border);border-radius:var(--od-border-radius-inner);box-shadow:var(--od-shadow-dropdown);max-height:400px;overflow-y:auto;z-index:1000}._suggestions_tu90h_136._errorState_tu90h_150{border-color:var(--od-color-error);border-radius:var(--od-border-radius)}._suggestion_tu90h_136{padding:var(--od-spacing) var(--od-spacing-wide);cursor:pointer;border-bottom:1px solid var(--od-color-divider);font-family:var(--od-font-family);font-size:var(--od-font-size);color:var(--od-color-text);transition:background-color .15s ease}._suggestion_tu90h_136:last-child{border-bottom:none}._suggestion_tu90h_136:hover,._suggestion_tu90h_136:focus{background-color:var(--od-color-suggestion-hover);outline:none}._suggestion_tu90h_136:first-child{border-top-left-radius:var(--od-border-radius-inner);border-top-right-radius:var(--od-border-radius-inner)}._suggestion_tu90h_136:last-child{border-bottom-left-radius:var(--od-border-radius-inner);border-bottom-right-radius:var(--od-border-radius-inner)}._error_tu90h_150{padding:var(--od-spacing) var(--od-spacing-wide);background:transparent;color:var(--od-color-error);font-size:var(--od-font-size-small);font-family:var(--od-font-family);display:flex;align-items:flex-start;gap:var(--od-spacing-tight);border-radius:var(--od-border-radius)}._errorIcon_tu90h_199{display:flex;align-items:center;justify-content:center;color:var(--od-color-error);flex-shrink:0;margin-top:2px}._errorIcon_tu90h_199 svg{width:20px;height:20px}._errorBorder_tu90h_213{border-color:var(--od-color-error)!important}._errorBorder_tu90h_213:focus-within{box-shadow:0 0 0 3px var(--od-color-error-focus-ring)!important}._manualLink_tu90h_223{display:block;width:100%;padding:var(--od-spacing) var(--od-spacing-wide);background:none;border:none;color:var(--od-color-primary);font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:400;text-align:left;text-decoration:none;cursor:pointer;transition:all .15s ease}._manualLink_tu90h_223:hover{background-color:var(--od-color-suggestion-hover)}._manualForm_tu90h_245{animation:_slideIn_tu90h_1 .3s ease-out}@keyframes _slideIn_tu90h_1{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}._manualFormField_tu90h_260{margin-bottom:var(--od-spacing-wide)}._manualFormLabel_tu90h_264{display:block;margin-bottom:var(--od-spacing-tight);font-family:var(--od-font-family);font-size:var(--od-font-size-small);font-weight:var(--od-font-weight-medium);color:var(--od-color-text)}._manualFormInput_tu90h_273{width:100%;padding:14px 20px;border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);font-family:var(--od-font-family);font-size:var(--od-font-size);color:var(--od-color-text);transition:border-color .2s ease;box-sizing:border-box}._manualFormInput_tu90h_273:focus{outline:none;border-color:var(--od-color-border-focus)}._manualFormInput_tu90h_273::placeholder{color:var(--od-color-text-secondary)}._formRow_tu90h_294{display:grid;grid-template-columns:1fr 1fr;gap:var(--od-spacing)}._submitButton_tu90h_302{width:100%;background:var(--od-color-primary);border:none;padding:18px 32px;border-radius:var(--od-border-radius);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:15px;color:var(--od-color-primary-text);font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);transition:all .2s ease;margin-top:var(--od-spacing-wide)}._submitButton_tu90h_302:hover:not(:disabled){background:var(--od-color-primary-hover);transform:translateY(-1px)}._submitButton_tu90h_302:active:not(:disabled){transform:translateY(0)}._submitButton_tu90h_302:disabled{opacity:.6;cursor:not-allowed}._submitButton_tu90h_302 svg{width:20px;height:20px}@media (max-width: 767px){._container_tu90h_8{max-width:100%}._inputWrapper_tu90h_22{padding:8px 8px 8px 20px;min-height:64px}._button_tu90h_80{padding:14px 32px;height:48px}._formRow_tu90h_294{grid-template-columns:1fr}}@container (max-width: 420px){._inputWrapper_tu90h_22{padding:8px 16px}._button_tu90h_80{display:none}}._layoutContainer_p113i_8{container-type:inline-size;display:flex;gap:24px;align-items:flex-start;width:100%;padding:48px;box-sizing:border-box}._sidebarContainer_p113i_18{flex-shrink:0}._mainContent_p113i_22{flex:1;min-width:0}._reviewCardContainer_p113i_27{flex-shrink:0}@container (max-width: 1023px){._reviewCardContainer_p113i_27{display:none}}@container (max-width: 1023px){._layoutContainer_p113i_8{padding:32px}}@container (max-width: 767px){._layoutContainer_p113i_8{flex-direction:column;padding:20px}._sidebarContainer_p113i_18{display:none}}._pageContainer_p113i_55{max-width:640px;padding:16px 0}._pageTitle_p113i_60{font-family:var(--od-font-family);font-size:28px;font-weight:600;color:var(--od-color-text);margin:0 0 8px;line-height:1.2}._pageSubtitle_p113i_69{font-family:var(--od-font-family);font-size:var(--od-font-size);color:var(--od-color-text-secondary);margin:0 0 32px;line-height:1.5}._section_p113i_77{margin-bottom:32px}._section_p113i_77+._section_p113i_77{padding-top:32px;border-top:var(--od-border-width) solid var(--od-color-divider)}._sectionHeader_p113i_86{display:flex;align-items:center;gap:10px;margin-bottom:24px}._sectionIcon_p113i_93{display:flex;align-items:center;color:var(--od-color-text-secondary)}._sectionTitle_p113i_99{font-family:var(--od-font-family);font-size:18px;font-weight:700;color:var(--od-color-text);margin:0}._sectionFields_p113i_107{display:flex;flex-direction:column;gap:24px}._legalText_p113i_113{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-normal);color:var(--od-color-text);line-height:1.6;margin:24px 0 0}._legalText_p113i_113 a{color:var(--od-color-primary);text-decoration:underline}._navigationContainer_p113i_128{display:flex;gap:12px;margin-top:32px}._buttonPrimary_p113i_134{display:inline-flex;align-items:center;gap:8px;padding:14px 32px;font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);border-radius:var(--od-border-radius);cursor:pointer;transition:background-color .2s ease;border:none;background:var(--od-color-primary);color:var(--od-color-primary-text)}._buttonPrimary_p113i_134:hover{background:var(--od-color-primary-hover)}._buttonSecondary_p113i_154{display:inline-flex;align-items:center;gap:8px;padding:14px 24px;font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);border-radius:var(--od-border-radius);cursor:pointer;transition:all .2s ease;background:transparent;color:var(--od-color-text);border:var(--od-border-width) solid var(--od-color-border)}._buttonSecondary_p113i_154:hover{border-color:var(--od-color-border-focus);background:var(--od-color-suggestion-hover)}._arrowIcon_p113i_176{display:flex;align-items:center}._sidebar_p113i_18{display:flex;flex-direction:column;justify-content:space-between;min-height:400px;width:200px;flex-shrink:0;position:sticky;top:24px}._stepList_p113i_193{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}._stepItem_p113i_202{list-style:none}._stepButton_p113i_206{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;width:100%;background:none;border:none;border-radius:var(--od-border-radius-inner);cursor:pointer;font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary);transition:background-color .15s ease;text-align:left}._stepButton_p113i_206:disabled{cursor:default;opacity:.5}._stepActive_p113i_228{background:var(--od-color-suggestion-hover);color:var(--od-color-text);font-weight:var(--od-font-weight-medium);opacity:1}._stepCompleted_p113i_235{color:var(--od-color-text);opacity:1}._stepCompleted_p113i_235:hover{background:var(--od-color-suggestion-hover)}._stepIndicator_p113i_244{display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0;color:var(--od-color-primary)}._sidebarAttribution_p113i_254{margin-top:auto;padding-top:24px;border-top:var(--od-border-width) solid var(--od-color-divider)}._sidebarAttribution_p113i_254>div{justify-content:flex-start;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 0;margin-top:0}._reviewCard_p113i_27{width:320px;position:sticky;top:24px;background:var(--od-color-background);border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);overflow:hidden}._reviewMapArea_p113i_282{width:100%;height:160px;background:var(--od-color-suggestion-hover);display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--od-border-radius-inner) var(--od-border-radius-inner) 0 0}._reviewMapImage_p113i_293{width:100%;height:100%;object-fit:cover}._reviewMapPlaceholder_p113i_299{color:var(--od-color-text-secondary)}._reviewBody_p113i_303{padding:16px}._reviewAddressSection_p113i_307{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}._reviewAddressText_p113i_314{display:flex;flex-direction:column;gap:2px}._reviewAddressStreet_p113i_320{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);color:var(--od-color-text)}._reviewAddressCityState_p113i_327{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary)}._reviewEditLink_p113i_333{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-primary);background:none;border:none;cursor:pointer;padding:0;text-decoration:underline}._reviewStatsGrid_p113i_344{display:flex;flex-wrap:wrap;gap:8px 16px}._reviewStatsGridWithDivider_p113i_350{margin-bottom:16px;padding-bottom:16px;border-bottom:var(--od-border-width) solid var(--od-color-divider)}._reviewStatItem_p113i_356{display:flex;align-items:center;gap:4px;font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary)}._reviewStatIcon_p113i_365{display:flex;align-items:center;color:var(--od-color-text-secondary)}._reviewSection_p113i_371{margin-top:12px}._reviewSectionHeader_p113i_375{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}._reviewSectionTitle_p113i_382{font-family:var(--od-font-family);font-size:var(--od-font-size-small);font-weight:var(--od-font-weight-medium);color:var(--od-color-text)}._reviewCheckList_p113i_389{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}._reviewCheckItem_p113i_398{display:flex;align-items:flex-start;gap:6px;font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary);line-height:1.4}._reviewCheckIcon_p113i_408{display:flex;align-items:center;flex-shrink:0;margin-top:2px;color:var(--od-color-primary)}._reviewMoreLink_p113i_416{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-primary);background:none;border:none;cursor:pointer;padding:4px 0;margin-top:4px}._fieldWrapper_s6cm8_2{display:flex;flex-direction:column;gap:6px}._fieldLabel_s6cm8_8{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);color:var(--od-color-text)}._required_s6cm8_15{color:var(--od-color-error);margin-left:2px}._fieldDescription_s6cm8_20{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary);margin:0}._fieldError_s6cm8_27{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-error);margin:0}._inputWrapper_s6cm8_35{position:relative;display:flex;align-items:center}._dropdown_s6cm8_42{width:100%;padding:12px 40px 12px 16px;font-family:var(--od-font-family);font-size:var(--od-font-size);border:var(--od-border-width) solid var(--od-color-border);border-radius:var(--od-border-radius-inner);background:var(--od-color-background);color:var(--od-color-text);transition:border-color .2s ease;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 16px center;-webkit-appearance:none;-moz-appearance:none;appearance:none}._dropdown_s6cm8_42:focus{outline:none;border-color:var(--od-color-border-focus);box-shadow:var(--od-shadow-focus)}._input_s6cm8_35{width:100%;padding:12px 16px;font-family:var(--od-font-family);font-size:var(--od-font-size);border:var(--od-border-width) solid var(--od-color-border);border-radius:var(--od-border-radius-inner);background:var(--od-color-background);color:var(--od-color-text);transition:border-color .2s ease}._input_s6cm8_35:focus{outline:none;border-color:var(--od-color-border-focus);box-shadow:var(--od-shadow-focus)}._input_s6cm8_35[type=number]::-webkit-inner-spin-button,._input_s6cm8_35[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._input_s6cm8_35[type=number]{-moz-appearance:textfield}._inputSuffix_s6cm8_96{position:absolute;right:16px;color:var(--od-color-text-secondary);pointer-events:none;font-family:var(--od-font-family);font-size:var(--od-font-size)}._currencyPrefix_s6cm8_106{position:absolute;left:16px;color:var(--od-color-text-secondary);pointer-events:none;font-family:var(--od-font-family);font-size:var(--od-font-size);z-index:1}._currencyInput_s6cm8_116{width:100%;padding:12px 16px 12px 32px;font-family:var(--od-font-family);font-size:var(--od-font-size);border:var(--od-border-width) solid var(--od-color-border);border-radius:var(--od-border-radius-inner);background:var(--od-color-background);color:var(--od-color-text);transition:border-color .2s ease}._currencyInput_s6cm8_116:focus{outline:none;border-color:var(--od-color-border-focus);box-shadow:var(--od-shadow-focus)}._checkboxGroup_s6cm8_135{display:flex;flex-direction:column;gap:10px}._checkboxOption_s6cm8_141{display:flex;align-items:flex-start;gap:10px;padding:12px 16px;border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);cursor:pointer;transition:all .2s ease}._checkboxOption_s6cm8_141:hover{border-color:var(--od-color-border-focus);background:var(--od-color-suggestion-hover)}._checkboxOptionSelected_s6cm8_157{border-color:var(--od-color-primary);background:var(--od-color-suggestion-hover)}._checkboxInput_s6cm8_162{margin-top:2px;width:18px;height:18px;flex-shrink:0;accent-color:var(--od-color-primary);border-radius:50%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:2px solid var(--od-color-border);background:var(--od-color-background);cursor:pointer;position:relative}._checkboxInput_s6cm8_162:checked{background:var(--od-color-primary);border-color:var(--od-color-primary)}._checkboxInput_s6cm8_162:checked:after{content:"";position:absolute;top:2px;left:5px;width:4px;height:8px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}._checkboxLabelGroup_s6cm8_195{display:flex;flex-direction:column;gap:2px}._checkboxLabel_s6cm8_195{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-normal);color:var(--od-color-text)}._checkboxDescription_s6cm8_208{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary)}._toggleWrapper_s6cm8_215{display:flex;flex-direction:column;gap:2px}._toggleBare_s6cm8_221{display:flex;align-items:flex-start;gap:10px;cursor:pointer;padding:4px 0}._toggleCheckbox_s6cm8_229{width:22px;height:22px;flex-shrink:0;accent-color:var(--od-color-primary);border-radius:50%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:2px solid var(--od-color-border);background:var(--od-color-background);cursor:pointer;position:relative}._toggleCheckbox_s6cm8_229:checked{background:var(--od-color-primary);border-color:var(--od-color-primary)}._toggleCheckbox_s6cm8_229:checked:after{content:"";position:absolute;top:3px;left:6px;width:5px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}._toggleBareLabel_s6cm8_261{font-family:var(--od-font-family);font-size:var(--od-font-size);color:var(--od-color-text)}._toggleBareDescription_s6cm8_267{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary);margin-left:28px}._radioGroup_s6cm8_275{display:flex;flex-direction:column;gap:10px}._radioOption_s6cm8_281{display:flex;align-items:center;gap:10px;padding:12px 16px;border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);cursor:pointer;transition:all .2s ease}._radioOption_s6cm8_281:hover{border-color:var(--od-color-border-focus);background:var(--od-color-suggestion-hover)}._radioOptionSelected_s6cm8_297{border-color:var(--od-color-primary);background:var(--od-color-suggestion-hover)}._radioInput_s6cm8_302{width:18px;height:18px;flex-shrink:0;accent-color:var(--od-color-primary)}._radioLabel_s6cm8_309{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:var(--od-font-weight-medium);color:var(--od-color-text)}._cardGroup_s6cm8_317{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}._card_s6cm8_317{display:flex;flex-direction:column;gap:8px;padding:20px;background:var(--od-color-background);border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);cursor:pointer;transition:all .2s ease;text-align:left}._card_s6cm8_317:hover{border-color:var(--od-color-border-focus);background:var(--od-color-suggestion-hover)}._cardGroupWithImages_s6cm8_342{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}._cardWithImage_s6cm8_348{display:flex;flex-direction:column;background:var(--od-color-background);border:var(--od-border-width) solid var(--od-color-divider);border-radius:var(--od-border-radius-inner);cursor:pointer;transition:all .2s ease;text-align:left;overflow:hidden;padding:0}._cardWithImage_s6cm8_348:hover{border-color:var(--od-color-border-focus);background:var(--od-color-suggestion-hover)}._cardImage_s6cm8_366{width:100%;height:120px;object-fit:cover;display:block}._cardSelected_s6cm8_373{border-color:var(--od-color-primary);border-width:2px;background:var(--od-color-suggestion-hover);box-shadow:0 0 0 1px var(--od-color-primary)}._cardLabel_s6cm8_380{font-family:var(--od-font-family);font-size:var(--od-font-size);font-weight:600;color:var(--od-color-text);padding:12px 12px 0}._cardDescription_s6cm8_388{font-family:var(--od-font-family);font-size:var(--od-font-size-small);color:var(--od-color-text-secondary);padding:0 12px 12px}._card_s6cm8_317 ._cardLabel_s6cm8_380,._card_s6cm8_317 ._cardDescription_s6cm8_388{padding:0}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validated address data returned from address entry.
|
|
3
|
+
* This is the complete address information after validation.
|
|
4
|
+
*/
|
|
5
|
+
export interface AddressData {
|
|
6
|
+
/** Full formatted address string (e.g., "123 Main St, Austin, TX 78701") */
|
|
7
|
+
description: string;
|
|
8
|
+
/** Street address line (e.g., "123 Main St") */
|
|
9
|
+
street: string;
|
|
10
|
+
/** Optional unit/apartment number */
|
|
11
|
+
unitInfo?: string;
|
|
12
|
+
/** City name */
|
|
13
|
+
city: string;
|
|
14
|
+
/** Two-letter state code (e.g., "TX") */
|
|
15
|
+
state: string;
|
|
16
|
+
/** Postal/ZIP code */
|
|
17
|
+
postalCode: string;
|
|
18
|
+
/** Geographic latitude coordinate */
|
|
19
|
+
latitude?: number;
|
|
20
|
+
/** Geographic longitude coordinate */
|
|
21
|
+
longitude?: number;
|
|
22
|
+
/** Source that validated this address */
|
|
23
|
+
validationSource: 'casa' | 'google' | 'manual';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Address prediction shown in autocomplete dropdown.
|
|
27
|
+
* This is a partial address before full validation.
|
|
28
|
+
*/
|
|
29
|
+
export interface AddressPrediction {
|
|
30
|
+
/** Display text shown in dropdown */
|
|
31
|
+
description: string;
|
|
32
|
+
/** Unique identifier for this prediction (if from Google Places) */
|
|
33
|
+
placeId?: string;
|
|
34
|
+
/** Source of this prediction */
|
|
35
|
+
source: 'casa' | 'google';
|
|
36
|
+
/** Parsed street address (may be incomplete) */
|
|
37
|
+
street?: string;
|
|
38
|
+
/** Parsed unit info (may be incomplete) */
|
|
39
|
+
unitInfo?: string;
|
|
40
|
+
/** Parsed city (may be incomplete) */
|
|
41
|
+
city?: string;
|
|
42
|
+
/** Parsed state (may be incomplete) */
|
|
43
|
+
state?: string;
|
|
44
|
+
/** Parsed postal code (may be incomplete) */
|
|
45
|
+
postalCode?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Home questionnaire responses collected from the user.
|
|
49
|
+
* Contains both home features (size, rooms) and conditions.
|
|
50
|
+
*/
|
|
51
|
+
export interface QuestionnaireData {
|
|
52
|
+
/** Physical home characteristics (bedrooms, bathrooms, square footage, etc.) */
|
|
53
|
+
homeFeatures: Record<string, string | number | boolean>;
|
|
54
|
+
/** Home condition details (renovations, issues, etc.) */
|
|
55
|
+
homeConditions: Record<string, string | number | boolean>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SDK configuration settings.
|
|
59
|
+
* Created during store initialization and persisted across sessions.
|
|
60
|
+
*/
|
|
61
|
+
export interface SDKConfig {
|
|
62
|
+
/** Partner API key provided by Opendoor */
|
|
63
|
+
partnerId: string;
|
|
64
|
+
/** Sales associate email address (optional) */
|
|
65
|
+
salesAssociateEmail?: string;
|
|
66
|
+
/** Sales associate full name (optional) */
|
|
67
|
+
salesAssociateName?: string;
|
|
68
|
+
/** Whether to use staging environment (true) or production (false) */
|
|
69
|
+
testMode: boolean;
|
|
70
|
+
/** Unique session identifier for analytics tracking */
|
|
71
|
+
sessionId: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Current step in the SDK flow.
|
|
75
|
+
* The SDK progresses through these steps sequentially.
|
|
76
|
+
*/
|
|
77
|
+
export type SDKStep = 'address' | 'questionnaire' | 'submitting' | 'success' | 'error';
|
|
78
|
+
/**
|
|
79
|
+
* Error information with code and details.
|
|
80
|
+
* Returned when SDK operations fail.
|
|
81
|
+
*/
|
|
82
|
+
export interface SDKError {
|
|
83
|
+
/** Error code for programmatic handling (e.g., "ADDRESS_DENIED", "NETWORK_ERROR") */
|
|
84
|
+
code: string;
|
|
85
|
+
/** Human-readable error message for display */
|
|
86
|
+
message: string;
|
|
87
|
+
/** Additional error context or metadata */
|
|
88
|
+
details?: unknown;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Result of submitting all collected data to Opendoor.
|
|
92
|
+
* Check the success field to determine if submission succeeded.
|
|
93
|
+
*/
|
|
94
|
+
export interface SubmitResult {
|
|
95
|
+
/** Whether the submission succeeded */
|
|
96
|
+
success: boolean;
|
|
97
|
+
/** Opendoor offer request ID (seller input UUID) if successful */
|
|
98
|
+
offerId?: string;
|
|
99
|
+
/** Error details if submission failed */
|
|
100
|
+
error?: SDKError;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* CSS class name overrides for customizing widget styling.
|
|
104
|
+
* All classes are optional and merged with default styles.
|
|
105
|
+
* Pass your custom class names to progressively enhance the default design.
|
|
106
|
+
*/
|
|
107
|
+
export interface ClassNameOverrides {
|
|
108
|
+
/** Main container wrapper */
|
|
109
|
+
container?: string;
|
|
110
|
+
/** Text input field */
|
|
111
|
+
input?: string;
|
|
112
|
+
/** Dropdown/suggestions container */
|
|
113
|
+
dropdown?: string;
|
|
114
|
+
/** Button elements */
|
|
115
|
+
button?: string;
|
|
116
|
+
/** Error message container */
|
|
117
|
+
error?: string;
|
|
118
|
+
/** Label elements */
|
|
119
|
+
label?: string;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACxD,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC3D;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,SAAS,GACT,eAAe,GACf,YAAY,GACZ,SAAS,GACT,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Questionnaire-specific types for the multi-step home details form.
|
|
3
|
+
* These types define the structure of questions and answers collected from users.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Union type for any value that can be stored as a questionnaire answer.
|
|
7
|
+
* Used by both the legacy QuestionnaireWidget and the new composable questionnaire flow.
|
|
8
|
+
*/
|
|
9
|
+
export type AnswerValue = string | number | boolean | string[] | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for a single eligibility option.
|
|
12
|
+
* Used to display disqualifying criteria in the questionnaire.
|
|
13
|
+
*/
|
|
14
|
+
export interface EligibilityOption {
|
|
15
|
+
/** Display text for the option (e.g., "Leased solar panels") */
|
|
16
|
+
label: string;
|
|
17
|
+
/** Unique identifier for this option */
|
|
18
|
+
value: string;
|
|
19
|
+
/** Optional explanatory text shown with the option */
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Answers from the eligibility step.
|
|
24
|
+
* Contains criteria that may disqualify a home from receiving an offer.
|
|
25
|
+
*/
|
|
26
|
+
export interface EligibilityAnswers {
|
|
27
|
+
/** Array of selected disqualifying criteria (empty array means eligible) */
|
|
28
|
+
'home.eligibility_criteria'?: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Answers from the home details step.
|
|
32
|
+
* Contains physical characteristics and features of the home.
|
|
33
|
+
*/
|
|
34
|
+
export interface HomeDetailsAnswers {
|
|
35
|
+
/** Number of bedrooms */
|
|
36
|
+
'home.bedrooms'?: number;
|
|
37
|
+
/** Number of full bathrooms */
|
|
38
|
+
'home.bathrooms.full'?: number;
|
|
39
|
+
/** Number of half bathrooms */
|
|
40
|
+
'home.bathrooms.half'?: number;
|
|
41
|
+
/** Above-grade (main living area) square footage */
|
|
42
|
+
'home.above_grade_sq_ft'?: number;
|
|
43
|
+
/** Total lot size in square feet */
|
|
44
|
+
'home.lot_sq_ft'?: number;
|
|
45
|
+
/** Number of stories/floors */
|
|
46
|
+
'home.exterior_stories'?: number;
|
|
47
|
+
/** Whether the home has a basement */
|
|
48
|
+
'home.has_basement'?: 'yes' | 'no';
|
|
49
|
+
/** Finished basement square footage (if has_basement is 'yes') */
|
|
50
|
+
'home.basement_finished_sq_ft'?: number;
|
|
51
|
+
/** Unfinished basement square footage (if has_basement is 'yes') */
|
|
52
|
+
'home.basement_unfinished_sq_ft'?: number;
|
|
53
|
+
/** Year the home was built */
|
|
54
|
+
'home.year_built'?: number;
|
|
55
|
+
/** Type of pool, if any */
|
|
56
|
+
'home.pool_type'?: 'in_ground' | 'above_ground' | 'community' | 'none';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Complete questionnaire answers combining eligibility and home details.
|
|
60
|
+
* This is the full set of data collected from the questionnaire widget.
|
|
61
|
+
*/
|
|
62
|
+
export interface QuestionnaireAnswers extends EligibilityAnswers, HomeDetailsAnswers {
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Current step in the questionnaire flow.
|
|
66
|
+
* The questionnaire progresses through these steps sequentially.
|
|
67
|
+
*/
|
|
68
|
+
export type QuestionnaireStep = 'eligibility' | 'home-details' | 'review' | 'results';
|
|
69
|
+
/**
|
|
70
|
+
* Internal state of the questionnaire widget.
|
|
71
|
+
* Manages current step, collected answers, and submission status.
|
|
72
|
+
*/
|
|
73
|
+
export interface QuestionnaireState {
|
|
74
|
+
/** Current step in the questionnaire flow */
|
|
75
|
+
currentStep: QuestionnaireStep;
|
|
76
|
+
/** Partial answers collected so far (may be incomplete) */
|
|
77
|
+
answers: Partial<QuestionnaireAnswers>;
|
|
78
|
+
/** Opendoor offer request ID (seller input UUID) */
|
|
79
|
+
sellerInputUuid?: string;
|
|
80
|
+
/** Whether data is currently being submitted */
|
|
81
|
+
isSubmitting: boolean;
|
|
82
|
+
/** Error message if submission failed */
|
|
83
|
+
error?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Single field validation error.
|
|
87
|
+
* Indicates which field failed validation and why.
|
|
88
|
+
*/
|
|
89
|
+
export interface ValidationError {
|
|
90
|
+
/** Field key that failed validation (e.g., "home.bedrooms") */
|
|
91
|
+
key: string;
|
|
92
|
+
/** Human-readable error message */
|
|
93
|
+
message: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Result of validating questionnaire data.
|
|
97
|
+
* Contains overall validity and list of specific errors.
|
|
98
|
+
*/
|
|
99
|
+
export interface ValidationResult {
|
|
100
|
+
/** Whether all fields passed validation */
|
|
101
|
+
valid: boolean;
|
|
102
|
+
/** Array of validation errors (empty if valid is true) */
|
|
103
|
+
errors: ValidationError[];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=questionnaire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionnaire.d.ts","sourceRoot":"","sources":["../../src/types/questionnaire.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAE3E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACnC,kEAAkE;IAClE,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,oEAAoE;IACpE,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;CACxE;AAED;;;GAGG;AACH,MAAM,WAAW,oBACf,SAAQ,kBAAkB,EAAE,kBAAkB;CAAG;AAEnD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,cAAc,GACd,QAAQ,GACR,SAAS,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOpendoorClient.d.ts","sourceRoot":"","sources":["../src/useOpendoorClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,eAAO,MAAM,iBAAiB,QAAO,cASpC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { OpendoorAppearance } from '@opendoor/partner-sdk-client-js-core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Convert an OpendoorAppearance config into a CSS custom property style object.
|
|
5
|
+
* Apply the returned object as `style` on the component's root container.
|
|
6
|
+
*/
|
|
7
|
+
export declare function appearanceToCSSVars(appearance?: OpendoorAppearance): Record<string, string>;
|
|
8
|
+
//# sourceMappingURL=applyAppearance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyAppearance.d.ts","sourceRoot":"","sources":["../../src/utils/applyAppearance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG/E;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,CAAC,EAAE,kBAAkB,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@opendoor/partner-sdk-client-react",
|
|
3
|
+
"version": "0.0.1-alpha.28.1",
|
|
4
|
+
"description": "React components for Opendoor partner integrations",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc && vite build",
|
|
20
|
+
"demo": "DEMO=true vite",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test:watch": "jest --watch",
|
|
23
|
+
"test:coverage": "jest --coverage",
|
|
24
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
25
|
+
"lint:fix": "eslint . --ext ts,tsx --fix",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"format": "prettier --write \"src/**/*.{ts,tsx,json,css,md}\"",
|
|
28
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx,json,css,md}\""
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"react": ">=17.0.0",
|
|
32
|
+
"react-dom": ">=17.0.0"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@opendoor/partner-sdk-client-js-core": "*",
|
|
36
|
+
"@tabler/icons-react": "^3.36.1",
|
|
37
|
+
"zustand": "^4.5.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@testing-library/jest-dom": "^6.1.5",
|
|
41
|
+
"@testing-library/react": "^12.1.5",
|
|
42
|
+
"@testing-library/user-event": "^14.5.1",
|
|
43
|
+
"@types/jest": "^29.5.11",
|
|
44
|
+
"@types/react": "^17.0.62",
|
|
45
|
+
"@types/react-dom": "^17.0.20",
|
|
46
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
47
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
48
|
+
"@vitejs/plugin-react": "^4.2.1",
|
|
49
|
+
"eslint": "^8.56.0",
|
|
50
|
+
"eslint-config-prettier": "^9.1.0",
|
|
51
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
52
|
+
"eslint-plugin-react-refresh": "^0.4.5",
|
|
53
|
+
"identity-obj-proxy": "^3.0.0",
|
|
54
|
+
"jest": "^29.7.0",
|
|
55
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
56
|
+
"prettier": "^3.2.4",
|
|
57
|
+
"react": "^17.0.2",
|
|
58
|
+
"react-dom": "^17.0.2",
|
|
59
|
+
"ts-jest": "^29.1.1",
|
|
60
|
+
"ts-node": "^10.9.2",
|
|
61
|
+
"typescript": "^5.3.3",
|
|
62
|
+
"vite": "^5.0.11",
|
|
63
|
+
"vite-plugin-dts": "^3.7.1"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public"
|
|
67
|
+
}
|
|
68
|
+
}
|