@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
package/dist/index37.js CHANGED
@@ -1,94 +1,225 @@
1
- function c(t) {
2
- if (!t)
3
- return !1;
4
- const e = t.charCodeAt(0);
5
- return e >= 48 && e <= 57;
1
+ import { MAX_DIAL_CODE_LENGTH as W, COMMON_IDD_PREFIXES as $, DEFAULT_COUNTRY as x, COUNTRY_DIAL_CODES as C } from "./index36.js";
2
+ import { getCountryCallingCode as p } from "./index40.js";
3
+ import { AsYouType as I } from "./index75.js";
4
+ import { validatePhoneNumberLength as D } from "./index76.js";
5
+ function g(t) {
6
+ return t.replace(/\D/g, "");
6
7
  }
7
- function l(t, e) {
8
- let n = 0;
9
- const r = Math.min(e, t.length);
10
- for (let i = 0; i < r; i += 1)
11
- c(t[i] ?? "") && (n += 1);
12
- return n;
8
+ function P(t) {
9
+ return t ? t.length > W ? !1 : C.some((e) => e.startsWith(t)) : !0;
13
10
  }
14
- function a(t, e) {
15
- if (e <= 0)
16
- return t.startsWith("+") ? Math.min(1, t.length) : 0;
17
- let n = 0;
18
- for (let r = 0; r < t.length; r += 1)
19
- if (c(t[r] ?? "") && (n += 1, n === e))
20
- return r + 1;
21
- return t.length;
11
+ const N = /[\u061C\u200B-\u200F\u202A-\u202E\u2066-\u2069\uFEFF]/g;
12
+ function T(t) {
13
+ return t.replace(N, "");
22
14
  }
23
- function g(t) {
24
- return !t || c(t) ? !1 : t !== "+";
15
+ function q(t, e, s = {}) {
16
+ const {
17
+ force: u = !1
18
+ } = s, o = `+${e}`;
19
+ if (!t.startsWith(o) || !u)
20
+ return t;
21
+ const i = t.slice(o.length).trimStart();
22
+ if (i.startsWith("0"))
23
+ return t;
24
+ if (!i)
25
+ return `${o} 0`;
26
+ const [n, ...r] = i.split(" "), f = `0${n ?? ""}`, l = r.length > 0 ? ` ${r.join(" ")}` : "";
27
+ return `${o} ${f}${l}`.replace(/\s\s+/g, " ").trimEnd();
25
28
  }
26
- function h(t, e) {
27
- let n = e;
28
- for (; n > 0; ) {
29
- const r = t[n - 1] ?? "";
30
- if (!g(r))
31
- break;
32
- n -= 1;
33
- }
34
- return n;
29
+ const O = {
30
+ GG: "GB",
31
+ JE: "GB",
32
+ IM: "GB"
33
+ };
34
+ function y(t) {
35
+ if (t)
36
+ return O[t] ?? t;
35
37
  }
36
- function S(t, e) {
37
- let n = e;
38
- for (; n < t.length; ) {
39
- const r = t[n] ?? "";
40
- if (!g(r))
41
- break;
42
- n += 1;
38
+ function _(t, e, s) {
39
+ if (!t || !s || (t.nationalNumber ?? "").length < 4)
40
+ return;
41
+ const o = t.countryCallingCode;
42
+ if (!o)
43
+ return;
44
+ const i = t.getMetadata, n = (typeof i == "function" ? i() : null)?.country_calling_codes?.[o];
45
+ if (!n || n.length === 0)
46
+ return;
47
+ const r = [];
48
+ for (const f of n) {
49
+ const l = y(f);
50
+ l && !r.includes(l) && r.push(l);
43
51
  }
44
- return n;
52
+ if (r.length !== 0)
53
+ return e && r.includes(e) ? e : r.includes(x) ? x : r[0];
45
54
  }
46
- function m(t) {
55
+ function B(t, e, s, u) {
56
+ if (!t)
57
+ return !1;
58
+ if (!u)
59
+ return t.startsWith("0");
60
+ if (!s || !t.startsWith(s) || !t.slice(s.length).startsWith("0"))
61
+ return !1;
62
+ const o = t.slice(s.length + 1), i = e.startsWith(s) ? e.slice(s.length) : e;
63
+ return o === i;
64
+ }
65
+ function S(t) {
66
+ for (const e of $)
67
+ if (t.startsWith(e))
68
+ return t.slice(e.length);
69
+ return t;
70
+ }
71
+ function M(t, e, s = {}) {
47
72
  const {
48
- value: e
49
- } = t, n = t.selectionStart ?? e.length, r = t.selectionEnd ?? n, i = n <= 1 && e.startsWith("+"), o = r <= 1 && e.startsWith("+");
73
+ allowJustPlus: u = !1,
74
+ removeNationalPrefix: o = !0,
75
+ previousValue: i
76
+ } = s, n = T(t).trim();
77
+ if (!n)
78
+ return "";
79
+ if (n === "+")
80
+ return u ? "+" : "";
81
+ if (n.startsWith("+")) {
82
+ const a = g(n);
83
+ if (!a)
84
+ return u ? "+" : "";
85
+ const d = S(a);
86
+ if (d !== a)
87
+ return d ? `+${d}` : u ? "+" : "";
88
+ if (o && e) {
89
+ const h = p(e);
90
+ if (a.startsWith(h) && a.slice(h.length).startsWith("0")) {
91
+ const E = a.slice(h.length + 1);
92
+ return E ? `+${h}${E}` : `+${h}`;
93
+ }
94
+ }
95
+ return `+${a}`;
96
+ }
97
+ const r = g(n);
98
+ if (!r)
99
+ return "";
100
+ const f = S(r);
101
+ if (f !== r)
102
+ return f ? `+${f}` : u ? "+" : "";
103
+ const l = typeof i == "string" ? i : "", m = l && l.startsWith("+") ? g(l) : "";
104
+ if (m && m.length > r.length && m.endsWith(r) && m.length - r.length <= W)
105
+ return `+${r}`;
106
+ if (r === "0")
107
+ return "0";
108
+ if (o && e && r.length > 1 && r.startsWith("0") && !r.startsWith("00")) {
109
+ const a = p(e), d = r.slice(1);
110
+ return d ? `+${a}${d}` : `+${a}`;
111
+ }
112
+ return e ? r.length <= 4 ? `+${r}` : `+${p(e)}${r}` : r;
113
+ }
114
+ function Y(t, e) {
115
+ if (t === "+")
116
+ return {
117
+ international: "+",
118
+ national: "",
119
+ formatted: "+",
120
+ phoneNumber: null,
121
+ detectedCountry: void 0,
122
+ inferredCountry: void 0,
123
+ hasExplicitInternationalPrefix: !0
124
+ };
125
+ const s = /^\s*\+/.test(t), u = e ? new I(e) : new I(), o = u.input(t), i = u.getNumber(), c = g(t), n = y(i?.country ?? u.country ?? void 0), r = n ?? !i ? void 0 : y(_(i, e, c)), f = i?.formatInternational() ?? o, l = i?.formatNational() ?? g(f);
50
126
  return {
51
- selectionStart: n,
52
- selectionEnd: r,
53
- startDigits: l(e, n),
54
- endDigits: l(e, r),
55
- preserveStartIndex: i,
56
- preserveEndIndex: o,
57
- wasAtStart: n === 0,
58
- wasAtEnd: r === e.length
127
+ international: f,
128
+ national: l,
129
+ formatted: o,
130
+ phoneNumber: i,
131
+ detectedCountry: n,
132
+ inferredCountry: r,
133
+ hasExplicitInternationalPrefix: s
59
134
  };
60
135
  }
61
- function u(t, e) {
62
- if (t.selectionStart === t.selectionEnd) {
63
- if (t.wasAtEnd) {
64
- const f = e.length;
65
- return {
66
- start: f,
67
- end: f
68
- };
69
- }
70
- if (t.wasAtStart)
136
+ function v(t, e) {
137
+ return t.startsWith(e) ? t.slice(e.length) : t;
138
+ }
139
+ function H(t, e) {
140
+ if (!e || !t)
141
+ return null;
142
+ try {
143
+ return D(t, e) === "TOO_LONG" ? "TOO_LONG" : null;
144
+ } catch {
145
+ return null;
146
+ }
147
+ }
148
+ function U(t, e, s, u = {}) {
149
+ const {
150
+ hasRemovedNationalPrefix: o = !1,
151
+ detectedCountry: i,
152
+ hasExplicitInternationalPrefix: c = !1
153
+ } = u;
154
+ if (!t)
155
+ return {
156
+ shouldSuggest: !1,
157
+ query: ""
158
+ };
159
+ if (t === "+")
160
+ return {
161
+ shouldSuggest: !0,
162
+ query: ""
163
+ };
164
+ const n = g(t);
165
+ if (!n)
166
+ return {
167
+ shouldSuggest: !0,
168
+ query: ""
169
+ };
170
+ if (o)
171
+ return {
172
+ shouldSuggest: !1,
173
+ query: ""
174
+ };
175
+ if (c && !i)
176
+ return P(n) ? {
177
+ shouldSuggest: !0,
178
+ query: n
179
+ } : {
180
+ shouldSuggest: !1,
181
+ query: ""
182
+ };
183
+ let r = s?.countryCallingCode ?? null;
184
+ if (!r) {
185
+ if (e) {
186
+ const l = p(e);
187
+ n.startsWith(l) && (r = l);
188
+ } else if (!c)
71
189
  return {
72
- start: 0,
73
- end: 0
190
+ shouldSuggest: !1,
191
+ query: ""
74
192
  };
75
193
  }
76
- const n = t.preserveStartIndex ? Math.min(t.selectionStart, e.length) : a(e, t.startDigits), r = t.preserveEndIndex ? Math.min(t.selectionEnd, e.length) : a(e, t.endDigits);
77
- let i = n, o = r;
78
- t.wasAtStart && (i = 0), t.wasAtEnd && (o = e.length), t.selectionStart === t.selectionEnd && (i = o);
79
- const d = Math.min(Math.max(i, 0), e.length), s = Math.min(Math.max(o, 0), e.length);
80
- return d > s ? {
81
- start: s,
82
- end: s
194
+ return r ? v(n, r).length === 0 ? {
195
+ shouldSuggest: !0,
196
+ query: n
197
+ } : {
198
+ shouldSuggest: !1,
199
+ query: ""
83
200
  } : {
84
- start: d,
85
- end: s
201
+ shouldSuggest: !0,
202
+ query: n
86
203
  };
87
204
  }
205
+ function V(t, e) {
206
+ if (t.shouldSuggest)
207
+ return !1;
208
+ const {
209
+ hasExplicitInternationalPrefix: s = !1,
210
+ detectedCountry: u
211
+ } = e;
212
+ return s ? !!u : !0;
213
+ }
88
214
  export {
89
- m as captureSelectionSnapshot,
90
- u as resolveSelection,
91
- h as skipFormattingCharactersLeft,
92
- S as skipFormattingCharactersRight
215
+ B as detectNationalPrefixForDisplay,
216
+ Y as formatWithAsYouType,
217
+ H as getLengthIssue,
218
+ U as getSuggestionState,
219
+ q as injectNationalPrefixDisplay,
220
+ M as normalizeInputValue,
221
+ g as sanitizeDigits,
222
+ V as shouldDisplayExplicitCountrySelection,
223
+ v as stripPrefix
93
224
  };
94
225
  //# sourceMappingURL=index37.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index37.js","sources":["../src/components/PhoneNumberInput/selection.ts"],"sourcesContent":["function isDigitCharacter(char: string) {\n if (!char) {\n return false\n }\n const code = char.charCodeAt(0)\n return code >= 48 && code <= 57\n}\n\nfunction countDigitsBefore(value: string, index: number) {\n let count = 0\n const limit = Math.min(index, value.length)\n for (let position = 0; position < limit; position += 1) {\n if (isDigitCharacter(value[position] ?? \"\")) {\n count += 1\n }\n }\n return count\n}\n\nfunction findIndexForDigitCount(value: string, digitCount: number) {\n if (digitCount <= 0) {\n return value.startsWith(\"+\") ? Math.min(1, value.length) : 0\n }\n\n let seen = 0\n for (let index = 0; index < value.length; index += 1) {\n if (isDigitCharacter(value[index] ?? \"\")) {\n seen += 1\n if (seen === digitCount) {\n return index + 1\n }\n }\n }\n\n return value.length\n}\n\nfunction isFormattingCharacter(char: string) {\n if (!char) {\n return false\n }\n if (isDigitCharacter(char)) {\n return false\n }\n return char !== \"+\"\n}\n\nexport function skipFormattingCharactersLeft(value: string, index: number) {\n let position = index\n while (position > 0) {\n const next = value[position - 1] ?? \"\"\n if (!isFormattingCharacter(next)) {\n break\n }\n position -= 1\n }\n return position\n}\n\nexport function skipFormattingCharactersRight(value: string, index: number) {\n let position = index\n while (position < value.length) {\n const next = value[position] ?? \"\"\n if (!isFormattingCharacter(next)) {\n break\n }\n position += 1\n }\n return position\n}\n\ntype SelectionSnapshot = {\n selectionStart: number\n selectionEnd: number\n startDigits: number\n endDigits: number\n preserveStartIndex: boolean\n preserveEndIndex: boolean\n wasAtStart: boolean\n wasAtEnd: boolean\n}\n\nexport function captureSelectionSnapshot(input: HTMLInputElement): SelectionSnapshot {\n const { value } = input\n const selectionStart = input.selectionStart ?? value.length\n const selectionEnd = input.selectionEnd ?? selectionStart\n const preserveStartIndex = selectionStart <= 1 && value.startsWith(\"+\")\n const preserveEndIndex = selectionEnd <= 1 && value.startsWith(\"+\")\n\n return {\n selectionStart,\n selectionEnd,\n startDigits: countDigitsBefore(value, selectionStart),\n endDigits: countDigitsBefore(value, selectionEnd),\n preserveStartIndex,\n preserveEndIndex,\n wasAtStart: selectionStart === 0,\n wasAtEnd: selectionEnd === value.length,\n }\n}\n\nexport function resolveSelection(snapshot: SelectionSnapshot, value: string) {\n if (snapshot.selectionStart === snapshot.selectionEnd) {\n if (snapshot.wasAtEnd) {\n const end = value.length\n return { start: end, end }\n }\n if (snapshot.wasAtStart) {\n return { start: 0, end: 0 }\n }\n }\n\n const start = snapshot.preserveStartIndex\n ? Math.min(snapshot.selectionStart, value.length)\n : findIndexForDigitCount(value, snapshot.startDigits)\n const end = snapshot.preserveEndIndex\n ? Math.min(snapshot.selectionEnd, value.length)\n : findIndexForDigitCount(value, snapshot.endDigits)\n\n let resolvedStart = start\n let resolvedEnd = end\n\n if (snapshot.wasAtStart) {\n resolvedStart = 0\n }\n\n if (snapshot.wasAtEnd) {\n resolvedEnd = value.length\n }\n\n if (snapshot.selectionStart === snapshot.selectionEnd) {\n resolvedStart = resolvedEnd\n }\n\n const clampedStart = Math.min(Math.max(resolvedStart, 0), value.length)\n const clampedEnd = Math.min(Math.max(resolvedEnd, 0), value.length)\n\n if (clampedStart > clampedEnd) {\n return { start: clampedEnd, end: clampedEnd }\n }\n\n return { start: clampedStart, end: clampedEnd }\n}\n\n"],"names":["isDigitCharacter","char","code","charCodeAt","countDigitsBefore","value","index","count","limit","Math","min","length","position","findIndexForDigitCount","digitCount","startsWith","seen","isFormattingCharacter","skipFormattingCharactersLeft","next","skipFormattingCharactersRight","captureSelectionSnapshot","input","selectionStart","selectionEnd","preserveStartIndex","preserveEndIndex","startDigits","endDigits","wasAtStart","wasAtEnd","resolveSelection","snapshot","end","start","resolvedStart","resolvedEnd","clampedStart","max","clampedEnd"],"mappings":"AAAA,SAASA,EAAiBC,GAAc;AACtC,MAAI,CAACA;AACH,WAAO;AAET,QAAMC,IAAOD,EAAKE,WAAW,CAAC;AAC9B,SAAOD,KAAQ,MAAMA,KAAQ;AAC/B;AAEA,SAASE,EAAkBC,GAAeC,GAAe;AACvD,MAAIC,IAAQ;AACZ,QAAMC,IAAQC,KAAKC,IAAIJ,GAAOD,EAAMM,MAAM;AAC1C,WAASC,IAAW,GAAGA,IAAWJ,GAAOI,KAAY;AACnD,IAAIZ,EAAiBK,EAAMO,CAAQ,KAAK,EAAE,MACxCL,KAAS;AAGb,SAAOA;AACT;AAEA,SAASM,EAAuBR,GAAeS,GAAoB;AACjE,MAAIA,KAAc;AAChB,WAAOT,EAAMU,WAAW,GAAG,IAAIN,KAAKC,IAAI,GAAGL,EAAMM,MAAM,IAAI;AAG7D,MAAIK,IAAO;AACX,WAASV,IAAQ,GAAGA,IAAQD,EAAMM,QAAQL,KAAS;AACjD,QAAIN,EAAiBK,EAAMC,CAAK,KAAK,EAAE,MACrCU,KAAQ,GACJA,MAASF;AACX,aAAOR,IAAQ;AAKrB,SAAOD,EAAMM;AACf;AAEA,SAASM,EAAsBhB,GAAc;AAI3C,SAHI,CAACA,KAGDD,EAAiBC,CAAI,IAChB,KAEFA,MAAS;AAClB;AAEO,SAASiB,EAA6Bb,GAAeC,GAAe;AACzE,MAAIM,IAAWN;AACf,SAAOM,IAAW,KAAG;AACnB,UAAMO,IAAOd,EAAMO,IAAW,CAAC,KAAK;AACpC,QAAI,CAACK,EAAsBE,CAAI;AAC7B;AAEFP,IAAAA,KAAY;AAAA,EACd;AACA,SAAOA;AACT;AAEO,SAASQ,EAA8Bf,GAAeC,GAAe;AAC1E,MAAIM,IAAWN;AACf,SAAOM,IAAWP,EAAMM,UAAQ;AAC9B,UAAMQ,IAAOd,EAAMO,CAAQ,KAAK;AAChC,QAAI,CAACK,EAAsBE,CAAI;AAC7B;AAEFP,IAAAA,KAAY;AAAA,EACd;AACA,SAAOA;AACT;AAaO,SAASS,EAAyBC,GAA4C;AACnF,QAAM;AAAA,IAAEjB,OAAAA;AAAAA,EAAAA,IAAUiB,GACZC,IAAiBD,EAAMC,kBAAkBlB,EAAMM,QAC/Ca,IAAeF,EAAME,gBAAgBD,GACrCE,IAAqBF,KAAkB,KAAKlB,EAAMU,WAAW,GAAG,GAChEW,IAAmBF,KAAgB,KAAKnB,EAAMU,WAAW,GAAG;AAElE,SAAO;AAAA,IACLQ,gBAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAG,aAAavB,EAAkBC,GAAOkB,CAAc;AAAA,IACpDK,WAAWxB,EAAkBC,GAAOmB,CAAY;AAAA,IAChDC,oBAAAA;AAAAA,IACAC,kBAAAA;AAAAA,IACAG,YAAYN,MAAmB;AAAA,IAC/BO,UAAUN,MAAiBnB,EAAMM;AAAAA,EAAAA;AAErC;AAEO,SAASoB,EAAiBC,GAA6B3B,GAAe;AAC3E,MAAI2B,EAAST,mBAAmBS,EAASR,cAAc;AACrD,QAAIQ,EAASF,UAAU;AACrB,YAAMG,IAAM5B,EAAMM;AAClB,aAAO;AAAA,QAAEuB,OAAOD;AAAAA,QAAKA,KAAAA;AAAAA,MAAAA;AAAAA,IACvB;AACA,QAAID,EAASH;AACX,aAAO;AAAA,QAAEK,OAAO;AAAA,QAAGD,KAAK;AAAA,MAAA;AAAA,EAE5B;AAEA,QAAMC,IAAQF,EAASP,qBACnBhB,KAAKC,IAAIsB,EAAST,gBAAgBlB,EAAMM,MAAM,IAC9CE,EAAuBR,GAAO2B,EAASL,WAAW,GAChDM,IAAMD,EAASN,mBACjBjB,KAAKC,IAAIsB,EAASR,cAAcnB,EAAMM,MAAM,IAC5CE,EAAuBR,GAAO2B,EAASJ,SAAS;AAEpD,MAAIO,IAAgBD,GAChBE,IAAcH;AAElB,EAAID,EAASH,eACXM,IAAgB,IAGdH,EAASF,aACXM,IAAc/B,EAAMM,SAGlBqB,EAAST,mBAAmBS,EAASR,iBACvCW,IAAgBC;AAGlB,QAAMC,IAAe5B,KAAKC,IAAID,KAAK6B,IAAIH,GAAe,CAAC,GAAG9B,EAAMM,MAAM,GAChE4B,IAAa9B,KAAKC,IAAID,KAAK6B,IAAIF,GAAa,CAAC,GAAG/B,EAAMM,MAAM;AAElE,SAAI0B,IAAeE,IACV;AAAA,IAAEL,OAAOK;AAAAA,IAAYN,KAAKM;AAAAA,EAAAA,IAG5B;AAAA,IAAEL,OAAOG;AAAAA,IAAcJ,KAAKM;AAAAA,EAAAA;AACrC;"}
1
+ {"version":3,"file":"index37.js","sources":["../src/components/PhoneNumberInput/normalization.ts"],"sourcesContent":["import type { CountryCode } from \"libphonenumber-js\"\nimport { AsYouType, getCountryCallingCode, validatePhoneNumberLength } from \"libphonenumber-js\"\n\nimport {\n COMMON_IDD_PREFIXES,\n COUNTRY_DIAL_CODES,\n DEFAULT_COUNTRY,\n MAX_DIAL_CODE_LENGTH,\n} from \"./country-options\"\n\n\nexport type LengthIssue = \"TOO_LONG\"\n\nexport function sanitizeDigits(value: string) {\n return value.replace(/\\D/g, \"\")\n}\n\nfunction isDialCodeProgress(digits: string) {\n if (!digits) {\n return true\n }\n\n if (digits.length > MAX_DIAL_CODE_LENGTH) {\n return false\n }\n\n return COUNTRY_DIAL_CODES.some((dial) => dial.startsWith(digits))\n}\n\nconst INVISIBLE_FORMATTING_CHARACTERS =\n /[\\u061C\\u200B-\\u200F\\u202A-\\u202E\\u2066-\\u2069\\uFEFF]/g\n\nfunction stripInvisibleFormatting(value: string) {\n return value.replace(INVISIBLE_FORMATTING_CHARACTERS, \"\")\n}\n\nexport function injectNationalPrefixDisplay(\n international: string,\n dialCode: string,\n options: { force?: boolean } = {}\n) {\n // Preserve a user-typed national trunk (e.g. the French \"0\") purely for display\n // so validation can continue to use the canonical E.164 representation internally.\n const { force = false } = options\n const prefix = `+${dialCode}`\n\n if (!international.startsWith(prefix)) {\n return international\n }\n\n if (!force) {\n return international\n }\n\n const remainder = international.slice(prefix.length).trimStart()\n const alreadyHasTrunk = remainder.startsWith(\"0\")\n\n if (alreadyHasTrunk) {\n return international\n }\n\n if (!remainder) {\n return `${prefix} 0`\n }\n\n const [firstGroup, ...restGroups] = remainder.split(\" \")\n const rebuiltFirstGroup = `0${firstGroup ?? \"\"}`\n const rebuiltRemainder = restGroups.length > 0 ? ` ${restGroups.join(\" \")}` : \"\"\n\n return `${prefix} ${rebuiltFirstGroup}${rebuiltRemainder}`.replace(/\\s\\s+/g, \" \").trimEnd()\n}\n\nconst DETECTED_COUNTRY_OVERRIDES: Partial<Record<CountryCode, CountryCode>> = {\n GG: \"GB\",\n JE: \"GB\",\n IM: \"GB\",\n}\n\nfunction canonicalizeDetectedCountry(candidate: CountryCode | undefined): CountryCode | undefined {\n if (!candidate) {\n return undefined\n }\n return DETECTED_COUNTRY_OVERRIDES[candidate] ?? candidate\n}\n\ntype AsYouTypeNumber = ReturnType<AsYouType[\"getNumber\"]>\n\nfunction inferCountryFromDialCode(\n phoneNumber: AsYouTypeNumber,\n baseCountry: CountryCode | undefined,\n normalizedDigits: string\n): CountryCode | undefined {\n if (!phoneNumber) {\n return undefined\n }\n\n if (!normalizedDigits) {\n return undefined\n }\n\n const nationalDigits = phoneNumber.nationalNumber ?? \"\"\n if (nationalDigits.length < 4) {\n return undefined\n }\n\n const dial = phoneNumber.countryCallingCode\n if (!dial) {\n return undefined\n }\n\n const metadataGetter = (phoneNumber as unknown as { getMetadata?: () => unknown }).getMetadata\n const metadata =\n typeof metadataGetter === \"function\"\n ? (metadataGetter() as {\n country_calling_codes?: Record<string, string[]>\n } | null)\n : null\n\n const candidates = metadata?.country_calling_codes?.[dial]\n if (!candidates || candidates.length === 0) {\n return undefined\n }\n\n const canonicalCandidates: CountryCode[] = []\n for (const candidate of candidates) {\n const canonical = canonicalizeDetectedCountry(candidate as CountryCode)\n if (canonical && !canonicalCandidates.includes(canonical)) {\n canonicalCandidates.push(canonical)\n }\n }\n\n if (canonicalCandidates.length === 0) {\n return undefined\n }\n\n if (baseCountry && canonicalCandidates.includes(baseCountry)) {\n return baseCountry\n }\n\n if (canonicalCandidates.includes(DEFAULT_COUNTRY)) {\n return DEFAULT_COUNTRY\n }\n\n return canonicalCandidates[0]\n}\n\nexport function detectNationalPrefixForDisplay(\n rawDigits: string,\n internationalDigits: string,\n dialCode: string,\n hasExplicitInternationalPrefix: boolean\n) {\n if (!rawDigits) {\n return false\n }\n\n if (!hasExplicitInternationalPrefix) {\n return rawDigits.startsWith(\"0\")\n }\n\n if (!dialCode) {\n return false\n }\n\n if (!rawDigits.startsWith(dialCode)) {\n return false\n }\n\n if (!rawDigits.slice(dialCode.length).startsWith(\"0\")) {\n return false\n }\n\n const rawAfterTrunk = rawDigits.slice(dialCode.length + 1)\n const internationalAfterDial = internationalDigits.startsWith(dialCode)\n ? internationalDigits.slice(dialCode.length)\n : internationalDigits\n\n return rawAfterTrunk === internationalAfterDial\n}\n\nfunction stripIddPrefix(digits: string) {\n for (const prefix of COMMON_IDD_PREFIXES) {\n if (digits.startsWith(prefix)) {\n return digits.slice(prefix.length)\n }\n }\n return digits\n}\n\nexport function normalizeInputValue(\n rawValue: string,\n country: CountryCode | undefined,\n options: {\n allowJustPlus?: boolean\n removeNationalPrefix?: boolean\n previousValue?: string\n } = {}\n) {\n const { allowJustPlus = false, removeNationalPrefix = true, previousValue } = options\n const cleaned = stripInvisibleFormatting(rawValue)\n const trimmed = cleaned.trim()\n\n if (!trimmed) {\n return \"\"\n }\n\n if (trimmed === \"+\") {\n return allowJustPlus ? \"+\" : \"\"\n }\n\n if (trimmed.startsWith(\"+\")) {\n const digits = sanitizeDigits(trimmed)\n if (!digits) {\n return allowJustPlus ? \"+\" : \"\"\n }\n const digitsWithoutIdd = stripIddPrefix(digits)\n if (digitsWithoutIdd !== digits) {\n return digitsWithoutIdd ? `+${digitsWithoutIdd}` : allowJustPlus ? \"+\" : \"\"\n }\n if (removeNationalPrefix && country) {\n const dial = getCountryCallingCode(country)\n if (digits.startsWith(dial) && digits.slice(dial.length).startsWith(\"0\")) {\n const withoutPrefix = digits.slice(dial.length + 1)\n return withoutPrefix ? `+${dial}${withoutPrefix}` : `+${dial}`\n }\n }\n return `+${digits}`\n }\n\n const digitsOnly = sanitizeDigits(trimmed)\n if (!digitsOnly) {\n return \"\"\n }\n\n const digitsWithoutIdd = stripIddPrefix(digitsOnly)\n if (digitsWithoutIdd !== digitsOnly) {\n return digitsWithoutIdd ? `+${digitsWithoutIdd}` : allowJustPlus ? \"+\" : \"\"\n }\n\n const previousNormalized = typeof previousValue === \"string\" ? previousValue : \"\"\n const previousDigits =\n previousNormalized && previousNormalized.startsWith(\"+\")\n ? sanitizeDigits(previousNormalized)\n : \"\"\n\n if (previousDigits && previousDigits.length > digitsOnly.length) {\n if (previousDigits.endsWith(digitsOnly)) {\n const removedPrefixLength = previousDigits.length - digitsOnly.length\n if (removedPrefixLength <= MAX_DIAL_CODE_LENGTH) {\n return `+${digitsOnly}`\n }\n }\n }\n\n if (digitsOnly === \"0\") {\n return \"0\"\n }\n\n if (\n removeNationalPrefix &&\n country &&\n digitsOnly.length > 1 &&\n digitsOnly.startsWith(\"0\") &&\n !digitsOnly.startsWith(\"00\")\n ) {\n const dial = getCountryCallingCode(country)\n const withoutPrefix = digitsOnly.slice(1)\n return withoutPrefix ? `+${dial}${withoutPrefix}` : `+${dial}`\n }\n\n if (!country) {\n return digitsOnly\n }\n\n if (digitsOnly.length <= 4) {\n return `+${digitsOnly}`\n }\n\n const dial = getCountryCallingCode(country)\n return `+${dial}${digitsOnly}`\n}\n\nexport function formatWithAsYouType(value: string, baseCountry?: CountryCode) {\n if (value === \"+\") {\n return {\n international: \"+\",\n national: \"\",\n formatted: \"+\",\n phoneNumber: null,\n detectedCountry: undefined,\n inferredCountry: undefined,\n hasExplicitInternationalPrefix: true,\n }\n }\n\n const hasExplicitInternationalPrefix = /^\\s*\\+/.test(value)\n const formatter = baseCountry ? new AsYouType(baseCountry) : new AsYouType()\n const formatted = formatter.input(value)\n const phoneNumber = formatter.getNumber()\n const digits = sanitizeDigits(value)\n const detectedCountry = canonicalizeDetectedCountry(\n (phoneNumber?.country ?? formatter.country ?? undefined) as CountryCode | undefined\n )\n const inferredCountry =\n detectedCountry ?? !phoneNumber\n ? undefined\n : canonicalizeDetectedCountry(\n inferCountryFromDialCode(phoneNumber, baseCountry, digits)\n )\n\n const international = phoneNumber?.formatInternational() ?? formatted\n const national = phoneNumber?.formatNational() ?? sanitizeDigits(international)\n\n return {\n international,\n national,\n formatted,\n phoneNumber,\n detectedCountry,\n inferredCountry,\n hasExplicitInternationalPrefix,\n }\n}\n\nexport function stripPrefix(value: string, prefix: string) {\n return value.startsWith(prefix) ? value.slice(prefix.length) : value\n}\n\nexport function getLengthIssue(value: string, country: CountryCode | undefined): LengthIssue | null {\n if (!country || !value) {\n return null\n }\n\n try {\n const result = validatePhoneNumberLength(value, country)\n return result === \"TOO_LONG\" ? \"TOO_LONG\" : null\n } catch {\n return null\n }\n}\n\ntype SuggestionState = {\n shouldSuggest: boolean\n query: string\n}\n\nexport function getSuggestionState(\n normalized: string,\n baseCountry: CountryCode | undefined,\n phoneNumber: ReturnType<AsYouType[\"getNumber\"]>,\n options: {\n hasRemovedNationalPrefix?: boolean\n detectedCountry?: CountryCode\n hasExplicitInternationalPrefix?: boolean\n } = {}\n): SuggestionState {\n const {\n hasRemovedNationalPrefix = false,\n detectedCountry,\n hasExplicitInternationalPrefix = false,\n } = options\n\n if (!normalized) {\n return { shouldSuggest: false, query: \"\" }\n }\n\n if (normalized === \"+\") {\n return { shouldSuggest: true, query: \"\" }\n }\n\n const digits = sanitizeDigits(normalized)\n if (!digits) {\n return { shouldSuggest: true, query: \"\" }\n }\n\n if (hasRemovedNationalPrefix) {\n return { shouldSuggest: false, query: \"\" }\n }\n\n if (hasExplicitInternationalPrefix && !detectedCountry) {\n if (!isDialCodeProgress(digits)) {\n return { shouldSuggest: false, query: \"\" }\n }\n return { shouldSuggest: true, query: digits }\n }\n\n let dial = phoneNumber?.countryCallingCode ?? null\n if (!dial) {\n if (baseCountry) {\n const baseDial = getCountryCallingCode(baseCountry)\n if (digits.startsWith(baseDial)) {\n dial = baseDial\n }\n } else if (!hasExplicitInternationalPrefix) {\n return { shouldSuggest: false, query: \"\" }\n }\n }\n\n if (!dial) {\n return { shouldSuggest: true, query: digits }\n }\n\n const nationalDigits = stripPrefix(digits, dial)\n if (nationalDigits.length === 0) {\n return { shouldSuggest: true, query: digits }\n }\n\n return { shouldSuggest: false, query: \"\" }\n}\n\nexport function shouldDisplayExplicitCountrySelection(\n suggestion: SuggestionState,\n options: { detectedCountry?: CountryCode; hasExplicitInternationalPrefix?: boolean }\n) {\n if (suggestion.shouldSuggest) {\n return false\n }\n\n const { hasExplicitInternationalPrefix = false, detectedCountry } = options\n\n if (!hasExplicitInternationalPrefix) {\n return true\n }\n\n return Boolean(detectedCountry)\n}\n"],"names":["sanitizeDigits","value","replace","isDialCodeProgress","digits","length","MAX_DIAL_CODE_LENGTH","COUNTRY_DIAL_CODES","some","dial","startsWith","INVISIBLE_FORMATTING_CHARACTERS","stripInvisibleFormatting","injectNationalPrefixDisplay","international","dialCode","options","force","prefix","remainder","slice","trimStart","firstGroup","restGroups","split","rebuiltFirstGroup","rebuiltRemainder","join","trimEnd","DETECTED_COUNTRY_OVERRIDES","GG","JE","IM","canonicalizeDetectedCountry","candidate","inferCountryFromDialCode","phoneNumber","baseCountry","normalizedDigits","nationalNumber","countryCallingCode","metadataGetter","getMetadata","candidates","country_calling_codes","canonicalCandidates","canonical","includes","push","DEFAULT_COUNTRY","detectNationalPrefixForDisplay","rawDigits","internationalDigits","hasExplicitInternationalPrefix","rawAfterTrunk","internationalAfterDial","stripIddPrefix","COMMON_IDD_PREFIXES","normalizeInputValue","rawValue","country","allowJustPlus","removeNationalPrefix","previousValue","trimmed","trim","digitsWithoutIdd","getCountryCallingCode","withoutPrefix","digitsOnly","previousNormalized","previousDigits","endsWith","formatWithAsYouType","national","formatted","detectedCountry","undefined","inferredCountry","test","formatter","AsYouType","input","getNumber","formatInternational","formatNational","stripPrefix","getLengthIssue","validatePhoneNumberLength","getSuggestionState","normalized","hasRemovedNationalPrefix","shouldSuggest","query","baseDial","shouldDisplayExplicitCountrySelection","suggestion","Boolean"],"mappings":"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"}
package/dist/index38.js CHANGED
@@ -1,122 +1,94 @@
1
- import { j as r } from "./index28.js";
2
- import { c as M } from "./index29.js";
3
- import * as p from "react";
4
- import { cn as E } from "./index2.js";
5
- const P = p.createContext(null);
6
- function T(t, e) {
7
- if (typeof t == "function") {
8
- t(e);
9
- return;
1
+ function c(t) {
2
+ if (!t)
3
+ return !1;
4
+ const e = t.charCodeAt(0);
5
+ return e >= 48 && e <= 57;
6
+ }
7
+ function l(t, e) {
8
+ let n = 0;
9
+ const r = Math.min(e, t.length);
10
+ for (let i = 0; i < r; i += 1)
11
+ c(t[i] ?? "") && (n += 1);
12
+ return n;
13
+ }
14
+ function a(t, e) {
15
+ if (e <= 0)
16
+ return t.startsWith("+") ? Math.min(1, t.length) : 0;
17
+ let n = 0;
18
+ for (let r = 0; r < t.length; r += 1)
19
+ if (c(t[r] ?? "") && (n += 1, n === e))
20
+ return r + 1;
21
+ return t.length;
22
+ }
23
+ function g(t) {
24
+ return !t || c(t) ? !1 : t !== "+";
25
+ }
26
+ function h(t, e) {
27
+ let n = e;
28
+ for (; n > 0; ) {
29
+ const r = t[n - 1] ?? "";
30
+ if (!g(r))
31
+ break;
32
+ n -= 1;
10
33
  }
11
- t && typeof t == "object" && Reflect.set(t, "current", e);
34
+ return n;
12
35
  }
13
- const V = (t) => {
14
- const e = M.c(30), n = p.useContext(P), o = n?.highlightedValue === t.data.value;
15
- let l, i, c;
16
- e[0] !== t.innerProps ? ({
17
- onMouseMove: l,
18
- className: i,
19
- ...c
20
- } = t.innerProps, e[0] = t.innerProps, e[1] = l, e[2] = i, e[3] = c) : (l = e[1], i = e[2], c = e[3]);
21
- let f;
22
- e[4] !== n?.renderOptionLabel ? (f = n?.renderOptionLabel ?? z, e[4] = n?.renderOptionLabel, e[5] = f) : f = e[5];
23
- const b = f, N = p.useRef(null), {
24
- innerRef: S
25
- } = t;
26
- let m;
27
- e[6] !== S ? (m = (s) => {
28
- N.current = s, T(S, s);
29
- }, e[6] = S, e[7] = m) : m = e[7];
30
- const j = m;
31
- let g;
32
- e[8] !== n?.consumeScrollBehavior || e[9] !== o ? (g = () => {
33
- if (!o)
34
- return;
35
- const s = n?.consumeScrollBehavior, B = s ? s() : "smooth", d = N.current;
36
- if (!d)
37
- return;
38
- const R = d.parentElement;
39
- if (!R)
40
- return;
41
- const O = d.offsetTop, H = O + d.offsetHeight, w = R.scrollTop, L = w + R.clientHeight;
42
- O >= w && H <= L || d.scrollIntoView({
43
- block: "nearest",
44
- behavior: B
45
- });
46
- }, e[8] = n?.consumeScrollBehavior, e[9] = o, e[10] = g) : g = e[10];
47
- let h;
48
- e[11] !== n || e[12] !== o ? (h = [n, o], e[11] = n, e[12] = o, e[13] = h) : h = e[13], p.useEffect(g, h);
49
- let x;
50
- e[14] !== n || e[15] !== l || e[16] !== t.data ? (x = (s) => {
51
- l?.(s), n?.setHighlightedOption(t.data);
52
- }, e[14] = n, e[15] = l, e[16] = t.data, e[17] = x) : x = e[17];
53
- const y = x, C = o ? "bg-muted text-foreground" : "text-foreground hover:bg-muted";
54
- let a;
55
- e[18] !== i || e[19] !== C ? (a = E("flex cursor-pointer items-center justify-between gap-3 px-3 py-2 text-sm", i, C), e[18] = i, e[19] = C, e[20] = a) : a = e[20];
56
- let u;
57
- e[21] !== t.data || e[22] !== b ? (u = b(t.data), e[21] = t.data, e[22] = b, e[23] = u) : u = e[23];
58
- let v;
59
- return e[24] !== j || e[25] !== y || e[26] !== c || e[27] !== a || e[28] !== u ? (v = /* @__PURE__ */ r.jsx("div", { ref: j, ...c, onMouseMove: y, className: a, children: u }), e[24] = j, e[25] = y, e[26] = c, e[27] = a, e[28] = u, e[29] = v) : v = e[29], v;
60
- }, $ = {
61
- control: () => ({
62
- display: "none"
63
- }),
64
- menu: (t) => ({
65
- ...t,
66
- marginTop: 4,
67
- borderRadius: "var(--radius)",
68
- boxShadow: "0 18px 36px rgba(15, 23, 42, 0.18)",
69
- backgroundColor: "hsl(var(--popover))",
70
- overflow: "hidden",
71
- zIndex: 20
72
- }),
73
- menuList: (t) => ({
74
- ...t,
75
- maxHeight: 240,
76
- padding: 0
77
- }),
78
- option: (t, e) => ({
79
- ...t,
80
- fontSize: "0.875rem",
81
- backgroundColor: e.isFocused ? "hsl(var(--muted))" : e.isSelected ? "hsl(var(--accent))" : "transparent",
82
- color: e.isSelected ? "hsl(var(--accent-foreground))" : "hsl(var(--foreground))",
83
- cursor: "pointer"
84
- }),
85
- noOptionsMessage: (t) => ({
86
- ...t,
87
- fontSize: "0.875rem",
88
- color: "hsl(var(--muted-foreground))"
89
- })
90
- }, A = (t) => {
91
- const e = M.c(3);
92
- let n;
93
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = {
94
- display: "none"
95
- }, e[0] = n) : n = e[0];
96
- let o;
97
- return e[1] !== t.children ? (o = /* @__PURE__ */ r.jsx("div", { style: n, children: t.children }), e[1] = t.children, e[2] = o) : o = e[2], o;
98
- }, q = () => null;
99
- function k(t) {
100
- return /* @__PURE__ */ r.jsxs(r.Fragment, { children: [
101
- /* @__PURE__ */ r.jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [
102
- t.flag ? /* @__PURE__ */ r.jsx("span", { "aria-hidden": "true", className: "text-lg leading-none", children: t.flag }) : null,
103
- /* @__PURE__ */ r.jsx("span", { className: "truncate", children: t.name })
104
- ] }),
105
- /* @__PURE__ */ r.jsxs("span", { className: "text-xs text-muted-foreground", children: [
106
- "+",
107
- t.dialCode
108
- ] })
109
- ] });
36
+ function S(t, e) {
37
+ let n = e;
38
+ for (; n < t.length; ) {
39
+ const r = t[n] ?? "";
40
+ if (!g(r))
41
+ break;
42
+ n += 1;
43
+ }
44
+ return n;
45
+ }
46
+ function m(t) {
47
+ const {
48
+ value: e
49
+ } = t, n = t.selectionStart ?? e.length, r = t.selectionEnd ?? n, i = n <= 1 && e.startsWith("+"), o = r <= 1 && e.startsWith("+");
50
+ return {
51
+ selectionStart: n,
52
+ selectionEnd: r,
53
+ startDigits: l(e, n),
54
+ endDigits: l(e, r),
55
+ preserveStartIndex: i,
56
+ preserveEndIndex: o,
57
+ wasAtStart: n === 0,
58
+ wasAtEnd: r === e.length
59
+ };
110
60
  }
111
- function z(t) {
112
- return k(t);
61
+ function u(t, e) {
62
+ if (t.selectionStart === t.selectionEnd) {
63
+ if (t.wasAtEnd) {
64
+ const f = e.length;
65
+ return {
66
+ start: f,
67
+ end: f
68
+ };
69
+ }
70
+ if (t.wasAtStart)
71
+ return {
72
+ start: 0,
73
+ end: 0
74
+ };
75
+ }
76
+ const n = t.preserveStartIndex ? Math.min(t.selectionStart, e.length) : a(e, t.startDigits), r = t.preserveEndIndex ? Math.min(t.selectionEnd, e.length) : a(e, t.endDigits);
77
+ let i = n, o = r;
78
+ t.wasAtStart && (i = 0), t.wasAtEnd && (o = e.length), t.selectionStart === t.selectionEnd && (i = o);
79
+ const d = Math.min(Math.max(i, 0), e.length), s = Math.min(Math.max(o, 0), e.length);
80
+ return d > s ? {
81
+ start: s,
82
+ end: s
83
+ } : {
84
+ start: d,
85
+ end: s
86
+ };
113
87
  }
114
88
  export {
115
- A as HiddenControl,
116
- q as NullComponent,
117
- P as SuggestionContext,
118
- V as SuggestionOption,
119
- k as formatCountryOption,
120
- $ as suggestionSelectStyles
89
+ m as captureSelectionSnapshot,
90
+ u as resolveSelection,
91
+ h as skipFormattingCharactersLeft,
92
+ S as skipFormattingCharactersRight
121
93
  };
122
94
  //# sourceMappingURL=index38.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index38.js","sources":["../src/components/PhoneNumberInput/suggestions.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { CountryCode } from \"libphonenumber-js\"\nimport type { ControlProps, OptionProps, StylesConfig } from \"react-select\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { CountryOption } from \"./types\"\n\n\nexport type SuggestionContextValue = {\n highlightedValue: CountryCode | null\n setHighlightedOption: (option: CountryOption) => void\n renderOptionLabel: (option: CountryOption) => React.ReactNode\n consumeScrollBehavior: () => ScrollBehavior\n}\n\nexport const SuggestionContext = React.createContext<SuggestionContextValue | null>(null)\n\nfunction assignOptionRef(ref: React.Ref<HTMLDivElement> | undefined, node: HTMLDivElement | null) {\n if (typeof ref === \"function\") {\n ref(node)\n return\n }\n if (ref && typeof ref === \"object\") {\n Reflect.set(ref, \"current\", node)\n }\n}\n\nexport const SuggestionOption = (props: OptionProps<CountryOption, false>) => {\n const context = React.useContext(SuggestionContext)\n const isActive = context?.highlightedValue === props.data.value\n const { onMouseMove, className: receivedClassName, ...restInnerProps } = props.innerProps\n const renderLabel =\n context?.renderOptionLabel ?? ((option: CountryOption) => formatCountryOption(option))\n const optionRef = React.useRef<HTMLDivElement | null>(null)\n const { innerRef } = props\n\n const assignRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n optionRef.current = node\n assignOptionRef(innerRef, node)\n },\n [innerRef]\n )\n\n React.useEffect(() => {\n if (!isActive) {\n return\n }\n\n const consumeScrollBehavior = context?.consumeScrollBehavior\n const behavior = consumeScrollBehavior ? consumeScrollBehavior() : \"smooth\"\n\n const target = optionRef.current\n if (!target) {\n return\n }\n\n const parent = target.parentElement\n if (!parent) {\n return\n }\n\n const top = target.offsetTop\n const bottom = top + target.offsetHeight\n const viewTop = parent.scrollTop\n const viewBottom = viewTop + parent.clientHeight\n\n if (top >= viewTop && bottom <= viewBottom) {\n return\n }\n\n target.scrollIntoView({\n block: \"nearest\",\n behavior,\n })\n }, [context, isActive])\n\n const handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n onMouseMove?.(event)\n context?.setHighlightedOption(props.data)\n }\n\n return (\n <div\n ref={assignRef}\n {...restInnerProps}\n onMouseMove={handleMouseMove}\n className={cn(\n \"flex cursor-pointer items-center justify-between gap-3 px-3 py-2 text-sm\",\n receivedClassName,\n isActive ? \"bg-muted text-foreground\" : \"text-foreground hover:bg-muted\"\n )}\n >\n {renderLabel(props.data)}\n </div>\n )\n}\n\nexport const suggestionSelectStyles: StylesConfig<CountryOption, false> = {\n control: () => ({\n display: \"none\",\n }),\n menu: (provided) => ({\n ...provided,\n marginTop: 4,\n borderRadius: \"var(--radius)\",\n boxShadow: \"0 18px 36px rgba(15, 23, 42, 0.18)\",\n backgroundColor: \"hsl(var(--popover))\",\n overflow: \"hidden\",\n zIndex: 20,\n }),\n menuList: (provided) => ({\n ...provided,\n maxHeight: 240,\n padding: 0,\n }),\n option: (provided, state) => ({\n ...provided,\n fontSize: \"0.875rem\",\n backgroundColor: state.isFocused\n ? \"hsl(var(--muted))\"\n : state.isSelected\n ? \"hsl(var(--accent))\"\n : \"transparent\",\n color: state.isSelected\n ? \"hsl(var(--accent-foreground))\"\n : \"hsl(var(--foreground))\",\n cursor: \"pointer\",\n }),\n noOptionsMessage: (provided) => ({\n ...provided,\n fontSize: \"0.875rem\",\n color: \"hsl(var(--muted-foreground))\",\n }),\n}\n\nexport const HiddenControl = (props: ControlProps<CountryOption, false>) => (\n <div style={{ display: \"none\" }}>{props.children}</div>\n)\n\nexport const NullComponent = () => null\n\nexport function formatCountryOption(option: CountryOption) {\n return (\n <>\n <span className=\"flex min-w-0 items-center gap-2\">\n {option.flag ? (\n <span aria-hidden=\"true\" className=\"text-lg leading-none\">\n {option.flag}\n </span>\n ) : null}\n <span className=\"truncate\">{option.name}</span>\n </span>\n <span className=\"text-xs text-muted-foreground\">+{option.dialCode}</span>\n </>\n )\n}\n"],"names":["SuggestionContext","React","createContext","assignOptionRef","ref","node","Reflect","set","SuggestionOption","props","$","_c","context","useContext","isActive","highlightedValue","data","value","onMouseMove","receivedClassName","restInnerProps","innerProps","className","t0","renderOptionLabel","_temp","renderLabel","optionRef","useRef","innerRef","t1","current","assignRef","t2","consumeScrollBehavior","behavior","target","parent","parentElement","top","offsetTop","bottom","offsetHeight","viewTop","scrollTop","viewBottom","clientHeight","scrollIntoView","block","t3","useEffect","t4","event","setHighlightedOption","handleMouseMove","t5","t6","cn","t7","t8","jsx","suggestionSelectStyles","control","display","menu","provided","marginTop","borderRadius","boxShadow","backgroundColor","overflow","zIndex","menuList","maxHeight","padding","option","state","fontSize","isFocused","isSelected","color","cursor","noOptionsMessage","HiddenControl","Symbol","for","children","NullComponent","formatCountryOption","jsxs","Fragment","flag","name","dialCode"],"mappings":"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"}
1
+ {"version":3,"file":"index38.js","sources":["../src/components/PhoneNumberInput/selection.ts"],"sourcesContent":["function isDigitCharacter(char: string) {\n if (!char) {\n return false\n }\n const code = char.charCodeAt(0)\n return code >= 48 && code <= 57\n}\n\nfunction countDigitsBefore(value: string, index: number) {\n let count = 0\n const limit = Math.min(index, value.length)\n for (let position = 0; position < limit; position += 1) {\n if (isDigitCharacter(value[position] ?? \"\")) {\n count += 1\n }\n }\n return count\n}\n\nfunction findIndexForDigitCount(value: string, digitCount: number) {\n if (digitCount <= 0) {\n return value.startsWith(\"+\") ? Math.min(1, value.length) : 0\n }\n\n let seen = 0\n for (let index = 0; index < value.length; index += 1) {\n if (isDigitCharacter(value[index] ?? \"\")) {\n seen += 1\n if (seen === digitCount) {\n return index + 1\n }\n }\n }\n\n return value.length\n}\n\nfunction isFormattingCharacter(char: string) {\n if (!char) {\n return false\n }\n if (isDigitCharacter(char)) {\n return false\n }\n return char !== \"+\"\n}\n\nexport function skipFormattingCharactersLeft(value: string, index: number) {\n let position = index\n while (position > 0) {\n const next = value[position - 1] ?? \"\"\n if (!isFormattingCharacter(next)) {\n break\n }\n position -= 1\n }\n return position\n}\n\nexport function skipFormattingCharactersRight(value: string, index: number) {\n let position = index\n while (position < value.length) {\n const next = value[position] ?? \"\"\n if (!isFormattingCharacter(next)) {\n break\n }\n position += 1\n }\n return position\n}\n\ntype SelectionSnapshot = {\n selectionStart: number\n selectionEnd: number\n startDigits: number\n endDigits: number\n preserveStartIndex: boolean\n preserveEndIndex: boolean\n wasAtStart: boolean\n wasAtEnd: boolean\n}\n\nexport function captureSelectionSnapshot(input: HTMLInputElement): SelectionSnapshot {\n const { value } = input\n const selectionStart = input.selectionStart ?? value.length\n const selectionEnd = input.selectionEnd ?? selectionStart\n const preserveStartIndex = selectionStart <= 1 && value.startsWith(\"+\")\n const preserveEndIndex = selectionEnd <= 1 && value.startsWith(\"+\")\n\n return {\n selectionStart,\n selectionEnd,\n startDigits: countDigitsBefore(value, selectionStart),\n endDigits: countDigitsBefore(value, selectionEnd),\n preserveStartIndex,\n preserveEndIndex,\n wasAtStart: selectionStart === 0,\n wasAtEnd: selectionEnd === value.length,\n }\n}\n\nexport function resolveSelection(snapshot: SelectionSnapshot, value: string) {\n if (snapshot.selectionStart === snapshot.selectionEnd) {\n if (snapshot.wasAtEnd) {\n const end = value.length\n return { start: end, end }\n }\n if (snapshot.wasAtStart) {\n return { start: 0, end: 0 }\n }\n }\n\n const start = snapshot.preserveStartIndex\n ? Math.min(snapshot.selectionStart, value.length)\n : findIndexForDigitCount(value, snapshot.startDigits)\n const end = snapshot.preserveEndIndex\n ? Math.min(snapshot.selectionEnd, value.length)\n : findIndexForDigitCount(value, snapshot.endDigits)\n\n let resolvedStart = start\n let resolvedEnd = end\n\n if (snapshot.wasAtStart) {\n resolvedStart = 0\n }\n\n if (snapshot.wasAtEnd) {\n resolvedEnd = value.length\n }\n\n if (snapshot.selectionStart === snapshot.selectionEnd) {\n resolvedStart = resolvedEnd\n }\n\n const clampedStart = Math.min(Math.max(resolvedStart, 0), value.length)\n const clampedEnd = Math.min(Math.max(resolvedEnd, 0), value.length)\n\n if (clampedStart > clampedEnd) {\n return { start: clampedEnd, end: clampedEnd }\n }\n\n return { start: clampedStart, end: clampedEnd }\n}\n\n"],"names":["isDigitCharacter","char","code","charCodeAt","countDigitsBefore","value","index","count","limit","Math","min","length","position","findIndexForDigitCount","digitCount","startsWith","seen","isFormattingCharacter","skipFormattingCharactersLeft","next","skipFormattingCharactersRight","captureSelectionSnapshot","input","selectionStart","selectionEnd","preserveStartIndex","preserveEndIndex","startDigits","endDigits","wasAtStart","wasAtEnd","resolveSelection","snapshot","end","start","resolvedStart","resolvedEnd","clampedStart","max","clampedEnd"],"mappings":"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"}