@rpcbase/ui 0.219.0 → 0.220.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 (96) hide show
  1. package/dist/components/AddressAutocompleteInput/index.d.ts.map +1 -1
  2. package/dist/index10.js +3 -3
  3. package/dist/index107.js +1 -1
  4. package/dist/index11.js +2 -2
  5. package/dist/index12.js +3 -3
  6. package/dist/index13.js +2 -2
  7. package/dist/index14.js +2 -2
  8. package/dist/index15.js +2 -2
  9. package/dist/index150.js +2 -2
  10. package/dist/index151.js +2 -2
  11. package/dist/index153.js +2 -2
  12. package/dist/index16.js +2 -2
  13. package/dist/index17.js +1 -1
  14. package/dist/index18.js +7 -7
  15. package/dist/index19.js +3 -3
  16. package/dist/index21.js +1 -1
  17. package/dist/index22.js +2 -2
  18. package/dist/index229.js +1 -1
  19. package/dist/index23.js +1 -1
  20. package/dist/index235.js +1 -1
  21. package/dist/index24.js +1 -1
  22. package/dist/index25.js +1 -1
  23. package/dist/index28.js +2 -2
  24. package/dist/index29.js +37 -3
  25. package/dist/index29.js.map +1 -1
  26. package/dist/index3.js +18 -12
  27. package/dist/index3.js.map +1 -1
  28. package/dist/index30.js +3 -125
  29. package/dist/index30.js.map +1 -1
  30. package/dist/index31.js +120 -227
  31. package/dist/index31.js.map +1 -1
  32. package/dist/index32.js +229 -21
  33. package/dist/index32.js.map +1 -1
  34. package/dist/index33.js +23 -50
  35. package/dist/index33.js.map +1 -1
  36. package/dist/index34.js +50 -21
  37. package/dist/index34.js.map +1 -1
  38. package/dist/index35.js +18 -126
  39. package/dist/index35.js.map +1 -1
  40. package/dist/index36.js +113 -205
  41. package/dist/index36.js.map +1 -1
  42. package/dist/index37.js +205 -74
  43. package/dist/index37.js.map +1 -1
  44. package/dist/index38.js +87 -115
  45. package/dist/index38.js.map +1 -1
  46. package/dist/index39.js +118 -5
  47. package/dist/index39.js.map +1 -1
  48. package/dist/index4.js +2 -2
  49. package/dist/index40.js +5 -819
  50. package/dist/index40.js.map +1 -1
  51. package/dist/index41.js +819 -56
  52. package/dist/index41.js.map +1 -1
  53. package/dist/index42.js +57 -37
  54. package/dist/index42.js.map +1 -1
  55. package/dist/index45.js +1 -1
  56. package/dist/index46.js +1 -1
  57. package/dist/index49.js +1 -1
  58. package/dist/index5.js +2 -2
  59. package/dist/index50.js +1 -1
  60. package/dist/index51.js +2 -7
  61. package/dist/index51.js.map +1 -1
  62. package/dist/index52.js +2 -34
  63. package/dist/index52.js.map +1 -1
  64. package/dist/index53.js +5 -47
  65. package/dist/index53.js.map +1 -1
  66. package/dist/index54.js +33 -7
  67. package/dist/index54.js.map +1 -1
  68. package/dist/index55.js +48 -11
  69. package/dist/index55.js.map +1 -1
  70. package/dist/index56.js +8 -2
  71. package/dist/index56.js.map +1 -1
  72. package/dist/index57.js +12 -2
  73. package/dist/index57.js.map +1 -1
  74. package/dist/index59.js +2 -2
  75. package/dist/index6.js +5 -5
  76. package/dist/index60.js +1 -1
  77. package/dist/index61.js +1 -1
  78. package/dist/index63.js +4 -4
  79. package/dist/index65.js +4 -4
  80. package/dist/index66.js +2 -2
  81. package/dist/index67.js +2 -2
  82. package/dist/index7.js +2 -2
  83. package/dist/index71.js +2 -2
  84. package/dist/index74.js +6 -2
  85. package/dist/index74.js.map +1 -1
  86. package/dist/index75.js +8 -2
  87. package/dist/index75.js.map +1 -1
  88. package/dist/index76.js +5 -5
  89. package/dist/index76.js.map +1 -1
  90. package/dist/index77.js +2 -8
  91. package/dist/index77.js.map +1 -1
  92. package/dist/index78.js +2 -6
  93. package/dist/index78.js.map +1 -1
  94. package/dist/index8.js +3 -3
  95. package/dist/index9.js +1 -1
  96. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AddressAutocompleteInput/index.tsx"],"names":[],"mappings":"AAqJA,eAAO,MAAM,wBAAwB,GAAI,qJAatC;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;CAChC,4CA6UA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AddressAutocompleteInput/index.tsx"],"names":[],"mappings":"AAqJA,eAAO,MAAM,wBAAwB,GAAI,qJAatC;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;CAChC,4CAmVA,CAAA"}
package/dist/index10.js CHANGED
@@ -1,8 +1,8 @@
1
- import { j as f } from "./index28.js";
2
- import { c as Te } from "./index29.js";
1
+ import { j as f } from "./index30.js";
2
+ import { c as Te } from "./index28.js";
3
3
  import { Check as Re, ChevronDown as ye, ChevronUp as Ie } from "lucide-react";
4
4
  import * as r from "react";
5
- import { DismissableLayerBranch as Se } from "./index30.js";
5
+ import { DismissableLayerBranch as Se } from "./index31.js";
6
6
  import { createPortal as je } from "react-dom";
7
7
  import { IMaskInput as Pe } from "react-imask";
8
8
  import Ce, { InputMask as Le } from "imask";
package/dist/index107.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DayFlag as e } from "./index119.js";
2
- import { dateMatchModifiers as u } from "./index32.js";
2
+ import { dateMatchModifiers as u } from "./index33.js";
3
3
  function V(b, S, h, M, a) {
4
4
  const { disabled: m, hidden: p, modifiers: r, showOutsideDays: y, broadcastCalendar: B, today: g = a.today() } = S, { isSameDay: v, isSameMonth: A, startOfMonth: E, isBefore: F, endOfMonth: j, isAfter: k } = a, O = h && E(h), D = M && j(M), i = {
5
5
  [e.focused]: [],
package/dist/index11.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as f } from "./index28.js";
2
- import { c as et } from "./index29.js";
1
+ import { j as f } from "./index30.js";
2
+ import { c as et } from "./index28.js";
3
3
  import * as i from "react";
4
4
  import kt, { components as Vt } from "react-select";
5
5
  import { cn as Ye } from "./index2.js";
package/dist/index12.js CHANGED
@@ -1,7 +1,7 @@
1
- import { j as S } from "./index28.js";
2
- import { c as $ } from "./index29.js";
1
+ import { j as S } from "./index30.js";
2
+ import { c as $ } from "./index28.js";
3
3
  import { useState as D, useRef as q, useEffect as U } from "react";
4
- import { decode as z } from "./index33.js";
4
+ import { decode as z } from "./index34.js";
5
5
  const O = (C) => {
6
6
  const e = $.c(26), {
7
7
  src: t,
package/dist/index13.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as f } from "./index28.js";
2
- import { c as g } from "./index29.js";
1
+ import { j as f } from "./index30.js";
2
+ import { c as g } from "./index28.js";
3
3
  import { FilesUploadField as v } from "./index8.js";
4
4
  function j(m) {
5
5
  const e = g.c(16);
package/dist/index14.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as n } from "./index28.js";
2
- import { c as f } from "./index29.js";
1
+ import { j as n } from "./index30.js";
2
+ import { c as f } from "./index28.js";
3
3
  import { cn as u } from "./index2.js";
4
4
  function d(s) {
5
5
  const e = f.c(10);
package/dist/index15.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as u } from "./index28.js";
2
- import { c as x } from "./index29.js";
1
+ import { j as u } from "./index30.js";
2
+ import { c as x } from "./index28.js";
3
3
  import { Bell as b } from "lucide-react";
4
4
  import { cn as h } from "./index2.js";
5
5
  function w(d) {
package/dist/index150.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as l from "react";
2
- import { composeRefs as m } from "./index53.js";
3
- import { j as u } from "./index28.js";
2
+ import { composeRefs as m } from "./index55.js";
3
+ import { j as u } from "./index30.js";
4
4
  // @__NO_SIDE_EFFECTS__
5
5
  function x(e) {
6
6
  const r = /* @__PURE__ */ y(e), t = l.forwardRef((o, n) => {
package/dist/index151.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as l from "react";
2
- import { composeRefs as m } from "./index53.js";
3
- import { j as u } from "./index28.js";
2
+ import { composeRefs as m } from "./index55.js";
3
+ import { j as u } from "./index30.js";
4
4
  // @__NO_SIDE_EFFECTS__
5
5
  function x(e) {
6
6
  const r = /* @__PURE__ */ y(e), t = l.forwardRef((o, n) => {
package/dist/index153.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as n from "react";
2
- import { Primitive as p } from "./index52.js";
3
- import { j as o } from "./index28.js";
2
+ import { Primitive as p } from "./index54.js";
3
+ import { j as o } from "./index30.js";
4
4
  var v = "Arrow", e = n.forwardRef((r, i) => {
5
5
  const { children: t, width: s = 10, height: a = 5, ...m } = r;
6
6
  return /* @__PURE__ */ o.jsx(
package/dist/index16.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as t } from "./index28.js";
2
- import { c as H } from "./index29.js";
1
+ import { j as t } from "./index30.js";
2
+ import { c as H } from "./index28.js";
3
3
  import { useContext as Q, useState as T, useMemo as K, useCallback as W, useEffect as G, createContext as Z, useRef as J } from "react";
4
4
  import * as P from "@radix-ui/react-dialog";
5
5
  import { X as _, Loader2 as ee, MoreVertical as te } from "lucide-react";
package/dist/index17.js CHANGED
@@ -1,4 +1,4 @@
1
- import { j as e } from "./index28.js";
1
+ import { j as e } from "./index30.js";
2
2
  import { useState as g, useMemo as A, useEffect as k } from "react";
3
3
  import { Loader2 as S } from "lucide-react";
4
4
  import { cn as w } from "./index2.js";
package/dist/index18.js CHANGED
@@ -1,13 +1,13 @@
1
- import { j as V } from "./index28.js";
1
+ import { j as V } from "./index30.js";
2
2
  import * as n from "react";
3
3
  import Kt from "react-select";
4
4
  import { cn as Fe } from "./index2.js";
5
- import { resolveMessages as $t } from "./index34.js";
6
- import { getLocaleCacheKey as qt, parseLocaleCacheKey as Ut, getCachedCountryOptions as Qt, toSelectedCountry as Jt, buildFallbackSelectedCountry as Gt, getValidCountry as Yt, DEFAULT_COUNTRY as at, COMMON_IDD_PREFIXES as Xt, normalizeSearchValue as Zt, optionMatchIndex as it } from "./index35.js";
7
- import { normalizeInputValue as Oe, formatWithAsYouType as ve, sanitizeDigits as O, detectNationalPrefixForDisplay as ee, getSuggestionState as Te, injectNationalPrefixDisplay as Me, shouldDisplayExplicitCountrySelection as Le, getLengthIssue as ze, stripPrefix as ut } from "./index36.js";
8
- import { captureSelectionSnapshot as en, resolveSelection as Se, skipFormattingCharactersLeft as ct, skipFormattingCharactersRight as tn } from "./index37.js";
9
- import { suggestionSelectStyles as nn, SuggestionOption as on, NullComponent as Ie, HiddenControl as rn, formatCountryOption as sn, SuggestionContext as ln } from "./index38.js";
10
- import { getCountryCallingCode as F } from "./index39.js";
5
+ import { resolveMessages as $t } from "./index35.js";
6
+ import { getLocaleCacheKey as qt, parseLocaleCacheKey as Ut, getCachedCountryOptions as Qt, toSelectedCountry as Jt, buildFallbackSelectedCountry as Gt, getValidCountry as Yt, DEFAULT_COUNTRY as at, COMMON_IDD_PREFIXES as Xt, normalizeSearchValue as Zt, optionMatchIndex as it } from "./index36.js";
7
+ import { normalizeInputValue as Oe, formatWithAsYouType as ve, sanitizeDigits as O, detectNationalPrefixForDisplay as ee, getSuggestionState as Te, injectNationalPrefixDisplay as Me, shouldDisplayExplicitCountrySelection as Le, getLengthIssue as ze, stripPrefix as ut } from "./index37.js";
8
+ import { captureSelectionSnapshot as en, resolveSelection as Se, skipFormattingCharactersLeft as ct, skipFormattingCharactersRight as tn } from "./index38.js";
9
+ import { suggestionSelectStyles as nn, SuggestionOption as on, NullComponent as Ie, HiddenControl as rn, formatCountryOption as sn, SuggestionContext as ln } from "./index39.js";
10
+ import { getCountryCallingCode as F } from "./index40.js";
11
11
  const an = n.forwardRef(function(dt, ft) {
12
12
  const {
13
13
  value: _,
package/dist/index19.js CHANGED
@@ -1,8 +1,8 @@
1
- import { j as m } from "./index28.js";
2
- import { c as T } from "./index29.js";
1
+ import { j as m } from "./index30.js";
2
+ import { c as T } from "./index28.js";
3
3
  import * as d from "react";
4
4
  import { ChevronDown as L, ChevronUp as K, Check as Q } from "lucide-react";
5
- import { Root as X, Group as Y, Value as Z, Portal as ee, Content as P, Item as $, Label as q, Separator as z, Trigger as F, Icon as te, Viewport as oe, ItemIndicator as se, ItemText as le } from "./index40.js";
5
+ import { Root as X, Group as Y, Value as Z, Portal as ee, Content as P, Item as $, Label as q, Separator as z, Trigger as F, Icon as te, Viewport as oe, ItemIndicator as se, ItemText as le } from "./index41.js";
6
6
  import { cn as C } from "./index2.js";
7
7
  const be = X, xe = Y, Se = Z, re = d.forwardRef((r, n) => {
8
8
  const e = T.c(12);
package/dist/index21.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as m } from "./index29.js";
1
+ import { c as m } from "./index28.js";
2
2
  import { useState as h, useEffect as p } from "react";
3
3
  const v = "(pointer: coarse)";
4
4
  function w() {
package/dist/index22.js CHANGED
@@ -1,6 +1,6 @@
1
- import { c as m } from "./index29.js";
1
+ import { c as m } from "./index28.js";
2
2
  import { useState as p, useEffect as d } from "react";
3
- import { setOptions as g, importLibrary as w } from "./index42.js";
3
+ import { setOptions as g, importLibrary as w } from "./index29.js";
4
4
  let l = null, f = null;
5
5
  const u = /* @__PURE__ */ new Map(), h = (r) => {
6
6
  if (!r) {
package/dist/index229.js CHANGED
@@ -1,4 +1,4 @@
1
- import { dateMatchModifiers as u } from "./index32.js";
1
+ import { dateMatchModifiers as u } from "./index33.js";
2
2
  import { getFocusableDate as g } from "./index267.js";
3
3
  import { CalendarDay as m } from "./index181.js";
4
4
  function h(t, i, a, d, f, e, n, s = 0) {
package/dist/index23.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as x } from "./index29.js";
1
+ import { c as x } from "./index28.js";
2
2
  import { useState as I, useEffect as P } from "react";
3
3
  import { useUserScrollIntent as g } from "./index25.js";
4
4
  function H(l) {
package/dist/index235.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defaultDateLib as p } from "./index106.js";
2
- import { dateMatchModifiers as s } from "./index32.js";
2
+ import { dateMatchModifiers as s } from "./index33.js";
3
3
  import { rangeContainsDayOfWeek as M } from "./index234.js";
4
4
  import { rangeIncludesDate as l } from "./index126.js";
5
5
  import { rangeOverlaps as y } from "./index236.js";
package/dist/index24.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as Pe } from "./index29.js";
1
+ import { c as Pe } from "./index28.js";
2
2
  import { useState as ne, useRef as v, useEffect as g } from "react";
3
3
  const me = () => typeof window > "u" ? !1 : "IntersectionObserver" in window, we = (x, e, t) => {
4
4
  const R = x.getBoundingClientRect(), p = e.getBoundingClientRect();
package/dist/index25.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as l } from "./index29.js";
1
+ import { c as l } from "./index28.js";
2
2
  import { useRef as w, useEffect as f } from "react";
3
3
  const a = /* @__PURE__ */ new Set([" ", "Spacebar", "PageUp", "PageDown", "Home", "End", "ArrowDown", "ArrowUp"]);
4
4
  function p(u) {
package/dist/index28.js CHANGED
@@ -1,6 +1,6 @@
1
- import { __require as r } from "./index47.js";
1
+ import { __require as r } from "./index43.js";
2
2
  var i = r();
3
3
  export {
4
- i as j
4
+ i as c
5
5
  };
6
6
  //# sourceMappingURL=index28.js.map
package/dist/index29.js CHANGED
@@ -1,6 +1,40 @@
1
- import { __require as r } from "./index43.js";
2
- var i = r();
1
+ function w(o, e) {
2
+ o.src = e;
3
+ }
4
+ const v = (o) => {
5
+ var e, r, a, m = "The Google Maps JavaScript API", n = "google", p = "importLibrary", _ = "__ib__", l = document, E = window, u = E[n] || (E[n] = {}), i = u.maps || (u.maps = {}), f = /* @__PURE__ */ new Set(), t = new URLSearchParams(), S = () => e || (e = new Promise(async (s, c) => {
6
+ await (r = l.createElement("script")), t.set("libraries", [...f] + "");
7
+ for (a in o)
8
+ t.set(a.replace(/[A-Z]/g, (b) => "_" + b[0].toLowerCase()), o[a]);
9
+ t.set("callback", n + ".maps." + _), w(r, "https://maps.googleapis.com/maps/api/js?" + t), i[_] = s, r.onerror = () => e = c(Error(m + " could not load.")), r.nonce = l.querySelector("script[nonce]")?.nonce || "", l.head.append(r);
10
+ }));
11
+ i[p] ? console.warn(m + " only loads once. Ignoring:", o) : i[p] = (s, ...c) => f.add(s) && S().then(() => i[p](s, ...c));
12
+ }, y = (o) => `The setOptions() function should only be called once. The options passed to the additional call (${JSON.stringify(o)}) will be ignored.`, O = (o) => `The google.maps.importLibrary() function is already defined, and @googlemaps/js-api-loader will use the existing function instead of overwriting it. The options passed to setOptions (${JSON.stringify(o)}) will be ignored.`, T = "No options were set before calling importLibrary. Make sure to configure the loader using setOptions().", L = "There already is a script loading the Google Maps JavaScript API, and no google.maps.importLibrary function is defined. @googlemaps/js-api-loader will proceed to bootstrap the API with the specified options, but the existing script might cause problems using the API. Make sure to remove the script loading the API.", h = process.env.NODE_ENV !== "production", d = h ? (o) => {
13
+ console.warn(`[@googlemaps/js-api-loader] ${o}`);
14
+ } : () => {
15
+ }, P = h ? (o) => {
16
+ console.info(`[@googlemaps/js-api-loader] ${o}`);
17
+ } : () => {
18
+ }, I = process.env.NODE_ENV !== "production";
19
+ let g = !1;
20
+ function A(o) {
21
+ if (g) {
22
+ d(y(o));
23
+ return;
24
+ }
25
+ N(o), g = !0;
26
+ }
27
+ async function M(o) {
28
+ if (g || d(T), !window?.google?.maps?.importLibrary)
29
+ throw new Error("google.maps.importLibrary is not installed.");
30
+ return await google.maps.importLibrary(o);
31
+ }
32
+ function N(o) {
33
+ const e = !!window.google?.maps?.importLibrary;
34
+ e ? P(O(o)) : I && document.querySelector('script[src*="maps.googleapis.com/maps/api/js"]') && d(L), e || v(o);
35
+ }
3
36
  export {
4
- i as c
37
+ M as importLibrary,
38
+ A as setOptions
5
39
  };
6
40
  //# sourceMappingURL=index29.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index29.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index29.js","sources":["../../../node_modules/@googlemaps/js-api-loader/dist/index.js"],"sourcesContent":["/*\n * Copyright 2025 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nfunction setScriptSrc(script, src) {\n script.src = src;\n}\n\n/*\n * Copyright 2025 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\nconst bootstrap = bootstrapParams => {\n var bootstrapPromise;\n var script;\n var bootstrapParamsKey;\n var PRODUCT_NAME = \"The Google Maps JavaScript API\";\n var GOOGLE = \"google\";\n var IMPORT_API_NAME = \"importLibrary\";\n var PENDING_BOOTSTRAP_KEY = \"__ib__\";\n var doc = document;\n var global_ = window;\n var google_ = global_[GOOGLE] || (global_[GOOGLE] = {});\n var namespace = google_.maps || (google_.maps = {});\n var libraries = new Set();\n var searchParams = new URLSearchParams();\n var triggerBootstrap = () => bootstrapPromise || (bootstrapPromise = new Promise(async(resolve, reject) => {\n await (script = doc.createElement(\"script\"));\n searchParams.set(\"libraries\", [...libraries] + \"\");\n for (bootstrapParamsKey in bootstrapParams) {\n searchParams.set(bootstrapParamsKey.replace(/[A-Z]/g, g => \"_\" + g[0].toLowerCase()), bootstrapParams[bootstrapParamsKey]);\n }\n searchParams.set(\"callback\", GOOGLE + \".maps.\" + PENDING_BOOTSTRAP_KEY);\n setScriptSrc(script, \"https://maps.googleapis.com/maps/api/js?\" + searchParams);\n namespace[PENDING_BOOTSTRAP_KEY] = resolve;\n script.onerror = () => bootstrapPromise = reject(Error(PRODUCT_NAME + \" could not load.\"));\n script.nonce = doc.querySelector(\"script[nonce]\")?.nonce || \"\";\n doc.head.append(script);\n }));\n namespace[IMPORT_API_NAME] ? console.warn(PRODUCT_NAME + \" only loads once. Ignoring:\", bootstrapParams) : namespace[IMPORT_API_NAME] = (libraryName, ...args) => libraries.add(libraryName) && triggerBootstrap().then(() => namespace[IMPORT_API_NAME](libraryName, ...args));\n};\n\nconst MSG_DEPRECATED_LOADER = \"The Loader class is no longer available in this version.\" +\n \"\\nPlease use the new functional API: setOptions() and importLibrary().\" +\n \"\\nFor more information, see the updated documentation at: \" +\n \"https://github.com/googlemaps/js-api-loader/blob/main/README.md\";\nconst MSG_REPEATED_SET_OPTIONS = (options) => `The setOptions() function should only be called once. The options passed ` +\n `to the additional call (${JSON.stringify(options)}) will be ignored.`;\nconst MSG_IMPORT_LIBRARY_EXISTS = (options) => `The google.maps.importLibrary() function is already defined, and ` +\n `@googlemaps/js-api-loader will use the existing function instead of ` +\n `overwriting it. The options passed to setOptions ` +\n `(${JSON.stringify(options)}) will be ignored.`;\nconst MSG_SET_OPTIONS_NOT_CALLED = \"No options were set before calling importLibrary. Make sure to configure \" +\n \"the loader using setOptions().\";\nconst MSG_SCRIPT_ELEMENT_EXISTS = \"There already is a script loading the Google Maps JavaScript \" +\n \"API, and no google.maps.importLibrary function is defined. \" +\n \"@googlemaps/js-api-loader will proceed to bootstrap the API \" +\n \"with the specified options, but the existing script might cause \" +\n \"problems using the API. Make sure to remove the script \" +\n \"loading the API.\";\nconst __DEV__$1 = process.env.NODE_ENV !== 'production';\nconst logDevWarning = __DEV__$1\n ? (message) => {\n console.warn(`[@googlemaps/js-api-loader] ${message}`);\n }\n : () => { };\nconst logDevNotice = __DEV__$1\n ? (message) => {\n console.info(`[@googlemaps/js-api-loader] ${message}`);\n }\n : () => { };\n\n/*\n * Copyright 2025 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars */\n/**\n * @deprecated Use the new functional API: `setOptions()` and `importLibrary()`.\n * See the migration guide for more details: MIGRATION.md\n */\nclass Loader {\n constructor(...args) {\n throw new Error(`[@googlemaps/js-api-loader]: ${MSG_DEPRECATED_LOADER}`);\n }\n}\n\n/*\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst __DEV__ = process.env.NODE_ENV !== 'production';\nlet setOptionsWasCalled_ = false;\n/**\n * Sets the options for the Maps JavaScript API.\n *\n * Has to be called before any library is loaded.\n *\n * See https://developers.google.com/maps/documentation/javascript/load-maps-js-api#required_parameters\n * for the full documentation of available options.\n *\n * @param options The options to set.\n */\nfunction setOptions(options) {\n if (setOptionsWasCalled_) {\n logDevWarning(MSG_REPEATED_SET_OPTIONS(options));\n return;\n }\n installImportLibrary_(options);\n setOptionsWasCalled_ = true;\n}\nasync function importLibrary(libraryName) {\n if (!setOptionsWasCalled_) {\n logDevWarning(MSG_SET_OPTIONS_NOT_CALLED);\n }\n if (!window?.google?.maps?.importLibrary) {\n throw new Error(\"google.maps.importLibrary is not installed.\");\n }\n return (await google.maps.importLibrary(libraryName));\n}\n/**\n * The installImportLibrary_ function makes sure that a usable version of the\n * `google.maps.importLibrary` function exists.\n */\nfunction installImportLibrary_(options) {\n const importLibraryExists = Boolean(window.google?.maps?.importLibrary);\n if (importLibraryExists) {\n logDevNotice(MSG_IMPORT_LIBRARY_EXISTS(options));\n }\n else if (__DEV__) {\n const scriptEl = document.querySelector('script[src*=\"maps.googleapis.com/maps/api/js\"]');\n if (scriptEl) {\n logDevWarning(MSG_SCRIPT_ELEMENT_EXISTS);\n }\n }\n // If the google.maps.importLibrary function already exists, bootstrap()\n // won't do anything, so we won't call it\n if (!importLibraryExists) {\n bootstrap(options);\n }\n}\n\nexport { Loader, importLibrary, setOptions };\n//# sourceMappingURL=index.js.map\n"],"names":["setScriptSrc","script","src","bootstrap","bootstrapParams","bootstrapPromise","bootstrapParamsKey","PRODUCT_NAME","GOOGLE","IMPORT_API_NAME","PENDING_BOOTSTRAP_KEY","doc","global_","google_","namespace","libraries","searchParams","triggerBootstrap","resolve","reject","g","libraryName","args","MSG_REPEATED_SET_OPTIONS","options","MSG_IMPORT_LIBRARY_EXISTS","MSG_SET_OPTIONS_NOT_CALLED","MSG_SCRIPT_ELEMENT_EXISTS","__DEV__$1","logDevWarning","message","logDevNotice","__DEV__","setOptionsWasCalled_","setOptions","installImportLibrary_","importLibrary","importLibraryExists"],"mappings":"AAIA,SAASA,EAAaC,GAAQC,GAAK;AAC/B,EAAAD,EAAO,MAAMC;AACjB;AAQA,MAAMC,IAAY,CAAAC,MAAmB;AACnC,MAAIC,GACAJ,GACAK,GACAC,IAAe,kCACfC,IAAS,UACTC,IAAkB,iBAClBC,IAAwB,UACxBC,IAAM,UACNC,IAAU,QACVC,IAAUD,EAAQJ,CAAM,MAAMI,EAAQJ,CAAM,IAAI,KAChDM,IAAYD,EAAQ,SAASA,EAAQ,OAAO,CAAA,IAC5CE,IAAY,oBAAI,IAAG,GACnBC,IAAe,IAAI,gBAAe,GAClCC,IAAmB,MAAMZ,MAAqBA,IAAmB,IAAI,QAAQ,OAAMa,GAASC,MAAW;AACzG,WAAOlB,IAASU,EAAI,cAAc,QAAQ,IAC1CK,EAAa,IAAI,aAAa,CAAC,GAAGD,CAAS,IAAI,EAAE;AACjD,SAAKT,KAAsBF;AACzB,MAAAY,EAAa,IAAIV,EAAmB,QAAQ,UAAU,CAAAc,MAAK,MAAMA,EAAE,CAAC,EAAE,YAAW,CAAE,GAAGhB,EAAgBE,CAAkB,CAAC;AAE3H,IAAAU,EAAa,IAAI,YAAYR,IAAS,WAAWE,CAAqB,GACtEV,EAAaC,GAAQ,6CAA6Ce,CAAY,GAC9EF,EAAUJ,CAAqB,IAAIQ,GACnCjB,EAAO,UAAU,MAAMI,IAAmBc,EAAO,MAAMZ,IAAe,kBAAkB,CAAC,GACzFN,EAAO,QAAQU,EAAI,cAAc,eAAe,GAAG,SAAS,IAC5DA,EAAI,KAAK,OAAOV,CAAM;AAAA,EACxB,CAAC;AACD,EAAAa,EAAUL,CAAe,IAAI,QAAQ,KAAKF,IAAe,+BAA+BH,CAAe,IAAIU,EAAUL,CAAe,IAAI,CAACY,MAAgBC,MAASP,EAAU,IAAIM,CAAW,KAAKJ,EAAgB,EAAG,KAAK,MAAMH,EAAUL,CAAe,EAAEY,GAAa,GAAGC,CAAI,CAAC;AAChR,GAMMC,IAA2B,CAACC,MAAY,oGACf,KAAK,UAAUA,CAAO,CAAC,sBAChDC,IAA4B,CAACD,MAAY,0LAGvC,KAAK,UAAUA,CAAO,CAAC,sBACzBE,IAA6B,2GAE7BC,IAA4B,+TAM5BC,IAAY,QAAQ,IAAI,aAAa,cACrCC,IAAgBD,IAChB,CAACE,MAAY;AACX,UAAQ,KAAK,+BAA+BA,CAAO,EAAE;AACzD,IACE,MAAM;AAAE,GACRC,IAAeH,IACf,CAACE,MAAY;AACX,UAAQ,KAAK,+BAA+BA,CAAO,EAAE;AACzD,IACE,MAAM;AAAE,GAgCRE,IAAU,QAAQ,IAAI,aAAa;AACzC,IAAIC,IAAuB;AAW3B,SAASC,EAAWV,GAAS;AACzB,MAAIS,GAAsB;AACtB,IAAAJ,EAAcN,EAAyBC,CAAO,CAAC;AAC/C;AAAA,EACJ;AACA,EAAAW,EAAsBX,CAAO,GAC7BS,IAAuB;AAC3B;AACA,eAAeG,EAAcf,GAAa;AAItC,MAHKY,KACDJ,EAAcH,CAA0B,GAExC,CAAC,QAAQ,QAAQ,MAAM;AACvB,UAAM,IAAI,MAAM,6CAA6C;AAEjE,SAAQ,MAAM,OAAO,KAAK,cAAcL,CAAW;AACvD;AAKA,SAASc,EAAsBX,GAAS;AACpC,QAAMa,IAAsB,EAAQ,OAAO,QAAQ,MAAM;AACzD,EAAIA,IACAN,EAAaN,EAA0BD,CAAO,CAAC,IAE1CQ,KACY,SAAS,cAAc,gDAAgD,KAEpFH,EAAcF,CAAyB,GAK1CU,KACDlC,EAAUqB,CAAO;AAEzB;","x_google_ignoreList":[0]}
package/dist/index3.js CHANGED
@@ -1,5 +1,5 @@
1
- import { j as c } from "./index28.js";
2
- import { c as Z } from "./index29.js";
1
+ import { j as c } from "./index30.js";
2
+ import { c as Z } from "./index28.js";
3
3
  import { useState as S, useRef as w, useMemo as ee, useEffect as O } from "react";
4
4
  import { clsx as te } from "./index26.js";
5
5
  import { Loader2 as re } from "lucide-react";
@@ -67,7 +67,7 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
67
67
  locationRestriction: f,
68
68
  allowedTypes: y
69
69
  }) => {
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
+ const [u, g] = S(r ?? ""), [i, d] = S([]), [j, a] = S(!1), [v, M] = S(-1), [H, b] = S(!1), R = w(null), k = w(null), $ = w(!1), N = w(!1), x = w(null), B = w([]), I = w("smooth"), C = se("places", F), Y = ee(() => {
71
71
  if (!y)
72
72
  return le;
73
73
  const t = /* @__PURE__ */ new Set();
@@ -76,7 +76,7 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
76
76
  return t;
77
77
  }, [y]);
78
78
  O(() => {
79
- g(r ?? ""), k.current = !1;
79
+ g(r ?? ""), N.current = !1;
80
80
  }, [r]), O(() => {
81
81
  if ($.current) {
82
82
  $.current = !1;
@@ -111,11 +111,11 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
111
111
  if (!s)
112
112
  return;
113
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) {
114
+ if (!N.current && X) {
115
115
  d(E), a(!1), b(!1);
116
116
  return;
117
117
  }
118
- E.length > 0 ? (d(E), k.current && a(!0), M(-1)) : (d([]), a(!1)), b(!1);
118
+ E.length > 0 ? (d(E), N.current && a(!0), M(-1)) : (d([]), a(!1)), b(!1);
119
119
  }).catch((D) => {
120
120
  s && (console.error("AddressAutocompleteInput: suggestion fetch failed", D), d([]), a(!1), b(!1));
121
121
  });
@@ -125,7 +125,7 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
125
125
  };
126
126
  }, [u, C, o, r, f, Y]), O(() => {
127
127
  const t = (s) => {
128
- R.current && !R.current.contains(s.target) && N.current && !N.current.contains(s.target) && a(!1);
128
+ R.current && !R.current.contains(s.target) && k.current && !k.current.contains(s.target) && a(!1);
129
129
  };
130
130
  return document.addEventListener("mousedown", t), () => {
131
131
  document.removeEventListener("mousedown", t);
@@ -136,7 +136,7 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
136
136
  const s = q(t);
137
137
  g(s), o(s), d([]), a(!1), b(!1), x.current = null;
138
138
  }, G = (t) => {
139
- k.current = !0, g(t.target.value);
139
+ N.current = !0, g(t.target.value);
140
140
  }, J = (t) => {
141
141
  if (!j || i.length === 0) {
142
142
  t.key === "Enter" && (t.preventDefault(), o(u), a(!1), x.current = null);
@@ -151,7 +151,7 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
151
151
  I.current = "smooth";
152
152
  return;
153
153
  }
154
- const t = B.current[v], s = N.current;
154
+ const t = B.current[v], s = k.current;
155
155
  if (!t || !s) {
156
156
  I.current = "smooth";
157
157
  return;
@@ -164,15 +164,21 @@ const le = /* @__PURE__ */ new Set(["street_address", "route", "premise", "subpr
164
164
  behavior: _
165
165
  });
166
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" }),
167
+ K && /* @__PURE__ */ c.jsx("input", { tabIndex: -1, autoComplete: "street-address", name: K, "aria-hidden": "true", style: {
168
+ position: "absolute",
169
+ left: "-9999px",
170
+ top: "-9999px",
171
+ height: "1px",
172
+ width: "1px"
173
+ } }),
168
174
  /* @__PURE__ */ c.jsx("label", { htmlFor: n, className: "text-left block text-sm font-medium text-gray-700 mb-1 cursor-pointer", children: e }),
169
175
  /* @__PURE__ */ c.jsxs("div", { className: "relative", children: [
170
176
  /* @__PURE__ */ c.jsx(ne, { ref: R, id: n, type: "text", placeholder: l, name: p ?? `${n}_input`, value: u, onChange: G, onKeyDown: J, onFocus: () => {
171
177
  i.length > 0 && u && a(!0);
172
- }, onBlur: Q, disabled: m, autoComplete: "off", className: oe("w-full", H && "pr-9", h) }),
178
+ }, onBlur: Q, disabled: m, autoComplete: "new-password", className: oe("w-full", H && "pr-9", h) }),
173
179
  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
180
  ] }),
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: (_) => {
181
+ j && i.length > 0 && /* @__PURE__ */ c.jsx("ul", { ref: k, 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
182
  B.current[s] = _;
177
183
  }, className: te("cursor-pointer px-3 py-2 text-sm text-gray-700 hover:bg-gray-100", {
178
184
  "bg-gray-100": v === s
@@ -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\"\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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"}
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 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 <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","position","left","height","width","Input","cn","Loader2","node","clsx"],"mappings":"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"}