notionsoft-ui 1.0.20 → 1.0.22

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.
@@ -0,0 +1,420 @@
1
+ import type { ParsedCountry } from "./type";
2
+
3
+ export const defaultCountries: ParsedCountry[] = [
4
+ { name: "Afghanistan", iso2: "af", dialCode: "93" },
5
+ { name: "Albania", iso2: "al", dialCode: "355" },
6
+ { name: "Algeria", iso2: "dz", dialCode: "213" },
7
+ { name: "Andorra", iso2: "ad", dialCode: "376" },
8
+ { name: "Angola", iso2: "ao", dialCode: "244" },
9
+ { name: "Antigua and Barbuda", iso2: "ag", dialCode: "1268" },
10
+ {
11
+ name: "Argentina",
12
+ iso2: "ar",
13
+ dialCode: "54",
14
+ format: {
15
+ default: "(..) .... ....",
16
+ "/^11/": "(..) .... ....",
17
+ "/^15/": "(..) ... ....",
18
+ "/^(2|3|4|5)/": "(.) .... ....",
19
+ "/^9/": "(.) .... .....",
20
+ },
21
+ priority: 0,
22
+ },
23
+ { name: "Armenia", iso2: "am", dialCode: "374", format: ".. ......" },
24
+ { name: "Aruba", iso2: "aw", dialCode: "297" },
25
+ {
26
+ name: "Australia",
27
+ iso2: "au",
28
+ dialCode: "61",
29
+ format: {
30
+ default: ". .... ....",
31
+ "/^4/": "... ... ...",
32
+ "/^5(?!50)/": "... ... ...",
33
+ "/^1(3|8)00/": ".... ... ...",
34
+ "/^13/": ".. .. ..",
35
+ "/^180/": "... ....",
36
+ },
37
+ priority: 0,
38
+ areaCodes: [],
39
+ },
40
+ { name: "Austria", iso2: "at", dialCode: "43" },
41
+ { name: "Azerbaijan", iso2: "az", dialCode: "994", format: "(..) ... .. .." },
42
+ { name: "Bahamas", iso2: "bs", dialCode: "1242" },
43
+ { name: "Bahrain", iso2: "bh", dialCode: "973" },
44
+ { name: "Bangladesh", iso2: "bd", dialCode: "880" },
45
+ { name: "Barbados", iso2: "bb", dialCode: "1246" },
46
+ { name: "Belarus", iso2: "by", dialCode: "375", format: "(..) ... .. .." },
47
+ { name: "Belgium", iso2: "be", dialCode: "32", format: "... .. .. .." },
48
+ { name: "Belize", iso2: "bz", dialCode: "501" },
49
+ { name: "Benin", iso2: "bj", dialCode: "229" },
50
+ { name: "Bhutan", iso2: "bt", dialCode: "975" },
51
+ { name: "Bolivia", iso2: "bo", dialCode: "591" },
52
+ { name: "Bosnia and Herzegovina", iso2: "ba", dialCode: "387" },
53
+ { name: "Botswana", iso2: "bw", dialCode: "267" },
54
+ { name: "Brazil", iso2: "br", dialCode: "55", format: "(..) .....-...." },
55
+ { name: "British Indian Ocean Territory", iso2: "io", dialCode: "246" },
56
+ { name: "Brunei", iso2: "bn", dialCode: "673" },
57
+ { name: "Bulgaria", iso2: "bg", dialCode: "359" },
58
+ { name: "Burkina Faso", iso2: "bf", dialCode: "226" },
59
+ { name: "Burundi", iso2: "bi", dialCode: "257" },
60
+ { name: "Cambodia", iso2: "kh", dialCode: "855" },
61
+ { name: "Cameroon", iso2: "cm", dialCode: "237" },
62
+ {
63
+ name: "Canada",
64
+ iso2: "ca",
65
+ dialCode: "1",
66
+ format: "(...) ...-....",
67
+ priority: 1,
68
+ areaCodes: [
69
+ "204",
70
+ "226",
71
+ "236",
72
+ "249",
73
+ "250",
74
+ "289",
75
+ "306",
76
+ "343",
77
+ "365",
78
+ "387",
79
+ "403",
80
+ "416",
81
+ "418",
82
+ "431",
83
+ "437",
84
+ "438",
85
+ "450",
86
+ "506",
87
+ "514",
88
+ "519",
89
+ "548",
90
+ "579",
91
+ "581",
92
+ "587",
93
+ "604",
94
+ "613",
95
+ "639",
96
+ "647",
97
+ "672",
98
+ "705",
99
+ "709",
100
+ "742",
101
+ "778",
102
+ "780",
103
+ "782",
104
+ "807",
105
+ "819",
106
+ "825",
107
+ "867",
108
+ "873",
109
+ "902",
110
+ "905",
111
+ ],
112
+ },
113
+ { name: "Cape Verde", iso2: "cv", dialCode: "238" },
114
+ { name: "Caribbean Netherlands", iso2: "bq", dialCode: "599", priority: 1 },
115
+ {
116
+ name: "Cayman Islands",
117
+ iso2: "ky",
118
+ dialCode: "1",
119
+ format: "... ... ....",
120
+ priority: 4,
121
+ areaCodes: ["345"],
122
+ },
123
+ { name: "Central African Republic", iso2: "cf", dialCode: "236" },
124
+ { name: "Chad", iso2: "td", dialCode: "235" },
125
+ { name: "Chile", iso2: "cl", dialCode: "56" },
126
+ { name: "China", iso2: "cn", dialCode: "86", format: "... .... ...." },
127
+ { name: "Colombia", iso2: "co", dialCode: "57", format: "... ... ...." },
128
+ { name: "Comoros", iso2: "km", dialCode: "269" },
129
+ { name: "Congo", iso2: "cd", dialCode: "243" },
130
+ { name: "Congo", iso2: "cg", dialCode: "242" },
131
+ { name: "Costa Rica", iso2: "cr", dialCode: "506", format: "....-...." },
132
+ {
133
+ name: "Côte d'Ivoire",
134
+ iso2: "ci",
135
+ dialCode: "225",
136
+ format: ".. .. .. .. ..",
137
+ },
138
+ { name: "Croatia", iso2: "hr", dialCode: "385" },
139
+ { name: "Cuba", iso2: "cu", dialCode: "53" },
140
+ { name: "Curaçao", iso2: "cw", dialCode: "599", priority: 0 },
141
+ { name: "Cyprus", iso2: "cy", dialCode: "357", format: ".. ......" },
142
+ {
143
+ name: "Czech Republic",
144
+ iso2: "cz",
145
+ dialCode: "420",
146
+ format: "... ... ...",
147
+ },
148
+ { name: "Denmark", iso2: "dk", dialCode: "45", format: ".. .. .. .." },
149
+ { name: "Djibouti", iso2: "dj", dialCode: "253", format: ".. .. ...." },
150
+ { name: "Dominica", iso2: "dm", dialCode: "1767" },
151
+ {
152
+ name: "Dominican Republic",
153
+ iso2: "do",
154
+ dialCode: "1",
155
+ format: "(...) ...-....",
156
+ priority: 2,
157
+ areaCodes: ["809", "829", "849"],
158
+ },
159
+ { name: "Ecuador", iso2: "ec", dialCode: "593" },
160
+ { name: "Egypt", iso2: "eg", dialCode: "20" },
161
+ { name: "El Salvador", iso2: "sv", dialCode: "503", format: "....-...." },
162
+ { name: "Equatorial Guinea", iso2: "gq", dialCode: "240" },
163
+ { name: "Eritrea", iso2: "er", dialCode: "291" },
164
+ { name: "Estonia", iso2: "ee", dialCode: "372", format: ".... ......" },
165
+ { name: "Ethiopia", iso2: "et", dialCode: "251", format: ".. ... ...." },
166
+ { name: "Faroe Islands", iso2: "fo", dialCode: "298", format: ".. .. .." },
167
+ { name: "Fiji", iso2: "fj", dialCode: "679" },
168
+ { name: "Finland", iso2: "fi", dialCode: "358", format: ".. ... .. .." },
169
+ { name: "France", iso2: "fr", dialCode: "33", format: ". .. .. .. .." },
170
+ {
171
+ name: "French Guiana",
172
+ iso2: "gf",
173
+ dialCode: "594",
174
+ format: "... .. .. ..",
175
+ },
176
+ {
177
+ name: "French Polynesia",
178
+ iso2: "pf",
179
+ dialCode: "689",
180
+ format: {
181
+ "/^44/": ".. .. ..",
182
+ "/^80[0-5]/": "... .. .. ..",
183
+ default: ".. .. .. ..",
184
+ },
185
+ },
186
+ { name: "Gabon", iso2: "ga", dialCode: "241" },
187
+ { name: "Gambia", iso2: "gm", dialCode: "220" },
188
+ { name: "Georgia", iso2: "ge", dialCode: "995" },
189
+ { name: "Germany", iso2: "de", dialCode: "49", format: "... ........." },
190
+ { name: "Ghana", iso2: "gh", dialCode: "233" },
191
+ { name: "Greece", iso2: "gr", dialCode: "30" },
192
+ { name: "Greenland", iso2: "gl", dialCode: "299", format: ".. .. .." },
193
+ { name: "Grenada", iso2: "gd", dialCode: "1473" },
194
+ {
195
+ name: "Guadeloupe",
196
+ iso2: "gp",
197
+ dialCode: "590",
198
+ format: "... .. .. ..",
199
+ priority: 0,
200
+ },
201
+ { name: "Guam", iso2: "gu", dialCode: "1671" },
202
+ { name: "Guatemala", iso2: "gt", dialCode: "502", format: "....-...." },
203
+ { name: "Guinea", iso2: "gn", dialCode: "224" },
204
+ { name: "Guinea-Bissau", iso2: "gw", dialCode: "245" },
205
+ { name: "Guyana", iso2: "gy", dialCode: "592" },
206
+ { name: "Haiti", iso2: "ht", dialCode: "509", format: "....-...." },
207
+ { name: "Honduras", iso2: "hn", dialCode: "504" },
208
+ { name: "Hong Kong", iso2: "hk", dialCode: "852", format: ".... ...." },
209
+ { name: "Hungary", iso2: "hu", dialCode: "36" },
210
+ { name: "Iceland", iso2: "is", dialCode: "354", format: "... ...." },
211
+ { name: "India", iso2: "in", dialCode: "91", format: ".....-....." },
212
+ { name: "Indonesia", iso2: "id", dialCode: "62" },
213
+ { name: "Iran", iso2: "ir", dialCode: "98", format: "... ... ...." },
214
+ { name: "Iraq", iso2: "iq", dialCode: "964" },
215
+ { name: "Ireland", iso2: "ie", dialCode: "353", format: ".. ......." },
216
+ { name: "Israel", iso2: "il", dialCode: "972", format: "... ... ...." },
217
+ {
218
+ name: "Italy",
219
+ iso2: "it",
220
+ dialCode: "39",
221
+ format: "... .......",
222
+ priority: 0,
223
+ },
224
+ { name: "Jamaica", iso2: "jm", dialCode: "1876" },
225
+ { name: "Japan", iso2: "jp", dialCode: "81", format: ".. .... ...." },
226
+ { name: "Jordan", iso2: "jo", dialCode: "962" },
227
+ {
228
+ name: "Kazakhstan",
229
+ iso2: "kz",
230
+ dialCode: "7",
231
+ format: "... ...-..-..",
232
+ priority: 0,
233
+ },
234
+ { name: "Kenya", iso2: "ke", dialCode: "254" },
235
+ { name: "Kiribati", iso2: "ki", dialCode: "686" },
236
+ { name: "Kosovo", iso2: "xk", dialCode: "383" },
237
+ { name: "Kuwait", iso2: "kw", dialCode: "965" },
238
+ { name: "Kyrgyzstan", iso2: "kg", dialCode: "996", format: "... ... ..." },
239
+ { name: "Laos", iso2: "la", dialCode: "856" },
240
+ { name: "Latvia", iso2: "lv", dialCode: "371", format: ".. ... ..." },
241
+ { name: "Lebanon", iso2: "lb", dialCode: "961" },
242
+ { name: "Lesotho", iso2: "ls", dialCode: "266" },
243
+ { name: "Liberia", iso2: "lr", dialCode: "231" },
244
+ { name: "Libya", iso2: "ly", dialCode: "218" },
245
+ { name: "Liechtenstein", iso2: "li", dialCode: "423" },
246
+ { name: "Lithuania", iso2: "lt", dialCode: "370" },
247
+ { name: "Luxembourg", iso2: "lu", dialCode: "352" },
248
+ { name: "Macau", iso2: "mo", dialCode: "853" },
249
+ { name: "Macedonia", iso2: "mk", dialCode: "389" },
250
+ { name: "Madagascar", iso2: "mg", dialCode: "261" },
251
+ { name: "Malawi", iso2: "mw", dialCode: "265" },
252
+ { name: "Malaysia", iso2: "my", dialCode: "60", format: "..-....-...." },
253
+ { name: "Maldives", iso2: "mv", dialCode: "960" },
254
+ { name: "Mali", iso2: "ml", dialCode: "223" },
255
+ { name: "Malta", iso2: "mt", dialCode: "356" },
256
+ { name: "Marshall Islands", iso2: "mh", dialCode: "692" },
257
+ { name: "Martinique", iso2: "mq", dialCode: "596", format: "... .. .. .." },
258
+ { name: "Mauritania", iso2: "mr", dialCode: "222" },
259
+ { name: "Mauritius", iso2: "mu", dialCode: "230" },
260
+ {
261
+ name: "Mayotte",
262
+ iso2: "yt",
263
+ dialCode: "262",
264
+ format: "... .. .. ..",
265
+ priority: 1,
266
+ areaCodes: ["269", "639"],
267
+ },
268
+ {
269
+ name: "Mexico",
270
+ iso2: "mx",
271
+ dialCode: "52",
272
+ format: "... ... ....",
273
+ priority: 0,
274
+ },
275
+ { name: "Micronesia", iso2: "fm", dialCode: "691" },
276
+ { name: "Moldova", iso2: "md", dialCode: "373", format: "(..) ..-..-.." },
277
+ { name: "Monaco", iso2: "mc", dialCode: "377" },
278
+ { name: "Mongolia", iso2: "mn", dialCode: "976" },
279
+ { name: "Montenegro", iso2: "me", dialCode: "382" },
280
+ { name: "Morocco", iso2: "ma", dialCode: "212" },
281
+ { name: "Mozambique", iso2: "mz", dialCode: "258" },
282
+ { name: "Myanmar", iso2: "mm", dialCode: "95" },
283
+ { name: "Namibia", iso2: "na", dialCode: "264" },
284
+ { name: "Nauru", iso2: "nr", dialCode: "674" },
285
+ { name: "Nepal", iso2: "np", dialCode: "977" },
286
+ {
287
+ name: "Netherlands",
288
+ iso2: "nl",
289
+ dialCode: "31",
290
+ format: {
291
+ "/^06/": "(.). .........",
292
+ "/^6/": ". .........",
293
+ "/^0(10|13|14|15|20|23|24|26|30|33|35|36|38|40|43|44|45|46|50|53|55|58|70|71|72|73|74|75|76|77|78|79|82|84|85|87|88|91)/":
294
+ "(.).. ........",
295
+ "/^(10|13|14|15|20|23|24|26|30|33|35|36|38|40|43|44|45|46|50|53|55|58|70|71|72|73|74|75|76|77|78|79|82|84|85|87|88|91)/":
296
+ ".. ........",
297
+ "/^0/": "(.)... .......",
298
+ default: "... .......",
299
+ },
300
+ },
301
+ { name: "New Caledonia", iso2: "nc", dialCode: "687" },
302
+ { name: "New Zealand", iso2: "nz", dialCode: "64", format: "...-...-...." },
303
+ { name: "Nicaragua", iso2: "ni", dialCode: "505" },
304
+ { name: "Niger", iso2: "ne", dialCode: "227" },
305
+ { name: "Nigeria", iso2: "ng", dialCode: "234" },
306
+ { name: "North Korea", iso2: "kp", dialCode: "850" },
307
+ { name: "Norway", iso2: "no", dialCode: "47", format: "... .. ..." },
308
+ { name: "Oman", iso2: "om", dialCode: "968" },
309
+ { name: "Pakistan", iso2: "pk", dialCode: "92", format: "...-......." },
310
+ { name: "Palau", iso2: "pw", dialCode: "680" },
311
+ { name: "Palestine", iso2: "ps", dialCode: "970" },
312
+ { name: "Panama", iso2: "pa", dialCode: "507" },
313
+ { name: "Papua New Guinea", iso2: "pg", dialCode: "675" },
314
+ { name: "Paraguay", iso2: "py", dialCode: "595" },
315
+ { name: "Peru", iso2: "pe", dialCode: "51" },
316
+ { name: "Philippines", iso2: "ph", dialCode: "63", format: "... ... ...." },
317
+ { name: "Poland", iso2: "pl", dialCode: "48", format: "...-...-..." },
318
+ { name: "Portugal", iso2: "pt", dialCode: "351" },
319
+ {
320
+ name: "Puerto Rico",
321
+ iso2: "pr",
322
+ dialCode: "1",
323
+ format: "(...) ...-....",
324
+ priority: 3,
325
+ areaCodes: ["787", "939"],
326
+ },
327
+ { name: "Qatar", iso2: "qa", dialCode: "974" },
328
+ {
329
+ name: "Réunion",
330
+ iso2: "re",
331
+ dialCode: "262",
332
+ format: "... .. .. ..",
333
+ priority: 0,
334
+ },
335
+ { name: "Romania", iso2: "ro", dialCode: "40" },
336
+ {
337
+ name: "Russia",
338
+ iso2: "ru",
339
+ dialCode: "7",
340
+ format: "(...) ...-..-..",
341
+ priority: 1,
342
+ },
343
+ { name: "Rwanda", iso2: "rw", dialCode: "250" },
344
+ { name: "Saint Kitts and Nevis", iso2: "kn", dialCode: "1869" },
345
+ { name: "Saint Lucia", iso2: "lc", dialCode: "1758" },
346
+ {
347
+ name: "Saint Pierre & Miquelon",
348
+ iso2: "pm",
349
+ dialCode: "508",
350
+ format: {
351
+ "/^708/": "... ... ...",
352
+ "/^8/": "... .. .. ..",
353
+ default: ".. .. ..",
354
+ },
355
+ },
356
+ { name: "Saint Vincent and the Grenadines", iso2: "vc", dialCode: "1784" },
357
+ { name: "Samoa", iso2: "ws", dialCode: "685" },
358
+ { name: "San Marino", iso2: "sm", dialCode: "378" },
359
+ { name: "São Tomé and Príncipe", iso2: "st", dialCode: "239" },
360
+ { name: "Saudi Arabia", iso2: "sa", dialCode: "966" },
361
+ { name: "Senegal", iso2: "sn", dialCode: "221" },
362
+ { name: "Serbia", iso2: "rs", dialCode: "381" },
363
+ { name: "Seychelles", iso2: "sc", dialCode: "248" },
364
+ { name: "Sierra Leone", iso2: "sl", dialCode: "232" },
365
+ { name: "Singapore", iso2: "sg", dialCode: "65", format: "....-...." },
366
+ { name: "Slovakia", iso2: "sk", dialCode: "421" },
367
+ { name: "Slovenia", iso2: "si", dialCode: "386" },
368
+ { name: "Solomon Islands", iso2: "sb", dialCode: "677" },
369
+ { name: "Somalia", iso2: "so", dialCode: "252" },
370
+ { name: "South Africa", iso2: "za", dialCode: "27" },
371
+ { name: "South Korea", iso2: "kr", dialCode: "82", format: "... .... ...." },
372
+ { name: "South Sudan", iso2: "ss", dialCode: "211" },
373
+ { name: "Spain", iso2: "es", dialCode: "34", format: "... ... ..." },
374
+ { name: "Sri Lanka", iso2: "lk", dialCode: "94" },
375
+ { name: "Sudan", iso2: "sd", dialCode: "249" },
376
+ { name: "Suriname", iso2: "sr", dialCode: "597" },
377
+ { name: "Swaziland", iso2: "sz", dialCode: "268" },
378
+ { name: "Sweden", iso2: "se", dialCode: "46", format: "... ... ..." },
379
+ { name: "Switzerland", iso2: "ch", dialCode: "41", format: ".. ... .. .." },
380
+ { name: "Syria", iso2: "sy", dialCode: "963" },
381
+ { name: "Taiwan", iso2: "tw", dialCode: "886" },
382
+ { name: "Tajikistan", iso2: "tj", dialCode: "992" },
383
+ { name: "Tanzania", iso2: "tz", dialCode: "255" },
384
+ { name: "Thailand", iso2: "th", dialCode: "66" },
385
+ { name: "Timor-Leste", iso2: "tl", dialCode: "670" },
386
+ { name: "Togo", iso2: "tg", dialCode: "228" },
387
+ { name: "Tonga", iso2: "to", dialCode: "676" },
388
+ { name: "Trinidad and Tobago", iso2: "tt", dialCode: "1868" },
389
+ { name: "Tunisia", iso2: "tn", dialCode: "216" },
390
+ { name: "Turkey", iso2: "tr", dialCode: "90", format: "... ... .. .." },
391
+ { name: "Turkmenistan", iso2: "tm", dialCode: "993" },
392
+ { name: "Tuvalu", iso2: "tv", dialCode: "688" },
393
+ { name: "Uganda", iso2: "ug", dialCode: "256" },
394
+ { name: "Ukraine", iso2: "ua", dialCode: "380", format: "(..) ... .. .." },
395
+ { name: "United Arab Emirates", iso2: "ae", dialCode: "971" },
396
+ { name: "United Kingdom", iso2: "gb", dialCode: "44", format: ".... ......" },
397
+ {
398
+ name: "United States",
399
+ iso2: "us",
400
+ dialCode: "1",
401
+ format: "(...) ...-....",
402
+ priority: 0,
403
+ },
404
+ { name: "Uruguay", iso2: "uy", dialCode: "598" },
405
+ { name: "Uzbekistan", iso2: "uz", dialCode: "998", format: ".. ... .. .." },
406
+ { name: "Vanuatu", iso2: "vu", dialCode: "678" },
407
+ {
408
+ name: "Vatican City",
409
+ iso2: "va",
410
+ dialCode: "39",
411
+ format: ".. .... ....",
412
+ priority: 1,
413
+ },
414
+ { name: "Venezuela", iso2: "ve", dialCode: "58" },
415
+ { name: "Vietnam", iso2: "vn", dialCode: "84" },
416
+ { name: "Wallis & Futuna", iso2: "wf", dialCode: "681", format: ".. .. .." },
417
+ { name: "Yemen", iso2: "ye", dialCode: "967" },
418
+ { name: "Zambia", iso2: "zm", dialCode: "260" },
419
+ { name: "Zimbabwe", iso2: "zw", dialCode: "263" },
420
+ ];
@@ -0,0 +1,83 @@
1
+ import { getFlagCodepoint } from "./utils";
2
+ import { useEffect, useRef, useState } from "react";
3
+
4
+ export const LazyFlag: React.FC<{
5
+ iso2: string;
6
+ className?: string | string;
7
+ }> = ({ iso2, className }) => {
8
+ const ref = useRef<HTMLDivElement>(null);
9
+ const [svgContent, setSvgContent] = useState<string | undefined>(undefined);
10
+ const codepoint = getFlagCodepoint(iso2);
11
+
12
+ useEffect(() => {
13
+ const el = ref.current;
14
+ if (!el) return;
15
+
16
+ const io = new IntersectionObserver(
17
+ (entries) => {
18
+ if (entries[0].isIntersecting) {
19
+ const fullUrl = `https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${codepoint}.svg`;
20
+
21
+ const fetchAndCacheSvg = async () => {
22
+ try {
23
+ let response = await fetch(fullUrl);
24
+ if (response.ok) {
25
+ const responseClone = response.clone(); // clone BEFORE consuming body
26
+ const svgText = await response.text();
27
+
28
+ setSvgContent(svgText);
29
+
30
+ if ("caches" in window) {
31
+ const cache = await caches.open("flags-cache");
32
+ await cache.put(codepoint, responseClone);
33
+ }
34
+ } else {
35
+ console.error("Failed to fetch SVG", response.statusText);
36
+ }
37
+ } catch (error) {
38
+ console.error("Error fetching SVG:", error);
39
+ }
40
+ };
41
+ const checkCache = async () => {
42
+ if (!("caches" in window)) {
43
+ fetchAndCacheSvg();
44
+ return;
45
+ }
46
+
47
+ const cache = await caches.open("flags-cache");
48
+ const cachedResponse = await cache.match(codepoint);
49
+
50
+ if (cachedResponse) {
51
+ const svgText = await cachedResponse.text();
52
+
53
+ setSvgContent(svgText);
54
+ } else {
55
+ fetchAndCacheSvg();
56
+ }
57
+ };
58
+ checkCache();
59
+
60
+ io.disconnect();
61
+ }
62
+ },
63
+ { rootMargin: "550px" }
64
+ );
65
+
66
+ io.observe(el);
67
+ return () => io.disconnect();
68
+ }, [codepoint]);
69
+
70
+ return (
71
+ <div ref={ref}>
72
+ {!svgContent ? (
73
+ <div className={`bg-primary rounded-full size-4 animate-pulse`} />
74
+ ) : (
75
+ <div
76
+ ref={ref}
77
+ className={className}
78
+ dangerouslySetInnerHTML={{ __html: svgContent }}
79
+ />
80
+ )}
81
+ </div>
82
+ );
83
+ };