@rpcbase/ui 0.218.0 → 0.219.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.
Files changed (275) hide show
  1. package/dist/components/AddressAutocompleteInput/index.d.ts.map +1 -1
  2. package/dist/index10.js +3 -3
  3. package/dist/index100.js +4 -5
  4. package/dist/index100.js.map +1 -1
  5. package/dist/index101.js +8 -4
  6. package/dist/index101.js.map +1 -1
  7. package/dist/index102.js +5 -8
  8. package/dist/index102.js.map +1 -1
  9. package/dist/index103.js +4 -5
  10. package/dist/index103.js.map +1 -1
  11. package/dist/index104.js +3 -3
  12. package/dist/index104.js.map +1 -1
  13. package/dist/index105.js +6 -4
  14. package/dist/index105.js.map +1 -1
  15. package/dist/index106.js +145 -6
  16. package/dist/index106.js.map +1 -1
  17. package/dist/index107.js +38 -144
  18. package/dist/index107.js.map +1 -1
  19. package/dist/index108.js +4 -39
  20. package/dist/index108.js.map +1 -1
  21. package/dist/index109.js +7 -4
  22. package/dist/index109.js.map +1 -1
  23. package/dist/index11.js +2 -2
  24. package/dist/index110.js +12 -6
  25. package/dist/index110.js.map +1 -1
  26. package/dist/index111.js +13 -13
  27. package/dist/index111.js.map +1 -1
  28. package/dist/index112.js +7 -13
  29. package/dist/index112.js.map +1 -1
  30. package/dist/index113.js +30 -6
  31. package/dist/index113.js.map +1 -1
  32. package/dist/index114.js +10 -31
  33. package/dist/index114.js.map +1 -1
  34. package/dist/index115.js +10 -10
  35. package/dist/index115.js.map +1 -1
  36. package/dist/index116.js +8 -10
  37. package/dist/index116.js.map +1 -1
  38. package/dist/index117.js +13 -8
  39. package/dist/index117.js.map +1 -1
  40. package/dist/index118.js +101 -13
  41. package/dist/index118.js.map +1 -1
  42. package/dist/index119.js +20 -102
  43. package/dist/index119.js.map +1 -1
  44. package/dist/index12.js +3 -3
  45. package/dist/index120.js +54 -20
  46. package/dist/index120.js.map +1 -1
  47. package/dist/index121.js +70 -51
  48. package/dist/index121.js.map +1 -1
  49. package/dist/index122.js +9 -72
  50. package/dist/index122.js.map +1 -1
  51. package/dist/index123.js +20 -9
  52. package/dist/index123.js.map +1 -1
  53. package/dist/index124.js +16 -20
  54. package/dist/index124.js.map +1 -1
  55. package/dist/index125.js +23 -16
  56. package/dist/index125.js.map +1 -1
  57. package/dist/index126.js +6 -23
  58. package/dist/index126.js.map +1 -1
  59. package/dist/index127.js +5 -6
  60. package/dist/index127.js.map +1 -1
  61. package/dist/index128.js +23 -5
  62. package/dist/index128.js.map +1 -1
  63. package/dist/index129.js +35 -24
  64. package/dist/index129.js.map +1 -1
  65. package/dist/index13.js +2 -2
  66. package/dist/index130.js +16 -35
  67. package/dist/index130.js.map +1 -1
  68. package/dist/index131.js +7 -16
  69. package/dist/index131.js.map +1 -1
  70. package/dist/index132.js +4 -6
  71. package/dist/index132.js.map +1 -1
  72. package/dist/index133.js +4 -4
  73. package/dist/index133.js.map +1 -1
  74. package/dist/index134.js +4 -4
  75. package/dist/index134.js.map +1 -1
  76. package/dist/index135.js +4 -4
  77. package/dist/index135.js.map +1 -1
  78. package/dist/index136.js +3 -4
  79. package/dist/index136.js.map +1 -1
  80. package/dist/index137.js +6 -3
  81. package/dist/index137.js.map +1 -1
  82. package/dist/index138.js +24 -7
  83. package/dist/index138.js.map +1 -1
  84. package/dist/index139.js +8 -24
  85. package/dist/index139.js.map +1 -1
  86. package/dist/index14.js +2 -2
  87. package/dist/index140.js +6 -7
  88. package/dist/index140.js.map +1 -1
  89. package/dist/index141.js +5 -6
  90. package/dist/index141.js.map +1 -1
  91. package/dist/index142.js +3 -5
  92. package/dist/index142.js.map +1 -1
  93. package/dist/index143.js +3 -3
  94. package/dist/index143.js.map +1 -1
  95. package/dist/index144.js +4 -3
  96. package/dist/index144.js.map +1 -1
  97. package/dist/index145.js +3 -4
  98. package/dist/index145.js.map +1 -1
  99. package/dist/index146.js +4 -3
  100. package/dist/index146.js.map +1 -1
  101. package/dist/index147.js +3 -4
  102. package/dist/index147.js.map +1 -1
  103. package/dist/index148.js +3 -3
  104. package/dist/index148.js.map +1 -1
  105. package/dist/index149.js +3 -3
  106. package/dist/index149.js.map +1 -1
  107. package/dist/index15.js +2 -2
  108. package/dist/index150.js +46 -3
  109. package/dist/index150.js.map +1 -1
  110. package/dist/index151.js +2 -2
  111. package/dist/index153.js +2 -2
  112. package/dist/index154.js +1 -1
  113. package/dist/index16.js +2 -2
  114. package/dist/index17.js +1 -1
  115. package/dist/index18.js +7 -7
  116. package/dist/index181.js +1 -1
  117. package/dist/index19.js +3 -3
  118. package/dist/index21.js +1 -1
  119. package/dist/index22.js +2 -2
  120. package/dist/index228.js +1 -1
  121. package/dist/index229.js +1 -1
  122. package/dist/index23.js +1 -1
  123. package/dist/index231.js +1 -1
  124. package/dist/index233.js +1 -1
  125. package/dist/index234.js +1 -1
  126. package/dist/index235.js +4 -4
  127. package/dist/index236.js +2 -2
  128. package/dist/index24.js +1 -1
  129. package/dist/index25.js +1 -1
  130. package/dist/index269.js +1 -1
  131. package/dist/index271.js +4 -4
  132. package/dist/index28.js +2 -2
  133. package/dist/index29.js +3 -37
  134. package/dist/index29.js.map +1 -1
  135. package/dist/index294.js +69 -65
  136. package/dist/index294.js.map +1 -1
  137. package/dist/index295.js +8 -68
  138. package/dist/index295.js.map +1 -1
  139. package/dist/index296.js +14 -9
  140. package/dist/index296.js.map +1 -1
  141. package/dist/index297.js +66 -14
  142. package/dist/index297.js.map +1 -1
  143. package/dist/index298.js +64 -65
  144. package/dist/index298.js.map +1 -1
  145. package/dist/index3.js +92 -86
  146. package/dist/index3.js.map +1 -1
  147. package/dist/index30.js +125 -3
  148. package/dist/index30.js.map +1 -1
  149. package/dist/index31.js +227 -120
  150. package/dist/index31.js.map +1 -1
  151. package/dist/index32.js +21 -229
  152. package/dist/index32.js.map +1 -1
  153. package/dist/index33.js +50 -23
  154. package/dist/index33.js.map +1 -1
  155. package/dist/index34.js +21 -50
  156. package/dist/index34.js.map +1 -1
  157. package/dist/index35.js +126 -18
  158. package/dist/index35.js.map +1 -1
  159. package/dist/index36.js +205 -113
  160. package/dist/index36.js.map +1 -1
  161. package/dist/index37.js +74 -205
  162. package/dist/index37.js.map +1 -1
  163. package/dist/index38.js +115 -87
  164. package/dist/index38.js.map +1 -1
  165. package/dist/index39.js +5 -118
  166. package/dist/index39.js.map +1 -1
  167. package/dist/index4.js +2 -2
  168. package/dist/index40.js +819 -5
  169. package/dist/index40.js.map +1 -1
  170. package/dist/index41.js +56 -819
  171. package/dist/index41.js.map +1 -1
  172. package/dist/index42.js +37 -57
  173. package/dist/index42.js.map +1 -1
  174. package/dist/index45.js +1 -1
  175. package/dist/index46.js +1 -1
  176. package/dist/index49.js +1 -1
  177. package/dist/index5.js +2 -2
  178. package/dist/index50.js +1 -1
  179. package/dist/index51.js +7 -2
  180. package/dist/index51.js.map +1 -1
  181. package/dist/index52.js +34 -2
  182. package/dist/index52.js.map +1 -1
  183. package/dist/index53.js +49 -2
  184. package/dist/index53.js.map +1 -1
  185. package/dist/index54.js +8 -2
  186. package/dist/index54.js.map +1 -1
  187. package/dist/index55.js +11 -6
  188. package/dist/index55.js.map +1 -1
  189. package/dist/index56.js +2 -34
  190. package/dist/index56.js.map +1 -1
  191. package/dist/index57.js +2 -49
  192. package/dist/index57.js.map +1 -1
  193. package/dist/index58.js +3 -7
  194. package/dist/index58.js.map +1 -1
  195. package/dist/index59.js +47 -11
  196. package/dist/index59.js.map +1 -1
  197. package/dist/index6.js +5 -5
  198. package/dist/index60.js +50 -3
  199. package/dist/index60.js.map +1 -1
  200. package/dist/index61.js +7 -47
  201. package/dist/index61.js.map +1 -1
  202. package/dist/index62.js +12 -48
  203. package/dist/index62.js.map +1 -1
  204. package/dist/index63.js +133 -7
  205. package/dist/index63.js.map +1 -1
  206. package/dist/index64.js +10 -14
  207. package/dist/index64.js.map +1 -1
  208. package/dist/index65.js +210 -127
  209. package/dist/index65.js.map +1 -1
  210. package/dist/index66.js +12 -10
  211. package/dist/index66.js.map +1 -1
  212. package/dist/index67.js +44 -214
  213. package/dist/index67.js.map +1 -1
  214. package/dist/index68.js +49 -12
  215. package/dist/index68.js.map +1 -1
  216. package/dist/index69.js +4 -47
  217. package/dist/index69.js.map +1 -1
  218. package/dist/index7.js +2 -2
  219. package/dist/index70.js +5 -49
  220. package/dist/index70.js.map +1 -1
  221. package/dist/index71.js +28 -4
  222. package/dist/index71.js.map +1 -1
  223. package/dist/index72.js +50 -6
  224. package/dist/index72.js.map +1 -1
  225. package/dist/index73.js +9 -28
  226. package/dist/index73.js.map +1 -1
  227. package/dist/index74.js +2 -50
  228. package/dist/index74.js.map +1 -1
  229. package/dist/index75.js +2 -9
  230. package/dist/index75.js.map +1 -1
  231. package/dist/index79.js +52 -47
  232. package/dist/index79.js.map +1 -1
  233. package/dist/index8.js +3 -3
  234. package/dist/index80.js +5 -52
  235. package/dist/index80.js.map +1 -1
  236. package/dist/index81.js +4 -4
  237. package/dist/index81.js.map +1 -1
  238. package/dist/index82.js +15 -4
  239. package/dist/index82.js.map +1 -1
  240. package/dist/index83.js +5 -15
  241. package/dist/index83.js.map +1 -1
  242. package/dist/index84.js +7 -5
  243. package/dist/index84.js.map +1 -1
  244. package/dist/index85.js +15 -6
  245. package/dist/index85.js.map +1 -1
  246. package/dist/index86.js +4 -16
  247. package/dist/index86.js.map +1 -1
  248. package/dist/index87.js +1 -1
  249. package/dist/index87.js.map +1 -1
  250. package/dist/index88.js +5 -4
  251. package/dist/index88.js.map +1 -1
  252. package/dist/index89.js +4 -4
  253. package/dist/index89.js.map +1 -1
  254. package/dist/index9.js +1 -1
  255. package/dist/index90.js +4 -5
  256. package/dist/index90.js.map +1 -1
  257. package/dist/index91.js +2 -2
  258. package/dist/index91.js.map +1 -1
  259. package/dist/index92.js +5 -3
  260. package/dist/index92.js.map +1 -1
  261. package/dist/index93.js +24 -6
  262. package/dist/index93.js.map +1 -1
  263. package/dist/index94.js +6 -24
  264. package/dist/index94.js.map +1 -1
  265. package/dist/index95.js +4 -6
  266. package/dist/index95.js.map +1 -1
  267. package/dist/index96.js +5 -3
  268. package/dist/index96.js.map +1 -1
  269. package/dist/index97.js +5 -6
  270. package/dist/index97.js.map +1 -1
  271. package/dist/index98.js +4 -5
  272. package/dist/index98.js.map +1 -1
  273. package/dist/index99.js +4 -3
  274. package/dist/index99.js.map +1 -1
  275. package/package.json +1 -1
package/dist/index3.js CHANGED
@@ -1,74 +1,75 @@
1
- import { j as c } from "./index30.js";
2
- import { c as V } from "./index28.js";
3
- import { useState as N, useRef as b, useMemo as X, useEffect as O } from "react";
4
- import { clsx as Z } from "./index26.js";
5
- import { useMapsLibrary as ee } from "./index22.js";
6
- import { Input as te } from "./index14.js";
7
- import { cn as re } from "./index2.js";
8
- const ne = /* @__PURE__ */ new Set(["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"]), U = (n) => (n.text?.text ?? "").replace(/, France$/, "").trim(), se = (n) => {
9
- const e = V.c(8), {
1
+ import { j as c } from "./index28.js";
2
+ import { c as Z } from "./index29.js";
3
+ import { useState as S, useRef as w, useMemo as ee, useEffect as O } from "react";
4
+ import { clsx as te } from "./index26.js";
5
+ import { Loader2 as re } from "lucide-react";
6
+ import { useMapsLibrary as se } from "./index22.js";
7
+ import { Input as ne } from "./index14.js";
8
+ import { cn as oe } from "./index2.js";
9
+ const le = /* @__PURE__ */ new Set(["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"]), q = (n) => (n.text?.text ?? "").replace(/, France$/, "").trim(), ie = (n) => {
10
+ const e = Z.c(8), {
10
11
  prediction: l
11
12
  } = n;
12
- let r, o, d;
13
+ let r, o, m;
13
14
  if (e[0] !== l) {
14
- d = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
15
+ m = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
15
16
  e: {
16
- r = U(l);
17
- const h = l.text?.text ?? "", E = l.text?.matches ?? [], F = r.length < h.length;
18
- if (E.length === 0) {
19
- d = /* @__PURE__ */ c.jsx(c.Fragment, { children: r });
17
+ r = q(l);
18
+ const h = l.text?.text ?? "", P = l.text?.matches ?? [], F = r.length < h.length;
19
+ if (P.length === 0) {
20
+ m = /* @__PURE__ */ c.jsx(c.Fragment, { children: r });
20
21
  break e;
21
22
  }
22
23
  o = [];
23
24
  let f = 0;
24
- E.forEach((y, u) => {
25
+ P.forEach((y, u) => {
25
26
  if (F && y.startOffset >= r.length)
26
27
  return;
27
28
  const g = y.startOffset, i = Math.min(y.endOffset, r.length);
28
29
  if (g > f && o.push(r.substring(f, g)), i > g) {
29
- const m = r.substring(g, i);
30
- o.push(/* @__PURE__ */ c.jsx("strong", { children: m }, u));
30
+ const d = r.substring(g, i);
31
+ o.push(/* @__PURE__ */ c.jsx("strong", { children: d }, u));
31
32
  }
32
33
  f = Math.max(f, i);
33
34
  }), f < r.length && o.push(r.substring(f));
34
35
  }
35
- e[0] = l, e[1] = r, e[2] = o, e[3] = d;
36
+ e[0] = l, e[1] = r, e[2] = o, e[3] = m;
36
37
  } else
37
- r = e[1], o = e[2], d = e[3];
38
- if (d !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel"))
39
- return d;
38
+ r = e[1], o = e[2], m = e[3];
39
+ if (m !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel"))
40
+ return m;
40
41
  if (o.length === 0) {
41
42
  let h;
42
43
  return e[4] !== r ? (h = /* @__PURE__ */ c.jsx(c.Fragment, { children: r }), e[4] = r, e[5] = h) : h = e[5], h;
43
44
  }
44
45
  let p;
45
46
  return e[6] !== o ? (p = /* @__PURE__ */ c.jsx(c.Fragment, { children: o }), e[6] = o, e[7] = p) : p = e[7], p;
46
- }, oe = (n, e) => !n.types || n.types.length === 0 || !e || e.size === 0 ? !0 : n.types.some((l) => e.has(l)), le = (n, e) => n.placeId || `${n.text?.text ?? "prediction"}-${e}`, ie = (n) => {
47
+ }, ce = (n, e) => !n.types || n.types.length === 0 || !e || e.size === 0 ? !0 : n.types.some((l) => e.has(l)), ae = (n, e) => n.placeId || `${n.text?.text ?? "prediction"}-${e}`, ue = (n) => {
47
48
  const e = /* @__PURE__ */ new Map();
48
49
  return n.forEach((l) => {
49
50
  const r = l.placeId;
50
51
  r && (e.has(r) || e.set(r, l));
51
52
  }), Array.from(e.values());
52
- }, ce = (n, e) => n.filter((l) => oe(l, e)), ae = (n) => n.sort((e, l) => {
53
+ }, fe = (n, e) => n.filter((l) => ce(l, e)), de = (n) => n.sort((e, l) => {
53
54
  const r = e.distanceMeters ?? Number.POSITIVE_INFINITY, o = l.distanceMeters ?? Number.POSITIVE_INFINITY;
54
55
  return r - o;
55
- }), ue = (n, e) => ae(ce(ie(n), e)), fe = (n, e) => U(n).toLowerCase() === e.trim().toLowerCase(), ve = ({
56
+ }), me = (n, e) => de(fe(ue(n), e)), pe = (n, e) => q(n).toLowerCase() === e.trim().toLowerCase(), Ie = ({
56
57
  id: n,
57
58
  label: e,
58
59
  placeholder: l,
59
60
  value: r,
60
61
  onValueChange: o,
61
- disabled: d,
62
+ disabled: m,
62
63
  name: p,
63
64
  className: h,
64
- autofillShimName: E,
65
+ autofillShimName: P,
65
66
  googleMapsApiKey: F,
66
67
  locationRestriction: f,
67
68
  allowedTypes: y
68
69
  }) => {
69
- const [u, g] = N(r ?? ""), [i, m] = N([]), [S, a] = N(!1), [v, M] = N(-1), L = b(null), P = b(null), R = b(!1), k = b(!1), x = b(null), $ = b([]), _ = b("smooth"), B = ee("places", F), q = X(() => {
70
+ const [u, g] = S(r ?? ""), [i, d] = S([]), [j, a] = S(!1), [v, M] = S(-1), [H, b] = S(!1), R = w(null), N = w(null), $ = w(!1), k = w(!1), x = w(null), B = w([]), I = w("smooth"), C = se("places", F), Y = ee(() => {
70
71
  if (!y)
71
- return ne;
72
+ return le;
72
73
  const t = /* @__PURE__ */ new Set();
73
74
  for (const s of y)
74
75
  t.add(s);
@@ -77,105 +78,110 @@ const ne = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
77
78
  O(() => {
78
79
  g(r ?? ""), k.current = !1;
79
80
  }, [r]), O(() => {
80
- if (R.current) {
81
- R.current = !1;
81
+ if ($.current) {
82
+ $.current = !1;
82
83
  return;
83
84
  }
84
- let t = !0;
85
- const s = setTimeout(() => {
86
- if (!t)
85
+ const t = u.trim();
86
+ b(t !== "");
87
+ let s = !0;
88
+ const _ = setTimeout(() => {
89
+ if (!s)
87
90
  return;
88
- if (u.trim() === "") {
89
- m([]), a(!1), x.current = null, r !== "" && o("");
91
+ if (t === "") {
92
+ d([]), a(!1), x.current = null, r !== "" && o("");
90
93
  return;
91
94
  }
92
- if (!B) return;
95
+ if (!C) return;
93
96
  const {
94
- AutocompleteSuggestion: I,
95
- AutocompleteSessionToken: j
96
- } = B;
97
- if (!I || !j) {
98
- console.error("AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports"), m([]), a(!1);
97
+ AutocompleteSuggestion: A,
98
+ AutocompleteSessionToken: L
99
+ } = C;
100
+ if (!A || !L) {
101
+ console.error("AddressAutocompleteInput: missing AutocompleteSuggestion or AutocompleteSessionToken exports"), d([]), a(!1), b(!1);
99
102
  return;
100
103
  }
101
- x.current || (x.current = new j());
102
- const A = {
104
+ x.current || (x.current = new L());
105
+ const T = {
103
106
  input: u,
104
107
  sessionToken: x.current ?? void 0,
105
108
  includedRegionCodes: ["fr"]
106
109
  };
107
- f && (A.locationRestriction = f), I.fetchAutocompleteSuggestions(A).then((T) => {
108
- if (!t)
110
+ f && (T.locationRestriction = f), A.fetchAutocompleteSuggestions(T).then((D) => {
111
+ if (!s)
109
112
  return;
110
- const J = T.suggestions.map((C) => C.placePrediction).filter((C) => !!C), D = ue(J, q), z = D[0], Q = z && D.length === 1 && fe(z, u);
111
- if (!k.current && Q) {
112
- m(D), a(!1);
113
+ const V = D.suggestions.map((U) => U.placePrediction).filter((U) => !!U), E = me(V, Y), W = E[0], X = W && E.length === 1 && pe(W, u);
114
+ if (!k.current && X) {
115
+ d(E), a(!1), b(!1);
113
116
  return;
114
117
  }
115
- D.length > 0 ? (m(D), k.current && a(!0), M(-1)) : (m([]), a(!1));
116
- }).catch((T) => {
117
- t && (console.error("AddressAutocompleteInput: suggestion fetch failed", T), m([]), a(!1));
118
+ E.length > 0 ? (d(E), k.current && a(!0), M(-1)) : (d([]), a(!1)), b(!1);
119
+ }).catch((D) => {
120
+ s && (console.error("AddressAutocompleteInput: suggestion fetch failed", D), d([]), a(!1), b(!1));
118
121
  });
119
122
  }, 300);
120
123
  return () => {
121
- t = !1, clearTimeout(s);
124
+ s = !1, clearTimeout(_);
122
125
  };
123
- }, [u, B, o, r, f, q]), O(() => {
126
+ }, [u, C, o, r, f, Y]), O(() => {
124
127
  const t = (s) => {
125
- L.current && !L.current.contains(s.target) && P.current && !P.current.contains(s.target) && a(!1);
128
+ R.current && !R.current.contains(s.target) && N.current && !N.current.contains(s.target) && a(!1);
126
129
  };
127
130
  return document.addEventListener("mousedown", t), () => {
128
131
  document.removeEventListener("mousedown", t);
129
132
  };
130
133
  }, []);
131
- const H = (t) => {
132
- R.current = !0;
133
- const s = U(t);
134
- g(s), o(s), m([]), a(!1), x.current = null;
135
- }, K = (t) => {
134
+ const z = (t) => {
135
+ $.current = !0;
136
+ const s = q(t);
137
+ g(s), o(s), d([]), a(!1), b(!1), x.current = null;
138
+ }, G = (t) => {
136
139
  k.current = !0, g(t.target.value);
137
- }, W = (t) => {
138
- if (!S || i.length === 0) {
140
+ }, J = (t) => {
141
+ if (!j || i.length === 0) {
139
142
  t.key === "Enter" && (t.preventDefault(), o(u), a(!1), x.current = null);
140
143
  return;
141
144
  }
142
- t.key === "ArrowDown" ? (_.current = t.repeat ? "auto" : "smooth", t.preventDefault(), M((s) => i.length === 0 ? -1 : s < 0 ? 0 : (s + 1) % i.length)) : t.key === "ArrowUp" ? (_.current = t.repeat ? "auto" : "smooth", t.preventDefault(), M((s) => i.length === 0 ? -1 : s <= 0 ? i.length - 1 : (s - 1) % i.length)) : t.key === "Enter" ? (t.preventDefault(), v > -1 && i[v] ? H(i[v]) : (o(u), a(!1), x.current = null)) : t.key === "Escape" && a(!1);
143
- }, G = () => {
145
+ t.key === "ArrowDown" ? (I.current = t.repeat ? "auto" : "smooth", t.preventDefault(), M((s) => i.length === 0 ? -1 : s < 0 ? 0 : (s + 1) % i.length)) : t.key === "ArrowUp" ? (I.current = t.repeat ? "auto" : "smooth", t.preventDefault(), M((s) => i.length === 0 ? -1 : s <= 0 ? i.length - 1 : (s - 1) % i.length)) : t.key === "Enter" ? (t.preventDefault(), v > -1 && i[v] ? z(i[v]) : (o(u), a(!1), x.current = null)) : t.key === "Escape" && a(!1);
146
+ }, Q = () => {
144
147
  a(!1), r !== u && o(u), x.current = null;
145
- }, Y = E ?? (p ? `${p}_shim` : void 0);
148
+ }, K = P ?? (p ? `${p}_shim` : void 0);
146
149
  return O(() => {
147
- if (!S || v < 0) {
148
- _.current = "smooth";
150
+ if (!j || v < 0) {
151
+ I.current = "smooth";
149
152
  return;
150
153
  }
151
- const t = $.current[v], s = P.current;
154
+ const t = B.current[v], s = N.current;
152
155
  if (!t || !s) {
153
- _.current = "smooth";
156
+ I.current = "smooth";
154
157
  return;
155
158
  }
156
- const w = _.current;
157
- _.current = "smooth";
158
- const I = t.offsetTop, j = I + t.offsetHeight, A = s.scrollTop, T = A + s.clientHeight;
159
- I >= A && j <= T || t.scrollIntoView({
159
+ const _ = I.current;
160
+ I.current = "smooth";
161
+ const A = t.offsetTop, L = A + t.offsetHeight, T = s.scrollTop, D = T + s.clientHeight;
162
+ A >= T && L <= D || t.scrollIntoView({
160
163
  block: "nearest",
161
- behavior: w
164
+ behavior: _
162
165
  });
163
- }, [v, S]), $.current.length = i.length, /* @__PURE__ */ c.jsxs("div", { className: "relative", children: [
164
- Y && /* @__PURE__ */ c.jsx("input", { tabIndex: -1, autoComplete: "street-address", name: Y, "aria-hidden": "true", className: "pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0" }),
166
+ }, [v, j]), B.current.length = i.length, /* @__PURE__ */ c.jsxs("div", { className: "relative", children: [
167
+ K && /* @__PURE__ */ c.jsx("input", { tabIndex: -1, autoComplete: "street-address", name: K, "aria-hidden": "true", className: "pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0" }),
165
168
  /* @__PURE__ */ c.jsx("label", { htmlFor: n, className: "text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer", children: e }),
166
- /* @__PURE__ */ c.jsx(te, { ref: L, id: n, type: "text", placeholder: l, name: p ?? `${n}_input`, value: u, onChange: K, onKeyDown: W, onFocus: () => {
167
- i.length > 0 && u && a(!0);
168
- }, onBlur: G, disabled: d, autoComplete: "off", className: re("w-full", h) }),
169
- S && i.length > 0 && /* @__PURE__ */ c.jsx("ul", { ref: P, 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", role: "listbox", children: i.map((t, s) => /* @__PURE__ */ c.jsx("li", { ref: (w) => {
170
- $.current[s] = w;
171
- }, className: Z("cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100", {
169
+ /* @__PURE__ */ c.jsxs("div", { className: "relative", children: [
170
+ /* @__PURE__ */ c.jsx(ne, { ref: R, id: n, type: "text", placeholder: l, name: p ?? `${n}_input`, value: u, onChange: G, onKeyDown: J, onFocus: () => {
171
+ i.length > 0 && u && a(!0);
172
+ }, onBlur: Q, disabled: m, autoComplete: "off", className: oe("w-full", H && "pr-9", h) }),
173
+ H && /* @__PURE__ */ c.jsx(re, { className: "pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 animate-spin text-gray-400", "aria-hidden": "true" })
174
+ ] }),
175
+ j && i.length > 0 && /* @__PURE__ */ c.jsx("ul", { ref: 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", role: "listbox", children: i.map((t, s) => /* @__PURE__ */ c.jsx("li", { ref: (_) => {
176
+ B.current[s] = _;
177
+ }, className: te("cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100", {
172
178
  "bg-gray-100": v === s
173
- }), role: "option", onMouseDown: (w) => {
174
- w.preventDefault(), H(t);
175
- }, children: /* @__PURE__ */ c.jsx(se, { prediction: t }) }, le(t, s))) })
179
+ }), role: "option", onMouseDown: (_) => {
180
+ _.preventDefault(), z(t);
181
+ }, children: /* @__PURE__ */ c.jsx(ie, { prediction: t }) }, ae(t, s))) })
176
182
  ] });
177
183
  };
178
184
  export {
179
- ve as AddressAutocompleteInput
185
+ Ie as AddressAutocompleteInput
180
186
  };
181
187
  //# sourceMappingURL=index3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.js","sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["import { ReactNode, ChangeEvent, KeyboardEvent, useState, useEffect, useRef, useMemo } from \"react\"\nimport clsx from \"clsx\"\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 getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = 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 = 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 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}: {\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}) => {\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\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 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 let isActive = true\n\n const handler = setTimeout(() => {\n if (!isActive) {\n return\n }\n\n const trimmed = inputValue.trim()\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 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((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\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 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 })\n .catch((error: unknown) => {\n if (!isActive) {\n return\n }\n console.error(\"AddressAutocompleteInput: suggestion fetch failed\", error)\n setPredictions([])\n setIsDropdownOpen(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 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 className=\"pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0\"\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 <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=\"off\"\n className={cn(\"w-full\", className)}\n />\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"],"names":["DEFAULT_ALLOWED_TYPES","Set","getDisplayText","prediction","text","replace","trim","PredictionItem","t0","$","_c","displayText","parts","t1","Symbol","for","bb0","fullText","matches","wasCountryRemoved","length","lastIndex","forEach","substring","index","startOffset","endOffset","Math","min","push","matched","jsx","max","t2","isAllowedPrediction","allowedTypes","types","size","some","type","has","getPredictionId","placeId","getUniquePredictions","predictions","map","Map","key","set","Array","from","values","getFilteredPredictions","filter","sortPredictions","sort","a","b","aDistance","distanceMeters","Number","POSITIVE_INFINITY","bDistance","buildDisplayPredictions","isExactMatch","value","toLowerCase","AddressAutocompleteInput","id","label","placeholder","onValueChange","disabled","name","className","autofillShimName","googleMapsApiKey","locationRestriction","inputValue","setInputValue","useState","setPredictions","isDropdownOpen","setIsDropdownOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","dropdownRef","isSelecting","hasUserTyped","sessionTokenRef","optionRefs","scrollBehaviorRef","placesLibrary","useMapsLibrary","allowedTypesSet","useMemo","newSet","add","useEffect","current","isActive","handler","setTimeout","AutocompleteSuggestion","AutocompleteSessionToken","console","error","request","input","sessionToken","undefined","includedRegionCodes","fetchAutocompleteSuggestions","then","response","placePredictions","suggestions","suggestion","placePrediction","Boolean","combinedPredictions","singlePrediction","hasExactMatch","catch","clearTimeout","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","handleSelectPrediction","newAddress","handleInputChange","e","handleKeyDown","preventDefault","repeat","prev","handleBlur","shimName","item","list","behavior","top","offsetTop","bottom","offsetHeight","viewTop","scrollTop","viewBottom","clientHeight","scrollIntoView","block","jsxs","Input","cn","node","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"index3.js","sources":["../src/components/AddressAutocompleteInput/index.tsx"],"sourcesContent":["import { 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 getDisplayText = (prediction: google.maps.places.PlacePrediction) => {\n const fullText = 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 = 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 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}: {\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}) => {\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 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((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\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 className=\"pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0\"\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=\"off\"\n className={cn(\"w-full\", isLoading && \"pr-9\", className)}\n />\n {isLoading && (\n <Loader2\n className=\"pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 animate-spin text-gray-400\"\n aria-hidden=\"true\"\n />\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"],"names":["DEFAULT_ALLOWED_TYPES","Set","getDisplayText","prediction","text","replace","trim","PredictionItem","t0","$","_c","displayText","parts","t1","Symbol","for","bb0","fullText","matches","wasCountryRemoved","length","lastIndex","forEach","substring","index","startOffset","endOffset","Math","min","push","matched","jsx","max","t2","isAllowedPrediction","allowedTypes","types","size","some","type","has","getPredictionId","placeId","getUniquePredictions","predictions","map","Map","key","set","Array","from","values","getFilteredPredictions","filter","sortPredictions","sort","a","b","aDistance","distanceMeters","Number","POSITIVE_INFINITY","bDistance","buildDisplayPredictions","isExactMatch","value","toLowerCase","AddressAutocompleteInput","id","label","placeholder","onValueChange","disabled","name","className","autofillShimName","googleMapsApiKey","locationRestriction","inputValue","setInputValue","useState","setPredictions","isDropdownOpen","setIsDropdownOpen","highlightedIndex","setHighlightedIndex","isLoading","setIsLoading","inputRef","useRef","dropdownRef","isSelecting","hasUserTyped","sessionTokenRef","optionRefs","scrollBehaviorRef","placesLibrary","useMapsLibrary","allowedTypesSet","useMemo","newSet","add","useEffect","current","trimmed","isActive","handler","setTimeout","AutocompleteSuggestion","AutocompleteSessionToken","console","error","request","input","sessionToken","undefined","includedRegionCodes","fetchAutocompleteSuggestions","then","response","placePredictions","suggestions","suggestion","placePrediction","Boolean","combinedPredictions","singlePrediction","hasExactMatch","catch","clearTimeout","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","handleSelectPrediction","newAddress","handleInputChange","e","handleKeyDown","preventDefault","repeat","prev","handleBlur","shimName","item","list","behavior","top","offsetTop","bottom","offsetHeight","viewTop","scrollTop","viewBottom","clientHeight","scrollIntoView","block","jsxs","Input","cn","Loader2","node","clsx"],"mappings":"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"}
package/dist/index30.js CHANGED
@@ -1,6 +1,128 @@
1
- import { __require as r } from "./index47.js";
2
- var i = r();
1
+ import * as s from "react";
2
+ import { composeEventHandlers as h } from "./index51.js";
3
+ import { Primitive as w, dispatchDiscreteCustomEvent as k } from "./index52.js";
4
+ import { useComposedRefs as R } from "./index53.js";
5
+ import { useCallbackRef as g } from "./index54.js";
6
+ import { useEscapeKeydown as U } from "./index55.js";
7
+ import { j as x } from "./index28.js";
8
+ var j = "DismissableLayer", p = "dismissableLayer.update", z = "dismissableLayer.pointerDownOutside", H = "dismissableLayer.focusOutside", C, T = s.createContext({
9
+ layers: /* @__PURE__ */ new Set(),
10
+ layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),
11
+ branches: /* @__PURE__ */ new Set()
12
+ }), M = s.forwardRef(
13
+ (n, e) => {
14
+ const {
15
+ disableOutsidePointerEvents: r = !1,
16
+ onEscapeKeyDown: a,
17
+ onPointerDownOutside: i,
18
+ onFocusOutside: c,
19
+ onInteractOutside: f,
20
+ onDismiss: d,
21
+ ...E
22
+ } = n, o = s.useContext(T), [u, F] = s.useState(null), l = u?.ownerDocument ?? globalThis?.document, [, I] = s.useState({}), S = R(e, (t) => F(t)), y = Array.from(o.layers), [W] = [...o.layersWithOutsidePointerEventsDisabled].slice(-1), A = y.indexOf(W), b = u ? y.indexOf(u) : -1, N = o.layersWithOutsidePointerEventsDisabled.size > 0, D = b >= A, _ = Y((t) => {
23
+ const v = t.target, P = [...o.branches].some((m) => m.contains(v));
24
+ !D || P || (i?.(t), f?.(t), t.defaultPrevented || d?.());
25
+ }, l), O = q((t) => {
26
+ const v = t.target;
27
+ [...o.branches].some((m) => m.contains(v)) || (c?.(t), f?.(t), t.defaultPrevented || d?.());
28
+ }, l);
29
+ return U((t) => {
30
+ b === o.layers.size - 1 && (a?.(t), !t.defaultPrevented && d && (t.preventDefault(), d()));
31
+ }, l), s.useEffect(() => {
32
+ if (u)
33
+ return r && (o.layersWithOutsidePointerEventsDisabled.size === 0 && (C = l.body.style.pointerEvents, l.body.style.pointerEvents = "none"), o.layersWithOutsidePointerEventsDisabled.add(u)), o.layers.add(u), L(), () => {
34
+ r && o.layersWithOutsidePointerEventsDisabled.size === 1 && (l.body.style.pointerEvents = C);
35
+ };
36
+ }, [u, l, r, o]), s.useEffect(() => () => {
37
+ u && (o.layers.delete(u), o.layersWithOutsidePointerEventsDisabled.delete(u), L());
38
+ }, [u, o]), s.useEffect(() => {
39
+ const t = () => I({});
40
+ return document.addEventListener(p, t), () => document.removeEventListener(p, t);
41
+ }, []), /* @__PURE__ */ x.jsx(
42
+ w.div,
43
+ {
44
+ ...E,
45
+ ref: S,
46
+ style: {
47
+ pointerEvents: N ? D ? "auto" : "none" : void 0,
48
+ ...n.style
49
+ },
50
+ onFocusCapture: h(n.onFocusCapture, O.onFocusCapture),
51
+ onBlurCapture: h(n.onBlurCapture, O.onBlurCapture),
52
+ onPointerDownCapture: h(
53
+ n.onPointerDownCapture,
54
+ _.onPointerDownCapture
55
+ )
56
+ }
57
+ );
58
+ }
59
+ );
60
+ M.displayName = j;
61
+ var K = "DismissableLayerBranch", X = s.forwardRef((n, e) => {
62
+ const r = s.useContext(T), a = s.useRef(null), i = R(e, a);
63
+ return s.useEffect(() => {
64
+ const c = a.current;
65
+ if (c)
66
+ return r.branches.add(c), () => {
67
+ r.branches.delete(c);
68
+ };
69
+ }, [r.branches]), /* @__PURE__ */ x.jsx(w.div, { ...n, ref: i });
70
+ });
71
+ X.displayName = K;
72
+ function Y(n, e = globalThis?.document) {
73
+ const r = g(n), a = s.useRef(!1), i = s.useRef(() => {
74
+ });
75
+ return s.useEffect(() => {
76
+ const c = (d) => {
77
+ if (d.target && !a.current) {
78
+ let E = function() {
79
+ B(
80
+ z,
81
+ r,
82
+ o,
83
+ { discrete: !0 }
84
+ );
85
+ };
86
+ const o = { originalEvent: d };
87
+ d.pointerType === "touch" ? (e.removeEventListener("click", i.current), i.current = E, e.addEventListener("click", i.current, { once: !0 })) : E();
88
+ } else
89
+ e.removeEventListener("click", i.current);
90
+ a.current = !1;
91
+ }, f = window.setTimeout(() => {
92
+ e.addEventListener("pointerdown", c);
93
+ }, 0);
94
+ return () => {
95
+ window.clearTimeout(f), e.removeEventListener("pointerdown", c), e.removeEventListener("click", i.current);
96
+ };
97
+ }, [e, r]), {
98
+ // ensures we check React component tree (not just DOM tree)
99
+ onPointerDownCapture: () => a.current = !0
100
+ };
101
+ }
102
+ function q(n, e = globalThis?.document) {
103
+ const r = g(n), a = s.useRef(!1);
104
+ return s.useEffect(() => {
105
+ const i = (c) => {
106
+ c.target && !a.current && B(H, r, { originalEvent: c }, {
107
+ discrete: !1
108
+ });
109
+ };
110
+ return e.addEventListener("focusin", i), () => e.removeEventListener("focusin", i);
111
+ }, [e, r]), {
112
+ onFocusCapture: () => a.current = !0,
113
+ onBlurCapture: () => a.current = !1
114
+ };
115
+ }
116
+ function L() {
117
+ const n = new CustomEvent(p);
118
+ document.dispatchEvent(n);
119
+ }
120
+ function B(n, e, r, { discrete: a }) {
121
+ const i = r.originalEvent.target, c = new CustomEvent(n, { bubbles: !1, cancelable: !0, detail: r });
122
+ e && i.addEventListener(n, e, { once: !0 }), a ? k(i, c) : i.dispatchEvent(c);
123
+ }
3
124
  export {
4
- i as j
125
+ M as DismissableLayer,
126
+ X as DismissableLayerBranch
5
127
  };
6
128
  //# sourceMappingURL=index30.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index30.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index30.js","sources":["../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","React","DismissableLayer","props","forwardedRef","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","context","node","setNode","ownerDocument","force","composedRefs","useComposedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","index","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","event","target","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","useEscapeKeydown","dispatchUpdate","handleUpdate","jsx","Primitive","composeEventHandlers","BRANCH_NAME","DismissableLayerBranch","ref","handlePointerDownOutside","useCallbackRef","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","name","handler","detail","discrete","dispatchDiscreteCustomEvent"],"mappings":"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","x_google_ignoreList":[0]}