@rpcbase/ui 0.217.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 (246) hide show
  1. package/dist/components/AddressAutocompleteInput/index.d.ts.map +1 -1
  2. package/dist/components/HourPickerField/index.d.ts.map +1 -1
  3. package/dist/index10.js +544 -489
  4. package/dist/index10.js.map +1 -1
  5. package/dist/index107.js +1 -1
  6. package/dist/index11.js +2 -2
  7. package/dist/index12.js +3 -3
  8. package/dist/index13.js +2 -2
  9. package/dist/index14.js +2 -2
  10. package/dist/index15.js +2 -2
  11. package/dist/index150.js +1 -1
  12. package/dist/index151.js +46 -5
  13. package/dist/index151.js.map +1 -1
  14. package/dist/index152.js +223 -62
  15. package/dist/index152.js.map +1 -1
  16. package/dist/index153.js +22 -2
  17. package/dist/index153.js.map +1 -1
  18. package/dist/index154.js +24 -363
  19. package/dist/index154.js.map +1 -1
  20. package/dist/index155.js +382 -243
  21. package/dist/index155.js.map +1 -1
  22. package/dist/index156.js +5 -60
  23. package/dist/index156.js.map +1 -1
  24. package/dist/index157.js +62 -40
  25. package/dist/index157.js.map +1 -1
  26. package/dist/index158.js +2 -170
  27. package/dist/index158.js.map +1 -1
  28. package/dist/index159.js +356 -102
  29. package/dist/index159.js.map +1 -1
  30. package/dist/index16.js +2 -2
  31. package/dist/index160.js +261 -24
  32. package/dist/index160.js.map +1 -1
  33. package/dist/index161.js +61 -8
  34. package/dist/index161.js.map +1 -1
  35. package/dist/index162.js +46 -4
  36. package/dist/index162.js.map +1 -1
  37. package/dist/index163.js +169 -5
  38. package/dist/index163.js.map +1 -1
  39. package/dist/index164.js +109 -4
  40. package/dist/index164.js.map +1 -1
  41. package/dist/index165.js +24 -466
  42. package/dist/index165.js.map +1 -1
  43. package/dist/index166.js +8 -186
  44. package/dist/index166.js.map +1 -1
  45. package/dist/index167.js +4 -107
  46. package/dist/index167.js.map +1 -1
  47. package/dist/index168.js +5 -262
  48. package/dist/index168.js.map +1 -1
  49. package/dist/index169.js +4 -9
  50. package/dist/index169.js.map +1 -1
  51. package/dist/index17.js +1 -1
  52. package/dist/index170.js +462 -38
  53. package/dist/index170.js.map +1 -1
  54. package/dist/index171.js +185 -4
  55. package/dist/index171.js.map +1 -1
  56. package/dist/index172.js +103 -42
  57. package/dist/index172.js.map +1 -1
  58. package/dist/index173.js +253 -220
  59. package/dist/index173.js.map +1 -1
  60. package/dist/index174.js +10 -22
  61. package/dist/index174.js.map +1 -1
  62. package/dist/index175.js +42 -24
  63. package/dist/index175.js.map +1 -1
  64. package/dist/index176.js +4 -400
  65. package/dist/index176.js.map +1 -1
  66. package/dist/index18.js +7 -7
  67. package/dist/index19.js +3 -3
  68. package/dist/index21.js +1 -1
  69. package/dist/index22.js +2 -2
  70. package/dist/index229.js +1 -1
  71. package/dist/index23.js +1 -1
  72. package/dist/index235.js +1 -1
  73. package/dist/index237.js +23 -12
  74. package/dist/index237.js.map +1 -1
  75. package/dist/index238.js +29 -155
  76. package/dist/index238.js.map +1 -1
  77. package/dist/index239.js +5 -31
  78. package/dist/index239.js.map +1 -1
  79. package/dist/index24.js +1 -1
  80. package/dist/index240.js +13 -9
  81. package/dist/index240.js.map +1 -1
  82. package/dist/index241.js +147 -41
  83. package/dist/index241.js.map +1 -1
  84. package/dist/index242.js +29 -10
  85. package/dist/index242.js.map +1 -1
  86. package/dist/index243.js +9 -44
  87. package/dist/index243.js.map +1 -1
  88. package/dist/index244.js +41 -88
  89. package/dist/index244.js.map +1 -1
  90. package/dist/index245.js +10 -85
  91. package/dist/index245.js.map +1 -1
  92. package/dist/index246.js +41 -102
  93. package/dist/index246.js.map +1 -1
  94. package/dist/index247.js +88 -45
  95. package/dist/index247.js.map +1 -1
  96. package/dist/index248.js +85 -10
  97. package/dist/index248.js.map +1 -1
  98. package/dist/index249.js +96 -28
  99. package/dist/index249.js.map +1 -1
  100. package/dist/index25.js +1 -1
  101. package/dist/index250.js +52 -8
  102. package/dist/index250.js.map +1 -1
  103. package/dist/index251.js +10 -115
  104. package/dist/index251.js.map +1 -1
  105. package/dist/index252.js +36 -16
  106. package/dist/index252.js.map +1 -1
  107. package/dist/index253.js +8 -15
  108. package/dist/index253.js.map +1 -1
  109. package/dist/index254.js +116 -3
  110. package/dist/index254.js.map +1 -1
  111. package/dist/index255.js +16 -35
  112. package/dist/index255.js.map +1 -1
  113. package/dist/index256.js +14 -19
  114. package/dist/index256.js.map +1 -1
  115. package/dist/index257.js +3 -9
  116. package/dist/index257.js.map +1 -1
  117. package/dist/index258.js +36 -8
  118. package/dist/index258.js.map +1 -1
  119. package/dist/index259.js +19 -18
  120. package/dist/index259.js.map +1 -1
  121. package/dist/index260.js +9 -28
  122. package/dist/index260.js.map +1 -1
  123. package/dist/index261.js +7 -15
  124. package/dist/index261.js.map +1 -1
  125. package/dist/index262.js +19 -24
  126. package/dist/index262.js.map +1 -1
  127. package/dist/index263.js +29 -29
  128. package/dist/index263.js.map +1 -1
  129. package/dist/index264.js +17 -5
  130. package/dist/index264.js.map +1 -1
  131. package/dist/index268.js +5 -21
  132. package/dist/index268.js.map +1 -1
  133. package/dist/index269.js +3 -5
  134. package/dist/index269.js.map +1 -1
  135. package/dist/index270.js +24 -3
  136. package/dist/index270.js.map +1 -1
  137. package/dist/index271.js +111 -22
  138. package/dist/index271.js.map +1 -1
  139. package/dist/index272.js +14 -111
  140. package/dist/index272.js.map +1 -1
  141. package/dist/index273.js +528 -14
  142. package/dist/index273.js.map +1 -1
  143. package/dist/index274.js +111 -515
  144. package/dist/index274.js.map +1 -1
  145. package/dist/index275.js +117 -109
  146. package/dist/index275.js.map +1 -1
  147. package/dist/index276.js +20 -133
  148. package/dist/index276.js.map +1 -1
  149. package/dist/index28.js +2 -2
  150. package/dist/index29.js +3 -37
  151. package/dist/index29.js.map +1 -1
  152. package/dist/index294.js +69 -65
  153. package/dist/index294.js.map +1 -1
  154. package/dist/index295.js +8 -68
  155. package/dist/index295.js.map +1 -1
  156. package/dist/index296.js +14 -9
  157. package/dist/index296.js.map +1 -1
  158. package/dist/index297.js +66 -14
  159. package/dist/index297.js.map +1 -1
  160. package/dist/index298.js +64 -65
  161. package/dist/index298.js.map +1 -1
  162. package/dist/index3.js +92 -86
  163. package/dist/index3.js.map +1 -1
  164. package/dist/index30.js +125 -3
  165. package/dist/index30.js.map +1 -1
  166. package/dist/index31.js +227 -120
  167. package/dist/index31.js.map +1 -1
  168. package/dist/index32.js +21 -229
  169. package/dist/index32.js.map +1 -1
  170. package/dist/index33.js +50 -23
  171. package/dist/index33.js.map +1 -1
  172. package/dist/index34.js +21 -50
  173. package/dist/index34.js.map +1 -1
  174. package/dist/index35.js +126 -18
  175. package/dist/index35.js.map +1 -1
  176. package/dist/index36.js +205 -113
  177. package/dist/index36.js.map +1 -1
  178. package/dist/index37.js +74 -205
  179. package/dist/index37.js.map +1 -1
  180. package/dist/index38.js +115 -87
  181. package/dist/index38.js.map +1 -1
  182. package/dist/index39.js +5 -118
  183. package/dist/index39.js.map +1 -1
  184. package/dist/index4.js +2 -2
  185. package/dist/index40.js +819 -5
  186. package/dist/index40.js.map +1 -1
  187. package/dist/index41.js +56 -847
  188. package/dist/index41.js.map +1 -1
  189. package/dist/index42.js +37 -57
  190. package/dist/index42.js.map +1 -1
  191. package/dist/index45.js +1 -1
  192. package/dist/index46.js +1 -1
  193. package/dist/index49.js +1 -1
  194. package/dist/index5.js +2 -2
  195. package/dist/index50.js +1 -1
  196. package/dist/index52.js +1 -1
  197. package/dist/index56.js +2 -6
  198. package/dist/index56.js.map +1 -1
  199. package/dist/index57.js +2 -8
  200. package/dist/index57.js.map +1 -1
  201. package/dist/index58.js +3 -5
  202. package/dist/index58.js.map +1 -1
  203. package/dist/index59.js +47 -3
  204. package/dist/index59.js.map +1 -1
  205. package/dist/index6.js +5 -5
  206. package/dist/index60.js +48 -45
  207. package/dist/index60.js.map +1 -1
  208. package/dist/index61.js +7 -50
  209. package/dist/index61.js.map +1 -1
  210. package/dist/index62.js +14 -7
  211. package/dist/index62.js.map +1 -1
  212. package/dist/index63.js +133 -14
  213. package/dist/index63.js.map +1 -1
  214. package/dist/index64.js +10 -133
  215. package/dist/index64.js.map +1 -1
  216. package/dist/index65.js +216 -10
  217. package/dist/index65.js.map +1 -1
  218. package/dist/index66.js +12 -216
  219. package/dist/index66.js.map +1 -1
  220. package/dist/index67.js +47 -13
  221. package/dist/index67.js.map +1 -1
  222. package/dist/index68.js +47 -44
  223. package/dist/index68.js.map +1 -1
  224. package/dist/index69.js +4 -50
  225. package/dist/index69.js.map +1 -1
  226. package/dist/index7.js +2 -2
  227. package/dist/index70.js +6 -4
  228. package/dist/index70.js.map +1 -1
  229. package/dist/index71.js +28 -6
  230. package/dist/index71.js.map +1 -1
  231. package/dist/index72.js +50 -28
  232. package/dist/index72.js.map +1 -1
  233. package/dist/index73.js +9 -50
  234. package/dist/index73.js.map +1 -1
  235. package/dist/index74.js +2 -9
  236. package/dist/index74.js.map +1 -1
  237. package/dist/index75.js +2 -2
  238. package/dist/index76.js +6 -2
  239. package/dist/index76.js.map +1 -1
  240. package/dist/index77.js +8 -2
  241. package/dist/index77.js.map +1 -1
  242. package/dist/index78.js +6 -2
  243. package/dist/index78.js.map +1 -1
  244. package/dist/index8.js +3 -3
  245. package/dist/index9.js +1 -1
  246. package/package.json +3 -2
package/dist/index298.js CHANGED
@@ -1,69 +1,68 @@
1
- var N = function(r) {
2
- return r.tagName === "TEXTAREA";
3
- }, b = function(r, e) {
4
- if (!(r instanceof Element))
5
- return !1;
6
- var t = window.getComputedStyle(r);
7
- return (
8
- // not-not-scrollable
9
- t[e] !== "hidden" && // contains scroll inside self
10
- !(t.overflowY === t.overflowX && !N(r) && t[e] === "visible")
11
- );
12
- }, D = function(r) {
13
- return b(r, "overflowY");
14
- }, E = function(r) {
15
- return b(r, "overflowX");
16
- }, T = function(r, e) {
17
- var t = e.ownerDocument, l = e;
18
- do {
19
- typeof ShadowRoot < "u" && l instanceof ShadowRoot && (l = l.host);
20
- var f = g(r, l);
21
- if (f) {
22
- var n = m(r, l), i = n[1], o = n[2];
23
- if (i > o)
24
- return !0;
1
+ import { __assign as d } from "./index237.js";
2
+ function l(r) {
3
+ return r;
4
+ }
5
+ function h(r, t) {
6
+ t === void 0 && (t = l);
7
+ var e = [], o = !1, c = {
8
+ read: function() {
9
+ if (o)
10
+ throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");
11
+ return e.length ? e[e.length - 1] : r;
12
+ },
13
+ useMedium: function(u) {
14
+ var n = t(u, o);
15
+ return e.push(n), function() {
16
+ e = e.filter(function(i) {
17
+ return i !== n;
18
+ });
19
+ };
20
+ },
21
+ assignSyncMedium: function(u) {
22
+ for (o = !0; e.length; ) {
23
+ var n = e;
24
+ e = [], n.forEach(u);
25
+ }
26
+ e = {
27
+ push: function(i) {
28
+ return u(i);
29
+ },
30
+ filter: function() {
31
+ return e;
32
+ }
33
+ };
34
+ },
35
+ assignMedium: function(u) {
36
+ o = !0;
37
+ var n = [];
38
+ if (e.length) {
39
+ var i = e;
40
+ e = [], i.forEach(u), n = e;
41
+ }
42
+ var s = function() {
43
+ var f = n;
44
+ n = [], f.forEach(u);
45
+ }, a = function() {
46
+ return Promise.resolve().then(s);
47
+ };
48
+ a(), e = {
49
+ push: function(f) {
50
+ n.push(f), a();
51
+ },
52
+ filter: function(f) {
53
+ return n = n.filter(f), e;
54
+ }
55
+ };
25
56
  }
26
- l = l.parentNode;
27
- } while (l && l !== t.body);
28
- return !1;
29
- }, H = function(r) {
30
- var e = r.scrollTop, t = r.scrollHeight, l = r.clientHeight;
31
- return [
32
- e,
33
- t,
34
- l
35
- ];
36
- }, p = function(r) {
37
- var e = r.scrollLeft, t = r.scrollWidth, l = r.clientWidth;
38
- return [
39
- e,
40
- t,
41
- l
42
- ];
43
- }, g = function(r, e) {
44
- return r === "v" ? D(e) : E(e);
45
- }, m = function(r, e) {
46
- return r === "v" ? H(e) : p(e);
47
- }, B = function(r, e) {
48
- return r === "h" && e === "rtl" ? -1 : 1;
49
- }, V = function(r, e, t, l, f) {
50
- var n = B(r, window.getComputedStyle(e).direction), i = n * l, o = t.target, d = e.contains(o), c = !1, s = i > 0, h = 0, S = 0;
51
- do {
52
- if (!o)
53
- break;
54
- var u = m(r, o), v = u[0], C = u[1], y = u[2], w = C - y - n * v;
55
- (v || w) && g(r, o) && (h += w, S += v);
56
- var a = o.parentNode;
57
- o = a && a.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? a.host : a;
58
- } while (
59
- // portaled content
60
- !d && o !== document.body || // self content
61
- d && (e.contains(o) || e === o)
62
- );
63
- return (s && Math.abs(h) < 1 || !s && Math.abs(S) < 1) && (c = !0), c;
64
- };
57
+ };
58
+ return c;
59
+ }
60
+ function v(r) {
61
+ r === void 0 && (r = {});
62
+ var t = h(null);
63
+ return t.options = d({ async: !0, ssr: !1 }, r), t;
64
+ }
65
65
  export {
66
- V as handleScroll,
67
- T as locationCouldBeScrolled
66
+ v as createSidecarMedium
68
67
  };
69
68
  //# sourceMappingURL=index298.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index298.js","sources":["../../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js"],"sourcesContent":["var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n"],"names":["alwaysContainsScroll","node","elementCanBeScrolled","overflow","styles","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","ownerDocument","current","isScrollable","elementCouldBeScrolled","_a","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","event","sourceDelta","noOverscroll","directionFactor","delta","target","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index298.js","sources":["../../../node_modules/use-sidecar/dist/es2015/medium.js"],"sourcesContent":["import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n"],"names":["ItoI","a","innerCreateMedium","defaults","middleware","buffer","assigned","medium","data","item","x","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","options","__assign"],"mappings":";AACA,SAASA,EAAKC,GAAG;AACb,SAAOA;AACX;AACA,SAASC,EAAkBC,GAAUC,GAAY;AAC7C,EAAIA,MAAe,WAAUA,IAAaJ;AAC1C,MAAIK,IAAS,CAAA,GACTC,IAAW,IACXC,IAAS;AAAA,IACT,MAAM,WAAY;AACd,UAAID;AACA,cAAM,IAAI,MAAM,kGAAkG;AAEtH,aAAID,EAAO,SACAA,EAAOA,EAAO,SAAS,CAAC,IAE5BF;AAAA,IACX;AAAA,IACA,WAAW,SAAUK,GAAM;AACvB,UAAIC,IAAOL,EAAWI,GAAMF,CAAQ;AACpC,aAAAD,EAAO,KAAKI,CAAI,GACT,WAAY;AACf,QAAAJ,IAASA,EAAO,OAAO,SAAUK,GAAG;AAAE,iBAAOA,MAAMD;AAAA,QAAM,CAAC;AAAA,MAC9D;AAAA,IACJ;AAAA,IACA,kBAAkB,SAAUE,GAAI;AAE5B,WADAL,IAAW,IACJD,EAAO,UAAQ;AAClB,YAAIO,IAAMP;AACV,QAAAA,IAAS,CAAA,GACTO,EAAI,QAAQD,CAAE;AAAA,MAClB;AACA,MAAAN,IAAS;AAAA,QACL,MAAM,SAAUK,GAAG;AAAE,iBAAOC,EAAGD,CAAC;AAAA,QAAG;AAAA,QACnC,QAAQ,WAAY;AAAE,iBAAOL;AAAA,QAAQ;AAAA,MACrD;AAAA,IACQ;AAAA,IACA,cAAc,SAAUM,GAAI;AACxB,MAAAL,IAAW;AACX,UAAIO,IAAe,CAAA;AACnB,UAAIR,EAAO,QAAQ;AACf,YAAIO,IAAMP;AACV,QAAAA,IAAS,CAAA,GACTO,EAAI,QAAQD,CAAE,GACdE,IAAeR;AAAA,MACnB;AACA,UAAIS,IAAe,WAAY;AAC3B,YAAIF,IAAMC;AACV,QAAAA,IAAe,CAAA,GACfD,EAAI,QAAQD,CAAE;AAAA,MAClB,GACII,IAAQ,WAAY;AAAE,eAAO,QAAQ,QAAO,EAAG,KAAKD,CAAY;AAAA,MAAG;AACvE,MAAAC,EAAK,GACLV,IAAS;AAAA,QACL,MAAM,SAAUK,GAAG;AACf,UAAAG,EAAa,KAAKH,CAAC,GACnBK,EAAK;AAAA,QACT;AAAA,QACA,QAAQ,SAAUC,GAAQ;AACtB,iBAAAH,IAAeA,EAAa,OAAOG,CAAM,GAClCX;AAAA,QACX;AAAA,MAChB;AAAA,IACQ;AAAA,EACR;AACI,SAAOE;AACX;AAMO,SAASU,EAAoBC,GAAS;AACzC,EAAIA,MAAY,WAAUA,IAAU,CAAA;AACpC,MAAIX,IAASL,EAAkB,IAAI;AACnC,SAAAK,EAAO,UAAUY,EAAS,EAAE,OAAO,IAAM,KAAK,GAAK,GAAID,CAAO,GACvDX;AACX;","x_google_ignoreList":[0]}
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":";;;;;;;;AASA,MAAMA,KAAwB,oBAAIC,IAAI,CACpC,kBACA,SACA,WACA,cACA,gBACA,eACA,uBACA,uBACA,uBACA,uBACA,uBACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,eACA,YACA,WACA,WACA,aACA,aACA,gBACA,mBACA,WACA,iBACA,iBAAiB,CAClB,GAEKC,IAAiBA,CAACC,OACLA,EAAWC,MAAMA,QAAQ,IAC1BC,QAAQ,aAAa,EAAE,EAAEC,KAAAA,GAGrCC,KAAiBC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAAA,EAAA,CAAA,GAAC;AAAA,IAAAP,YAAAA;AAAAA,EAAAA,IAAAK;AAAkE,MAAAG,GAAAC,GAAAC;AAAA,MAAAJ,SAAAN,GAAA;AAO/EU,IAAAA,IAAAC,uBAAkBC,IAAlB,6BAAiB;AAACC,IAAAA,GAAA;AAN3BL,MAAAA,IAAoBT,EAAeC,CAAU;AAC7C,YAAAc,IAAiBd,EAAUC,MAAWA,QAArB,IACjBc,IAAgBf,EAAUC,MAAcc,WAAxB,CAAA,GAChBC,IAA0BR,EAAWS,SAAUH,EAAQG;AAEvD,UAAIF,EAAOE,WAAY,GAAC;AACfP,QAAAA,wCAAGF,UAAAA,EAAAA,CAAW;AAAd,cAAAK;AAAAA,MAAkB;AAG3BJ,MAAAA,IAA2B,CAAA;AAC3B,UAAAS,IAAgB;AAEhBH,MAAAA,EAAOI,QAAS,CAAAC,GAAAC,MAAA;AACd,YAAIL,KAAqBI,EAASE,eAAgBd,EAAWS;AAAO;AAIpE,cAAAK,IAAoBF,EAASE,aAC7BC,IAAkBC,KAAIC,IAAKL,EAASG,WAAYf,EAAWS,MAAO;AAMlE,YAJIK,IAAcJ,KAChBT,EAAKiB,KAAMlB,EAAWY,UAAWF,GAAWI,CAAW,CAAC,GAGtDC,IAAYD,GAAW;AACzB,gBAAAK,IAAgBnB,EAAWY,UAAWE,GAAaC,CAAS;AAC5Dd,UAAAA,EAAKiB,KAAME,gBAAAA,EAAAA,IAAA,UAAA,EAAqBD,UAAAA,EAAAA,GAARN,CAAgB,CAAS;AAAA,QAAC;AAGpDH,QAAAA,IAAYM,KAAIK,IAAKX,GAAWK,CAAS;AAAA,MAAhC,CACV,GAEGL,IAAYV,EAAWS,UACzBR,EAAKiB,KAAMlB,EAAWY,UAAWF,CAAS,CAAC;AAAA,IAC5C;AAAAZ,IAAAA,OAAAN,GAAAM,OAAAE,GAAAF,OAAAG,GAAAH,OAAAI;AAAAA,EAAA;AAAAF,IAAAA,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA,GAAAI,IAAAJ,EAAA,CAAA;AAAA,MAAAI,MAAAC,uBAAAC,IAAA,6BAAA;AAAA,WAAAF;AAED,MAAID,EAAKQ,WAAY,GAAC;AAAA,QAAAa;AAAA,WAAAxB,SAAAE,KACbsB,wCAAGtB,UAAAA,EAAAA,CAAW,GAAIF,OAAAE,GAAAF,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA,GAAlBwB;AAAAA,EAAkB;AAC1B,MAAAA;AAAA,SAAAxB,SAAAG,KAEMqB,wCAAGrB,UAAAA,EAAAA,CAAK,GAAIH,OAAAG,GAAAH,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA,GAAZwB;AAAY,GAGfC,KAAsBA,CAC1B/B,GACAgC,MAEI,CAAChC,EAAWiC,SAASjC,EAAWiC,MAAMhB,WAAW,KAIjD,CAACe,KAAgBA,EAAaE,SAAS,IAClC,KAGFlC,EAAWiC,MAAME,KAAKC,OAAQJ,EAAaK,IAAID,CAAI,CAAC,GAGvDE,KAAkBA,CAACtC,GAAgDqB,MACvErB,EAAWuC,WAAW,GAAGvC,EAAWC,MAAMA,QAAQ,YAAY,IAAIoB,CAAK,IAEnEmB,KAAuBA,CAACC,MAAsD;AAClF,QAAMC,wBAAUC,IAAAA;AAEhBF,SAAAA,EAAYtB,QAAQnB,CAAAA,MAAc;AAChC,UAAM4C,IAAM5C,EAAWuC;AAEvB,IAAKK,MAIAF,EAAIL,IAAIO,CAAG,KACdF,EAAIG,IAAID,GAAK5C,CAAU;AAAA,EAE3B,CAAC,GAEM8C,MAAMC,KAAKL,EAAIM,OAAAA,CAAQ;AAChC,GAEMC,KAAyBA,CAC7BR,GACAT,MACGS,EAAYS,OAAOlD,CAAAA,MAAc+B,GAAoB/B,GAAYgC,CAAY,CAAC,GAE7EmB,KAAkBA,CAACV,MACvBA,EAAYW,KAAK,CAACC,GAAGC,MAAM;AACzB,QAAMC,IAAYF,EAAEG,kBAAkBC,OAAOC,mBACvCC,IAAYL,EAAEE,kBAAkBC,OAAOC;AAE7C,SAAOH,IAAYI;AACrB,CAAC,GAEGC,KAA0BA,CAC9BnB,GACAT,MACGmB,GAAgBF,GAAuBT,GAAqBC,CAAW,GAAGT,CAAY,CAAC,GAEtF6B,KAAeA,CAAC7D,GAAgD8D,MACpD/D,EAAeC,CAAU,EAC1B+D,YAAAA,MAAkBD,EAAM3D,KAAAA,EAAO4D,YAAAA,GAGnCC,KAA2BA,CAAC;AAAA,EACvCC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAL,OAAAA;AAAAA,EACAM,eAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,MAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,kBAAAA;AAAAA,EACAC,kBAAAA;AAAAA,EACAC,qBAAAA;AAAAA,EACA1C,cAAAA;AAcF,MAAM;AACJ,QAAM,CAAC2C,GAAYC,CAAa,IAAIC,EAASf,KAAS,EAAE,GAClD,CAACrB,GAAaqC,CAAc,IAAID,EAA+C,CAAA,CAAE,GACjF,CAACE,GAAgBC,CAAiB,IAAIH,EAAS,EAAK,GACpD,CAACI,GAAkBC,CAAmB,IAAIL,EAAS,EAAE,GACrD,CAACM,GAAWC,CAAY,IAAIP,EAAS,EAAK,GAE1CQ,IAAWC,EAAyB,IAAI,GACxCC,IAAcD,EAAyB,IAAI,GAC3CE,IAAcF,EAAO,EAAK,GAC1BG,IAAeH,EAAO,EAAK,GAC3BI,IAAkBJ,EAA2D,IAAI,GACjFK,IAAaL,EAAiC,EAAE,GAChDM,IAAoBN,EAAuB,QAAQ,GACnDO,IAAgBC,GAAe,UAAUrB,CAAgB,GACzDsB,IAAkBC,GAAQ,MAAM;AACpC,QAAI,CAAChE;AACH,aAAOnC;AAGT,UAAMoG,wBAAanG,IAAAA;AACnB,eAAWsC,KAAQJ;AACjBiE,MAAAA,EAAOC,IAAI9D,CAAI;AAEjB,WAAO6D;AAAAA,EACT,GAAG,CAACjE,CAAY,CAAC;AAEjBmE,EAAAA,EAAU,MAAM;AACdvB,IAAAA,EAAcd,KAAS,EAAE,GACzB2B,EAAaW,UAAU;AAAA,EACzB,GAAG,CAACtC,CAAK,CAAC,GAEVqC,EAAU,MAAM;AACd,QAAIX,EAAYY,SAAS;AACvBZ,MAAAA,EAAYY,UAAU;AACtB;AAAA,IACF;AAEA,UAAMC,IAAU1B,EAAWxE,KAAAA;AAE3B,IACEiF,EADEiB,MAAY,EACI;AAKpB,QAAIC,IAAW;AAEf,UAAMC,IAAUC,WAAW,MAAM;AAC/B,UAAI,CAACF;AACH;AAGF,UAAID,MAAY,IAAI;AAClBvB,QAAAA,EAAe,CAAA,CAAE,GACjBE,EAAkB,EAAK,GACvBU,EAAgBU,UAAU,MACtBtC,MAAU,MACZM,EAAc,EAAE;AAElB;AAAA,MACF;AAEA,UAAI,CAACyB,EAAe;AAEpB,YAAM;AAAA,QAAEY,wBAAAA;AAAAA,QAAwBC,0BAAAA;AAAAA,MAAAA,IAA6Bb;AAE7D,UAAI,CAACY,KAA0B,CAACC,GAA0B;AACxDC,gBAAQC,MAAM,8FAA8F,GAC5G9B,EAAe,CAAA,CAAE,GACjBE,EAAkB,EAAK,GACvBI,EAAa,EAAK;AAClB;AAAA,MACF;AAEA,MAAKM,EAAgBU,YACnBV,EAAgBU,UAAU,IAAIM,EAAAA;AAGhC,YAAMG,IAAkD;AAAA,QACtDC,OAAOnC;AAAAA,QACPoC,cAAcrB,EAAgBU,WAAWY;AAAAA,QACzCC,qBAAqB,CAAC,IAAI;AAAA,MAAA;AAE5B,MAAIvC,MACFmC,EAAQnC,sBAAsBA,IAGhC+B,EAAuBS,6BAA6BL,CAAO,EACxDM,KAAK,CAACC,MAA2E;AAChF,YAAI,CAACd;AACH;AAGF,cAAMe,IAAmBD,EAASE,YAC/B5E,IAAI,CAAC6E,MAA0DA,EAAWC,eAAe,EACzFtE,OAAO,CAAClD,MAAiEyH,EAAQzH,CAAW,GAEzF0H,IAAsB9D,GAAwByD,GAAkBtB,CAAe,GAE/E4B,IAAmBD,EAAoB,CAAC,GACxCE,IACJD,KAAoBD,EAAoBzG,WAAW,KAAK4C,GAAa8D,GAAkBhD,CAAU;AAEnG,YAAI,CAACc,EAAaW,WAAWwB,GAAe;AAC1C9C,UAAAA,EAAe4C,CAAmB,GAClC1C,EAAkB,EAAK,GACvBI,EAAa,EAAK;AAClB;AAAA,QACF;AAEA,QAAIsC,EAAoBzG,SAAS,KAC/B6D,EAAe4C,CAAmB,GAC9BjC,EAAaW,WACfpB,EAAkB,EAAI,GAExBE,EAAoB,EAAE,MAEtBJ,EAAe,CAAA,CAAE,GACjBE,EAAkB,EAAK,IAEzBI,EAAa,EAAK;AAAA,MACpB,CAAC,EACAyC,MAAM,CAACjB,MAAmB;AACzB,QAAKN,MAGLK,QAAQC,MAAM,qDAAqDA,CAAK,GACxE9B,EAAe,CAAA,CAAE,GACjBE,EAAkB,EAAK,GACvBI,EAAa,EAAK;AAAA,MACpB,CAAC;AAAA,IACL,GAAG,GAAG;AAEN,WAAO,MAAM;AACXkB,MAAAA,IAAW,IACXwB,aAAavB,CAAO;AAAA,IACtB;AAAA,EACF,GAAG,CAAC5B,GAAYkB,GAAezB,GAAeN,GAAOY,GAAqBqB,CAAe,CAAC,GAE1FI,EAAU,MAAM;AACd,UAAM4B,IAAqBA,CAACC,MAAsB;AAChD,MACE3C,EAASe,WACT,CAACf,EAASe,QAAQ6B,SAASD,EAAME,MAAc,KAC/C3C,EAAYa,WACZ,CAACb,EAAYa,QAAQ6B,SAASD,EAAME,MAAc,KAElDlD,EAAkB,EAAK;AAAA,IAE3B;AACAmD,oBAASC,iBAAiB,aAAaL,CAAkB,GAClD,MAAM;AACXI,eAASE,oBAAoB,aAAaN,CAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAMO,IAAyBA,CAACtI,MAAmD;AACjFwF,IAAAA,EAAYY,UAAU;AACtB,UAAMmC,IAAaxI,EAAeC,CAAU;AAC5C4E,IAAAA,EAAc2D,CAAU,GACxBnE,EAAcmE,CAAU,GACxBzD,EAAe,CAAA,CAAE,GACjBE,EAAkB,EAAK,GACvBI,EAAa,EAAK,GAClBM,EAAgBU,UAAU;AAAA,EAC5B,GAEMoC,IAAoBA,CAACC,MAAqC;AAC9DhD,IAAAA,EAAaW,UAAU,IACvBxB,EAAc6D,EAAEP,OAAOpE,KAAK;AAAA,EAC9B,GAEM4E,IAAgBA,CAACD,MAAuC;AAC5D,QAAI,CAAC1D,KAAkBtC,EAAYxB,WAAW,GAAG;AAC/C,MAAIwH,EAAE7F,QAAQ,YACZ6F,EAAEE,eAAAA,GACFvE,EAAcO,CAAU,GACxBK,EAAkB,EAAK,GACvBU,EAAgBU,UAAU;AAE5B;AAAA,IACF;AAEA,IAAIqC,EAAE7F,QAAQ,eACZgD,EAAkBQ,UAAUqC,EAAEG,SAAS,SAAS,UAChDH,EAAEE,eAAAA,GACFzD,EAAoB2D,CAAAA,MACdpG,EAAYxB,WAAW,IAClB,KAEF4H,IAAO,IAAI,KAAKA,IAAO,KAAKpG,EAAYxB,MAChD,KACQwH,EAAE7F,QAAQ,aACnBgD,EAAkBQ,UAAUqC,EAAEG,SAAS,SAAS,UAChDH,EAAEE,eAAAA,GACFzD,EAAoB2D,CAAAA,MACdpG,EAAYxB,WAAW,IAClB,KAEL4H,KAAQ,IACHpG,EAAYxB,SAAS,KAEtB4H,IAAO,KAAKpG,EAAYxB,MACjC,KACQwH,EAAE7F,QAAQ,WACnB6F,EAAEE,eAAAA,GACE1D,IAAmB,MAAMxC,EAAYwC,CAAgB,IACvDqD,EAAuB7F,EAAYwC,CAAgB,CAAC,KAEpDb,EAAcO,CAAU,GACxBK,EAAkB,EAAK,GACvBU,EAAgBU,UAAU,SAEnBqC,EAAE7F,QAAQ,YACnBoC,EAAkB,EAAK;AAAA,EAE3B,GAEM8D,IAAaA,MAAM;AACvB9D,IAAAA,EAAkB,EAAK,GACnBlB,MAAUa,KACZP,EAAcO,CAAU,GAE1Be,EAAgBU,UAAU;AAAA,EAC5B,GAEM2C,IAAWvE,MAAqBF,IAAO,GAAGA,CAAI,UAAU0C;AAE9Db,SAAAA,EAAU,MAAM;AACd,QAAI,CAACpB,KAAkBE,IAAmB,GAAG;AAC3CW,MAAAA,EAAkBQ,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM4C,IAAOrD,EAAWS,QAAQnB,CAAgB,GAC1CgE,IAAO1D,EAAYa;AAEzB,QAAI,CAAC4C,KAAQ,CAACC,GAAM;AAClBrD,MAAAA,EAAkBQ,UAAU;AAC5B;AAAA,IACF;AAEA,UAAM8C,IAAWtD,EAAkBQ;AACnCR,IAAAA,EAAkBQ,UAAU;AAE5B,UAAM+C,IAAMH,EAAKI,WACXC,IAASF,IAAMH,EAAKM,cACpBC,IAAUN,EAAKO,WACfC,IAAaF,IAAUN,EAAKS;AAElC,IAAIP,KAAOI,KAAWF,KAAUI,KAIhCT,EAAKW,eAAe;AAAA,MAClBC,OAAO;AAAA,MACPV,UAAAA;AAAAA,IAAAA,CACD;AAAA,EACH,GAAG,CAACjE,GAAkBF,CAAc,CAAC,GAErCY,EAAWS,QAAQnF,SAASwB,EAAYxB,QAGtC4I,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACZd,UAAAA;AAAAA,IAAAA,KACCnH,gBAAAA,EAAAA,IAAC,SAAA,EACC,UAAU,IACV,cAAa,kBACb,MAAMmH,GACN,eAAY,QACZ,WAAU,8DAAA,CAA6D;AAAA,0BAG1E,SAAA,EAAM,SAAS9E,GAAI,WAAU,yEAC3BC,UAAAA,GACH;AAAA,IACA2F,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAjI,gBAAAA,MAACkI,MACC,KAAKzE,GACL,IAAApB,GACA,MAAK,QACL,aAAAE,GACA,MAAMG,KAAQ,GAAGL,CAAE,UACnB,OAAOU,GACP,UAAU6D,GACV,WAAWE,GACX,SAAS,MAAM;AACb,QAAIjG,EAAYxB,SAAS,KAAK0D,KAC5BK,EAAkB,EAAI;AAAA,MAE1B,GACA,QAAQ8D,GACR,UAAAzE,GACA,cAAa,OACb,WAAW0F,GAAG,UAAU5E,KAAa,QAAQZ,CAAS,EAAA,CAAE;AAAA,MAEzDY,KACCvD,gBAAAA,EAAAA,IAACoI,IAAA,EACC,WAAU,oGACV,eAAY,OAAA,CAAM;AAAA,IAAA,GAGxB;AAAA,IACCjF,KAAkBtC,EAAYxB,SAAS,2BACrC,MAAA,EACC,KAAKsE,GACL,WAAU,qHACV,MAAK,WAEJ9C,UAAAA,EAAYC,IAAI,CAAC1C,GAAYqB,MAC5BO,gBAAAA,EAAAA,IAAC,MAAA,EAEC,KAAKqI,CAAAA,MAAQ;AACXtE,MAAAA,EAAWS,QAAQ/E,CAAK,IAAI4I;AAAAA,IAC9B,GACA,WAAWC,GACT,oEACA;AAAA,MAAE,eAAejF,MAAqB5D;AAAAA,IAAAA,CACxC,GACA,MAAK,UACL,aAAaoH,CAAAA,MAAK;AAChBA,MAAAA,EAAEE,eAAAA,GACFL,EAAuBtI,CAAU;AAAA,IACnC,GAEA,UAAA4B,gBAAAA,EAAAA,IAACxB,IAAA,EAAe,YAAYJ,GAAW,EAAA,GAdlCsC,GAAgBtC,GAAYqB,CAAK,CAexC,CACD,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}