@lmb-it/kitsconcerto-native 0.1.239 → 0.1.241
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/form/inputs/InputLocation/index.cjs +40 -23
- package/form/inputs/InputLocation/index.cjs.map +1 -1
- package/form/inputs/InputLocation/index.js +40 -23
- package/form/inputs/InputLocation/index.js.map +1 -1
- package/form/inputs/RadiusPicker/RadiusPicker.cjs +1 -1
- package/form/inputs/RadiusPicker/RadiusPicker.cjs.map +1 -1
- package/form/inputs/RadiusPicker/RadiusPicker.js +1 -1
- package/form/inputs/RadiusPicker/RadiusPicker.js.map +1 -1
- package/form-renderer/components/fields/Location/index.cjs +1 -1
- package/form-renderer/components/fields/Location/index.cjs.map +1 -1
- package/form-renderer/components/fields/Location/index.js +1 -1
- package/form-renderer/components/fields/Location/index.js.map +1 -1
- package/index.d.ts +2 -2
- package/package.json +1 -1
|
@@ -23,25 +23,26 @@ const KitsInputLocation = ({
|
|
|
23
23
|
countryISO = "AUS",
|
|
24
24
|
helperText,
|
|
25
25
|
provider,
|
|
26
|
-
|
|
26
|
+
apiKey,
|
|
27
27
|
labelKey = "label",
|
|
28
28
|
valueKey = "value",
|
|
29
29
|
// list,
|
|
30
30
|
...rest
|
|
31
31
|
}) => {
|
|
32
|
-
if (!
|
|
32
|
+
if (!apiKey) throw new Error("API KEY NOT PROVIDED");
|
|
33
33
|
const selectRef = React.useRef(null);
|
|
34
34
|
const [suggestions, setSuggestions] = React.useState([]);
|
|
35
|
+
const pendingDetailsRef = React.useRef(null);
|
|
35
36
|
const experian = React.useMemo(
|
|
36
|
-
() => provider !== "google" ? new Experian.default(
|
|
37
|
-
[provider,
|
|
37
|
+
() => provider !== "google" ? new Experian.default(apiKey) : null,
|
|
38
|
+
[provider, apiKey]
|
|
38
39
|
);
|
|
39
40
|
const search = React.useCallback(
|
|
40
41
|
async (query) => {
|
|
41
42
|
if (query.length < 4) return [];
|
|
42
43
|
try {
|
|
43
44
|
if (provider === "google") {
|
|
44
|
-
const mapped = await googlePlaces_native.googleAutocomplete(query,
|
|
45
|
+
const mapped = await googlePlaces_native.googleAutocomplete(query, apiKey, countryISO);
|
|
45
46
|
setSuggestions(mapped);
|
|
46
47
|
return mapped;
|
|
47
48
|
} else {
|
|
@@ -59,34 +60,50 @@ const KitsInputLocation = ({
|
|
|
59
60
|
return [];
|
|
60
61
|
}
|
|
61
62
|
},
|
|
62
|
-
[provider,
|
|
63
|
+
[provider, apiKey, countryISO, experian]
|
|
63
64
|
);
|
|
64
65
|
const onPickAddress = React.useCallback(
|
|
65
66
|
async (event, rawItem) => {
|
|
66
67
|
const selected = rawItem ?? event;
|
|
67
68
|
if (!selected) return;
|
|
69
|
+
if (typeof selected === "string") {
|
|
70
|
+
onChange?.({ target: { value: selected } });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (!(valueKey in selected)) {
|
|
74
|
+
onChange?.({
|
|
75
|
+
target: { value: selected?.target?.value ?? "" }
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
68
79
|
const placeId = selected[valueKey];
|
|
69
80
|
onChange?.({
|
|
70
81
|
target: { value: selected[labelKey] }
|
|
71
82
|
});
|
|
72
83
|
if (!onAddressClick || !placeId) return;
|
|
73
84
|
if (provider === "google") {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
if (pendingDetailsRef.current === placeId) return;
|
|
86
|
+
pendingDetailsRef.current = placeId;
|
|
87
|
+
try {
|
|
88
|
+
const details = await googlePlaces_native.googleDetails(placeId, apiKey);
|
|
89
|
+
const richAddress = {
|
|
90
|
+
formatted_address: details.formattedAddress,
|
|
91
|
+
place_id: placeId,
|
|
92
|
+
latitude: details.latitude,
|
|
93
|
+
longitude: details.longitude
|
|
94
|
+
};
|
|
95
|
+
details.components.forEach((c) => {
|
|
96
|
+
if (c.type && !(c.type in richAddress)) {
|
|
97
|
+
richAddress[c.type] = {
|
|
98
|
+
long: c.long,
|
|
99
|
+
short: c.short
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
onAddressClick(richAddress);
|
|
104
|
+
} finally {
|
|
105
|
+
pendingDetailsRef.current = null;
|
|
106
|
+
}
|
|
90
107
|
} else {
|
|
91
108
|
const res = await experian?.formatAddress(placeId);
|
|
92
109
|
if (res?.data?.result) {
|
|
@@ -96,7 +113,7 @@ const KitsInputLocation = ({
|
|
|
96
113
|
},
|
|
97
114
|
[
|
|
98
115
|
provider,
|
|
99
|
-
|
|
116
|
+
apiKey,
|
|
100
117
|
valueKey,
|
|
101
118
|
labelKey,
|
|
102
119
|
onChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputLocation/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef, useState} from \"react\";\nimport Experian from \"./Experian\";\nimport type {IKitsInputLocation, IRef} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../_compat\";\n// Platform-forked Google transport: legacy Web Service on native\n// (`googlePlaces.native.ts` — RN has no CORS), Places API (New) on web\n// (`googlePlaces.web.ts` — browsers block the legacy endpoints). Same\n// normalized contract on both sides (`googlePlaces.types.ts`), so the\n// Suggestion / IAddressFormat output is unchanged. There is deliberately NO\n// bare `googlePlaces.ts` — a bare sibling wins resolution over the platform\n// files and ships the wrong transport (the v0.1.238 regression).\nimport {googleAutocomplete, googleDetails} from \"./googlePlaces\";\n\ntype Suggestion = {\n label: string;\n value: string;\n format?: string;\n};\n\nconst KitsInputLocation = ({\n id,\n label,\n errors,\n invalid,\n value,\n hideError,\n onAddressClick,\n onChange,\n disabled,\n placeholder,\n countryISO = \"AUS\",\n helperText,\n provider,\n api_key,\n labelKey = \"label\",\n valueKey = \"value\",\n // list,\n ...rest\n }: IKitsInputLocation) => {\n if (!api_key) throw new Error(\"API KEY NOT PROVIDED\");\n\n const selectRef = useRef<IRef>(null);\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n\n const experian = useMemo(\n () => (provider !== \"google\" ? new Experian(api_key) : null),\n [provider, api_key]\n );\n\n const search = useCallback(\n async (query: string): Promise<Suggestion[]> => {\n if (query.length < 4) return [];\n\n try {\n if (provider === \"google\") {\n const mapped = await googleAutocomplete(query, api_key, countryISO);\n setSuggestions(mapped);\n return mapped;\n } else {\n const res = await experian?.searchAddress(query, countryISO);\n const mapped = res?.data?.result?.suggestions?.map((s: any) => ({\n label: s.text,\n value: s.global_address_key,\n format: s.format,\n })) || [];\n setSuggestions(mapped);\n return mapped;\n }\n } catch {\n setSuggestions([]);\n return [];\n }\n },\n [provider, api_key, countryISO, experian]\n );\n\n const onPickAddress = useCallback(\n async (event: any, rawItem?: any) => {\n // rawItem is the full suggestion { label, value } passed as second arg by the hook\n const selected = rawItem ?? event;\n\n if (!selected) return;\n\n const placeId = selected[valueKey];\n\n onChange?.({\n target: {value: selected[labelKey]},\n } as any);\n\n if (!onAddressClick || !placeId) return;\n\n if (provider === \"google\") {\n const details = await googleDetails(placeId, api_key);\n\n // Build rich address format: each component has a `long` and `short` value.\n const richAddress: Record<string, any> = {\n formatted_address: details.formattedAddress,\n place_id: placeId,\n latitude: details.latitude,\n longitude: details.longitude,\n };\n\n details.components.forEach((c) => {\n if (c.type && !(c.type in richAddress)) {\n richAddress[c.type] = {\n long: c.long,\n short: c.short,\n };\n }\n });\n\n onAddressClick(richAddress);\n } else {\n const res = await experian?.formatAddress(placeId);\n if (res?.data?.result) { // @ts-ignore\n onAddressClick(res.data.result);\n }\n }\n },\n [\n provider,\n api_key,\n valueKey,\n labelKey,\n onChange,\n onAddressClick,\n experian,\n ]\n );\n\n return (\n <FormSelect\n ref={selectRef}\n id={id}\n shape=\"autocomplete\"\n value={value}\n label={label}\n placeholder={placeholder}\n labelKey={labelKey}\n valueKey={valueKey}\n onChange={onPickAddress}\n isMultiple={false}\n forceSelection\n completeMethod={search}\n list={suggestions}\n helperText={helperText}\n hideError={hideError}\n disabled={disabled}\n invalid={invalid}\n errors={errors}\n {...rest}\n />\n );\n};\n\nexport default KitsInputLocation;\n"],"names":["useRef","useState","useMemo","Experian","useCallback","googleAutocomplete","googleDetails","jsx","FormSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputLocation/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef, useState} from \"react\";\nimport Experian from \"./Experian\";\nimport type {IKitsInputLocation, IRef} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../_compat\";\n// Platform-forked Google transport: legacy Web Service on native\n// (`googlePlaces.native.ts` — RN has no CORS), Places API (New) on web\n// (`googlePlaces.web.ts` — browsers block the legacy endpoints). Same\n// normalized contract on both sides (`googlePlaces.types.ts`), so the\n// Suggestion / IAddressFormat output is unchanged. There is deliberately NO\n// bare `googlePlaces.ts` — a bare sibling wins resolution over the platform\n// files and ships the wrong transport (the v0.1.238 regression).\nimport {googleAutocomplete, googleDetails} from \"./googlePlaces\";\n\ntype Suggestion = {\n label: string;\n value: string;\n format?: string;\n};\n\nconst KitsInputLocation = ({\n id,\n label,\n errors,\n invalid,\n value,\n hideError,\n onAddressClick,\n onChange,\n disabled,\n placeholder,\n countryISO = \"AUS\",\n helperText,\n provider,\n apiKey,\n labelKey = \"label\",\n valueKey = \"value\",\n // list,\n ...rest\n }: IKitsInputLocation) => {\n if (!apiKey) throw new Error(\"API KEY NOT PROVIDED\");\n\n const selectRef = useRef<IRef>(null);\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n // In-flight Details dedupe: on web PrimeReact fires BOTH onChange and\n // onSelect for a single pick, which would double the (billed) Details\n // call. First one in wins; cleared when the fetch settles.\n const pendingDetailsRef = useRef<string | null>(null);\n\n const experian = useMemo(\n () => (provider !== \"google\" ? new Experian(apiKey) : null),\n [provider, apiKey]\n );\n\n const search = useCallback(\n async (query: string): Promise<Suggestion[]> => {\n if (query.length < 4) return [];\n\n try {\n if (provider === \"google\") {\n const mapped = await googleAutocomplete(query, apiKey, countryISO);\n setSuggestions(mapped);\n return mapped;\n } else {\n const res = await experian?.searchAddress(query, countryISO);\n const mapped = res?.data?.result?.suggestions?.map((s: any) => ({\n label: s.text,\n value: s.global_address_key,\n format: s.format,\n })) || [];\n setSuggestions(mapped);\n return mapped;\n }\n } catch {\n setSuggestions([]);\n return [];\n }\n },\n [provider, apiKey, countryISO, experian]\n );\n\n const onPickAddress = useCallback(\n async (event: any, rawItem?: any) => {\n // rawItem is the full suggestion { label, value } passed as second arg by the hook\n const selected = rawItem ?? event;\n\n if (!selected) return;\n\n // WEB (PrimeReact) routes more than item objects through here:\n // typed text arrives as a plain STRING, and a forceSelection\n // blur-clear arrives as the raw change event with a null value.\n // Reading `selected[labelKey]` on those wiped the consumer's\n // controlled value with `undefined`. Pass strings through\n // verbatim; propagate a clear as ''. Native only ever sends item\n // objects, so both branches are no-ops there.\n if (typeof selected === \"string\") {\n onChange?.({target: {value: selected}} as any);\n return;\n }\n if (!(valueKey in selected)) {\n onChange?.({\n target: {value: selected?.target?.value ?? \"\"},\n } as any);\n return;\n }\n\n const placeId = selected[valueKey];\n\n onChange?.({\n target: {value: selected[labelKey]},\n } as any);\n\n if (!onAddressClick || !placeId) return;\n\n if (provider === \"google\") {\n // Web fires onChange AND onSelect for one pick — fetch once.\n if (pendingDetailsRef.current === placeId) return;\n pendingDetailsRef.current = placeId;\n try {\n const details = await googleDetails(placeId, apiKey);\n\n // Build rich address format: each component has a `long` and `short` value.\n const richAddress: Record<string, any> = {\n formatted_address: details.formattedAddress,\n place_id: placeId,\n latitude: details.latitude,\n longitude: details.longitude,\n };\n\n details.components.forEach((c) => {\n if (c.type && !(c.type in richAddress)) {\n richAddress[c.type] = {\n long: c.long,\n short: c.short,\n };\n }\n });\n\n onAddressClick(richAddress);\n } finally {\n pendingDetailsRef.current = null;\n }\n } else {\n const res = await experian?.formatAddress(placeId);\n if (res?.data?.result) { // @ts-ignore\n onAddressClick(res.data.result);\n }\n }\n },\n [\n provider,\n apiKey,\n valueKey,\n labelKey,\n onChange,\n onAddressClick,\n experian,\n ]\n );\n\n return (\n <FormSelect\n ref={selectRef}\n id={id}\n shape=\"autocomplete\"\n value={value}\n label={label}\n placeholder={placeholder}\n labelKey={labelKey}\n valueKey={valueKey}\n onChange={onPickAddress}\n isMultiple={false}\n forceSelection\n completeMethod={search}\n list={suggestions}\n helperText={helperText}\n hideError={hideError}\n disabled={disabled}\n invalid={invalid}\n errors={errors}\n {...rest}\n />\n );\n};\n\nexport default KitsInputLocation;\n"],"names":["useRef","useState","useMemo","Experian","useCallback","googleAutocomplete","googleDetails","jsx","FormSelect"],"mappings":"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"}
|
|
@@ -19,25 +19,26 @@ const KitsInputLocation = ({
|
|
|
19
19
|
countryISO = "AUS",
|
|
20
20
|
helperText,
|
|
21
21
|
provider,
|
|
22
|
-
|
|
22
|
+
apiKey,
|
|
23
23
|
labelKey = "label",
|
|
24
24
|
valueKey = "value",
|
|
25
25
|
// list,
|
|
26
26
|
...rest
|
|
27
27
|
}) => {
|
|
28
|
-
if (!
|
|
28
|
+
if (!apiKey) throw new Error("API KEY NOT PROVIDED");
|
|
29
29
|
const selectRef = useRef(null);
|
|
30
30
|
const [suggestions, setSuggestions] = useState([]);
|
|
31
|
+
const pendingDetailsRef = useRef(null);
|
|
31
32
|
const experian = useMemo(
|
|
32
|
-
() => provider !== "google" ? new Experian(
|
|
33
|
-
[provider,
|
|
33
|
+
() => provider !== "google" ? new Experian(apiKey) : null,
|
|
34
|
+
[provider, apiKey]
|
|
34
35
|
);
|
|
35
36
|
const search = useCallback(
|
|
36
37
|
async (query) => {
|
|
37
38
|
if (query.length < 4) return [];
|
|
38
39
|
try {
|
|
39
40
|
if (provider === "google") {
|
|
40
|
-
const mapped = await googleAutocomplete(query,
|
|
41
|
+
const mapped = await googleAutocomplete(query, apiKey, countryISO);
|
|
41
42
|
setSuggestions(mapped);
|
|
42
43
|
return mapped;
|
|
43
44
|
} else {
|
|
@@ -55,34 +56,50 @@ const KitsInputLocation = ({
|
|
|
55
56
|
return [];
|
|
56
57
|
}
|
|
57
58
|
},
|
|
58
|
-
[provider,
|
|
59
|
+
[provider, apiKey, countryISO, experian]
|
|
59
60
|
);
|
|
60
61
|
const onPickAddress = useCallback(
|
|
61
62
|
async (event, rawItem) => {
|
|
62
63
|
const selected = rawItem ?? event;
|
|
63
64
|
if (!selected) return;
|
|
65
|
+
if (typeof selected === "string") {
|
|
66
|
+
onChange?.({ target: { value: selected } });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!(valueKey in selected)) {
|
|
70
|
+
onChange?.({
|
|
71
|
+
target: { value: selected?.target?.value ?? "" }
|
|
72
|
+
});
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
64
75
|
const placeId = selected[valueKey];
|
|
65
76
|
onChange?.({
|
|
66
77
|
target: { value: selected[labelKey] }
|
|
67
78
|
});
|
|
68
79
|
if (!onAddressClick || !placeId) return;
|
|
69
80
|
if (provider === "google") {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
if (pendingDetailsRef.current === placeId) return;
|
|
82
|
+
pendingDetailsRef.current = placeId;
|
|
83
|
+
try {
|
|
84
|
+
const details = await googleDetails(placeId, apiKey);
|
|
85
|
+
const richAddress = {
|
|
86
|
+
formatted_address: details.formattedAddress,
|
|
87
|
+
place_id: placeId,
|
|
88
|
+
latitude: details.latitude,
|
|
89
|
+
longitude: details.longitude
|
|
90
|
+
};
|
|
91
|
+
details.components.forEach((c) => {
|
|
92
|
+
if (c.type && !(c.type in richAddress)) {
|
|
93
|
+
richAddress[c.type] = {
|
|
94
|
+
long: c.long,
|
|
95
|
+
short: c.short
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
onAddressClick(richAddress);
|
|
100
|
+
} finally {
|
|
101
|
+
pendingDetailsRef.current = null;
|
|
102
|
+
}
|
|
86
103
|
} else {
|
|
87
104
|
const res = await experian?.formatAddress(placeId);
|
|
88
105
|
if (res?.data?.result) {
|
|
@@ -92,7 +109,7 @@ const KitsInputLocation = ({
|
|
|
92
109
|
},
|
|
93
110
|
[
|
|
94
111
|
provider,
|
|
95
|
-
|
|
112
|
+
apiKey,
|
|
96
113
|
valueKey,
|
|
97
114
|
labelKey,
|
|
98
115
|
onChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputLocation/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef, useState} from \"react\";\nimport Experian from \"./Experian\";\nimport type {IKitsInputLocation, IRef} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../_compat\";\n// Platform-forked Google transport: legacy Web Service on native\n// (`googlePlaces.native.ts` — RN has no CORS), Places API (New) on web\n// (`googlePlaces.web.ts` — browsers block the legacy endpoints). Same\n// normalized contract on both sides (`googlePlaces.types.ts`), so the\n// Suggestion / IAddressFormat output is unchanged. There is deliberately NO\n// bare `googlePlaces.ts` — a bare sibling wins resolution over the platform\n// files and ships the wrong transport (the v0.1.238 regression).\nimport {googleAutocomplete, googleDetails} from \"./googlePlaces\";\n\ntype Suggestion = {\n label: string;\n value: string;\n format?: string;\n};\n\nconst KitsInputLocation = ({\n id,\n label,\n errors,\n invalid,\n value,\n hideError,\n onAddressClick,\n onChange,\n disabled,\n placeholder,\n countryISO = \"AUS\",\n helperText,\n provider,\n api_key,\n labelKey = \"label\",\n valueKey = \"value\",\n // list,\n ...rest\n }: IKitsInputLocation) => {\n if (!api_key) throw new Error(\"API KEY NOT PROVIDED\");\n\n const selectRef = useRef<IRef>(null);\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n\n const experian = useMemo(\n () => (provider !== \"google\" ? new Experian(api_key) : null),\n [provider, api_key]\n );\n\n const search = useCallback(\n async (query: string): Promise<Suggestion[]> => {\n if (query.length < 4) return [];\n\n try {\n if (provider === \"google\") {\n const mapped = await googleAutocomplete(query, api_key, countryISO);\n setSuggestions(mapped);\n return mapped;\n } else {\n const res = await experian?.searchAddress(query, countryISO);\n const mapped = res?.data?.result?.suggestions?.map((s: any) => ({\n label: s.text,\n value: s.global_address_key,\n format: s.format,\n })) || [];\n setSuggestions(mapped);\n return mapped;\n }\n } catch {\n setSuggestions([]);\n return [];\n }\n },\n [provider, api_key, countryISO, experian]\n );\n\n const onPickAddress = useCallback(\n async (event: any, rawItem?: any) => {\n // rawItem is the full suggestion { label, value } passed as second arg by the hook\n const selected = rawItem ?? event;\n\n if (!selected) return;\n\n const placeId = selected[valueKey];\n\n onChange?.({\n target: {value: selected[labelKey]},\n } as any);\n\n if (!onAddressClick || !placeId) return;\n\n if (provider === \"google\") {\n const details = await googleDetails(placeId, api_key);\n\n // Build rich address format: each component has a `long` and `short` value.\n const richAddress: Record<string, any> = {\n formatted_address: details.formattedAddress,\n place_id: placeId,\n latitude: details.latitude,\n longitude: details.longitude,\n };\n\n details.components.forEach((c) => {\n if (c.type && !(c.type in richAddress)) {\n richAddress[c.type] = {\n long: c.long,\n short: c.short,\n };\n }\n });\n\n onAddressClick(richAddress);\n } else {\n const res = await experian?.formatAddress(placeId);\n if (res?.data?.result) { // @ts-ignore\n onAddressClick(res.data.result);\n }\n }\n },\n [\n provider,\n api_key,\n valueKey,\n labelKey,\n onChange,\n onAddressClick,\n experian,\n ]\n );\n\n return (\n <FormSelect\n ref={selectRef}\n id={id}\n shape=\"autocomplete\"\n value={value}\n label={label}\n placeholder={placeholder}\n labelKey={labelKey}\n valueKey={valueKey}\n onChange={onPickAddress}\n isMultiple={false}\n forceSelection\n completeMethod={search}\n list={suggestions}\n helperText={helperText}\n hideError={hideError}\n disabled={disabled}\n invalid={invalid}\n errors={errors}\n {...rest}\n />\n );\n};\n\nexport default KitsInputLocation;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputLocation/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef, useState} from \"react\";\nimport Experian from \"./Experian\";\nimport type {IKitsInputLocation, IRef} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../_compat\";\n// Platform-forked Google transport: legacy Web Service on native\n// (`googlePlaces.native.ts` — RN has no CORS), Places API (New) on web\n// (`googlePlaces.web.ts` — browsers block the legacy endpoints). Same\n// normalized contract on both sides (`googlePlaces.types.ts`), so the\n// Suggestion / IAddressFormat output is unchanged. There is deliberately NO\n// bare `googlePlaces.ts` — a bare sibling wins resolution over the platform\n// files and ships the wrong transport (the v0.1.238 regression).\nimport {googleAutocomplete, googleDetails} from \"./googlePlaces\";\n\ntype Suggestion = {\n label: string;\n value: string;\n format?: string;\n};\n\nconst KitsInputLocation = ({\n id,\n label,\n errors,\n invalid,\n value,\n hideError,\n onAddressClick,\n onChange,\n disabled,\n placeholder,\n countryISO = \"AUS\",\n helperText,\n provider,\n apiKey,\n labelKey = \"label\",\n valueKey = \"value\",\n // list,\n ...rest\n }: IKitsInputLocation) => {\n if (!apiKey) throw new Error(\"API KEY NOT PROVIDED\");\n\n const selectRef = useRef<IRef>(null);\n const [suggestions, setSuggestions] = useState<Suggestion[]>([]);\n // In-flight Details dedupe: on web PrimeReact fires BOTH onChange and\n // onSelect for a single pick, which would double the (billed) Details\n // call. First one in wins; cleared when the fetch settles.\n const pendingDetailsRef = useRef<string | null>(null);\n\n const experian = useMemo(\n () => (provider !== \"google\" ? new Experian(apiKey) : null),\n [provider, apiKey]\n );\n\n const search = useCallback(\n async (query: string): Promise<Suggestion[]> => {\n if (query.length < 4) return [];\n\n try {\n if (provider === \"google\") {\n const mapped = await googleAutocomplete(query, apiKey, countryISO);\n setSuggestions(mapped);\n return mapped;\n } else {\n const res = await experian?.searchAddress(query, countryISO);\n const mapped = res?.data?.result?.suggestions?.map((s: any) => ({\n label: s.text,\n value: s.global_address_key,\n format: s.format,\n })) || [];\n setSuggestions(mapped);\n return mapped;\n }\n } catch {\n setSuggestions([]);\n return [];\n }\n },\n [provider, apiKey, countryISO, experian]\n );\n\n const onPickAddress = useCallback(\n async (event: any, rawItem?: any) => {\n // rawItem is the full suggestion { label, value } passed as second arg by the hook\n const selected = rawItem ?? event;\n\n if (!selected) return;\n\n // WEB (PrimeReact) routes more than item objects through here:\n // typed text arrives as a plain STRING, and a forceSelection\n // blur-clear arrives as the raw change event with a null value.\n // Reading `selected[labelKey]` on those wiped the consumer's\n // controlled value with `undefined`. Pass strings through\n // verbatim; propagate a clear as ''. Native only ever sends item\n // objects, so both branches are no-ops there.\n if (typeof selected === \"string\") {\n onChange?.({target: {value: selected}} as any);\n return;\n }\n if (!(valueKey in selected)) {\n onChange?.({\n target: {value: selected?.target?.value ?? \"\"},\n } as any);\n return;\n }\n\n const placeId = selected[valueKey];\n\n onChange?.({\n target: {value: selected[labelKey]},\n } as any);\n\n if (!onAddressClick || !placeId) return;\n\n if (provider === \"google\") {\n // Web fires onChange AND onSelect for one pick — fetch once.\n if (pendingDetailsRef.current === placeId) return;\n pendingDetailsRef.current = placeId;\n try {\n const details = await googleDetails(placeId, apiKey);\n\n // Build rich address format: each component has a `long` and `short` value.\n const richAddress: Record<string, any> = {\n formatted_address: details.formattedAddress,\n place_id: placeId,\n latitude: details.latitude,\n longitude: details.longitude,\n };\n\n details.components.forEach((c) => {\n if (c.type && !(c.type in richAddress)) {\n richAddress[c.type] = {\n long: c.long,\n short: c.short,\n };\n }\n });\n\n onAddressClick(richAddress);\n } finally {\n pendingDetailsRef.current = null;\n }\n } else {\n const res = await experian?.formatAddress(placeId);\n if (res?.data?.result) { // @ts-ignore\n onAddressClick(res.data.result);\n }\n }\n },\n [\n provider,\n apiKey,\n valueKey,\n labelKey,\n onChange,\n onAddressClick,\n experian,\n ]\n );\n\n return (\n <FormSelect\n ref={selectRef}\n id={id}\n shape=\"autocomplete\"\n value={value}\n label={label}\n placeholder={placeholder}\n labelKey={labelKey}\n valueKey={valueKey}\n onChange={onPickAddress}\n isMultiple={false}\n forceSelection\n completeMethod={search}\n list={suggestions}\n helperText={helperText}\n hideError={hideError}\n disabled={disabled}\n invalid={invalid}\n errors={errors}\n {...rest}\n />\n );\n};\n\nexport default KitsInputLocation;\n"],"names":[],"mappings":"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"}
|
|
@@ -197,7 +197,7 @@ const RadiusPicker = (props) => {
|
|
|
197
197
|
{
|
|
198
198
|
id: name ? `${name}-location` : "radius-location",
|
|
199
199
|
provider: locationProvider ?? "google",
|
|
200
|
-
|
|
200
|
+
apiKey,
|
|
201
201
|
countryISO: searchCountryISO,
|
|
202
202
|
label: searchLabel,
|
|
203
203
|
placeholder: searchPlaceholder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadiusPicker.cjs","sources":["../../../../../src/form/inputs/RadiusPicker/RadiusPicker.tsx"],"sourcesContent":["import React, {useCallback, useEffect, useMemo, useRef} from \"react\";\nimport type {\n IRadiusPickerProps,\n KitsResponsiveValue,\n LatLng,\n RadiusPickerLayout,\n RadiusUnit,\n RadiusValue,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, Icon} from \"../../../_compat\";\nimport {Text} from \"../../../primitives\";\nimport {TouchableOpacity, View} from \"react-native\";\nimport {Navigation, RotateCcw} from \"lucide-react-native\";\nimport {useToast} from \"../../../hooks/useToast\";\nimport {\n DEFAULT_CENTER,\n DEFAULT_DEBOUNCE_MS,\n DEFAULT_I18N,\n DEFAULT_MAP_INTERACTIONS,\n DEFAULT_MAX,\n DEFAULT_MIN,\n DEFAULT_PRESETS,\n DEFAULT_RADIUS,\n DEFAULT_STEP,\n} from \"./constants\";\nimport {useDebouncedChange, useGeolocation, useRadiusPickerState} from \"./hooks\";\nimport {getDefaultUnit} from \"./utils/locale\";\nimport {RadiusSlider} from \"./components/RadiusSlider\";\nimport {PresetChips} from \"./components/PresetChips\";\nimport {NumericRadiusInput} from \"./components/NumericRadiusInput\";\nimport {UnitToggle} from \"./components/UnitToggle\";\nimport {LatLngInput} from \"./components/LatLngInput\";\nimport {ErrorMessage as InlineError} from \"./components/ErrorMessage\";\nimport {FieldLabel} from \"./components/FieldLabel\";\nimport {MapWrapper} from \"./components/MapWrapper\";\nimport KitsInputLocation from \"../InputLocation\";\n\n/* ─── Helpers for responsive scalar props ────────────────────── */\n\nconst pickStatic = <T,>(value: KitsResponsiveValue<T> | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === \"object\") {\n const v = value as Record<string, unknown> & {base?: T};\n if (\"base\" in v && v.base !== undefined) return v.base as T;\n for (const key of [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\", \"xxxl\"]) {\n if (v[key] !== undefined) return v[key] as T;\n }\n if (Array.isArray(value)) {\n const first = (value as T[]).find((x) => x !== undefined);\n if (first !== undefined) return first as T;\n }\n return fallback;\n }\n return value as T;\n};\n\n/* ─── Static styles (built once, outside render) ─────────────── */\n\nconst INLINE_ACTION_STYLE = {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n backgroundColor: \"#FFFFFF\",\n};\n\nconst FLOATING_SLIDER_STYLE = {\n position: \"absolute\" as const,\n left: 12,\n right: 12,\n bottom: 12,\n padding: 12,\n borderRadius: 12,\n backgroundColor: \"rgba(255,255,255,0.95)\",\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n shadowColor: \"#000000\",\n shadowOffset: {width: 0, height: 2},\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n};\n\n/* ─── Main component ─────────────────────────────────────────── */\n\nexport const RadiusPicker: React.FC<IRadiusPickerProps> = (props) => {\n const {\n value,\n defaultValue,\n onChange,\n\n layout = \"auto\",\n\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n step = DEFAULT_STEP,\n presets = DEFAULT_PRESETS,\n\n unit,\n\n name,\n disabled,\n readOnly,\n required,\n error: externalError,\n helperText,\n label,\n onBlur,\n onFocus,\n validate,\n\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n onLocationFound,\n onLocationError,\n\n renderMap,\n renderSearchBox,\n renderLocationButton,\n\n apiKey,\n locationProvider,\n searchCountryISO,\n searchPlaceholder,\n searchLabel,\n\n getCurrentLocation,\n\n showFloatingSlider = false,\n showPresets = true,\n showNumericInput = true,\n showUnitToggle = true,\n showLatLngInput = true,\n showCurrentLocationButton = true,\n showSearchBox = false,\n showResetButton = true,\n\n mapInteractions = DEFAULT_MAP_INTERACTIONS,\n\n i18n,\n\n size = \"base\",\n debounceMs = DEFAULT_DEBOUNCE_MS,\n testID,\n\n direction: directionProp,\n mapHeight,\n } = props;\n\n /* ─── i18n merge ─────────────────────────────────────────── */\n const t = useMemo(() => ({...DEFAULT_I18N, ...(i18n ?? {})}), [i18n]);\n\n /* ─── Display + layout: collapse responsive → static ─────── */\n const staticLayout = pickStatic<RadiusPickerLayout>(layout, \"auto\");\n\n /* ─── Toast (no-op when no provider mounted) ─────────────── */\n const {toast} = useToast();\n\n /* ─── Debounced onChange ─────────────────────────────────── */\n const {debounced: debouncedEmitChange, cancel: cancelDebouncedEmit} =\n useDebouncedChange<[RadiusValue]>(onChange, debounceMs);\n\n useEffect(() => () => cancelDebouncedEmit(), [cancelDebouncedEmit]);\n\n /* ─── Initial value: prefer explicit default, else seed ──── */\n const seededDefault = useMemo<RadiusValue>(() => {\n if (defaultValue) return defaultValue;\n return {\n center: DEFAULT_CENTER,\n radius: DEFAULT_RADIUS,\n unit: unit ?? getDefaultUnit(),\n };\n }, []);\n\n /* ─── Core state ─────────────────────────────────────────── */\n const {value: currentValue, setCenter, setRadius, setUnit, error: validationError} = useRadiusPickerState({\n value,\n defaultValue: seededDefault,\n unit,\n min,\n max,\n validate,\n onChange: debouncedEmitChange,\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n });\n\n /* ─── Geolocation ─────────────────────────────────────────── */\n const handleLocationSuccess = useCallback(\n (loc: LatLng) => {\n setCenter(loc);\n onLocationFound?.(loc);\n toast(\"success\", \"Location found\");\n },\n [setCenter, onLocationFound, toast],\n );\n\n const handleLocationError = useCallback(\n (err: Error) => {\n onLocationError?.(err);\n },\n [onLocationError],\n );\n\n const {loading: geoLoading, error: geoError, fetch: fetchLocation, clearError} = useGeolocation({\n getCurrentLocation,\n onSuccess: handleLocationSuccess,\n onError: handleLocationError,\n });\n\n const onUseMyLocation = useCallback(() => {\n if (disabled || readOnly) return;\n clearError();\n void fetchLocation();\n }, [disabled, readOnly, fetchLocation, clearError]);\n\n /* ─── Reset ─────────────────────────────────────────────── */\n const handleReset = useCallback(() => {\n if (disabled || readOnly) return;\n setCenter(seededDefault.center);\n setRadius(seededDefault.radius);\n if (seededDefault.unit !== currentValue.unit) {\n setUnit(seededDefault.unit, {convert: false});\n }\n toast(\"info\", t.reset);\n }, [disabled, readOnly, setCenter, setRadius, setUnit, seededDefault, currentValue.unit, toast, t.reset]);\n\n /* ─── Layout direction ──────────────────────────────────── */\n const direction: \"row\" | \"column\" = useMemo(() => {\n if (directionProp === \"vertical\") return \"column\";\n if (directionProp === \"horizontal\") return \"row\";\n if (staticLayout === \"horizontal\") return \"row\";\n if (staticLayout === \"vertical\") return \"column\";\n return \"row\";\n }, [staticLayout, directionProp]);\n\n /* ─── Composite error ───────────────────────────────────── */\n const displayedError = externalError ?? validationError;\n\n /* ─── Map presence drives layout ────────────────────────────\n No map shipped: when the caller provides no `renderMap`, the map\n column would otherwise reserve empty space with buttons floating over\n nothing. Collapse it and surface the location/reset actions inline so\n every toggle still has a visible effect. `showFloatingSlider` only\n applies when there is a map to float over. */\n const hasMap = Boolean(renderMap);\n const floatSlider = showFloatingSlider && hasMap;\n\n /* ─── Field blur/focus pass-through ─────────────────────── */\n const rootRef = useRef<any>(null);\n const handleFocusCapture = useCallback(() => onFocus?.(), [onFocus]);\n const handleBlurCapture = useCallback(() => onBlur?.(), [onBlur]);\n\n /* ─── Subviews ──────────────────────────────────────────── */\n\n const InputView = (\n <Flex flexDirection=\"column\" gap={12} w=\"full\">\n\n {showSearchBox && (renderSearchBox || apiKey) && (\n <Flex w=\"full\">\n {renderSearchBox ? (\n renderSearchBox({\n onSelect: ({lat, lng}) => setCenter({lat, lng}),\n })\n ) : (\n <KitsInputLocation\n id={name ? `${name}-location` : \"radius-location\"}\n provider={locationProvider ?? \"google\"}\n api_key={apiKey}\n countryISO={searchCountryISO}\n label={searchLabel}\n placeholder={searchPlaceholder}\n disabled={disabled || readOnly}\n onAddressClick={(addr) => {\n const {latitude, longitude} = addr as {\n latitude?: number | null;\n longitude?: number | null;\n };\n if (\n typeof latitude === \"number\" &&\n typeof longitude === \"number\"\n ) {\n setCenter({lat: latitude, lng: longitude});\n }\n }}\n />\n )}\n </Flex>\n )}\n\n <Flex flexDirection=\"column\" gap={6}>\n <FieldLabel label={label} required={required} htmlFor={name}/>\n {!floatSlider && (\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n )}\n </Flex>\n\n {showPresets && presets?.length > 0 && (\n <PresetChips\n presets={presets}\n value={currentValue.radius}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onSelect={setRadius}\n />\n )}\n\n {(showNumericInput || showUnitToggle) && (\n <Flex flexDirection=\"row\" gap={8} alignItems=\"flex-end\" flexWrap=\"wrap\">\n {showNumericInput && (\n <Flex flex={1} minW={120}>\n <NumericRadiusInput\n value={currentValue.radius}\n unit={currentValue.unit}\n min={min}\n max={max}\n disabled={disabled}\n readOnly={readOnly}\n label={t.radius}\n onCommit={setRadius}\n />\n </Flex>\n )}\n {showUnitToggle && (\n <UnitToggle\n value={currentValue.unit as RadiusUnit}\n disabled={disabled || readOnly}\n onChange={(u) => setUnit(u)}\n />\n )}\n </Flex>\n )}\n\n {showLatLngInput && (\n <LatLngInput\n value={currentValue.center}\n disabled={disabled}\n readOnly={readOnly}\n labels={{lat: t.lat, lng: t.lng}}\n onCommit={setCenter}\n />\n )}\n\n\n\n {/* Inline actions — only when there's no map to anchor the\n floating map buttons to (otherwise they live over the map). */}\n {!hasMap && (showCurrentLocationButton || showResetButton) && (\n <Flex flexDirection=\"row\" gap={8} flexWrap=\"wrap\">\n {showCurrentLocationButton && (\n <TouchableOpacity\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'navigation'} color=\"#00A8B1\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.useMyLocation}</Text>\n </TouchableOpacity>\n )}\n {showResetButton && (\n <TouchableOpacity\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.reset}</Text>\n </TouchableOpacity>\n )}\n </Flex>\n )}\n\n {geoError && (\n <Flex\n flexDirection=\"column\"\n gap={4}\n p={12}\n borderRadius={6}\n borderWidth=\"1px\"\n borderColor=\"warning\"\n backgroundColor=\"warning.50\"\n >\n <Flex>{t.locationError}</Flex>\n </Flex>\n )}\n\n {helperText && !displayedError && (\n <Flex fontSize={12} opacity={0.7}>{helperText}</Flex>\n )}\n\n <InlineError error={displayedError}/>\n </Flex>\n );\n\n const interactive = !disabled && !readOnly && mapInteractions.length > 0;\n\n const MapView = (\n <Flex w=\"full\" minH={mapHeight ?? 240} position=\"relative\" flex={1}>\n <MapWrapper\n center={currentValue.center}\n radius={currentValue.radius}\n unit={currentValue.unit}\n interactive={interactive}\n setCenter={setCenter}\n setRadius={setRadius}\n render={renderMap}\n />\n {/* Custom absolute map buttons */}\n {showCurrentLocationButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'navigation'} color=\"#00A8B1\" />\n </TouchableOpacity>\n )}\n\n {showResetButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 56,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\" />\n </TouchableOpacity>\n )}\n\n {/* Floating slider — relocated off the input column, onto the map */}\n {floatSlider && (\n <View style={FLOATING_SLIDER_STYLE}>\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n </View>\n )}\n </Flex>\n );\n\n /* ─── Root ──────────────────────────────────────────────── */\n\n\n return (\n <Flex\n ref={rootRef}\n flexDirection=\"column\"\n w=\"full\"\n gap={8}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n data-name={name}\n data-size={size}\n testID={testID}\n >\n <Flex flexDirection={direction} gap={16} w=\"full\" alignItems=\"stretch\">\n\n\n <Flex flex={1} minW={0}>\n {hasMap ? MapView :<Flex flex={1} h={350} justifyContent={'center'} alignItems={'center'} backgroundColor={'#F3F4F6'}>\n <Text>No map library provided</Text>\n </Flex>}\n </Flex>\n <Flex flex={1} minW={0}>{InputView}</Flex>\n\n </Flex>\n </Flex>\n );\n};\n\nexport default RadiusPicker;\n"],"names":["DEFAULT_MIN","DEFAULT_MAX","DEFAULT_STEP","DEFAULT_PRESETS","DEFAULT_MAP_INTERACTIONS","DEFAULT_DEBOUNCE_MS","useMemo","DEFAULT_I18N","useToast","useDebouncedChange","useEffect","DEFAULT_CENTER","DEFAULT_RADIUS","getDefaultUnit","useRadiusPickerState","useCallback","useGeolocation","useRef","Flex","jsx","KitsInputLocation","jsxs","FieldLabel","RadiusSlider","PresetChips","NumericRadiusInput","UnitToggle","LatLngInput","TouchableOpacity","Icon","Text","InlineError","MapWrapper","View"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,UAAA,GAAa,CAAK,KAAA,EAA2C,QAAA,KAAmB;AAClF,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,QAAA;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,IAAI,UAAU,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,MAAA,SAAkB,CAAA,CAAE,IAAA;AAClD,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA,EAAG;AAC7D,MAAA,IAAI,EAAE,GAAG,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,GAAG,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,MAAM,QAAS,KAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,MAAM,MAAS,CAAA;AACxD,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAAA,IACpC;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX,CAAA;AAIA,MAAM,mBAAA,GAAsB;AAAA,EACxB,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,CAAA;AAAA,EACL,eAAA,EAAiB,CAAA;AAAA,EACjB,iBAAA,EAAmB,EAAA;AAAA,EACnB,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,eAAA,EAAiB;AACrB,CAAA;AAEA,MAAM,qBAAA,GAAwB;AAAA,EAC1B,QAAA,EAAU,UAAA;AAAA,EACV,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,YAAA,EAAc,EAAA;AAAA,EACd,eAAA,EAAiB,wBAAA;AAAA,EACjB,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,EAAC,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAC;AAAA,EAClC,aAAA,EAAe,GAAA;AAAA,EACf,YAAA,EAAc,CAAA;AAAA,EACd,SAAA,EAAW;AACf,CAAA;AAIO,MAAM,YAAA,GAA6C,CAAC,KAAA,KAAU;AACjE,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IAEA,MAAA,GAAS,MAAA;AAAA,IAET,GAAA,GAAMA,qBAAA;AAAA,IACN,GAAA,GAAMC,qBAAA;AAAA,IACN,IAAA,GAAOC,sBAAA;AAAA,IACP,OAAA,GAAUC,yBAAA;AAAA,IAEV,IAAA;AAAA,IAEA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,UAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IAEA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IAEA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,oBAAA;AAAA,IAEA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IAEA,kBAAA;AAAA,IAEA,kBAAA,GAAqB,KAAA;AAAA,IACrB,WAAA,GAAc,IAAA;AAAA,IACd,gBAAA,GAAmB,IAAA;AAAA,IACnB,cAAA,GAAiB,IAAA;AAAA,IACjB,eAAA,GAAkB,IAAA;AAAA,IAClB,yBAAA,GAA4B,IAAA;AAAA,IAC5B,aAAA,GAAgB,KAAA;AAAA,IAChB,eAAA,GAAkB,IAAA;AAAA,IAElB,eAAA,GAAkBC,kCAAA;AAAA,IAElB,IAAA;AAAA,IAEA,IAAA,GAAO,MAAA;AAAA,IACP,UAAA,GAAaC,6BAAA;AAAA,IACb,MAAA;AAAA,IAEA,SAAA,EAAW,aAAA;AAAA,IACX;AAAA,GACJ,GAAI,KAAA;AAGJ,EAAA,MAAM,CAAA,GAAIC,aAAA,CAAQ,OAAO,EAAC,GAAGC,sBAAA,EAAc,GAAI,IAAA,IAAQ,EAAC,EAAE,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA;AAGpE,EAAA,MAAM,YAAA,GAAe,UAAA,CAA+B,MAAA,EAAQ,MAAM,CAAA;AAGlE,EAAA,MAAM,EAAC,KAAA,EAAK,GAAIC,aAAA,EAAS;AAGzB,EAAA,MAAM,EAAC,WAAW,mBAAA,EAAqB,MAAA,EAAQ,qBAAmB,GAC9DC,qCAAA,CAAkC,UAAU,UAAU,CAAA;AAE1D,EAAAC,eAAA,CAAU,MAAM,MAAM,mBAAA,EAAoB,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAGlE,EAAA,MAAM,aAAA,GAAgBJ,cAAqB,MAAM;AAC7C,IAAA,IAAI,cAAc,OAAO,YAAA;AACzB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQK,wBAAA;AAAA,MACR,MAAA,EAAQC,wBAAA;AAAA,MACR,IAAA,EAAM,QAAQC,qBAAA;AAAe,KACjC;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,EAAC,OAAO,YAAA,EAAc,SAAA,EAAW,WAAW,OAAA,EAAS,KAAA,EAAO,eAAA,EAAe,GAAIC,yCAAA,CAAqB;AAAA,IACtG,KAAA;AAAA,IACA,YAAA,EAAc,aAAA;AAAA,IACd,IAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,mBAAA;AAAA,IACV,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACH,CAAA;AAGD,EAAA,MAAM,qBAAA,GAAwBC,iBAAA;AAAA,IAC1B,CAAC,GAAA,KAAgB;AACb,MAAA,SAAA,CAAU,GAAG,CAAA;AACb,MAAA,eAAA,GAAkB,GAAG,CAAA;AACrB,MAAA,KAAA,CAAM,WAAW,gBAAgB,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,eAAA,EAAiB,KAAK;AAAA,GACtC;AAEA,EAAA,MAAM,mBAAA,GAAsBA,iBAAA;AAAA,IACxB,CAAC,GAAA,KAAe;AACZ,MAAA,eAAA,GAAkB,GAAG,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GACpB;AAEA,EAAA,MAAM,EAAC,SAAS,UAAA,EAAY,KAAA,EAAO,UAAU,KAAA,EAAO,aAAA,EAAe,UAAA,EAAU,GAAIC,6BAAA,CAAe;AAAA,IAC5F,kBAAA;AAAA,IACA,SAAA,EAAW,qBAAA;AAAA,IACX,OAAA,EAAS;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBD,kBAAY,MAAM;AACtC,IAAA,IAAI,YAAY,QAAA,EAAU;AAC1B,IAAA,UAAA,EAAW;AACX,IAAA,KAAK,aAAA,EAAc;AAAA,EACvB,GAAG,CAAC,QAAA,EAAU,QAAA,EAAU,aAAA,EAAe,UAAU,CAAC,CAAA;AAGlD,EAAA,MAAM,WAAA,GAAcA,kBAAY,MAAM;AAClC,IAAA,IAAI,YAAY,QAAA,EAAU;AAC1B,IAAA,SAAA,CAAU,cAAc,MAAM,CAAA;AAC9B,IAAA,SAAA,CAAU,cAAc,MAAM,CAAA;AAC9B,IAAA,IAAI,aAAA,CAAc,IAAA,KAAS,YAAA,CAAa,IAAA,EAAM;AAC1C,MAAA,OAAA,CAAQ,aAAA,CAAc,IAAA,EAAM,EAAC,OAAA,EAAS,OAAM,CAAA;AAAA,IAChD;AACA,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAE,KAAK,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,aAAA,EAAe,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAGxG,EAAA,MAAM,SAAA,GAA8BT,cAAQ,MAAM;AAC9C,IAAA,IAAI,aAAA,KAAkB,YAAY,OAAO,QAAA;AACzC,IAAA,IAAI,aAAA,KAAkB,cAAc,OAAO,KAAA;AAC3C,IAAA,IAAI,YAAA,KAAiB,cAAc,OAAO,KAAA;AAC1C,IAAA,IAAI,YAAA,KAAiB,YAAY,OAAO,QAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACX,CAAA,EAAG,CAAC,YAAA,EAAc,aAAa,CAAC,CAAA;AAGhC,EAAA,MAAM,iBAAiB,aAAA,IAAiB,eAAA;AAQxC,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChC,EAAA,MAAM,cAAc,kBAAA,IAAsB,MAAA;AAG1C,EAAA,MAAM,OAAA,GAAUW,aAAY,IAAI,CAAA;AAChC,EAAA,MAAM,qBAAqBF,iBAAA,CAAY,MAAM,WAAU,EAAG,CAAC,OAAO,CAAC,CAAA;AACnE,EAAA,MAAM,oBAAoBA,iBAAA,CAAY,MAAM,UAAS,EAAG,CAAC,MAAM,CAAC,CAAA;AAIhE,EAAA,MAAM,SAAA,mCACDG,eAAA,EAAA,EAAK,aAAA,EAAc,UAAS,GAAA,EAAK,EAAA,EAAI,GAAE,MAAA,EAEnC,QAAA,EAAA;AAAA,IAAA,aAAA,KAAkB,mBAAmB,MAAA,CAAA,oBAClCC,cAAA,CAACD,mBAAK,CAAA,EAAE,MAAA,EACH,4BACG,eAAA,CAAgB;AAAA,MACZ,QAAA,EAAU,CAAC,EAAC,GAAA,EAAK,GAAA,OAAS,SAAA,CAAU,EAAC,GAAA,EAAK,GAAA,EAAI;AAAA,KACjD,CAAA,mBAEDC,cAAA;AAAA,MAACC,eAAA;AAAA,MAAA;AAAA,QACG,EAAA,EAAI,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,SAAA,CAAA,GAAc,iBAAA;AAAA,QAChC,UAAU,gBAAA,IAAoB,QAAA;AAAA,QAC9B,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,gBAAA;AAAA,QACZ,KAAA,EAAO,WAAA;AAAA,QACP,WAAA,EAAa,iBAAA;AAAA,QACb,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,cAAA,EAAgB,CAAC,IAAA,KAAS;AACtB,UAAA,MAAM,EAAC,QAAA,EAAU,SAAA,EAAS,GAAI,IAAA;AAI9B,UAAA,IACI,OAAO,QAAA,KAAa,QAAA,IACpB,OAAO,cAAc,QAAA,EACvB;AACE,YAAA,SAAA,CAAU,EAAC,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,WAAU,CAAA;AAAA,UAC7C;AAAA,QACJ;AAAA;AAAA,KACJ,EAER,CAAA;AAAA,oBAGJC,eAAA,CAACH,eAAA,EAAA,EAAK,aAAA,EAAc,QAAA,EAAS,KAAK,CAAA,EAC9B,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACG,qBAAA,EAAA,EAAW,KAAA,EAAc,QAAA,EAAoB,OAAA,EAAS,IAAA,EAAK,CAAA;AAAA,MAC3D,CAAC,WAAA,oBACEH,cAAA;AAAA,QAACI,yBAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,GAAA;AAAA,UACA,GAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,QAAA,EAAU;AAAA;AAAA;AACd,KAAA,EAER,CAAA;AAAA,IAEC,WAAA,IAAe,OAAA,EAAS,MAAA,GAAS,CAAA,oBAC9BJ,cAAA;AAAA,MAACK,uBAAA;AAAA,MAAA;AAAA,QACG,OAAA;AAAA,QACA,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA,KACd;AAAA,IAAA,CAGF,gBAAA,IAAoB,cAAA,qBAClBH,eAAA,CAACH,eAAA,EAAA,EAAK,aAAA,EAAc,KAAA,EAAM,GAAA,EAAK,CAAA,EAAG,UAAA,EAAW,UAAA,EAAW,QAAA,EAAS,MAAA,EAC5D,QAAA,EAAA;AAAA,MAAA,gBAAA,oBACGC,cAAA,CAACD,eAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,MAAM,GAAA,EACjB,QAAA,kBAAAC,cAAA;AAAA,QAACM,qCAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,GAAA;AAAA,UACA,GAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAO,CAAA,CAAE,MAAA;AAAA,UACT,QAAA,EAAU;AAAA;AAAA,OACd,EACJ,CAAA;AAAA,MAEH,cAAA,oBACGN,cAAA;AAAA,QAACO,qBAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,IAAA;AAAA,UACpB,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,QAAA,EAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC;AAAA;AAAA;AAC9B,KAAA,EAER,CAAA;AAAA,IAGH,eAAA,oBACGP,cAAA;AAAA,MAACQ,uBAAA;AAAA,MAAA;AAAA,QACG,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,EAAC,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,EAAK,EAAE,GAAA,EAAG;AAAA,QAC/B,QAAA,EAAU;AAAA;AAAA,KACd;AAAA,IAOH,CAAC,MAAA,KAAW,yBAAA,IAA6B,eAAA,CAAA,oBACtCN,eAAA,CAACH,eAAA,EAAA,EAAK,aAAA,EAAc,KAAA,EAAM,GAAA,EAAK,CAAA,EAAG,QAAA,EAAS,MAAA,EACtC,QAAA,EAAA;AAAA,MAAA,yBAAA,oBACGG,eAAA;AAAA,QAACO,4BAAA;AAAA,QAAA;AAAA,UACG,OAAA,EAAS,eAAA;AAAA,UACT,QAAA,EAAU,cAAc,QAAA,IAAY,QAAA;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,KAAA,EAAO,mBAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAAT,cAAA,CAACU,iBAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,KAAA,EAAM,SAAA,EAAS,CAAA;AAAA,2CACxCC,sBAAA,EAAA,EAAK,QAAA,EAAU,IAAI,KAAA,EAAM,gBAAA,EAAkB,YAAE,aAAA,EAAc;AAAA;AAAA;AAAA,OAChE;AAAA,MAEH,eAAA,oBACGT,eAAA;AAAA,QAACO,4BAAA;AAAA,QAAA;AAAA,UACG,OAAA,EAAS,WAAA;AAAA,UACT,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,aAAA,EAAe,GAAA;AAAA,UACf,KAAA,EAAO,mBAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAAT,cAAA,CAACU,iBAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,KAAA,EAAM,SAAA,EAAS,CAAA;AAAA,2CACxCC,sBAAA,EAAA,EAAK,QAAA,EAAU,IAAI,KAAA,EAAM,gBAAA,EAAkB,YAAE,KAAA,EAAM;AAAA;AAAA;AAAA;AACxD,KAAA,EAER,CAAA;AAAA,IAGH,QAAA,oBACGX,cAAA;AAAA,MAACD,eAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAc,QAAA;AAAA,QACd,GAAA,EAAK,CAAA;AAAA,QACL,CAAA,EAAG,EAAA;AAAA,QACH,YAAA,EAAc,CAAA;AAAA,QACd,WAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAY,SAAA;AAAA,QACZ,eAAA,EAAgB,YAAA;AAAA,QAEhB,QAAA,kBAAAC,cAAA,CAACD,eAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,aAAA,EAAc;AAAA;AAAA,KAC3B;AAAA,IAGH,UAAA,IAAc,CAAC,cAAA,oBACZC,cAAA,CAACD,mBAAK,QAAA,EAAU,EAAA,EAAI,OAAA,EAAS,GAAA,EAAM,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,oBAGlDC,cAAA,CAACY,yBAAA,EAAA,EAAY,KAAA,EAAO,cAAA,EAAe;AAAA,GAAA,EACvC,CAAA;AAGJ,EAAA,MAAM,cAAc,CAAC,QAAA,IAAY,CAAC,QAAA,IAAY,gBAAgB,MAAA,GAAS,CAAA;AAEvE,EAAA,MAAM,OAAA,mBACFV,eAAA,CAACH,eAAA,EAAA,EAAK,CAAA,EAAE,MAAA,EAAO,IAAA,EAAM,SAAA,IAAa,GAAA,EAAK,QAAA,EAAS,UAAA,EAAW,IAAA,EAAM,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACa,qBAAA;AAAA,MAAA;AAAA,QACG,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,WAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACZ;AAAA,IAEC,yBAAA,oBACGb,cAAA;AAAA,MAACS,4BAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,EAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,YAAA,EAAc,EAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,SAAA;AAAA,UACb,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,QAAA;AAAA,UACZ,WAAA,EAAa,SAAA;AAAA,UACb,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,YAAA,EAAc,CAAA;AAAA,UACd,SAAA,EAAW;AAAA,SACf;AAAA,QACA,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,cAAc,QAAA,IAAY,QAAA;AAAA,QACpC,aAAA,EAAe,GAAA;AAAA,QAEf,QAAA,kBAAAT,cAAA,CAACU,iBAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,OAAM,SAAA,EAAU;AAAA;AAAA,KAC9C;AAAA,IAGH,eAAA,oBACGV,cAAA;AAAA,MAACS,4BAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,EAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,YAAA,EAAc,EAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,SAAA;AAAA,UACb,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,QAAA;AAAA,UACZ,WAAA,EAAa,SAAA;AAAA,UACb,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,YAAA,EAAc,CAAA;AAAA,UACd,SAAA,EAAW;AAAA,SACf;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,aAAA,EAAe,GAAA;AAAA,QAEf,QAAA,kBAAAT,cAAA,CAACU,iBAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,OAAM,SAAA,EAAU;AAAA;AAAA,KAC9C;AAAA,IAIH,WAAA,oBACGV,cAAA,CAACc,gBAAA,EAAA,EAAK,KAAA,EAAO,qBAAA,EACT,QAAA,kBAAAd,cAAA;AAAA,MAACI,yBAAA;AAAA,MAAA;AAAA,QACG,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,GAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA,KACd,EACJ;AAAA,GAAA,EAER,CAAA;AAMJ,EAAA,uBACIJ,cAAA;AAAA,IAACD,eAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,OAAA;AAAA,MACL,aAAA,EAAc,QAAA;AAAA,MACd,CAAA,EAAE,MAAA;AAAA,MACF,GAAA,EAAK,CAAA;AAAA,MACL,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,iBAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAW,IAAA;AAAA,MACX,MAAA;AAAA,MAEA,QAAA,kBAAAG,eAAA,CAACH,mBAAK,aAAA,EAAe,SAAA,EAAW,KAAK,EAAA,EAAI,CAAA,EAAE,MAAA,EAAO,UAAA,EAAW,SAAA,EAGzD,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACD,eAAA,EAAA,EAAK,MAAM,CAAA,EAAG,IAAA,EAAM,GAChB,QAAA,EAAA,MAAA,GAAS,OAAA,mBAASC,cAAA,CAACD,eAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,GAAG,GAAA,EAAK,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,eAAA,EAAiB,WACvG,QAAA,kBAAAC,cAAA,CAACW,sBAAA,EAAA,EAAK,QAAA,EAAA,yBAAA,EAAuB,CAAA,EACjC,CAAA,EACJ,CAAA;AAAA,uCACCZ,eAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,GAAI,QAAA,EAAA,SAAA,EAAU;AAAA,OAAA,EAEvC;AAAA;AAAA,GACJ;AAER;;;;;"}
|
|
1
|
+
{"version":3,"file":"RadiusPicker.cjs","sources":["../../../../../src/form/inputs/RadiusPicker/RadiusPicker.tsx"],"sourcesContent":["import React, {useCallback, useEffect, useMemo, useRef} from \"react\";\nimport type {\n IRadiusPickerProps,\n KitsResponsiveValue,\n LatLng,\n RadiusPickerLayout,\n RadiusUnit,\n RadiusValue,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, Icon} from \"../../../_compat\";\nimport {Text} from \"../../../primitives\";\nimport {TouchableOpacity, View} from \"react-native\";\nimport {Navigation, RotateCcw} from \"lucide-react-native\";\nimport {useToast} from \"../../../hooks/useToast\";\nimport {\n DEFAULT_CENTER,\n DEFAULT_DEBOUNCE_MS,\n DEFAULT_I18N,\n DEFAULT_MAP_INTERACTIONS,\n DEFAULT_MAX,\n DEFAULT_MIN,\n DEFAULT_PRESETS,\n DEFAULT_RADIUS,\n DEFAULT_STEP,\n} from \"./constants\";\nimport {useDebouncedChange, useGeolocation, useRadiusPickerState} from \"./hooks\";\nimport {getDefaultUnit} from \"./utils/locale\";\nimport {RadiusSlider} from \"./components/RadiusSlider\";\nimport {PresetChips} from \"./components/PresetChips\";\nimport {NumericRadiusInput} from \"./components/NumericRadiusInput\";\nimport {UnitToggle} from \"./components/UnitToggle\";\nimport {LatLngInput} from \"./components/LatLngInput\";\nimport {ErrorMessage as InlineError} from \"./components/ErrorMessage\";\nimport {FieldLabel} from \"./components/FieldLabel\";\nimport {MapWrapper} from \"./components/MapWrapper\";\nimport KitsInputLocation from \"../InputLocation\";\n\n/* ─── Helpers for responsive scalar props ────────────────────── */\n\nconst pickStatic = <T,>(value: KitsResponsiveValue<T> | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === \"object\") {\n const v = value as Record<string, unknown> & {base?: T};\n if (\"base\" in v && v.base !== undefined) return v.base as T;\n for (const key of [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\", \"xxxl\"]) {\n if (v[key] !== undefined) return v[key] as T;\n }\n if (Array.isArray(value)) {\n const first = (value as T[]).find((x) => x !== undefined);\n if (first !== undefined) return first as T;\n }\n return fallback;\n }\n return value as T;\n};\n\n/* ─── Static styles (built once, outside render) ─────────────── */\n\nconst INLINE_ACTION_STYLE = {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n backgroundColor: \"#FFFFFF\",\n};\n\nconst FLOATING_SLIDER_STYLE = {\n position: \"absolute\" as const,\n left: 12,\n right: 12,\n bottom: 12,\n padding: 12,\n borderRadius: 12,\n backgroundColor: \"rgba(255,255,255,0.95)\",\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n shadowColor: \"#000000\",\n shadowOffset: {width: 0, height: 2},\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n};\n\n/* ─── Main component ─────────────────────────────────────────── */\n\nexport const RadiusPicker: React.FC<IRadiusPickerProps> = (props) => {\n const {\n value,\n defaultValue,\n onChange,\n\n layout = \"auto\",\n\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n step = DEFAULT_STEP,\n presets = DEFAULT_PRESETS,\n\n unit,\n\n name,\n disabled,\n readOnly,\n required,\n error: externalError,\n helperText,\n label,\n onBlur,\n onFocus,\n validate,\n\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n onLocationFound,\n onLocationError,\n\n renderMap,\n renderSearchBox,\n renderLocationButton,\n\n apiKey,\n locationProvider,\n searchCountryISO,\n searchPlaceholder,\n searchLabel,\n\n getCurrentLocation,\n\n showFloatingSlider = false,\n showPresets = true,\n showNumericInput = true,\n showUnitToggle = true,\n showLatLngInput = true,\n showCurrentLocationButton = true,\n showSearchBox = false,\n showResetButton = true,\n\n mapInteractions = DEFAULT_MAP_INTERACTIONS,\n\n i18n,\n\n size = \"base\",\n debounceMs = DEFAULT_DEBOUNCE_MS,\n testID,\n\n direction: directionProp,\n mapHeight,\n } = props;\n\n /* ─── i18n merge ─────────────────────────────────────────── */\n const t = useMemo(() => ({...DEFAULT_I18N, ...(i18n ?? {})}), [i18n]);\n\n /* ─── Display + layout: collapse responsive → static ─────── */\n const staticLayout = pickStatic<RadiusPickerLayout>(layout, \"auto\");\n\n /* ─── Toast (no-op when no provider mounted) ─────────────── */\n const {toast} = useToast();\n\n /* ─── Debounced onChange ─────────────────────────────────── */\n const {debounced: debouncedEmitChange, cancel: cancelDebouncedEmit} =\n useDebouncedChange<[RadiusValue]>(onChange, debounceMs);\n\n useEffect(() => () => cancelDebouncedEmit(), [cancelDebouncedEmit]);\n\n /* ─── Initial value: prefer explicit default, else seed ──── */\n const seededDefault = useMemo<RadiusValue>(() => {\n if (defaultValue) return defaultValue;\n return {\n center: DEFAULT_CENTER,\n radius: DEFAULT_RADIUS,\n unit: unit ?? getDefaultUnit(),\n };\n }, []);\n\n /* ─── Core state ─────────────────────────────────────────── */\n const {value: currentValue, setCenter, setRadius, setUnit, error: validationError} = useRadiusPickerState({\n value,\n defaultValue: seededDefault,\n unit,\n min,\n max,\n validate,\n onChange: debouncedEmitChange,\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n });\n\n /* ─── Geolocation ─────────────────────────────────────────── */\n const handleLocationSuccess = useCallback(\n (loc: LatLng) => {\n setCenter(loc);\n onLocationFound?.(loc);\n toast(\"success\", \"Location found\");\n },\n [setCenter, onLocationFound, toast],\n );\n\n const handleLocationError = useCallback(\n (err: Error) => {\n onLocationError?.(err);\n },\n [onLocationError],\n );\n\n const {loading: geoLoading, error: geoError, fetch: fetchLocation, clearError} = useGeolocation({\n getCurrentLocation,\n onSuccess: handleLocationSuccess,\n onError: handleLocationError,\n });\n\n const onUseMyLocation = useCallback(() => {\n if (disabled || readOnly) return;\n clearError();\n void fetchLocation();\n }, [disabled, readOnly, fetchLocation, clearError]);\n\n /* ─── Reset ─────────────────────────────────────────────── */\n const handleReset = useCallback(() => {\n if (disabled || readOnly) return;\n setCenter(seededDefault.center);\n setRadius(seededDefault.radius);\n if (seededDefault.unit !== currentValue.unit) {\n setUnit(seededDefault.unit, {convert: false});\n }\n toast(\"info\", t.reset);\n }, [disabled, readOnly, setCenter, setRadius, setUnit, seededDefault, currentValue.unit, toast, t.reset]);\n\n /* ─── Layout direction ──────────────────────────────────── */\n const direction: \"row\" | \"column\" = useMemo(() => {\n if (directionProp === \"vertical\") return \"column\";\n if (directionProp === \"horizontal\") return \"row\";\n if (staticLayout === \"horizontal\") return \"row\";\n if (staticLayout === \"vertical\") return \"column\";\n return \"row\";\n }, [staticLayout, directionProp]);\n\n /* ─── Composite error ───────────────────────────────────── */\n const displayedError = externalError ?? validationError;\n\n /* ─── Map presence drives layout ────────────────────────────\n No map shipped: when the caller provides no `renderMap`, the map\n column would otherwise reserve empty space with buttons floating over\n nothing. Collapse it and surface the location/reset actions inline so\n every toggle still has a visible effect. `showFloatingSlider` only\n applies when there is a map to float over. */\n const hasMap = Boolean(renderMap);\n const floatSlider = showFloatingSlider && hasMap;\n\n /* ─── Field blur/focus pass-through ─────────────────────── */\n const rootRef = useRef<any>(null);\n const handleFocusCapture = useCallback(() => onFocus?.(), [onFocus]);\n const handleBlurCapture = useCallback(() => onBlur?.(), [onBlur]);\n\n /* ─── Subviews ──────────────────────────────────────────── */\n\n const InputView = (\n <Flex flexDirection=\"column\" gap={12} w=\"full\">\n\n {showSearchBox && (renderSearchBox || apiKey) && (\n <Flex w=\"full\">\n {renderSearchBox ? (\n renderSearchBox({\n onSelect: ({lat, lng}) => setCenter({lat, lng}),\n })\n ) : (\n <KitsInputLocation\n id={name ? `${name}-location` : \"radius-location\"}\n provider={locationProvider ?? \"google\"}\n apiKey={apiKey}\n countryISO={searchCountryISO}\n label={searchLabel}\n placeholder={searchPlaceholder}\n disabled={disabled || readOnly}\n onAddressClick={(addr) => {\n const {latitude, longitude} = addr as {\n latitude?: number | null;\n longitude?: number | null;\n };\n if (\n typeof latitude === \"number\" &&\n typeof longitude === \"number\"\n ) {\n setCenter({lat: latitude, lng: longitude});\n }\n }}\n />\n )}\n </Flex>\n )}\n\n <Flex flexDirection=\"column\" gap={6}>\n <FieldLabel label={label} required={required} htmlFor={name}/>\n {!floatSlider && (\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n )}\n </Flex>\n\n {showPresets && presets?.length > 0 && (\n <PresetChips\n presets={presets}\n value={currentValue.radius}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onSelect={setRadius}\n />\n )}\n\n {(showNumericInput || showUnitToggle) && (\n <Flex flexDirection=\"row\" gap={8} alignItems=\"flex-end\" flexWrap=\"wrap\">\n {showNumericInput && (\n <Flex flex={1} minW={120}>\n <NumericRadiusInput\n value={currentValue.radius}\n unit={currentValue.unit}\n min={min}\n max={max}\n disabled={disabled}\n readOnly={readOnly}\n label={t.radius}\n onCommit={setRadius}\n />\n </Flex>\n )}\n {showUnitToggle && (\n <UnitToggle\n value={currentValue.unit as RadiusUnit}\n disabled={disabled || readOnly}\n onChange={(u) => setUnit(u)}\n />\n )}\n </Flex>\n )}\n\n {showLatLngInput && (\n <LatLngInput\n value={currentValue.center}\n disabled={disabled}\n readOnly={readOnly}\n labels={{lat: t.lat, lng: t.lng}}\n onCommit={setCenter}\n />\n )}\n\n\n\n {/* Inline actions — only when there's no map to anchor the\n floating map buttons to (otherwise they live over the map). */}\n {!hasMap && (showCurrentLocationButton || showResetButton) && (\n <Flex flexDirection=\"row\" gap={8} flexWrap=\"wrap\">\n {showCurrentLocationButton && (\n <TouchableOpacity\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'navigation'} color=\"#00A8B1\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.useMyLocation}</Text>\n </TouchableOpacity>\n )}\n {showResetButton && (\n <TouchableOpacity\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.reset}</Text>\n </TouchableOpacity>\n )}\n </Flex>\n )}\n\n {geoError && (\n <Flex\n flexDirection=\"column\"\n gap={4}\n p={12}\n borderRadius={6}\n borderWidth=\"1px\"\n borderColor=\"warning\"\n backgroundColor=\"warning.50\"\n >\n <Flex>{t.locationError}</Flex>\n </Flex>\n )}\n\n {helperText && !displayedError && (\n <Flex fontSize={12} opacity={0.7}>{helperText}</Flex>\n )}\n\n <InlineError error={displayedError}/>\n </Flex>\n );\n\n const interactive = !disabled && !readOnly && mapInteractions.length > 0;\n\n const MapView = (\n <Flex w=\"full\" minH={mapHeight ?? 240} position=\"relative\" flex={1}>\n <MapWrapper\n center={currentValue.center}\n radius={currentValue.radius}\n unit={currentValue.unit}\n interactive={interactive}\n setCenter={setCenter}\n setRadius={setRadius}\n render={renderMap}\n />\n {/* Custom absolute map buttons */}\n {showCurrentLocationButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'navigation'} color=\"#00A8B1\" />\n </TouchableOpacity>\n )}\n\n {showResetButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 56,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\" />\n </TouchableOpacity>\n )}\n\n {/* Floating slider — relocated off the input column, onto the map */}\n {floatSlider && (\n <View style={FLOATING_SLIDER_STYLE}>\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n </View>\n )}\n </Flex>\n );\n\n /* ─── Root ──────────────────────────────────────────────── */\n\n\n return (\n <Flex\n ref={rootRef}\n flexDirection=\"column\"\n w=\"full\"\n gap={8}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n data-name={name}\n data-size={size}\n testID={testID}\n >\n <Flex flexDirection={direction} gap={16} w=\"full\" alignItems=\"stretch\">\n\n\n <Flex flex={1} minW={0}>\n {hasMap ? MapView :<Flex flex={1} h={350} justifyContent={'center'} alignItems={'center'} backgroundColor={'#F3F4F6'}>\n <Text>No map library provided</Text>\n </Flex>}\n </Flex>\n <Flex flex={1} minW={0}>{InputView}</Flex>\n\n </Flex>\n </Flex>\n );\n};\n\nexport default RadiusPicker;\n"],"names":["DEFAULT_MIN","DEFAULT_MAX","DEFAULT_STEP","DEFAULT_PRESETS","DEFAULT_MAP_INTERACTIONS","DEFAULT_DEBOUNCE_MS","useMemo","DEFAULT_I18N","useToast","useDebouncedChange","useEffect","DEFAULT_CENTER","DEFAULT_RADIUS","getDefaultUnit","useRadiusPickerState","useCallback","useGeolocation","useRef","Flex","jsx","KitsInputLocation","jsxs","FieldLabel","RadiusSlider","PresetChips","NumericRadiusInput","UnitToggle","LatLngInput","TouchableOpacity","Icon","Text","InlineError","MapWrapper","View"],"mappings":"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"}
|
|
@@ -193,7 +193,7 @@ const RadiusPicker = (props) => {
|
|
|
193
193
|
{
|
|
194
194
|
id: name ? `${name}-location` : "radius-location",
|
|
195
195
|
provider: locationProvider ?? "google",
|
|
196
|
-
|
|
196
|
+
apiKey,
|
|
197
197
|
countryISO: searchCountryISO,
|
|
198
198
|
label: searchLabel,
|
|
199
199
|
placeholder: searchPlaceholder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadiusPicker.js","sources":["../../../../../src/form/inputs/RadiusPicker/RadiusPicker.tsx"],"sourcesContent":["import React, {useCallback, useEffect, useMemo, useRef} from \"react\";\nimport type {\n IRadiusPickerProps,\n KitsResponsiveValue,\n LatLng,\n RadiusPickerLayout,\n RadiusUnit,\n RadiusValue,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, Icon} from \"../../../_compat\";\nimport {Text} from \"../../../primitives\";\nimport {TouchableOpacity, View} from \"react-native\";\nimport {Navigation, RotateCcw} from \"lucide-react-native\";\nimport {useToast} from \"../../../hooks/useToast\";\nimport {\n DEFAULT_CENTER,\n DEFAULT_DEBOUNCE_MS,\n DEFAULT_I18N,\n DEFAULT_MAP_INTERACTIONS,\n DEFAULT_MAX,\n DEFAULT_MIN,\n DEFAULT_PRESETS,\n DEFAULT_RADIUS,\n DEFAULT_STEP,\n} from \"./constants\";\nimport {useDebouncedChange, useGeolocation, useRadiusPickerState} from \"./hooks\";\nimport {getDefaultUnit} from \"./utils/locale\";\nimport {RadiusSlider} from \"./components/RadiusSlider\";\nimport {PresetChips} from \"./components/PresetChips\";\nimport {NumericRadiusInput} from \"./components/NumericRadiusInput\";\nimport {UnitToggle} from \"./components/UnitToggle\";\nimport {LatLngInput} from \"./components/LatLngInput\";\nimport {ErrorMessage as InlineError} from \"./components/ErrorMessage\";\nimport {FieldLabel} from \"./components/FieldLabel\";\nimport {MapWrapper} from \"./components/MapWrapper\";\nimport KitsInputLocation from \"../InputLocation\";\n\n/* ─── Helpers for responsive scalar props ────────────────────── */\n\nconst pickStatic = <T,>(value: KitsResponsiveValue<T> | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === \"object\") {\n const v = value as Record<string, unknown> & {base?: T};\n if (\"base\" in v && v.base !== undefined) return v.base as T;\n for (const key of [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\", \"xxxl\"]) {\n if (v[key] !== undefined) return v[key] as T;\n }\n if (Array.isArray(value)) {\n const first = (value as T[]).find((x) => x !== undefined);\n if (first !== undefined) return first as T;\n }\n return fallback;\n }\n return value as T;\n};\n\n/* ─── Static styles (built once, outside render) ─────────────── */\n\nconst INLINE_ACTION_STYLE = {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n backgroundColor: \"#FFFFFF\",\n};\n\nconst FLOATING_SLIDER_STYLE = {\n position: \"absolute\" as const,\n left: 12,\n right: 12,\n bottom: 12,\n padding: 12,\n borderRadius: 12,\n backgroundColor: \"rgba(255,255,255,0.95)\",\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n shadowColor: \"#000000\",\n shadowOffset: {width: 0, height: 2},\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n};\n\n/* ─── Main component ─────────────────────────────────────────── */\n\nexport const RadiusPicker: React.FC<IRadiusPickerProps> = (props) => {\n const {\n value,\n defaultValue,\n onChange,\n\n layout = \"auto\",\n\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n step = DEFAULT_STEP,\n presets = DEFAULT_PRESETS,\n\n unit,\n\n name,\n disabled,\n readOnly,\n required,\n error: externalError,\n helperText,\n label,\n onBlur,\n onFocus,\n validate,\n\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n onLocationFound,\n onLocationError,\n\n renderMap,\n renderSearchBox,\n renderLocationButton,\n\n apiKey,\n locationProvider,\n searchCountryISO,\n searchPlaceholder,\n searchLabel,\n\n getCurrentLocation,\n\n showFloatingSlider = false,\n showPresets = true,\n showNumericInput = true,\n showUnitToggle = true,\n showLatLngInput = true,\n showCurrentLocationButton = true,\n showSearchBox = false,\n showResetButton = true,\n\n mapInteractions = DEFAULT_MAP_INTERACTIONS,\n\n i18n,\n\n size = \"base\",\n debounceMs = DEFAULT_DEBOUNCE_MS,\n testID,\n\n direction: directionProp,\n mapHeight,\n } = props;\n\n /* ─── i18n merge ─────────────────────────────────────────── */\n const t = useMemo(() => ({...DEFAULT_I18N, ...(i18n ?? {})}), [i18n]);\n\n /* ─── Display + layout: collapse responsive → static ─────── */\n const staticLayout = pickStatic<RadiusPickerLayout>(layout, \"auto\");\n\n /* ─── Toast (no-op when no provider mounted) ─────────────── */\n const {toast} = useToast();\n\n /* ─── Debounced onChange ─────────────────────────────────── */\n const {debounced: debouncedEmitChange, cancel: cancelDebouncedEmit} =\n useDebouncedChange<[RadiusValue]>(onChange, debounceMs);\n\n useEffect(() => () => cancelDebouncedEmit(), [cancelDebouncedEmit]);\n\n /* ─── Initial value: prefer explicit default, else seed ──── */\n const seededDefault = useMemo<RadiusValue>(() => {\n if (defaultValue) return defaultValue;\n return {\n center: DEFAULT_CENTER,\n radius: DEFAULT_RADIUS,\n unit: unit ?? getDefaultUnit(),\n };\n }, []);\n\n /* ─── Core state ─────────────────────────────────────────── */\n const {value: currentValue, setCenter, setRadius, setUnit, error: validationError} = useRadiusPickerState({\n value,\n defaultValue: seededDefault,\n unit,\n min,\n max,\n validate,\n onChange: debouncedEmitChange,\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n });\n\n /* ─── Geolocation ─────────────────────────────────────────── */\n const handleLocationSuccess = useCallback(\n (loc: LatLng) => {\n setCenter(loc);\n onLocationFound?.(loc);\n toast(\"success\", \"Location found\");\n },\n [setCenter, onLocationFound, toast],\n );\n\n const handleLocationError = useCallback(\n (err: Error) => {\n onLocationError?.(err);\n },\n [onLocationError],\n );\n\n const {loading: geoLoading, error: geoError, fetch: fetchLocation, clearError} = useGeolocation({\n getCurrentLocation,\n onSuccess: handleLocationSuccess,\n onError: handleLocationError,\n });\n\n const onUseMyLocation = useCallback(() => {\n if (disabled || readOnly) return;\n clearError();\n void fetchLocation();\n }, [disabled, readOnly, fetchLocation, clearError]);\n\n /* ─── Reset ─────────────────────────────────────────────── */\n const handleReset = useCallback(() => {\n if (disabled || readOnly) return;\n setCenter(seededDefault.center);\n setRadius(seededDefault.radius);\n if (seededDefault.unit !== currentValue.unit) {\n setUnit(seededDefault.unit, {convert: false});\n }\n toast(\"info\", t.reset);\n }, [disabled, readOnly, setCenter, setRadius, setUnit, seededDefault, currentValue.unit, toast, t.reset]);\n\n /* ─── Layout direction ──────────────────────────────────── */\n const direction: \"row\" | \"column\" = useMemo(() => {\n if (directionProp === \"vertical\") return \"column\";\n if (directionProp === \"horizontal\") return \"row\";\n if (staticLayout === \"horizontal\") return \"row\";\n if (staticLayout === \"vertical\") return \"column\";\n return \"row\";\n }, [staticLayout, directionProp]);\n\n /* ─── Composite error ───────────────────────────────────── */\n const displayedError = externalError ?? validationError;\n\n /* ─── Map presence drives layout ────────────────────────────\n No map shipped: when the caller provides no `renderMap`, the map\n column would otherwise reserve empty space with buttons floating over\n nothing. Collapse it and surface the location/reset actions inline so\n every toggle still has a visible effect. `showFloatingSlider` only\n applies when there is a map to float over. */\n const hasMap = Boolean(renderMap);\n const floatSlider = showFloatingSlider && hasMap;\n\n /* ─── Field blur/focus pass-through ─────────────────────── */\n const rootRef = useRef<any>(null);\n const handleFocusCapture = useCallback(() => onFocus?.(), [onFocus]);\n const handleBlurCapture = useCallback(() => onBlur?.(), [onBlur]);\n\n /* ─── Subviews ──────────────────────────────────────────── */\n\n const InputView = (\n <Flex flexDirection=\"column\" gap={12} w=\"full\">\n\n {showSearchBox && (renderSearchBox || apiKey) && (\n <Flex w=\"full\">\n {renderSearchBox ? (\n renderSearchBox({\n onSelect: ({lat, lng}) => setCenter({lat, lng}),\n })\n ) : (\n <KitsInputLocation\n id={name ? `${name}-location` : \"radius-location\"}\n provider={locationProvider ?? \"google\"}\n api_key={apiKey}\n countryISO={searchCountryISO}\n label={searchLabel}\n placeholder={searchPlaceholder}\n disabled={disabled || readOnly}\n onAddressClick={(addr) => {\n const {latitude, longitude} = addr as {\n latitude?: number | null;\n longitude?: number | null;\n };\n if (\n typeof latitude === \"number\" &&\n typeof longitude === \"number\"\n ) {\n setCenter({lat: latitude, lng: longitude});\n }\n }}\n />\n )}\n </Flex>\n )}\n\n <Flex flexDirection=\"column\" gap={6}>\n <FieldLabel label={label} required={required} htmlFor={name}/>\n {!floatSlider && (\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n )}\n </Flex>\n\n {showPresets && presets?.length > 0 && (\n <PresetChips\n presets={presets}\n value={currentValue.radius}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onSelect={setRadius}\n />\n )}\n\n {(showNumericInput || showUnitToggle) && (\n <Flex flexDirection=\"row\" gap={8} alignItems=\"flex-end\" flexWrap=\"wrap\">\n {showNumericInput && (\n <Flex flex={1} minW={120}>\n <NumericRadiusInput\n value={currentValue.radius}\n unit={currentValue.unit}\n min={min}\n max={max}\n disabled={disabled}\n readOnly={readOnly}\n label={t.radius}\n onCommit={setRadius}\n />\n </Flex>\n )}\n {showUnitToggle && (\n <UnitToggle\n value={currentValue.unit as RadiusUnit}\n disabled={disabled || readOnly}\n onChange={(u) => setUnit(u)}\n />\n )}\n </Flex>\n )}\n\n {showLatLngInput && (\n <LatLngInput\n value={currentValue.center}\n disabled={disabled}\n readOnly={readOnly}\n labels={{lat: t.lat, lng: t.lng}}\n onCommit={setCenter}\n />\n )}\n\n\n\n {/* Inline actions — only when there's no map to anchor the\n floating map buttons to (otherwise they live over the map). */}\n {!hasMap && (showCurrentLocationButton || showResetButton) && (\n <Flex flexDirection=\"row\" gap={8} flexWrap=\"wrap\">\n {showCurrentLocationButton && (\n <TouchableOpacity\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'navigation'} color=\"#00A8B1\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.useMyLocation}</Text>\n </TouchableOpacity>\n )}\n {showResetButton && (\n <TouchableOpacity\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.reset}</Text>\n </TouchableOpacity>\n )}\n </Flex>\n )}\n\n {geoError && (\n <Flex\n flexDirection=\"column\"\n gap={4}\n p={12}\n borderRadius={6}\n borderWidth=\"1px\"\n borderColor=\"warning\"\n backgroundColor=\"warning.50\"\n >\n <Flex>{t.locationError}</Flex>\n </Flex>\n )}\n\n {helperText && !displayedError && (\n <Flex fontSize={12} opacity={0.7}>{helperText}</Flex>\n )}\n\n <InlineError error={displayedError}/>\n </Flex>\n );\n\n const interactive = !disabled && !readOnly && mapInteractions.length > 0;\n\n const MapView = (\n <Flex w=\"full\" minH={mapHeight ?? 240} position=\"relative\" flex={1}>\n <MapWrapper\n center={currentValue.center}\n radius={currentValue.radius}\n unit={currentValue.unit}\n interactive={interactive}\n setCenter={setCenter}\n setRadius={setRadius}\n render={renderMap}\n />\n {/* Custom absolute map buttons */}\n {showCurrentLocationButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'navigation'} color=\"#00A8B1\" />\n </TouchableOpacity>\n )}\n\n {showResetButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 56,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\" />\n </TouchableOpacity>\n )}\n\n {/* Floating slider — relocated off the input column, onto the map */}\n {floatSlider && (\n <View style={FLOATING_SLIDER_STYLE}>\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n </View>\n )}\n </Flex>\n );\n\n /* ─── Root ──────────────────────────────────────────────── */\n\n\n return (\n <Flex\n ref={rootRef}\n flexDirection=\"column\"\n w=\"full\"\n gap={8}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n data-name={name}\n data-size={size}\n testID={testID}\n >\n <Flex flexDirection={direction} gap={16} w=\"full\" alignItems=\"stretch\">\n\n\n <Flex flex={1} minW={0}>\n {hasMap ? MapView :<Flex flex={1} h={350} justifyContent={'center'} alignItems={'center'} backgroundColor={'#F3F4F6'}>\n <Text>No map library provided</Text>\n </Flex>}\n </Flex>\n <Flex flex={1} minW={0}>{InputView}</Flex>\n\n </Flex>\n </Flex>\n );\n};\n\nexport default RadiusPicker;\n"],"names":["InlineError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RadiusPicker.js","sources":["../../../../../src/form/inputs/RadiusPicker/RadiusPicker.tsx"],"sourcesContent":["import React, {useCallback, useEffect, useMemo, useRef} from \"react\";\nimport type {\n IRadiusPickerProps,\n KitsResponsiveValue,\n LatLng,\n RadiusPickerLayout,\n RadiusUnit,\n RadiusValue,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, Icon} from \"../../../_compat\";\nimport {Text} from \"../../../primitives\";\nimport {TouchableOpacity, View} from \"react-native\";\nimport {Navigation, RotateCcw} from \"lucide-react-native\";\nimport {useToast} from \"../../../hooks/useToast\";\nimport {\n DEFAULT_CENTER,\n DEFAULT_DEBOUNCE_MS,\n DEFAULT_I18N,\n DEFAULT_MAP_INTERACTIONS,\n DEFAULT_MAX,\n DEFAULT_MIN,\n DEFAULT_PRESETS,\n DEFAULT_RADIUS,\n DEFAULT_STEP,\n} from \"./constants\";\nimport {useDebouncedChange, useGeolocation, useRadiusPickerState} from \"./hooks\";\nimport {getDefaultUnit} from \"./utils/locale\";\nimport {RadiusSlider} from \"./components/RadiusSlider\";\nimport {PresetChips} from \"./components/PresetChips\";\nimport {NumericRadiusInput} from \"./components/NumericRadiusInput\";\nimport {UnitToggle} from \"./components/UnitToggle\";\nimport {LatLngInput} from \"./components/LatLngInput\";\nimport {ErrorMessage as InlineError} from \"./components/ErrorMessage\";\nimport {FieldLabel} from \"./components/FieldLabel\";\nimport {MapWrapper} from \"./components/MapWrapper\";\nimport KitsInputLocation from \"../InputLocation\";\n\n/* ─── Helpers for responsive scalar props ────────────────────── */\n\nconst pickStatic = <T,>(value: KitsResponsiveValue<T> | undefined, fallback: T): T => {\n if (value === undefined || value === null) return fallback;\n if (typeof value === \"object\") {\n const v = value as Record<string, unknown> & {base?: T};\n if (\"base\" in v && v.base !== undefined) return v.base as T;\n for (const key of [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\", \"xxxl\"]) {\n if (v[key] !== undefined) return v[key] as T;\n }\n if (Array.isArray(value)) {\n const first = (value as T[]).find((x) => x !== undefined);\n if (first !== undefined) return first as T;\n }\n return fallback;\n }\n return value as T;\n};\n\n/* ─── Static styles (built once, outside render) ─────────────── */\n\nconst INLINE_ACTION_STYLE = {\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n gap: 6,\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 8,\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n backgroundColor: \"#FFFFFF\",\n};\n\nconst FLOATING_SLIDER_STYLE = {\n position: \"absolute\" as const,\n left: 12,\n right: 12,\n bottom: 12,\n padding: 12,\n borderRadius: 12,\n backgroundColor: \"rgba(255,255,255,0.95)\",\n borderWidth: 1,\n borderColor: \"#E5E7EB\",\n shadowColor: \"#000000\",\n shadowOffset: {width: 0, height: 2},\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n};\n\n/* ─── Main component ─────────────────────────────────────────── */\n\nexport const RadiusPicker: React.FC<IRadiusPickerProps> = (props) => {\n const {\n value,\n defaultValue,\n onChange,\n\n layout = \"auto\",\n\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n step = DEFAULT_STEP,\n presets = DEFAULT_PRESETS,\n\n unit,\n\n name,\n disabled,\n readOnly,\n required,\n error: externalError,\n helperText,\n label,\n onBlur,\n onFocus,\n validate,\n\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n onLocationFound,\n onLocationError,\n\n renderMap,\n renderSearchBox,\n renderLocationButton,\n\n apiKey,\n locationProvider,\n searchCountryISO,\n searchPlaceholder,\n searchLabel,\n\n getCurrentLocation,\n\n showFloatingSlider = false,\n showPresets = true,\n showNumericInput = true,\n showUnitToggle = true,\n showLatLngInput = true,\n showCurrentLocationButton = true,\n showSearchBox = false,\n showResetButton = true,\n\n mapInteractions = DEFAULT_MAP_INTERACTIONS,\n\n i18n,\n\n size = \"base\",\n debounceMs = DEFAULT_DEBOUNCE_MS,\n testID,\n\n direction: directionProp,\n mapHeight,\n } = props;\n\n /* ─── i18n merge ─────────────────────────────────────────── */\n const t = useMemo(() => ({...DEFAULT_I18N, ...(i18n ?? {})}), [i18n]);\n\n /* ─── Display + layout: collapse responsive → static ─────── */\n const staticLayout = pickStatic<RadiusPickerLayout>(layout, \"auto\");\n\n /* ─── Toast (no-op when no provider mounted) ─────────────── */\n const {toast} = useToast();\n\n /* ─── Debounced onChange ─────────────────────────────────── */\n const {debounced: debouncedEmitChange, cancel: cancelDebouncedEmit} =\n useDebouncedChange<[RadiusValue]>(onChange, debounceMs);\n\n useEffect(() => () => cancelDebouncedEmit(), [cancelDebouncedEmit]);\n\n /* ─── Initial value: prefer explicit default, else seed ──── */\n const seededDefault = useMemo<RadiusValue>(() => {\n if (defaultValue) return defaultValue;\n return {\n center: DEFAULT_CENTER,\n radius: DEFAULT_RADIUS,\n unit: unit ?? getDefaultUnit(),\n };\n }, []);\n\n /* ─── Core state ─────────────────────────────────────────── */\n const {value: currentValue, setCenter, setRadius, setUnit, error: validationError} = useRadiusPickerState({\n value,\n defaultValue: seededDefault,\n unit,\n min,\n max,\n validate,\n onChange: debouncedEmitChange,\n onCenterChange,\n onRadiusChange,\n onUnitChange,\n });\n\n /* ─── Geolocation ─────────────────────────────────────────── */\n const handleLocationSuccess = useCallback(\n (loc: LatLng) => {\n setCenter(loc);\n onLocationFound?.(loc);\n toast(\"success\", \"Location found\");\n },\n [setCenter, onLocationFound, toast],\n );\n\n const handleLocationError = useCallback(\n (err: Error) => {\n onLocationError?.(err);\n },\n [onLocationError],\n );\n\n const {loading: geoLoading, error: geoError, fetch: fetchLocation, clearError} = useGeolocation({\n getCurrentLocation,\n onSuccess: handleLocationSuccess,\n onError: handleLocationError,\n });\n\n const onUseMyLocation = useCallback(() => {\n if (disabled || readOnly) return;\n clearError();\n void fetchLocation();\n }, [disabled, readOnly, fetchLocation, clearError]);\n\n /* ─── Reset ─────────────────────────────────────────────── */\n const handleReset = useCallback(() => {\n if (disabled || readOnly) return;\n setCenter(seededDefault.center);\n setRadius(seededDefault.radius);\n if (seededDefault.unit !== currentValue.unit) {\n setUnit(seededDefault.unit, {convert: false});\n }\n toast(\"info\", t.reset);\n }, [disabled, readOnly, setCenter, setRadius, setUnit, seededDefault, currentValue.unit, toast, t.reset]);\n\n /* ─── Layout direction ──────────────────────────────────── */\n const direction: \"row\" | \"column\" = useMemo(() => {\n if (directionProp === \"vertical\") return \"column\";\n if (directionProp === \"horizontal\") return \"row\";\n if (staticLayout === \"horizontal\") return \"row\";\n if (staticLayout === \"vertical\") return \"column\";\n return \"row\";\n }, [staticLayout, directionProp]);\n\n /* ─── Composite error ───────────────────────────────────── */\n const displayedError = externalError ?? validationError;\n\n /* ─── Map presence drives layout ────────────────────────────\n No map shipped: when the caller provides no `renderMap`, the map\n column would otherwise reserve empty space with buttons floating over\n nothing. Collapse it and surface the location/reset actions inline so\n every toggle still has a visible effect. `showFloatingSlider` only\n applies when there is a map to float over. */\n const hasMap = Boolean(renderMap);\n const floatSlider = showFloatingSlider && hasMap;\n\n /* ─── Field blur/focus pass-through ─────────────────────── */\n const rootRef = useRef<any>(null);\n const handleFocusCapture = useCallback(() => onFocus?.(), [onFocus]);\n const handleBlurCapture = useCallback(() => onBlur?.(), [onBlur]);\n\n /* ─── Subviews ──────────────────────────────────────────── */\n\n const InputView = (\n <Flex flexDirection=\"column\" gap={12} w=\"full\">\n\n {showSearchBox && (renderSearchBox || apiKey) && (\n <Flex w=\"full\">\n {renderSearchBox ? (\n renderSearchBox({\n onSelect: ({lat, lng}) => setCenter({lat, lng}),\n })\n ) : (\n <KitsInputLocation\n id={name ? `${name}-location` : \"radius-location\"}\n provider={locationProvider ?? \"google\"}\n apiKey={apiKey}\n countryISO={searchCountryISO}\n label={searchLabel}\n placeholder={searchPlaceholder}\n disabled={disabled || readOnly}\n onAddressClick={(addr) => {\n const {latitude, longitude} = addr as {\n latitude?: number | null;\n longitude?: number | null;\n };\n if (\n typeof latitude === \"number\" &&\n typeof longitude === \"number\"\n ) {\n setCenter({lat: latitude, lng: longitude});\n }\n }}\n />\n )}\n </Flex>\n )}\n\n <Flex flexDirection=\"column\" gap={6}>\n <FieldLabel label={label} required={required} htmlFor={name}/>\n {!floatSlider && (\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n )}\n </Flex>\n\n {showPresets && presets?.length > 0 && (\n <PresetChips\n presets={presets}\n value={currentValue.radius}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onSelect={setRadius}\n />\n )}\n\n {(showNumericInput || showUnitToggle) && (\n <Flex flexDirection=\"row\" gap={8} alignItems=\"flex-end\" flexWrap=\"wrap\">\n {showNumericInput && (\n <Flex flex={1} minW={120}>\n <NumericRadiusInput\n value={currentValue.radius}\n unit={currentValue.unit}\n min={min}\n max={max}\n disabled={disabled}\n readOnly={readOnly}\n label={t.radius}\n onCommit={setRadius}\n />\n </Flex>\n )}\n {showUnitToggle && (\n <UnitToggle\n value={currentValue.unit as RadiusUnit}\n disabled={disabled || readOnly}\n onChange={(u) => setUnit(u)}\n />\n )}\n </Flex>\n )}\n\n {showLatLngInput && (\n <LatLngInput\n value={currentValue.center}\n disabled={disabled}\n readOnly={readOnly}\n labels={{lat: t.lat, lng: t.lng}}\n onCommit={setCenter}\n />\n )}\n\n\n\n {/* Inline actions — only when there's no map to anchor the\n floating map buttons to (otherwise they live over the map). */}\n {!hasMap && (showCurrentLocationButton || showResetButton) && (\n <Flex flexDirection=\"row\" gap={8} flexWrap=\"wrap\">\n {showCurrentLocationButton && (\n <TouchableOpacity\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'navigation'} color=\"#00A8B1\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.useMyLocation}</Text>\n </TouchableOpacity>\n )}\n {showResetButton && (\n <TouchableOpacity\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n style={INLINE_ACTION_STYLE}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\"/>\n <Text fontSize={13} color=\"text.secondary\">{t.reset}</Text>\n </TouchableOpacity>\n )}\n </Flex>\n )}\n\n {geoError && (\n <Flex\n flexDirection=\"column\"\n gap={4}\n p={12}\n borderRadius={6}\n borderWidth=\"1px\"\n borderColor=\"warning\"\n backgroundColor=\"warning.50\"\n >\n <Flex>{t.locationError}</Flex>\n </Flex>\n )}\n\n {helperText && !displayedError && (\n <Flex fontSize={12} opacity={0.7}>{helperText}</Flex>\n )}\n\n <InlineError error={displayedError}/>\n </Flex>\n );\n\n const interactive = !disabled && !readOnly && mapInteractions.length > 0;\n\n const MapView = (\n <Flex w=\"full\" minH={mapHeight ?? 240} position=\"relative\" flex={1}>\n <MapWrapper\n center={currentValue.center}\n radius={currentValue.radius}\n unit={currentValue.unit}\n interactive={interactive}\n setCenter={setCenter}\n setRadius={setRadius}\n render={renderMap}\n />\n {/* Custom absolute map buttons */}\n {showCurrentLocationButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={onUseMyLocation}\n disabled={geoLoading || disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'navigation'} color=\"#00A8B1\" />\n </TouchableOpacity>\n )}\n\n {showResetButton && (\n <TouchableOpacity\n style={{\n position: 'absolute',\n top: 56,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: '#FFFFFF',\n borderWidth: 1,\n borderColor: '#E5E7EB',\n justifyContent: 'center',\n alignItems: 'center',\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n }}\n onPress={handleReset}\n disabled={disabled || readOnly}\n activeOpacity={0.7}\n >\n <Icon name={'rotate-ccw'} color=\"#4B5563\" />\n </TouchableOpacity>\n )}\n\n {/* Floating slider — relocated off the input column, onto the map */}\n {floatSlider && (\n <View style={FLOATING_SLIDER_STYLE}>\n <RadiusSlider\n value={currentValue.radius}\n min={min}\n max={max}\n step={step}\n unit={currentValue.unit}\n disabled={disabled || readOnly}\n onChange={setRadius}\n />\n </View>\n )}\n </Flex>\n );\n\n /* ─── Root ──────────────────────────────────────────────── */\n\n\n return (\n <Flex\n ref={rootRef}\n flexDirection=\"column\"\n w=\"full\"\n gap={8}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n data-name={name}\n data-size={size}\n testID={testID}\n >\n <Flex flexDirection={direction} gap={16} w=\"full\" alignItems=\"stretch\">\n\n\n <Flex flex={1} minW={0}>\n {hasMap ? MapView :<Flex flex={1} h={350} justifyContent={'center'} alignItems={'center'} backgroundColor={'#F3F4F6'}>\n <Text>No map library provided</Text>\n </Flex>}\n </Flex>\n <Flex flex={1} minW={0}>{InputView}</Flex>\n\n </Flex>\n </Flex>\n );\n};\n\nexport default RadiusPicker;\n"],"names":["InlineError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,UAAA,GAAa,CAAK,KAAA,EAA2C,QAAA,KAAmB;AAClF,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,QAAA;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,IAAI,UAAU,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,MAAA,SAAkB,CAAA,CAAE,IAAA;AAClD,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA,EAAG;AAC7D,MAAA,IAAI,EAAE,GAAG,CAAA,KAAM,MAAA,EAAW,OAAO,EAAE,GAAG,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,MAAM,QAAS,KAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,MAAM,MAAS,CAAA;AACxD,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAAA,IACpC;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACX,CAAA;AAIA,MAAM,mBAAA,GAAsB;AAAA,EACxB,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,CAAA;AAAA,EACL,eAAA,EAAiB,CAAA;AAAA,EACjB,iBAAA,EAAmB,EAAA;AAAA,EACnB,YAAA,EAAc,CAAA;AAAA,EACd,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,eAAA,EAAiB;AACrB,CAAA;AAEA,MAAM,qBAAA,GAAwB;AAAA,EAC1B,QAAA,EAAU,UAAA;AAAA,EACV,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,YAAA,EAAc,EAAA;AAAA,EACd,eAAA,EAAiB,wBAAA;AAAA,EACjB,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,EAAC,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAC;AAAA,EAClC,aAAA,EAAe,GAAA;AAAA,EACf,YAAA,EAAc,CAAA;AAAA,EACd,SAAA,EAAW;AACf,CAAA;AAIO,MAAM,YAAA,GAA6C,CAAC,KAAA,KAAU;AACjE,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IAEA,MAAA,GAAS,MAAA;AAAA,IAET,GAAA,GAAM,WAAA;AAAA,IACN,GAAA,GAAM,WAAA;AAAA,IACN,IAAA,GAAO,YAAA;AAAA,IACP,OAAA,GAAU,eAAA;AAAA,IAEV,IAAA;AAAA,IAEA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,UAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IAEA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IAEA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,oBAAA;AAAA,IAEA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IAEA,kBAAA;AAAA,IAEA,kBAAA,GAAqB,KAAA;AAAA,IACrB,WAAA,GAAc,IAAA;AAAA,IACd,gBAAA,GAAmB,IAAA;AAAA,IACnB,cAAA,GAAiB,IAAA;AAAA,IACjB,eAAA,GAAkB,IAAA;AAAA,IAClB,yBAAA,GAA4B,IAAA;AAAA,IAC5B,aAAA,GAAgB,KAAA;AAAA,IAChB,eAAA,GAAkB,IAAA;AAAA,IAElB,eAAA,GAAkB,wBAAA;AAAA,IAElB,IAAA;AAAA,IAEA,IAAA,GAAO,MAAA;AAAA,IACP,UAAA,GAAa,mBAAA;AAAA,IACb,MAAA;AAAA,IAEA,SAAA,EAAW,aAAA;AAAA,IACX;AAAA,GACJ,GAAI,KAAA;AAGJ,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAO,EAAC,GAAG,YAAA,EAAc,GAAI,IAAA,IAAQ,EAAC,EAAE,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA;AAGpE,EAAA,MAAM,YAAA,GAAe,UAAA,CAA+B,MAAA,EAAQ,MAAM,CAAA;AAGlE,EAAA,MAAM,EAAC,KAAA,EAAK,GAAI,QAAA,EAAS;AAGzB,EAAA,MAAM,EAAC,WAAW,mBAAA,EAAqB,MAAA,EAAQ,qBAAmB,GAC9D,kBAAA,CAAkC,UAAU,UAAU,CAAA;AAE1D,EAAA,SAAA,CAAU,MAAM,MAAM,mBAAA,EAAoB,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAGlE,EAAA,MAAM,aAAA,GAAgB,QAAqB,MAAM;AAC7C,IAAA,IAAI,cAAc,OAAO,YAAA;AACzB,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ,cAAA;AAAA,MACR,IAAA,EAAM,QAAQ,cAAA;AAAe,KACjC;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,EAAC,OAAO,YAAA,EAAc,SAAA,EAAW,WAAW,OAAA,EAAS,KAAA,EAAO,eAAA,EAAe,GAAI,oBAAA,CAAqB;AAAA,IACtG,KAAA;AAAA,IACA,YAAA,EAAc,aAAA;AAAA,IACd,IAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,mBAAA;AAAA,IACV,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACH,CAAA;AAGD,EAAA,MAAM,qBAAA,GAAwB,WAAA;AAAA,IAC1B,CAAC,GAAA,KAAgB;AACb,MAAA,SAAA,CAAU,GAAG,CAAA;AACb,MAAA,eAAA,GAAkB,GAAG,CAAA;AACrB,MAAA,KAAA,CAAM,WAAW,gBAAgB,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,eAAA,EAAiB,KAAK;AAAA,GACtC;AAEA,EAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,IACxB,CAAC,GAAA,KAAe;AACZ,MAAA,eAAA,GAAkB,GAAG,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GACpB;AAEA,EAAA,MAAM,EAAC,SAAS,UAAA,EAAY,KAAA,EAAO,UAAU,KAAA,EAAO,aAAA,EAAe,UAAA,EAAU,GAAI,cAAA,CAAe;AAAA,IAC5F,kBAAA;AAAA,IACA,SAAA,EAAW,qBAAA;AAAA,IACX,OAAA,EAAS;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACtC,IAAA,IAAI,YAAY,QAAA,EAAU;AAC1B,IAAA,UAAA,EAAW;AACX,IAAA,KAAK,aAAA,EAAc;AAAA,EACvB,GAAG,CAAC,QAAA,EAAU,QAAA,EAAU,aAAA,EAAe,UAAU,CAAC,CAAA;AAGlD,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AAClC,IAAA,IAAI,YAAY,QAAA,EAAU;AAC1B,IAAA,SAAA,CAAU,cAAc,MAAM,CAAA;AAC9B,IAAA,SAAA,CAAU,cAAc,MAAM,CAAA;AAC9B,IAAA,IAAI,aAAA,CAAc,IAAA,KAAS,YAAA,CAAa,IAAA,EAAM;AAC1C,MAAA,OAAA,CAAQ,aAAA,CAAc,IAAA,EAAM,EAAC,OAAA,EAAS,OAAM,CAAA;AAAA,IAChD;AACA,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAE,KAAK,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,aAAA,EAAe,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAGxG,EAAA,MAAM,SAAA,GAA8B,QAAQ,MAAM;AAC9C,IAAA,IAAI,aAAA,KAAkB,YAAY,OAAO,QAAA;AACzC,IAAA,IAAI,aAAA,KAAkB,cAAc,OAAO,KAAA;AAC3C,IAAA,IAAI,YAAA,KAAiB,cAAc,OAAO,KAAA;AAC1C,IAAA,IAAI,YAAA,KAAiB,YAAY,OAAO,QAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACX,CAAA,EAAG,CAAC,YAAA,EAAc,aAAa,CAAC,CAAA;AAGhC,EAAA,MAAM,iBAAiB,aAAA,IAAiB,eAAA;AAQxC,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChC,EAAA,MAAM,cAAc,kBAAA,IAAsB,MAAA;AAG1C,EAAA,MAAM,OAAA,GAAU,OAAY,IAAI,CAAA;AAChC,EAAA,MAAM,qBAAqB,WAAA,CAAY,MAAM,WAAU,EAAG,CAAC,OAAO,CAAC,CAAA;AACnE,EAAA,MAAM,oBAAoB,WAAA,CAAY,MAAM,UAAS,EAAG,CAAC,MAAM,CAAC,CAAA;AAIhE,EAAA,MAAM,SAAA,wBACD,IAAA,EAAA,EAAK,aAAA,EAAc,UAAS,GAAA,EAAK,EAAA,EAAI,GAAE,MAAA,EAEnC,QAAA,EAAA;AAAA,IAAA,aAAA,KAAkB,mBAAmB,MAAA,CAAA,oBAClC,GAAA,CAAC,QAAK,CAAA,EAAE,MAAA,EACH,4BACG,eAAA,CAAgB;AAAA,MACZ,QAAA,EAAU,CAAC,EAAC,GAAA,EAAK,GAAA,OAAS,SAAA,CAAU,EAAC,GAAA,EAAK,GAAA,EAAI;AAAA,KACjD,CAAA,mBAED,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACG,EAAA,EAAI,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,SAAA,CAAA,GAAc,iBAAA;AAAA,QAChC,UAAU,gBAAA,IAAoB,QAAA;AAAA,QAC9B,MAAA;AAAA,QACA,UAAA,EAAY,gBAAA;AAAA,QACZ,KAAA,EAAO,WAAA;AAAA,QACP,WAAA,EAAa,iBAAA;AAAA,QACb,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,cAAA,EAAgB,CAAC,IAAA,KAAS;AACtB,UAAA,MAAM,EAAC,QAAA,EAAU,SAAA,EAAS,GAAI,IAAA;AAI9B,UAAA,IACI,OAAO,QAAA,KAAa,QAAA,IACpB,OAAO,cAAc,QAAA,EACvB;AACE,YAAA,SAAA,CAAU,EAAC,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,WAAU,CAAA;AAAA,UAC7C;AAAA,QACJ;AAAA;AAAA,KACJ,EAER,CAAA;AAAA,oBAGJ,IAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAc,QAAA,EAAS,KAAK,CAAA,EAC9B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAc,QAAA,EAAoB,OAAA,EAAS,IAAA,EAAK,CAAA;AAAA,MAC3D,CAAC,WAAA,oBACE,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,GAAA;AAAA,UACA,GAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,QAAA,EAAU;AAAA;AAAA;AACd,KAAA,EAER,CAAA;AAAA,IAEC,WAAA,IAAe,OAAA,EAAS,MAAA,GAAS,CAAA,oBAC9B,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACG,OAAA;AAAA,QACA,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA,KACd;AAAA,IAAA,CAGF,gBAAA,IAAoB,cAAA,qBAClB,IAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAc,KAAA,EAAM,GAAA,EAAK,CAAA,EAAG,UAAA,EAAW,UAAA,EAAW,QAAA,EAAS,MAAA,EAC5D,QAAA,EAAA;AAAA,MAAA,gBAAA,oBACG,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,MAAM,GAAA,EACjB,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,GAAA;AAAA,UACA,GAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAO,CAAA,CAAE,MAAA;AAAA,UACT,QAAA,EAAU;AAAA;AAAA,OACd,EACJ,CAAA;AAAA,MAEH,cAAA,oBACG,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACG,OAAO,YAAA,CAAa,IAAA;AAAA,UACpB,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,QAAA,EAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC;AAAA;AAAA;AAC9B,KAAA,EAER,CAAA;AAAA,IAGH,eAAA,oBACG,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACG,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,QAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,EAAC,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,EAAK,EAAE,GAAA,EAAG;AAAA,QAC/B,QAAA,EAAU;AAAA;AAAA,KACd;AAAA,IAOH,CAAC,MAAA,KAAW,yBAAA,IAA6B,eAAA,CAAA,oBACtC,IAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAc,KAAA,EAAM,GAAA,EAAK,CAAA,EAAG,QAAA,EAAS,MAAA,EACtC,QAAA,EAAA;AAAA,MAAA,yBAAA,oBACG,IAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACG,OAAA,EAAS,eAAA;AAAA,UACT,QAAA,EAAU,cAAc,QAAA,IAAY,QAAA;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,KAAA,EAAO,mBAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,KAAA,EAAM,SAAA,EAAS,CAAA;AAAA,gCACxC,IAAA,EAAA,EAAK,QAAA,EAAU,IAAI,KAAA,EAAM,gBAAA,EAAkB,YAAE,aAAA,EAAc;AAAA;AAAA;AAAA,OAChE;AAAA,MAEH,eAAA,oBACG,IAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACG,OAAA,EAAS,WAAA;AAAA,UACT,UAAU,QAAA,IAAY,QAAA;AAAA,UACtB,aAAA,EAAe,GAAA;AAAA,UACf,KAAA,EAAO,mBAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,KAAA,EAAM,SAAA,EAAS,CAAA;AAAA,gCACxC,IAAA,EAAA,EAAK,QAAA,EAAU,IAAI,KAAA,EAAM,gBAAA,EAAkB,YAAE,KAAA,EAAM;AAAA;AAAA;AAAA;AACxD,KAAA,EAER,CAAA;AAAA,IAGH,QAAA,oBACG,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAc,QAAA;AAAA,QACd,GAAA,EAAK,CAAA;AAAA,QACL,CAAA,EAAG,EAAA;AAAA,QACH,YAAA,EAAc,CAAA;AAAA,QACd,WAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAY,SAAA;AAAA,QACZ,eAAA,EAAgB,YAAA;AAAA,QAEhB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,aAAA,EAAc;AAAA;AAAA,KAC3B;AAAA,IAGH,UAAA,IAAc,CAAC,cAAA,oBACZ,GAAA,CAAC,QAAK,QAAA,EAAU,EAAA,EAAI,OAAA,EAAS,GAAA,EAAM,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,oBAGlD,GAAA,CAACA,YAAA,EAAA,EAAY,KAAA,EAAO,cAAA,EAAe;AAAA,GAAA,EACvC,CAAA;AAGJ,EAAA,MAAM,cAAc,CAAC,QAAA,IAAY,CAAC,QAAA,IAAY,gBAAgB,MAAA,GAAS,CAAA;AAEvE,EAAA,MAAM,OAAA,mBACF,IAAA,CAAC,IAAA,EAAA,EAAK,CAAA,EAAE,MAAA,EAAO,IAAA,EAAM,SAAA,IAAa,GAAA,EAAK,QAAA,EAAS,UAAA,EAAW,IAAA,EAAM,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACG,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,WAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACZ;AAAA,IAEC,yBAAA,oBACG,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,EAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,YAAA,EAAc,EAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,SAAA;AAAA,UACb,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,QAAA;AAAA,UACZ,WAAA,EAAa,SAAA;AAAA,UACb,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,YAAA,EAAc,CAAA;AAAA,UACd,SAAA,EAAW;AAAA,SACf;AAAA,QACA,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,cAAc,QAAA,IAAY,QAAA;AAAA,QACpC,aAAA,EAAe,GAAA;AAAA,QAEf,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,OAAM,SAAA,EAAU;AAAA;AAAA,KAC9C;AAAA,IAGH,eAAA,oBACG,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,EAAA;AAAA,UACL,KAAA,EAAO,EAAA;AAAA,UACP,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,YAAA,EAAc,EAAA;AAAA,UACd,eAAA,EAAiB,SAAA;AAAA,UACjB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,SAAA;AAAA,UACb,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,QAAA;AAAA,UACZ,WAAA,EAAa,SAAA;AAAA,UACb,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,UACpC,aAAA,EAAe,GAAA;AAAA,UACf,YAAA,EAAc,CAAA;AAAA,UACd,SAAA,EAAW;AAAA,SACf;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,aAAA,EAAe,GAAA;AAAA,QAEf,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,YAAA,EAAc,OAAM,SAAA,EAAU;AAAA;AAAA,KAC9C;AAAA,IAIH,WAAA,oBACG,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,qBAAA,EACT,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACG,OAAO,YAAA,CAAa,MAAA;AAAA,QACpB,GAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,UAAU,QAAA,IAAY,QAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA,KACd,EACJ;AAAA,GAAA,EAER,CAAA;AAMJ,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,OAAA;AAAA,MACL,aAAA,EAAc,QAAA;AAAA,MACd,CAAA,EAAE,MAAA;AAAA,MACF,GAAA,EAAK,CAAA;AAAA,MACL,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,iBAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAW,IAAA;AAAA,MACX,MAAA;AAAA,MAEA,QAAA,kBAAA,IAAA,CAAC,QAAK,aAAA,EAAe,SAAA,EAAW,KAAK,EAAA,EAAI,CAAA,EAAE,MAAA,EAAO,UAAA,EAAW,SAAA,EAGzD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAM,CAAA,EAAG,IAAA,EAAM,GAChB,QAAA,EAAA,MAAA,GAAS,OAAA,mBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,GAAG,GAAA,EAAK,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,eAAA,EAAiB,WACvG,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAA,yBAAA,EAAuB,CAAA,EACjC,CAAA,EACJ,CAAA;AAAA,4BACC,IAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,GAAI,QAAA,EAAA,SAAA,EAAU;AAAA,OAAA,EAEvC;AAAA;AAAA,GACJ;AAER;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Location/index.tsx"],"sourcesContent":["// components/fields/Location.tsx\n\nimport React from 'react';\nimport type{FieldValues} from 'react-hook-form';\n\n// Using your specified import paths\nimport type{ILocation, UseFieldLogicElementProps} from '@lmb-it/kitsconcerto-types';\nimport {KitsInputLocation} from \"../../../../_compat\";\n\n/**\n * Renders a location/address search input.\n * All logic is handled by the useFieldLogic hook, making this a simple, declarative component.\n */\nexport const Location = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic, groupField\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n hideError,\n isRequired,\n helperText,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n // 2. Cast the element to its specific type to access unique properties.\n const locationElement = element as ILocation<T>;\n const {\n apiKey,\n provider,\n countryISO,\n forceSelection = true, // Default to true as in the original\n onAddressClick,\n } = locationElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsInputLocation\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n attached={attached}\n\n list={[]}\n // --- Props from the element definition ---\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Location/index.tsx"],"sourcesContent":["// components/fields/Location.tsx\n\nimport React from 'react';\nimport type{FieldValues} from 'react-hook-form';\n\n// Using your specified import paths\nimport type{ILocation, UseFieldLogicElementProps} from '@lmb-it/kitsconcerto-types';\nimport {KitsInputLocation} from \"../../../../_compat\";\n\n/**\n * Renders a location/address search input.\n * All logic is handled by the useFieldLogic hook, making this a simple, declarative component.\n */\nexport const Location = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic, groupField\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n hideError,\n isRequired,\n helperText,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n // 2. Cast the element to its specific type to access unique properties.\n const locationElement = element as ILocation<T>;\n const {\n apiKey,\n provider,\n countryISO,\n forceSelection = true, // Default to true as in the original\n onAddressClick,\n } = locationElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsInputLocation\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n attached={attached}\n\n list={[]}\n // --- Props from the element definition ---\n apiKey={apiKey}\n provider={provider}\n countryISO={countryISO}\n forceSelection={forceSelection}\n onAddressClick={(address)=>onAddressClick(address, groupField)}\n hideError={hideError}\n withFilter={true} // This was hardcoded in the original\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Location;\n"],"names":["jsx","KitsInputLocation"],"mappings":";;;;;;;AAaO,MAAM,WAAW,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EAAY;AAChB,CAAA,KAAoC;AAGhF,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,eAAA,GAAkB,OAAA;AACxB,EAAA,MAAM;AAAA,IACF,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA,GAAiB,IAAA;AAAA;AAAA,IACjB;AAAA,GACJ,GAAI,eAAA;AAGJ,EAAA,uBACIA,cAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MAEI,GAAG,KAAA;AAAA,MAGJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,QAAA;AAAA,MAEA,MAAM,EAAC;AAAA,MAEP,MAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA,EAAgB,CAAC,OAAA,KAAU,cAAA,CAAe,SAAS,UAAU,CAAA;AAAA,MAC7D,SAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B;AAAA;AAAA,GACJ;AAER;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Location/index.tsx"],"sourcesContent":["// components/fields/Location.tsx\n\nimport React from 'react';\nimport type{FieldValues} from 'react-hook-form';\n\n// Using your specified import paths\nimport type{ILocation, UseFieldLogicElementProps} from '@lmb-it/kitsconcerto-types';\nimport {KitsInputLocation} from \"../../../../_compat\";\n\n/**\n * Renders a location/address search input.\n * All logic is handled by the useFieldLogic hook, making this a simple, declarative component.\n */\nexport const Location = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic, groupField\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n hideError,\n isRequired,\n helperText,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n // 2. Cast the element to its specific type to access unique properties.\n const locationElement = element as ILocation<T>;\n const {\n apiKey,\n provider,\n countryISO,\n forceSelection = true, // Default to true as in the original\n onAddressClick,\n } = locationElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsInputLocation\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n attached={attached}\n\n list={[]}\n // --- Props from the element definition ---\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Location/index.tsx"],"sourcesContent":["// components/fields/Location.tsx\n\nimport React from 'react';\nimport type{FieldValues} from 'react-hook-form';\n\n// Using your specified import paths\nimport type{ILocation, UseFieldLogicElementProps} from '@lmb-it/kitsconcerto-types';\nimport {KitsInputLocation} from \"../../../../_compat\";\n\n/**\n * Renders a location/address search input.\n * All logic is handled by the useFieldLogic hook, making this a simple, declarative component.\n */\nexport const Location = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic, groupField\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n hideError,\n isRequired,\n helperText,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n // 2. Cast the element to its specific type to access unique properties.\n const locationElement = element as ILocation<T>;\n const {\n apiKey,\n provider,\n countryISO,\n forceSelection = true, // Default to true as in the original\n onAddressClick,\n } = locationElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsInputLocation\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n attached={attached}\n\n list={[]}\n // --- Props from the element definition ---\n apiKey={apiKey}\n provider={provider}\n countryISO={countryISO}\n forceSelection={forceSelection}\n onAddressClick={(address)=>onAddressClick(address, groupField)}\n hideError={hideError}\n withFilter={true} // This was hardcoded in the original\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Location;\n"],"names":[],"mappings":";;;AAaO,MAAM,WAAW,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EAAY;AAChB,CAAA,KAAoC;AAGhF,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,eAAA,GAAkB,OAAA;AACxB,EAAA,MAAM;AAAA,IACF,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA,GAAiB,IAAA;AAAA;AAAA,IACjB;AAAA,GACJ,GAAI,eAAA;AAGJ,EAAA,uBACI,GAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MAEI,GAAG,KAAA;AAAA,MAGJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,QAAA;AAAA,MAEA,MAAM,EAAC;AAAA,MAEP,MAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA,EAAgB,CAAC,OAAA,KAAU,cAAA,CAAe,SAAS,UAAU,CAAA;AAAA,MAC7D,SAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B;AAAA;AAAA,GACJ;AAER;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -4980,7 +4980,7 @@ export interface IKitsInputLocation extends Omit<IAutoCompleteElement, "shape" |
|
|
|
4980
4980
|
onAddressClick?: (props: IAddressFormat) => void;
|
|
4981
4981
|
countryISO?: string;
|
|
4982
4982
|
provider?: "google" | "experian";
|
|
4983
|
-
|
|
4983
|
+
apiKey?: string;
|
|
4984
4984
|
forceSelection?: boolean;
|
|
4985
4985
|
}
|
|
4986
4986
|
export interface ILocationDetailsResponse {
|
|
@@ -7914,7 +7914,7 @@ declare const KitsInputPassword: ({ ref, ...rawProps }: IKitsInputPassword) => R
|
|
|
7914
7914
|
|
|
7915
7915
|
declare const KitsPhoneComponent: ({ ref, isWithCountryCode, label, value, placeholder, onChange, invalid, disabled, required, errors, hideError, id, defaultCountry, inputSize, isFloatedLabel, leftAddon, rightAddon, includedCountries, excludedCountries, outputFormat, ...props }: IKitsPhoneInput) => React$1.JSX.Element;
|
|
7916
7916
|
|
|
7917
|
-
declare const KitsInputLocation: ({ id, label, errors, invalid, value, hideError, onAddressClick, onChange, disabled, placeholder, countryISO, helperText, provider,
|
|
7917
|
+
declare const KitsInputLocation: ({ id, label, errors, invalid, value, hideError, onAddressClick, onChange, disabled, placeholder, countryISO, helperText, provider, apiKey, labelKey, valueKey, ...rest }: IKitsInputLocation) => React__default.JSX.Element;
|
|
7918
7918
|
|
|
7919
7919
|
/**
|
|
7920
7920
|
* KitsInputCalendar (native).
|