@rpcbase/ui 0.281.0 → 0.283.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AddressAutocompleteInput/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoE,MAAM,OAAO,CAAA;AA0JnG,eAAO,MAAM,wBAAwB,0KAclC;IACD,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAA;IAChF,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAA;CAC7B,gCAyXA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AddressAutocompleteInput/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoE,MAAM,OAAO,CAAA;AA0JnG,eAAO,MAAM,wBAAwB,0KAclC;IACD,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAA;IAChF,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAA;CAC7B,gCAgYA,CAAA"}
package/dist/index13.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { cn as e } from "./index12.js";
2
2
  import { c as t } from "react/compiler-runtime";
3
- import "react";
4
3
  import { jsx as n } from "react/jsx-runtime";
5
4
  //#region src/components/Input/index.tsx
6
5
  function r(r) {
@@ -1 +1 @@
1
- {"version":3,"file":"index13.js","names":["type"],"sources":["../src/components/Input/index.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\ntype InputProps = React.ComponentProps<\"input\">\n\nexport function Input(props: InputProps) {\n const { className, type, ...rest } = props\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />\n )\n}\n\nInput.displayName = \"Input\"\n"],"mappings":";;;;;AAOA,SAAO,EAAA,GAAA;CAAA,IAAA,IAAA,EAAA,EAAA,GAAA,GAAA,GAAA;CAAA,AAAA,EAAA,OAAA,KACqC,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,OAA1C,wBAAA,GAAA,KAAqC,GAAK,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAOrC,IAAA,EAAA,MAHU,IAAA,EACT,qaACA,CACF,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAED,OAFC,EAAA,OAAA,KAAA,EAAA,OAAA,KAAA,EAAA,OAAA,KALH,IAAA,kBAAA,SAAA;EACQ;EACK,WAAA;EAGV,GACG;CAAI,CAAA,GACR,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,KAAA,IAAA,EAAA,IAPF;AAOE;AAIN,EAAM,cAAc"}
1
+ {"version":3,"file":"index13.js","names":["cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )","<input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />"],"sources":["../src/components/Input/index.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\ntype InputProps = React.ComponentProps<\"input\">\n\nexport function Input(props: InputProps) {\n const { className, type, ...rest } = props\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...rest}\n />\n )\n}\n\nInput.displayName = \"Input\"\n"],"mappings":";;;;AAOA,SAAgB,EAAM,GAAmB;gBAC/B,GAAoB,GAAT;CAAkB,AAAA,EAAA,OAAA,sCAA/B,wBAAmB,GAAA,KAAY;CAItBA,IAAAA;CAET,AAAA,EAAA,OAAA,gBAFS,IAAA,EACT,qaACA,CACF,GADE,EAAA,KAAA;CAJJC,IAAAA;CADF,OAOQ,EAAA,OAAA,KAAA,EAAA,OAJOD,KAAAA,EAAAA,OADL,KADR,IAAA,kBAAC,SAAD;EACQ;EACN,WAAWA;EAIX,GAAI;CACL,CAAA,GADK,EAAA,KAAA,GAJOA,EAAAA,KAAAA,GADL,EAAA,KAAA,yBADRC;AASJ;AAEA,EAAM,cAAc"}
package/dist/index14.js CHANGED
@@ -4,18 +4,18 @@ import { cn as n } from "./index12.js";
4
4
  import { Input as r } from "./index13.js";
5
5
  import { c as i } from "react/compiler-runtime";
6
6
  import { useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
7
- import { Loader2 as ee } from "lucide-react";
8
- import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { Loader2 as l } from "lucide-react";
8
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
9
9
  //#region src/components/AddressAutocompleteInput/index.tsx
10
- var f = /* @__PURE__ */ new Set(/* @__PURE__ */ "street_address.route.premise.subpremise.intersection.sublocality.sublocality_level_1.sublocality_level_2.sublocality_level_3.sublocality_level_4.sublocality_level_5.administrative_area_level_1.administrative_area_level_2.administrative_area_level_3.administrative_area_level_4.administrative_area_level_5.administrative_area_level_6.administrative_area_level_7.postal_code.locality.country.geocode.plus_code.political.neighborhood.colloquial_area.lodging.train_station.transit_station".split(".")), p = /* @__PURE__ */ new WeakMap(), m = (e) => (p.get(e) ?? e.text?.text ?? "").replace(/, France$/, "").trim(), h = (e) => {
10
+ var p = /* @__PURE__ */ new Set(/* @__PURE__ */ "street_address.route.premise.subpremise.intersection.sublocality.sublocality_level_1.sublocality_level_2.sublocality_level_3.sublocality_level_4.sublocality_level_5.administrative_area_level_1.administrative_area_level_2.administrative_area_level_3.administrative_area_level_4.administrative_area_level_5.administrative_area_level_6.administrative_area_level_7.postal_code.locality.country.geocode.plus_code.political.neighborhood.colloquial_area.lodging.train_station.transit_station".split(".")), m = /* @__PURE__ */ new WeakMap(), h = (e) => (m.get(e) ?? e.text?.text ?? "").replace(/, France$/, "").trim(), g = (e) => {
11
11
  let t = i(8), { prediction: n } = e, r, a, o;
12
12
  if (t[0] !== n) {
13
13
  o = Symbol.for("react.early_return_sentinel");
14
14
  bb0: {
15
- r = m(n);
16
- let e = p.get(n) ?? n.text?.text ?? "", t = n.text?.matches ?? [], i = r.length < e.length;
15
+ r = h(n);
16
+ let e = m.get(n) ?? n.text?.text ?? "", t = n.text?.matches ?? [], i = r.length < e.length;
17
17
  if (t.length === 0) {
18
- o = /* @__PURE__ */ u(l, { children: r });
18
+ o = /* @__PURE__ */ d(u, { children: r });
19
19
  break bb0;
20
20
  }
21
21
  a = [];
@@ -25,7 +25,7 @@ var f = /* @__PURE__ */ new Set(/* @__PURE__ */ "street_address.route.premise.su
25
25
  let n = e.startOffset, o = Math.min(e.endOffset, r.length);
26
26
  if (n > s && a.push(r.substring(s, n)), o > n) {
27
27
  let e = r.substring(n, o);
28
- a.push(/* @__PURE__ */ u("strong", { children: e }, t));
28
+ a.push(/* @__PURE__ */ d("strong", { children: e }, t));
29
29
  }
30
30
  s = Math.max(s, o);
31
31
  }), s < r.length && a.push(r.substring(s));
@@ -35,133 +35,133 @@ var f = /* @__PURE__ */ new Set(/* @__PURE__ */ "street_address.route.premise.su
35
35
  if (o !== Symbol.for("react.early_return_sentinel")) return o;
36
36
  if (a.length === 0) {
37
37
  let e;
38
- return t[4] === r ? e = t[5] : (e = /* @__PURE__ */ u(l, { children: r }), t[4] = r, t[5] = e), e;
38
+ return t[4] === r ? e = t[5] : (e = /* @__PURE__ */ d(u, { children: r }), t[4] = r, t[5] = e), e;
39
39
  }
40
40
  let s;
41
- return t[6] === a ? s = t[7] : (s = /* @__PURE__ */ u(l, { children: a }), t[6] = a, t[7] = s), s;
42
- }, g = (e, t) => !e.types || e.types.length === 0 || !t || t.size === 0 || e.types.some((e) => t.has(e)), _ = (e) => e.types?.some((e) => e === "establishment" || e === "point_of_interest") ?? !1, v = (e, t) => e.placeId || `${e.text?.text ?? "prediction"}-${t}`, y = (e) => {
41
+ return t[6] === a ? s = t[7] : (s = /* @__PURE__ */ d(u, { children: a }), t[6] = a, t[7] = s), s;
42
+ }, _ = (e, t) => !e.types || e.types.length === 0 || !t || t.size === 0 || e.types.some((e) => t.has(e)), ee = (e) => e.types?.some((e) => e === "establishment" || e === "point_of_interest") ?? !1, v = (e, t) => e.placeId || `${e.text?.text ?? "prediction"}-${t}`, y = (e) => {
43
43
  let t = /* @__PURE__ */ new Map();
44
44
  return e.forEach((e) => {
45
45
  let n = e.placeId;
46
46
  n && (t.has(n) || t.set(n, e));
47
47
  }), Array.from(t.values());
48
- }, b = (e, t) => e.filter((e) => g(e, t)), x = (e) => e.sort((e, t) => (e.distanceMeters ?? Infinity) - (t.distanceMeters ?? Infinity)), S = (e, t) => x(b(y(e), t)), C = (e, t) => m(e).toLowerCase() === t.trim().toLowerCase(), w = ({ id: i, label: l, placeholder: g, value: y, onValueChange: b, disabled: x, name: w, className: T, autofillShimName: E, googleMapsApiKey: D, locationRestriction: O, allowedTypes: k, loadingIndicator: A }) => {
49
- let [j, M] = c(y ?? ""), [N, P] = c([]), [F, I] = c(!1), [L, R] = c(-1), [z, B] = c(!1), V = s(null), H = s(null), U = s(!1), W = s(!1), G = s(null), K = s(/* @__PURE__ */ new Map()), q = s([]), J = s("smooth"), Y = e("places", D), X = o(() => {
50
- if (!k) return f;
48
+ }, b = (e, t) => e.filter((e) => _(e, t)), x = (e) => e.sort((e, t) => (e.distanceMeters ?? Infinity) - (t.distanceMeters ?? Infinity)), S = (e, t) => x(b(y(e), t)), C = (e, t) => h(e).toLowerCase() === t.trim().toLowerCase(), w = ({ id: i, label: u, placeholder: _, value: y, onValueChange: b, disabled: x, name: w, className: T, autofillShimName: te, googleMapsApiKey: E, locationRestriction: D, allowedTypes: O, loadingIndicator: k }) => {
49
+ let [A, j] = c(y ?? ""), [M, N] = c([]), [P, F] = c(!1), [I, L] = c(-1), [R, z] = c(!1), B = s(null), V = s(null), H = s(!1), U = s(!1), W = s(null), G = s(/* @__PURE__ */ new Map()), K = s([]), q = s("smooth"), J = s(y), Y = s(b), X = e("places", E), Z = o(() => {
50
+ if (!O) return p;
51
51
  let e = /* @__PURE__ */ new Set();
52
- for (let t of k) e.add(t);
52
+ for (let t of O) e.add(t);
53
53
  return e;
54
- }, [k]);
54
+ }, [O]);
55
55
  a(() => {
56
- M(y ?? ""), W.current = !1;
56
+ j(y ?? ""), U.current = !1;
57
57
  }, [y]), a(() => {
58
- if (U.current) {
59
- U.current = !1;
58
+ J.current = y, Y.current = b;
59
+ }, [b, y]), a(() => {
60
+ if (H.current) {
61
+ H.current = !1;
60
62
  return;
61
63
  }
62
- let e = j.trim();
63
- B(e !== "");
64
+ let e = A.trim();
65
+ z(e !== "");
64
66
  let t = !0, n = setTimeout(() => {
65
67
  if (!t) return;
66
68
  if (e === "") {
67
- P([]), I(!1), G.current = null, y !== "" && b("");
69
+ N([]), F(!1), W.current = null, J.current !== "" && Y.current("");
68
70
  return;
69
71
  }
70
- if (!Y) return;
71
- let { AutocompleteSuggestion: n, AutocompleteSessionToken: r } = Y;
72
+ if (!X) return;
73
+ let { AutocompleteSuggestion: n, AutocompleteSessionToken: r } = X;
72
74
  if (!n || !r) {
73
- console.error("AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports"), P([]), I(!1), B(!1);
75
+ console.error("AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports"), N([]), F(!1), z(!1);
74
76
  return;
75
77
  }
76
- G.current ||= new r();
78
+ W.current ||= new r();
77
79
  let i = {
78
- input: j,
79
- sessionToken: G.current ?? void 0,
80
+ input: A,
81
+ sessionToken: W.current ?? void 0,
80
82
  includedRegionCodes: ["fr"]
81
83
  };
82
- O && (i.locationRestriction = O), n.fetchAutocompleteSuggestions(i).then(async (e) => {
84
+ D && (i.locationRestriction = D), n.fetchAutocompleteSuggestions(i).then(async (e) => {
83
85
  if (!t) return;
84
- let n = S(e.suggestions.map((e) => e.placePrediction).filter((e) => !!e), X);
86
+ let n = S(e.suggestions.map((e) => e.placePrediction).filter((e) => !!e), Z);
85
87
  if (await Promise.all(n.map(async (e) => {
86
88
  let t = e.placeId;
87
- if (!t || !_(e)) return;
88
- let n = K.current.get(t);
89
+ if (!t || !ee(e)) return;
90
+ let n = G.current.get(t);
89
91
  n || (n = (async () => {
90
92
  try {
91
93
  let t = (await e.toPlace().fetchFields({ fields: ["formattedAddress"] })).place.formattedAddress?.trim(), n = e.mainText?.text?.trim();
92
94
  return !t || !n ? void 0 : `${n}, ${t}`;
93
95
  } catch (e) {
94
- K.current.delete(t), console.error("AddressAutocompleteInput: place details fetch failed", e);
96
+ G.current.delete(t), console.error("AddressAutocompleteInput: place details fetch failed", e);
95
97
  return;
96
98
  }
97
- })(), K.current.set(t, n));
99
+ })(), G.current.set(t, n));
98
100
  let r = await n;
99
- r && p.set(e, r);
101
+ r && m.set(e, r);
100
102
  })), !t) return;
101
- let r = n[0], i = r && n.length === 1 && C(r, j);
102
- if (!W.current && i) {
103
- P(n), I(!1), B(!1);
103
+ let r = n[0], i = r && n.length === 1 && C(r, A);
104
+ if (!U.current && i) {
105
+ N(n), F(!1), z(!1);
104
106
  return;
105
107
  }
106
- n.length > 0 ? (P(n), W.current && I(!0), R(-1)) : (P([]), I(!1)), B(!1);
108
+ n.length > 0 ? (N(n), U.current && F(!0), L(-1)) : (N([]), F(!1)), z(!1);
107
109
  }).catch((e) => {
108
- t && (console.error("AddressAutocompleteInput: suggestion fetch failed", e), P([]), I(!1), B(!1));
110
+ t && (console.error("AddressAutocompleteInput: suggestion fetch failed", e), N([]), F(!1), z(!1));
109
111
  });
110
112
  }, 300);
111
113
  return () => {
112
114
  t = !1, clearTimeout(n);
113
115
  };
114
116
  }, [
115
- j,
116
- Y,
117
- b,
118
- y,
119
- O,
120
- X
117
+ A,
118
+ X,
119
+ D,
120
+ Z
121
121
  ]), a(() => {
122
122
  let e = (e) => {
123
- V.current && !V.current.contains(e.target) && H.current && !H.current.contains(e.target) && I(!1);
123
+ B.current && !B.current.contains(e.target) && V.current && !V.current.contains(e.target) && F(!1);
124
124
  };
125
125
  return document.addEventListener("mousedown", e), () => {
126
126
  document.removeEventListener("mousedown", e);
127
127
  };
128
128
  }, []);
129
- let Z = (e) => {
130
- U.current = !0;
131
- let t = m(e);
132
- M(t), b(t), P([]), I(!1), B(!1), G.current = null;
133
- }, Q = (e) => {
134
- W.current = !0, M(e.target.value);
135
- }, te = (e) => {
136
- if (!F || N.length === 0) {
137
- e.key === "Enter" && (e.preventDefault(), b(j), I(!1), G.current = null);
129
+ let Q = (e) => {
130
+ H.current = !0;
131
+ let t = h(e);
132
+ j(t), b(t), N([]), F(!1), z(!1), W.current = null;
133
+ }, ne = (e) => {
134
+ U.current = !0, j(e.target.value);
135
+ }, re = (e) => {
136
+ if (!P || M.length === 0) {
137
+ e.key === "Enter" && (e.preventDefault(), b(A), F(!1), W.current = null);
138
138
  return;
139
139
  }
140
- e.key === "ArrowDown" ? (J.current = e.repeat ? "auto" : "smooth", e.preventDefault(), R((e) => N.length === 0 ? -1 : e < 0 ? 0 : (e + 1) % N.length)) : e.key === "ArrowUp" ? (J.current = e.repeat ? "auto" : "smooth", e.preventDefault(), R((e) => N.length === 0 ? -1 : e <= 0 ? N.length - 1 : (e - 1) % N.length)) : e.key === "Enter" ? (e.preventDefault(), L > -1 && N[L] ? Z(N[L]) : (b(j), I(!1), G.current = null)) : e.key === "Escape" && I(!1);
141
- }, ne = () => {
142
- I(!1), y !== j && b(j), G.current = null;
143
- }, $ = E ?? (w ? `${w}_shim` : void 0);
140
+ e.key === "ArrowDown" ? (q.current = e.repeat ? "auto" : "smooth", e.preventDefault(), L((e) => M.length === 0 ? -1 : e < 0 ? 0 : (e + 1) % M.length)) : e.key === "ArrowUp" ? (q.current = e.repeat ? "auto" : "smooth", e.preventDefault(), L((e) => M.length === 0 ? -1 : e <= 0 ? M.length - 1 : (e - 1) % M.length)) : e.key === "Enter" ? (e.preventDefault(), I > -1 && M[I] ? Q(M[I]) : (b(A), F(!1), W.current = null)) : e.key === "Escape" && F(!1);
141
+ }, ie = () => {
142
+ F(!1), y !== A && b(A), W.current = null;
143
+ }, $ = te ?? (w ? `${w}_shim` : void 0);
144
144
  return a(() => {
145
- if (!F || L < 0) {
146
- J.current = "smooth";
145
+ if (!P || I < 0) {
146
+ q.current = "smooth";
147
147
  return;
148
148
  }
149
- let e = q.current[L], t = H.current;
149
+ let e = K.current[I], t = V.current;
150
150
  if (!e || !t) {
151
- J.current = "smooth";
151
+ q.current = "smooth";
152
152
  return;
153
153
  }
154
- let n = J.current;
155
- J.current = "smooth";
154
+ let n = q.current;
155
+ q.current = "smooth";
156
156
  let r = e.offsetTop, i = r + e.offsetHeight, a = t.scrollTop, o = a + t.clientHeight;
157
157
  r >= a && i <= o || e.scrollIntoView({
158
158
  block: "nearest",
159
159
  behavior: n
160
160
  });
161
- }, [L, F]), q.current.length = N.length, /* @__PURE__ */ d("div", {
161
+ }, [I, P]), K.current.length = M.length, /* @__PURE__ */ f("div", {
162
162
  className: "relative",
163
163
  children: [
164
- $ && /* @__PURE__ */ u("input", {
164
+ $ && /* @__PURE__ */ d("input", {
165
165
  tabIndex: -1,
166
166
  autoComplete: "street-address",
167
167
  name: $,
@@ -174,50 +174,50 @@ var f = /* @__PURE__ */ new Set(/* @__PURE__ */ "street_address.route.premise.su
174
174
  width: "1px"
175
175
  }
176
176
  }),
177
- /* @__PURE__ */ u("label", {
177
+ /* @__PURE__ */ d("label", {
178
178
  htmlFor: i,
179
179
  className: "text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer",
180
- children: l
180
+ children: u
181
181
  }),
182
- /* @__PURE__ */ d("div", {
182
+ /* @__PURE__ */ f("div", {
183
183
  className: "relative",
184
- children: [/* @__PURE__ */ u(r, {
185
- ref: V,
184
+ children: [/* @__PURE__ */ d(r, {
185
+ ref: B,
186
186
  id: i,
187
187
  type: "text",
188
- placeholder: g,
188
+ placeholder: _,
189
189
  name: w ?? `${i}_input`,
190
- value: j,
191
- onChange: Q,
192
- onKeyDown: te,
190
+ value: A,
191
+ onChange: ne,
192
+ onKeyDown: re,
193
193
  onFocus: () => {
194
- N.length > 0 && j && I(!0);
194
+ M.length > 0 && A && F(!0);
195
195
  },
196
- onBlur: ne,
196
+ onBlur: ie,
197
197
  disabled: x,
198
198
  autoComplete: "new-password",
199
- className: n("w-full", z && "pr-9", T)
200
- }), z && /* @__PURE__ */ u("span", {
199
+ className: n("w-full", R && "pr-9", T)
200
+ }), R && /* @__PURE__ */ d("span", {
201
201
  "aria-hidden": "true",
202
202
  className: "pointer-events-none absolute right-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-gray-400",
203
203
  "data-slot": "address-autocomplete-loading-indicator",
204
- children: A === void 0 ? /* @__PURE__ */ u(ee, { className: "size-full animate-spin" }) : A
204
+ children: k === void 0 ? /* @__PURE__ */ d(l, { className: "size-full animate-spin" }) : k
205
205
  })]
206
206
  }),
207
- F && N.length > 0 && /* @__PURE__ */ u("ul", {
208
- ref: H,
207
+ P && M.length > 0 && /* @__PURE__ */ d("ul", {
208
+ ref: V,
209
209
  className: "absolute z-10 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-gray-200 bg-white text-left shadow-lg",
210
210
  role: "listbox",
211
- children: N.map((e, n) => /* @__PURE__ */ u("li", {
211
+ children: M.map((e, n) => /* @__PURE__ */ d("li", {
212
212
  ref: (e) => {
213
- q.current[n] = e;
213
+ K.current[n] = e;
214
214
  },
215
- className: t("cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100", { "bg-gray-100": L === n }),
215
+ className: t("cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100", { "bg-gray-100": I === n }),
216
216
  role: "option",
217
217
  onMouseDown: (t) => {
218
- t.preventDefault(), Z(e);
218
+ t.preventDefault(), Q(e);
219
219
  },
220
- children: /* @__PURE__ */ u(h, { prediction: e })
220
+ children: /* @__PURE__ */ d(g, { prediction: e })
221
221
  }, v(e, n)))
222
222
  })
223
223
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"index14.js","names":["displayText","index","matched","lastIndex","parts","prediction","error","e","prev"],"sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { ReactNode, ChangeEvent, KeyboardEvent, useState, useEffect, useRef, useMemo } from \"react\"\nimport clsx from \"clsx\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { useMapsLibrary } from \"@/helpers/useMapsLibrary\"\nimport { Input } from \"@/components/Input\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst DEFAULT_ALLOWED_TYPES = new Set([\n \"street_address\",\n \"route\",\n \"premise\",\n \"subpremise\",\n \"intersection\",\n \"sublocality\",\n \"sublocality_level_1\",\n \"sublocality_level_2\",\n \"sublocality_level_3\",\n \"sublocality_level_4\",\n \"sublocality_level_5\",\n \"administrative_area_level_1\",\n \"administrative_area_level_2\",\n \"administrative_area_level_3\",\n \"administrative_area_level_4\",\n \"administrative_area_level_5\",\n \"administrative_area_level_6\",\n \"administrative_area_level_7\",\n \"postal_code\",\n \"locality\",\n \"country\",\n \"geocode\",\n \"plus_code\",\n \"political\",\n \"neighborhood\",\n \"colloquial_area\",\n \"lodging\",\n \"train_station\",\n \"transit_station\",\n])\n\nconst detailedTextByPrediction = new WeakMap<google.maps.places.PlacePrediction, string>()\n\nconst getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n return fullText.replace(/, France$/, \"\").trim()\n}\n\nconst PredictionItem = ({ prediction }: { prediction: google.maps.places.PlacePrediction }) => {\n const displayText = getDisplayText(prediction)\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n const matches = prediction.text?.matches ?? []\n const wasCountryRemoved = displayText.length < fullText.length\n\n if (matches.length === 0) {\n return <>{displayText}</>\n }\n\n const parts: ReactNode[] = []\n let lastIndex = 0\n\n matches.forEach((substring, index) => {\n if (wasCountryRemoved && substring.startOffset >= displayText.length) {\n return\n }\n\n const startOffset = substring.startOffset\n const endOffset = Math.min(substring.endOffset, displayText.length)\n\n if (startOffset > lastIndex) {\n parts.push(displayText.substring(lastIndex, startOffset))\n }\n\n if (endOffset > startOffset) {\n const matched = displayText.substring(startOffset, endOffset)\n parts.push(<strong key={index}>{matched}</strong>)\n }\n\n lastIndex = Math.max(lastIndex, endOffset)\n })\n\n if (lastIndex < displayText.length) {\n parts.push(displayText.substring(lastIndex))\n }\n\n if (parts.length === 0) {\n return <>{displayText}</>\n }\n\n return <>{parts}</>\n}\n\nconst isAllowedPrediction = (\n prediction: google.maps.places.PlacePrediction,\n allowedTypes: ReadonlySet<string> | null,\n) => {\n if (!prediction.types || prediction.types.length === 0) {\n return true\n }\n\n if (!allowedTypes || allowedTypes.size === 0) {\n return true\n }\n\n return prediction.types.some(type => allowedTypes.has(type))\n}\n\nconst isNamedPlacePrediction = (prediction: google.maps.places.PlacePrediction) =>\n prediction.types?.some(type => type === \"establishment\" || type === \"point_of_interest\") ?? false\n\nconst getPredictionId = (prediction: google.maps.places.PlacePrediction, index: number) =>\n prediction.placeId || `${prediction.text?.text ?? \"prediction\"}-${index}`\n\nconst getUniquePredictions = (predictions: google.maps.places.PlacePrediction[]) => {\n const map = new Map<string, google.maps.places.PlacePrediction>()\n\n predictions.forEach(prediction => {\n const key = prediction.placeId\n\n if (!key) {\n return\n }\n\n if (!map.has(key)) {\n map.set(key, prediction)\n }\n })\n\n return Array.from(map.values())\n}\n\nconst getFilteredPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => predictions.filter(prediction => isAllowedPrediction(prediction, allowedTypes))\n\nconst sortPredictions = (predictions: google.maps.places.PlacePrediction[]) =>\n predictions.sort((a, b) => {\n const aDistance = a.distanceMeters ?? Number.POSITIVE_INFINITY\n const bDistance = b.distanceMeters ?? Number.POSITIVE_INFINITY\n\n return aDistance - bDistance\n })\n\nconst buildDisplayPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => sortPredictions(getFilteredPredictions(getUniquePredictions(predictions), allowedTypes))\n\nconst isExactMatch = (prediction: google.maps.places.PlacePrediction, value: string) => {\n const display = getDisplayText(prediction)\n return display.toLowerCase() === value.trim().toLowerCase()\n}\n\nexport const AddressAutocompleteInput = ({\n id,\n label,\n placeholder,\n value,\n onValueChange,\n disabled,\n name,\n className,\n autofillShimName,\n googleMapsApiKey,\n locationRestriction,\n allowedTypes,\n loadingIndicator,\n}: {\n id: string\n label: string\n placeholder: string\n value: string | undefined\n onValueChange: (value: string) => void\n disabled?: boolean\n name?: string\n className?: string\n autofillShimName?: string\n googleMapsApiKey?: string\n locationRestriction?: google.maps.LatLngBoundsLiteral | google.maps.LatLngBounds\n allowedTypes?: Iterable<string>\n loadingIndicator?: ReactNode\n}) => {\n const [inputValue, setInputValue] = useState(value ?? \"\")\n const [predictions, setPredictions] = useState<google.maps.places.PlacePrediction[]>([])\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const [isLoading, setIsLoading] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLUListElement>(null)\n const isSelecting = useRef(false)\n const hasUserTyped = useRef(false)\n const sessionTokenRef = useRef<google.maps.places.AutocompleteSessionToken | null>(null)\n const detailedTextRequestsRef = useRef(new Map<string, Promise<string | undefined>>())\n const optionRefs = useRef<(HTMLLIElement | null)[]>([])\n const scrollBehaviorRef = useRef<ScrollBehavior>(\"smooth\")\n const placesLibrary = useMapsLibrary(\"places\", googleMapsApiKey)\n const allowedTypesSet = useMemo(() => {\n if (!allowedTypes) {\n return DEFAULT_ALLOWED_TYPES\n }\n\n const newSet = new Set<string>()\n for (const type of allowedTypes) {\n newSet.add(type)\n }\n return newSet\n }, [allowedTypes])\n\n useEffect(() => {\n setInputValue(value ?? \"\")\n hasUserTyped.current = false\n }, [value])\n\n useEffect(() => {\n if (isSelecting.current) {\n isSelecting.current = false\n return\n }\n\n const trimmed = inputValue.trim()\n\n if (trimmed === \"\") {\n setIsLoading(false)\n } else {\n setIsLoading(true)\n }\n\n let isActive = true\n\n const handler = setTimeout(() => {\n if (!isActive) {\n return\n }\n\n if (trimmed === \"\") {\n setPredictions([])\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n if (value !== \"\") {\n onValueChange(\"\")\n }\n return\n }\n\n if (!placesLibrary) return\n\n const { AutocompleteSuggestion, AutocompleteSessionToken } = placesLibrary\n\n if (!AutocompleteSuggestion || !AutocompleteSessionToken) {\n console.error(\"AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports\")\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (!sessionTokenRef.current) {\n sessionTokenRef.current = new AutocompleteSessionToken()\n }\n\n const request: google.maps.places.AutocompleteRequest = {\n input: inputValue,\n sessionToken: sessionTokenRef.current ?? undefined,\n includedRegionCodes: [\"fr\"],\n }\n if (locationRestriction) {\n request.locationRestriction = locationRestriction\n }\n\n AutocompleteSuggestion.fetchAutocompleteSuggestions(request)\n .then(async (response: { suggestions: google.maps.places.AutocompleteSuggestion[] }) => {\n if (!isActive) {\n return\n }\n\n const placePredictions = response.suggestions\n .map((suggestion: google.maps.places.AutocompleteSuggestion) => suggestion.placePrediction)\n .filter((prediction): prediction is google.maps.places.PlacePrediction => Boolean(prediction))\n\n const combinedPredictions = buildDisplayPredictions(placePredictions, allowedTypesSet)\n await Promise.all(combinedPredictions.map(async prediction => {\n const placeId = prediction.placeId\n if (!placeId || !isNamedPlacePrediction(prediction)) {\n return\n }\n\n let detailedTextRequest = detailedTextRequestsRef.current.get(placeId)\n if (!detailedTextRequest) {\n detailedTextRequest = (async () => {\n try {\n const place = prediction.toPlace()\n const result = await place.fetchFields({ fields: [\"formattedAddress\"] })\n const formattedAddress = result.place.formattedAddress?.trim()\n const placeName = prediction.mainText?.text?.trim()\n if (!formattedAddress || !placeName) return undefined\n return `${placeName}, ${formattedAddress}`\n } catch (error) {\n detailedTextRequestsRef.current.delete(placeId)\n console.error(\"AddressAutocompleteInput: place details fetch failed\", error)\n return undefined\n }\n })()\n detailedTextRequestsRef.current.set(placeId, detailedTextRequest)\n }\n\n const detailedText = await detailedTextRequest\n if (detailedText) {\n detailedTextByPrediction.set(prediction, detailedText)\n }\n }))\n\n if (!isActive) {\n return\n }\n\n const singlePrediction = combinedPredictions[0]\n const hasExactMatch =\n singlePrediction && combinedPredictions.length === 1 && isExactMatch(singlePrediction, inputValue)\n\n if (!hasUserTyped.current && hasExactMatch) {\n setPredictions(combinedPredictions)\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (combinedPredictions.length > 0) {\n setPredictions(combinedPredictions)\n if (hasUserTyped.current) {\n setIsDropdownOpen(true)\n }\n setHighlightedIndex(-1)\n } else {\n setPredictions([])\n setIsDropdownOpen(false)\n }\n setIsLoading(false)\n })\n .catch((error: unknown) => {\n if (!isActive) {\n return\n }\n console.error(\"AddressAutocompleteInput: suggestion fetch failed\", error)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n })\n }, 300)\n\n return () => {\n isActive = false\n clearTimeout(handler)\n }\n }, [inputValue, placesLibrary, onValueChange, value, locationRestriction, allowedTypesSet])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [])\n\n const handleSelectPrediction = (prediction: google.maps.places.PlacePrediction) => {\n isSelecting.current = true\n const newAddress = getDisplayText(prediction)\n setInputValue(newAddress)\n onValueChange(newAddress)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n sessionTokenRef.current = null\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n hasUserTyped.current = true\n setInputValue(e.target.value)\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isDropdownOpen || predictions.length === 0) {\n if (e.key === \"Enter\") {\n e.preventDefault()\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n return\n }\n\n if (e.key === \"ArrowDown\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n return prev < 0 ? 0 : (prev + 1) % predictions.length\n })\n } else if (e.key === \"ArrowUp\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n if (prev <= 0) {\n return predictions.length - 1\n }\n return (prev - 1) % predictions.length\n })\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n if (highlightedIndex > -1 && predictions[highlightedIndex]) {\n handleSelectPrediction(predictions[highlightedIndex])\n } else {\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n } else if (e.key === \"Escape\") {\n setIsDropdownOpen(false)\n }\n }\n\n const handleBlur = () => {\n setIsDropdownOpen(false)\n if (value !== inputValue) {\n onValueChange(inputValue)\n }\n sessionTokenRef.current = null\n }\n\n const shimName = autofillShimName ?? (name ? `${name}_shim` : undefined)\n\n useEffect(() => {\n if (!isDropdownOpen || highlightedIndex < 0) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const item = optionRefs.current[highlightedIndex]\n const list = dropdownRef.current\n\n if (!item || !list) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const behavior = scrollBehaviorRef.current\n scrollBehaviorRef.current = \"smooth\"\n\n const top = item.offsetTop\n const bottom = top + item.offsetHeight\n const viewTop = list.scrollTop\n const viewBottom = viewTop + list.clientHeight\n\n if (top >= viewTop && bottom <= viewBottom) {\n return\n }\n\n item.scrollIntoView({\n block: \"nearest\",\n behavior,\n })\n }, [highlightedIndex, isDropdownOpen])\n\n optionRefs.current.length = predictions.length\n\n return (\n <div className=\"relative\">\n {shimName && (\n <input\n tabIndex={-1}\n autoComplete=\"street-address\"\n name={shimName}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: \"-9999px\",\n top: \"-9999px\",\n height: \"1px\",\n width: \"1px\",\n }}\n />\n )}\n <label htmlFor={id} className=\"text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer\">\n {label}\n </label>\n <div className=\"relative\">\n <Input\n ref={inputRef}\n id={id}\n type=\"text\"\n placeholder={placeholder}\n name={name ?? `${id}_input`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (predictions.length > 0 && inputValue) {\n setIsDropdownOpen(true)\n }\n }}\n onBlur={handleBlur}\n disabled={disabled}\n autoComplete=\"new-password\"\n className={cn(\"w-full\", isLoading && \"pr-9\", className)}\n />\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-gray-400\"\n data-slot=\"address-autocomplete-loading-indicator\"\n >\n {loadingIndicator === undefined ? <Loader2 className=\"size-full animate-spin\" /> : loadingIndicator}\n </span>\n )}\n </div>\n {isDropdownOpen && predictions.length > 0 && (\n <ul\n ref={dropdownRef}\n className=\"absolute z-10 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-gray-200 bg-white text-left shadow-lg\"\n role=\"listbox\"\n >\n {predictions.map((prediction, index) => (\n <li\n key={getPredictionId(prediction, index)}\n ref={node => {\n optionRefs.current[index] = node\n }}\n className={clsx(\n \"cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100\",\n { \"bg-gray-100\": highlightedIndex === index },\n )}\n role=\"option\"\n onMouseDown={e => {\n e.preventDefault()\n handleSelectPrediction(prediction)\n }}\n >\n <PredictionItem prediction={prediction} />\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index14.js","names":["{ prediction }: { prediction: google.maps.places.PlacePrediction }","<>{displayText}</>","<>{parts}</>"],"sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { ReactNode, ChangeEvent, KeyboardEvent, useState, useEffect, useRef, useMemo } from \"react\"\nimport clsx from \"clsx\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { useMapsLibrary } from \"@/helpers/useMapsLibrary\"\nimport { Input } from \"@/components/Input\"\nimport { cn } from \"@/lib/utils\"\n\n\nconst DEFAULT_ALLOWED_TYPES = new Set([\n \"street_address\",\n \"route\",\n \"premise\",\n \"subpremise\",\n \"intersection\",\n \"sublocality\",\n \"sublocality_level_1\",\n \"sublocality_level_2\",\n \"sublocality_level_3\",\n \"sublocality_level_4\",\n \"sublocality_level_5\",\n \"administrative_area_level_1\",\n \"administrative_area_level_2\",\n \"administrative_area_level_3\",\n \"administrative_area_level_4\",\n \"administrative_area_level_5\",\n \"administrative_area_level_6\",\n \"administrative_area_level_7\",\n \"postal_code\",\n \"locality\",\n \"country\",\n \"geocode\",\n \"plus_code\",\n \"political\",\n \"neighborhood\",\n \"colloquial_area\",\n \"lodging\",\n \"train_station\",\n \"transit_station\",\n])\n\nconst detailedTextByPrediction = new WeakMap<google.maps.places.PlacePrediction, string>()\n\nconst getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n return fullText.replace(/, France$/, \"\").trim()\n}\n\nconst PredictionItem = ({ prediction }: { prediction: google.maps.places.PlacePrediction }) => {\n const displayText = getDisplayText(prediction)\n const fullText = detailedTextByPrediction.get(prediction) ?? prediction.text?.text ?? \"\"\n const matches = prediction.text?.matches ?? []\n const wasCountryRemoved = displayText.length < fullText.length\n\n if (matches.length === 0) {\n return <>{displayText}</>\n }\n\n const parts: ReactNode[] = []\n let lastIndex = 0\n\n matches.forEach((substring, index) => {\n if (wasCountryRemoved && substring.startOffset >= displayText.length) {\n return\n }\n\n const startOffset = substring.startOffset\n const endOffset = Math.min(substring.endOffset, displayText.length)\n\n if (startOffset > lastIndex) {\n parts.push(displayText.substring(lastIndex, startOffset))\n }\n\n if (endOffset > startOffset) {\n const matched = displayText.substring(startOffset, endOffset)\n parts.push(<strong key={index}>{matched}</strong>)\n }\n\n lastIndex = Math.max(lastIndex, endOffset)\n })\n\n if (lastIndex < displayText.length) {\n parts.push(displayText.substring(lastIndex))\n }\n\n if (parts.length === 0) {\n return <>{displayText}</>\n }\n\n return <>{parts}</>\n}\n\nconst isAllowedPrediction = (\n prediction: google.maps.places.PlacePrediction,\n allowedTypes: ReadonlySet<string> | null,\n) => {\n if (!prediction.types || prediction.types.length === 0) {\n return true\n }\n\n if (!allowedTypes || allowedTypes.size === 0) {\n return true\n }\n\n return prediction.types.some(type => allowedTypes.has(type))\n}\n\nconst isNamedPlacePrediction = (prediction: google.maps.places.PlacePrediction) =>\n prediction.types?.some(type => type === \"establishment\" || type === \"point_of_interest\") ?? false\n\nconst getPredictionId = (prediction: google.maps.places.PlacePrediction, index: number) =>\n prediction.placeId || `${prediction.text?.text ?? \"prediction\"}-${index}`\n\nconst getUniquePredictions = (predictions: google.maps.places.PlacePrediction[]) => {\n const map = new Map<string, google.maps.places.PlacePrediction>()\n\n predictions.forEach(prediction => {\n const key = prediction.placeId\n\n if (!key) {\n return\n }\n\n if (!map.has(key)) {\n map.set(key, prediction)\n }\n })\n\n return Array.from(map.values())\n}\n\nconst getFilteredPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => predictions.filter(prediction => isAllowedPrediction(prediction, allowedTypes))\n\nconst sortPredictions = (predictions: google.maps.places.PlacePrediction[]) =>\n predictions.sort((a, b) => {\n const aDistance = a.distanceMeters ?? Number.POSITIVE_INFINITY\n const bDistance = b.distanceMeters ?? Number.POSITIVE_INFINITY\n\n return aDistance - bDistance\n })\n\nconst buildDisplayPredictions = (\n predictions: google.maps.places.PlacePrediction[],\n allowedTypes: ReadonlySet<string> | null,\n) => sortPredictions(getFilteredPredictions(getUniquePredictions(predictions), allowedTypes))\n\nconst isExactMatch = (prediction: google.maps.places.PlacePrediction, value: string) => {\n const display = getDisplayText(prediction)\n return display.toLowerCase() === value.trim().toLowerCase()\n}\n\nexport const AddressAutocompleteInput = ({\n id,\n label,\n placeholder,\n value,\n onValueChange,\n disabled,\n name,\n className,\n autofillShimName,\n googleMapsApiKey,\n locationRestriction,\n allowedTypes,\n loadingIndicator,\n}: {\n id: string\n label: string\n placeholder: string\n value: string | undefined\n onValueChange: (value: string) => void\n disabled?: boolean\n name?: string\n className?: string\n autofillShimName?: string\n googleMapsApiKey?: string\n locationRestriction?: google.maps.LatLngBoundsLiteral | google.maps.LatLngBounds\n allowedTypes?: Iterable<string>\n loadingIndicator?: ReactNode\n}) => {\n const [inputValue, setInputValue] = useState(value ?? \"\")\n const [predictions, setPredictions] = useState<google.maps.places.PlacePrediction[]>([])\n const [isDropdownOpen, setIsDropdownOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const [isLoading, setIsLoading] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLUListElement>(null)\n const isSelecting = useRef(false)\n const hasUserTyped = useRef(false)\n const sessionTokenRef = useRef<google.maps.places.AutocompleteSessionToken | null>(null)\n const detailedTextRequestsRef = useRef(new Map<string, Promise<string | undefined>>())\n const optionRefs = useRef<(HTMLLIElement | null)[]>([])\n const scrollBehaviorRef = useRef<ScrollBehavior>(\"smooth\")\n const valueRef = useRef(value)\n const onValueChangeRef = useRef(onValueChange)\n const placesLibrary = useMapsLibrary(\"places\", googleMapsApiKey)\n const allowedTypesSet = useMemo(() => {\n if (!allowedTypes) {\n return DEFAULT_ALLOWED_TYPES\n }\n\n const newSet = new Set<string>()\n for (const type of allowedTypes) {\n newSet.add(type)\n }\n return newSet\n }, [allowedTypes])\n\n useEffect(() => {\n setInputValue(value ?? \"\")\n hasUserTyped.current = false\n }, [value])\n\n useEffect(() => {\n valueRef.current = value\n onValueChangeRef.current = onValueChange\n }, [onValueChange, value])\n\n useEffect(() => {\n if (isSelecting.current) {\n isSelecting.current = false\n return\n }\n\n const trimmed = inputValue.trim()\n\n if (trimmed === \"\") {\n setIsLoading(false)\n } else {\n setIsLoading(true)\n }\n\n let isActive = true\n\n const handler = setTimeout(() => {\n if (!isActive) {\n return\n }\n\n if (trimmed === \"\") {\n setPredictions([])\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n if (valueRef.current !== \"\") {\n onValueChangeRef.current(\"\")\n }\n return\n }\n\n if (!placesLibrary) return\n\n const { AutocompleteSuggestion, AutocompleteSessionToken } = placesLibrary\n\n if (!AutocompleteSuggestion || !AutocompleteSessionToken) {\n console.error(\"AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports\")\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (!sessionTokenRef.current) {\n sessionTokenRef.current = new AutocompleteSessionToken()\n }\n\n const request: google.maps.places.AutocompleteRequest = {\n input: inputValue,\n sessionToken: sessionTokenRef.current ?? undefined,\n includedRegionCodes: [\"fr\"],\n }\n if (locationRestriction) {\n request.locationRestriction = locationRestriction\n }\n\n AutocompleteSuggestion.fetchAutocompleteSuggestions(request)\n .then(async (response: { suggestions: google.maps.places.AutocompleteSuggestion[] }) => {\n if (!isActive) {\n return\n }\n\n const placePredictions = response.suggestions\n .map((suggestion: google.maps.places.AutocompleteSuggestion) => suggestion.placePrediction)\n .filter((prediction): prediction is google.maps.places.PlacePrediction => Boolean(prediction))\n\n const combinedPredictions = buildDisplayPredictions(placePredictions, allowedTypesSet)\n await Promise.all(combinedPredictions.map(async prediction => {\n const placeId = prediction.placeId\n if (!placeId || !isNamedPlacePrediction(prediction)) {\n return\n }\n\n let detailedTextRequest = detailedTextRequestsRef.current.get(placeId)\n if (!detailedTextRequest) {\n detailedTextRequest = (async () => {\n try {\n const place = prediction.toPlace()\n const result = await place.fetchFields({ fields: [\"formattedAddress\"] })\n const formattedAddress = result.place.formattedAddress?.trim()\n const placeName = prediction.mainText?.text?.trim()\n if (!formattedAddress || !placeName) return undefined\n return `${placeName}, ${formattedAddress}`\n } catch (error) {\n detailedTextRequestsRef.current.delete(placeId)\n console.error(\"AddressAutocompleteInput: place details fetch failed\", error)\n return undefined\n }\n })()\n detailedTextRequestsRef.current.set(placeId, detailedTextRequest)\n }\n\n const detailedText = await detailedTextRequest\n if (detailedText) {\n detailedTextByPrediction.set(prediction, detailedText)\n }\n }))\n\n if (!isActive) {\n return\n }\n\n const singlePrediction = combinedPredictions[0]\n const hasExactMatch =\n singlePrediction && combinedPredictions.length === 1 && isExactMatch(singlePrediction, inputValue)\n\n if (!hasUserTyped.current && hasExactMatch) {\n setPredictions(combinedPredictions)\n setIsDropdownOpen(false)\n setIsLoading(false)\n return\n }\n\n if (combinedPredictions.length > 0) {\n setPredictions(combinedPredictions)\n if (hasUserTyped.current) {\n setIsDropdownOpen(true)\n }\n setHighlightedIndex(-1)\n } else {\n setPredictions([])\n setIsDropdownOpen(false)\n }\n setIsLoading(false)\n })\n .catch((error: unknown) => {\n if (!isActive) {\n return\n }\n console.error(\"AddressAutocompleteInput: suggestion fetch failed\", error)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n })\n }, 300)\n\n return () => {\n isActive = false\n clearTimeout(handler)\n }\n }, [inputValue, placesLibrary, locationRestriction, allowedTypesSet])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false)\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [])\n\n const handleSelectPrediction = (prediction: google.maps.places.PlacePrediction) => {\n isSelecting.current = true\n const newAddress = getDisplayText(prediction)\n setInputValue(newAddress)\n onValueChange(newAddress)\n setPredictions([])\n setIsDropdownOpen(false)\n setIsLoading(false)\n sessionTokenRef.current = null\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n hasUserTyped.current = true\n setInputValue(e.target.value)\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!isDropdownOpen || predictions.length === 0) {\n if (e.key === \"Enter\") {\n e.preventDefault()\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n return\n }\n\n if (e.key === \"ArrowDown\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n return prev < 0 ? 0 : (prev + 1) % predictions.length\n })\n } else if (e.key === \"ArrowUp\") {\n scrollBehaviorRef.current = e.repeat ? \"auto\" : \"smooth\"\n e.preventDefault()\n setHighlightedIndex(prev => {\n if (predictions.length === 0) {\n return -1\n }\n if (prev <= 0) {\n return predictions.length - 1\n }\n return (prev - 1) % predictions.length\n })\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n if (highlightedIndex > -1 && predictions[highlightedIndex]) {\n handleSelectPrediction(predictions[highlightedIndex])\n } else {\n onValueChange(inputValue)\n setIsDropdownOpen(false)\n sessionTokenRef.current = null\n }\n } else if (e.key === \"Escape\") {\n setIsDropdownOpen(false)\n }\n }\n\n const handleBlur = () => {\n setIsDropdownOpen(false)\n if (value !== inputValue) {\n onValueChange(inputValue)\n }\n sessionTokenRef.current = null\n }\n\n const shimName = autofillShimName ?? (name ? `${name}_shim` : undefined)\n\n useEffect(() => {\n if (!isDropdownOpen || highlightedIndex < 0) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const item = optionRefs.current[highlightedIndex]\n const list = dropdownRef.current\n\n if (!item || !list) {\n scrollBehaviorRef.current = \"smooth\"\n return\n }\n\n const behavior = scrollBehaviorRef.current\n scrollBehaviorRef.current = \"smooth\"\n\n const top = item.offsetTop\n const bottom = top + item.offsetHeight\n const viewTop = list.scrollTop\n const viewBottom = viewTop + list.clientHeight\n\n if (top >= viewTop && bottom <= viewBottom) {\n return\n }\n\n item.scrollIntoView({\n block: \"nearest\",\n behavior,\n })\n }, [highlightedIndex, isDropdownOpen])\n\n optionRefs.current.length = predictions.length\n\n return (\n <div className=\"relative\">\n {shimName && (\n <input\n tabIndex={-1}\n autoComplete=\"street-address\"\n name={shimName}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: \"-9999px\",\n top: \"-9999px\",\n height: \"1px\",\n width: \"1px\",\n }}\n />\n )}\n <label htmlFor={id} className=\"text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer\">\n {label}\n </label>\n <div className=\"relative\">\n <Input\n ref={inputRef}\n id={id}\n type=\"text\"\n placeholder={placeholder}\n name={name ?? `${id}_input`}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (predictions.length > 0 && inputValue) {\n setIsDropdownOpen(true)\n }\n }}\n onBlur={handleBlur}\n disabled={disabled}\n autoComplete=\"new-password\"\n className={cn(\"w-full\", isLoading && \"pr-9\", className)}\n />\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-3 top-1/2 flex size-4 -translate-y-1/2 items-center justify-center text-gray-400\"\n data-slot=\"address-autocomplete-loading-indicator\"\n >\n {loadingIndicator === undefined ? <Loader2 className=\"size-full animate-spin\" /> : loadingIndicator}\n </span>\n )}\n </div>\n {isDropdownOpen && predictions.length > 0 && (\n <ul\n ref={dropdownRef}\n className=\"absolute z-10 mt-1 w-full max-h-60 overflow-y-auto rounded-md border border-gray-200 bg-white text-left shadow-lg\"\n role=\"listbox\"\n >\n {predictions.map((prediction, index) => (\n <li\n key={getPredictionId(prediction, index)}\n ref={node => {\n optionRefs.current[index] = node\n }}\n className={clsx(\n \"cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100\",\n { \"bg-gray-100\": highlightedIndex === index },\n )}\n role=\"option\"\n onMouseDown={e => {\n e.preventDefault()\n handleSelectPrediction(prediction)\n }}\n >\n <PredictionItem prediction={prediction} />\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index15.js","names":["onClick"],"sources":["../src/components/ApplePayButton/index.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\"\nimport clsx from \"clsx\"\n\n\ntype ApplePayButtonProps = ComponentPropsWithoutRef<\"button\">\n\n\nexport const ApplePayButton = ({\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps) => {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>\n )\n}\n"],"mappings":";;;;AAOA,IAAa,KAAiB,MAAA;CAAA,IAAA,IAAA,EAAA,EAAA,GAAA,GAAA,GAAA,GAAA;CAAA,AAAA,EAAA,OAAA,KAKR,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,IAAA,IAAA,EAAA,OALS,wCAAA,GAAA,KAAA,GAKT,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAQf,IAAA,EAAA,MAHU,IAAA,EACT,qMACA,CACF,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,IAG+D,IAAA,EAAA,MAA/D,IAAA,KAAY,kBAAA,QAAA;EAAgB,WAAA;EAAU,UAAA;CAAyB,CAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA;CAAA,IAAA;CAAA,AAAA,EAAA,OAAA,OAAA,IAAA,2BAAA,KAChE,IAAA,kBAAA,OAAA;EAAU,MAAA;EAAuB,SAAA;EAAsB,WAAA;EACrD,UAAA,kBAAA,QAAA,EAAQ,GAAA,syCAAqyC,CAAA;CACzyC,CAAA,GAAA,EAAA,KAAA,KAAA,IAAA,EAAA;CAAA,IAAA;CACC,OADD,EAAA,QAAA,KAAA,EAAA,QAAA,KAAA,EAAA,QAAA,KAAA,EAAA,QAAA,KAZR,IAAA,kBAAA,UAAA;EACO,MAAA;EACI;EACE,WAAA;EAGV,GACG;EAPN,UAAA,CASG,GACD,CAGO;KAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,GAAA,EAAA,MAAA,KAAA,IAAA,EAAA,KAbT;AAaS"}
1
+ {"version":3,"file":"index15.js","names":["{\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps","clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )","children ?? <span className=\"sr-only\">Pay with Apple Pay</span>","<svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>","<button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>"],"sources":["../src/components/ApplePayButton/index.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\"\nimport clsx from \"clsx\"\n\n\ntype ApplePayButtonProps = ComponentPropsWithoutRef<\"button\">\n\n\nexport const ApplePayButton = ({\n className,\n onClick,\n children,\n ...buttonProps\n}: ApplePayButtonProps) => {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={clsx(\n \"flex w-full items-center justify-center rounded-md border border-transparent bg-black py-2 text-white hover:bg-gray-800 focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 focus:outline-hidden\",\n className,\n )}\n {...buttonProps}\n >\n {children ?? <span className=\"sr-only\">Pay with Apple Pay</span>}\n <svg fill=\"currentColor\" viewBox=\"0 0 50 20\" className=\"h-5 w-auto\">\n <path d=\"M9.536 2.579c-.571.675-1.485 1.208-2.4 1.132-.113-.914.334-1.884.858-2.484C8.565.533 9.564.038 10.374 0c.095.951-.276 1.884-.838 2.579zm.829 1.313c-1.324-.077-2.457.751-3.085.751-.638 0-1.6-.713-2.647-.694-1.362.019-2.628.79-3.323 2.017-1.429 2.455-.372 6.09 1.009 8.087.676.99 1.485 2.075 2.552 2.036 1.009-.038 1.409-.656 2.628-.656 1.228 0 1.58.656 2.647.637 1.104-.019 1.8-.99 2.475-1.979.771-1.122 1.086-2.217 1.105-2.274-.02-.019-2.133-.828-2.152-3.263-.02-2.036 1.666-3.007 1.742-3.064-.952-1.408-2.437-1.56-2.951-1.598zm7.645-2.76v14.834h2.305v-5.072h3.19c2.913 0 4.96-1.998 4.96-4.89 0-2.893-2.01-4.872-4.885-4.872h-5.57zm2.305 1.941h2.656c2 0 3.142 1.066 3.142 2.94 0 1.875-1.142 2.95-3.151 2.95h-2.647v-5.89zM32.673 16.08c1.448 0 2.79-.733 3.4-1.893h.047v1.779h2.133V8.582c0-2.14-1.714-3.52-4.351-3.52-2.447 0-4.256 1.399-4.323 3.32h2.076c.171-.913 1.018-1.512 2.18-1.512 1.41 0 2.2.656 2.2 1.865v.818l-2.876.171c-2.675.162-4.123 1.256-4.123 3.159 0 1.922 1.495 3.197 3.637 3.197zm.62-1.76c-1.229 0-2.01-.59-2.01-1.494 0-.933.752-1.475 2.19-1.56l2.562-.162v.837c0 1.39-1.181 2.379-2.743 2.379zM41.1 20c2.247 0 3.304-.856 4.227-3.454l4.047-11.341h-2.342l-2.714 8.763h-.047l-2.714-8.763h-2.409l3.904 10.799-.21.656c-.352 1.114-.923 1.542-1.942 1.542-.18 0-.533-.02-.676-.038v1.779c.133.038.705.057.876.057z\" />\n </svg>\n </button>\n )\n}\n"],"mappings":";;;;AAOA,IAAa,KAAA,MAKc;gBADtB,GADH,GAFA,GACA;CAF6BA,AAAAA,EAAAA,OAAAA,gDAC7B,wCAGA,GAAA,KAJ6BA;CAUdC,IAAAA;CAET,AAAA,EAAA,OAAA,gBAFS,IAAA,EACT,qMACA,CACF,GADE,EAAA,KAAA;CAIDC,IAAAA;0BAAY,IAAA,KAAA,kBAAC,QAAD;EAAM,WAAU;EAAU,UAAA;CAAwB,CAAA,GAA9D,EAAA,KAAA;CACDC,IAAAA;qDAAC,IAAA,kBAAA,OAAD;EAAK,MAAK;EAAe,SAAQ;EAAY,WAAU;EACrD,UAAA,kBAAC,QAAD,EAAM,GAAE,syCAAuyC,CAAA;CAC5yC,CAAA;CAZPC,IAAAA;CADF,OAQQ,EAAA,QAAA,KAAA,EAAA,QALK,KAAA,EAAA,QACEH,KAAAA,EAAAA,QAMVC,KATH,IAAA,kBAAC,UAAD;EACE,MAAK;EACI;EACT,WAAWD;EAIX,GAAI;EAPN,UAAA,CASGC,GACDC,CAGM;KANF,EAAA,MAAA,GALK,EAAA,MAAA,GACEF,EAAAA,MAAAA,GAMVC,EAAAA,MAAAA,2BATHE;AAeJ"}
package/dist/index16.js CHANGED
@@ -1,49 +1,57 @@
1
1
  import { cn as e } from "./index12.js";
2
- import "react";
3
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
+ import { c as t } from "react/compiler-runtime";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  //#region src/components/Checkbox/index.tsx
5
- var r = {
5
+ var i = {
6
6
  red: "checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700",
7
7
  sky: "checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600",
8
8
  primary: "checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary"
9
- }, i = ({ id: i, name: a, defaultValue: o, defaultChecked: s, checked: c, onChange: l, color: u = "primary", className: d, ...f }) => {
10
- let p = r[u];
11
- return /* @__PURE__ */ t("div", {
9
+ }, a = (a) => {
10
+ let o = t(25), s, c, l, u, d, f, p, m, h;
11
+ o[0] === a ? (s = o[1], c = o[2], l = o[3], u = o[4], d = o[5], f = o[6], p = o[7], m = o[8], h = o[9]) : ({id: d, name: f, defaultValue: u, defaultChecked: l, checked: s, onChange: p, color: h, className: c, ...m} = a, o[0] = a, o[1] = s, o[2] = c, o[3] = l, o[4] = u, o[5] = d, o[6] = f, o[7] = p, o[8] = m, o[9] = h);
12
+ let g = i[h === void 0 ? "primary" : h], _;
13
+ o[10] !== c || o[11] !== g ? (_ = e("col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto", g, c), o[10] = c, o[11] = g, o[12] = _) : _ = o[12];
14
+ let v;
15
+ o[13] !== s || o[14] !== l || o[15] !== u || o[16] !== d || o[17] !== f || o[18] !== p || o[19] !== m || o[20] !== _ ? (v = /* @__PURE__ */ n("input", {
16
+ ...m,
17
+ id: d,
18
+ name: f,
19
+ type: "checkbox",
20
+ defaultValue: u,
21
+ defaultChecked: l,
22
+ checked: s,
23
+ onChange: p,
24
+ className: _
25
+ }), o[13] = s, o[14] = l, o[15] = u, o[16] = d, o[17] = f, o[18] = p, o[19] = m, o[20] = _, o[21] = v) : v = o[21];
26
+ let y;
27
+ o[22] === Symbol.for("react.memo_cache_sentinel") ? (y = /* @__PURE__ */ r("svg", {
28
+ fill: "none",
29
+ viewBox: "0 0 14 14",
30
+ className: "pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25",
31
+ children: [/* @__PURE__ */ n("path", {
32
+ d: "M3 8L6 11L11 3.5",
33
+ strokeWidth: 2,
34
+ strokeLinecap: "round",
35
+ strokeLinejoin: "round",
36
+ className: "opacity-0 group-has-checked:opacity-100"
37
+ }), /* @__PURE__ */ n("path", {
38
+ d: "M3 7H11",
39
+ strokeWidth: 2,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round",
42
+ className: "opacity-0 group-has-indeterminate:opacity-100"
43
+ })]
44
+ }), o[22] = y) : y = o[22];
45
+ let b;
46
+ return o[23] === v ? b = o[24] : (b = /* @__PURE__ */ n("div", {
12
47
  className: "flex h-6 shrink-0 items-center",
13
- children: /* @__PURE__ */ n("div", {
48
+ children: /* @__PURE__ */ r("div", {
14
49
  className: "group grid size-4 grid-cols-1",
15
- children: [/* @__PURE__ */ t("input", {
16
- ...f,
17
- id: i,
18
- name: a,
19
- type: "checkbox",
20
- defaultValue: o,
21
- defaultChecked: s,
22
- checked: c,
23
- onChange: l,
24
- className: e("col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto", p, d)
25
- }), /* @__PURE__ */ n("svg", {
26
- fill: "none",
27
- viewBox: "0 0 14 14",
28
- className: "pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25",
29
- children: [/* @__PURE__ */ t("path", {
30
- d: "M3 8L6 11L11 3.5",
31
- strokeWidth: 2,
32
- strokeLinecap: "round",
33
- strokeLinejoin: "round",
34
- className: "opacity-0 group-has-checked:opacity-100"
35
- }), /* @__PURE__ */ t("path", {
36
- d: "M3 7H11",
37
- strokeWidth: 2,
38
- strokeLinecap: "round",
39
- strokeLinejoin: "round",
40
- className: "opacity-0 group-has-indeterminate:opacity-100"
41
- })]
42
- })]
50
+ children: [v, y]
43
51
  })
44
- });
52
+ }), o[23] = v, o[24] = b), b;
45
53
  };
46
54
  //#endregion
47
- export { i as Checkbox };
55
+ export { a as Checkbox };
48
56
 
49
57
  //# sourceMappingURL=index16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","names":[],"sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\nconst colorVariants = {\n red: \"checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700\",\n sky: \"checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600\",\n primary:\n \"checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary\",\n}\n\ninterface CheckboxProps\n extends Partial<Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">> {\n id: string;\n name: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n color?: keyof typeof colorVariants;\n};\n\nexport const Checkbox = ({\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps) => {\n\n const colorClasses = colorVariants[color]\n\n return (\n <div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,IAAM,IAAgB;CACpB,KAAK;CACL,KAAK;CACL,SACE;AACJ,GAWa,KAAY,EACvB,OACA,SACA,iBACA,mBACA,YACA,aACA,WAAQ,WACR,cACA,GAAG,QACgB;CAEnB,IAAM,IAAe,EAAc;CAEnC,OACE,kBAAC,OAAD;EAAK,WAAU;EACb,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,SAAD;IACE,GAAI;IACA;IACE;IACN,MAAK;IACS;IACE;IACP;IACC;IACV,WAAW,EACT,qQACA,GACA,CACF;GAAE,CAAA,GAEJ,kBAAC,OAAD;IACE,MAAK;IACL,SAAQ;IACR,WAAU;IAHZ,UAAA,CAKE,kBAAC,QAAD;KACE,GAAE;KACF,aAAa;KACb,eAAc;KACd,gBAAe;KACf,WAAU;IAAyC,CAAA,GAErD,kBAAC,QAAD;KACE,GAAE;KACF,aAAa;KACb,eAAc;KACd,gBAAe;KACf,WAAU;IAA+C,CAAA,CAExD;GACF,CAAA,CAAA;;CACF,CAAA;AAET"}
1
+ {"version":3,"file":"index16.js","names":["color = \"primary\"","{\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps","cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )","<input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />","<svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>","<div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>"],"sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\nconst colorVariants = {\n red: \"checked:border-red-700 checked:bg-red-700 indeterminate:border-red-700 indeterminate:bg-red-700 focus-visible:outline-red-700\",\n sky: \"checked:border-sky-600 checked:bg-sky-600 indeterminate:border-sky-600 indeterminate:bg-sky-600 focus-visible:outline-sky-600\",\n primary:\n \"checked:border-primary checked:bg-primary indeterminate:border-primary indeterminate:bg-primary focus-visible:outline-primary\",\n}\n\ninterface CheckboxProps\n extends Partial<Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\">> {\n id: string;\n name: string;\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n color?: keyof typeof colorVariants;\n};\n\nexport const Checkbox = ({\n id,\n name,\n defaultValue,\n defaultChecked,\n checked,\n onChange,\n color = \"primary\",\n className,\n ...props\n}: CheckboxProps) => {\n\n const colorClasses = colorVariants[color]\n\n return (\n <div className=\"flex h-6 shrink-0 items-center\">\n <div className=\"group grid size-4 grid-cols-1\">\n <input\n {...props}\n id={id}\n name={name}\n type=\"checkbox\"\n defaultValue={defaultValue}\n defaultChecked={defaultChecked}\n checked={checked}\n onChange={onChange}\n className={cn(\n \"col-start-1 row-start-1 appearance-none cursor-pointer rounded-sm border border-gray-300 bg-white focus-visible:outline-2 focus-visible:outline-offset-2 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto\",\n colorClasses,\n className,\n )}\n />\n <svg\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n className=\"pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-checked:opacity-100\"\n />\n <path\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-0 group-has-indeterminate:opacity-100\"\n />\n </svg>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;AAKA,IAAM,IAAgB;CACpB,KAAK;CACL,KAAK;CACL,SACE;AACJ,GAWa,KAAA,MAUQ;gBALnB,GAGA,GAJA,GADA,GAFA,GACA,GAIA,GAGG,GAFHA;CAPuBC,AAAAA,EAAAA,OAAAA,kGACvB,8EAMA,OAAA,iBAEA,GAAA,KATuBA;CAYvB,IAAM,IAAe,EALrB,MAAA,KAAA,IAAQ,YAARD,IAmBmBE;CAGT,AAAA,EAAA,QAAA,KAAA,EAAA,QADA,KAFS,IAAA,EACT,qQACA,GACA,CACF,GADE,EAAA,MAAA,GADA,EAAA,MAAA;CAXJC,IAAAA;CAOW,AAAA,EAAA,QAAA,KAAA,EAAA,QADO,KAAA,EAAA,QADF,KAAA,EAAA,QAHV,KAAA,EAAA,QACE,KAAA,EAAA,QAKI,KAAA,EAAA,QAPN,KAAA,EAAA,QAQOD,KATb,IAAA,kBAAC,SAAD;EACE,GAAI;EACA;EACE;EACN,MAAK;EACS;EACE;EACP;EACC;EACV,WAAWA;CAKZ,CAAA,GAPU,EAAA,MAAA,GADO,EAAA,MAAA,GADF,EAAA,MAAA,GAHV,EAAA,MAAA,GACE,EAAA,MAAA,GAKI,EAAA,MAAA,GAPN,EAAA,MAAA,GAQOA,EAAAA,MAAAA;CAMbE,IAAAA;sDAAC,IAAA,kBAAA,OAAD;EACE,MAAK;EACL,SAAQ;EACR,WAAU;EAHZ,UAAA,CAKE,kBAAC,QAAD;GACE,GAAE;GACF,aAAa;GACb,eAAc;GACd,gBAAe;GACf,WAAU;EACX,CAAA,GACD,kBAAC,QAAD;GACE,GAAE;GACF,aAAa;GACb,eAAc;GACd,gBAAe;GACf,WAAU;EACX,CAAA,CACE;;CApCTC,IAAAA;CADF,OAGMF,EAAAA,QAAAA,iBAFJ,IAAA,kBAAC,OAAD;EAAK,WAAU;EACb,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACEA,GAeAC,CAoBG;;CACF,CAAA,GApCDD,EAAAA,MAAAA,eAFJE;AAwCJ"}