@asgardeo/react 0.15.1 → 0.15.3

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.
package/dist/cjs/index.js CHANGED
@@ -66,6 +66,7 @@ __export(index_exports, {
66
66
  CreateOrganization: () => CreateOrganization,
67
67
  DatePicker: () => DatePicker_default,
68
68
  Divider: () => Divider_default,
69
+ EMOJI_URI_SCHEME: () => import_browser92.EMOJI_URI_SCHEME,
69
70
  EmailOtp: () => EmailOtp_default,
70
71
  EmbeddedFlowActionVariant: () => import_browser92.EmbeddedFlowActionVariantV2,
71
72
  EmbeddedFlowComponentType: () => import_browser92.EmbeddedFlowComponentTypeV2,
@@ -131,11 +132,13 @@ __export(index_exports, {
131
132
  UserProfile: () => UserProfile_default,
132
133
  UserProvider: () => UserProvider_default,
133
134
  UsernamePassword: () => UsernamePassword_default,
135
+ countryCodeToFlagEmoji: () => import_browser92.countryCodeToFlagEmoji,
134
136
  createField: () => createField,
135
137
  createOrganization: () => createOrganization_default,
136
138
  createPatchOperations: () => import_browser89.createPatchOperations,
137
139
  createSignInOption: () => createSignInOption,
138
140
  createSignInOptionFromAuthenticator: () => createSignInOptionFromAuthenticator,
141
+ extractEmojiFromUri: () => import_browser92.extractEmojiFromUri,
139
142
  getActiveTheme: () => import_browser92.getActiveTheme,
140
143
  getAllOrganizations: () => getAllOrganizations_default,
141
144
  getConsentOptionalKey: () => getConsentOptionalKey,
@@ -144,7 +147,13 @@ __export(index_exports, {
144
147
  getOrganization: () => getOrganization_default,
145
148
  getSchemas: () => getSchemas_default,
146
149
  http: () => import_browser92.http,
150
+ isEmojiUri: () => import_browser92.isEmojiUri,
147
151
  navigate: () => import_browser92.navigate,
152
+ resolveEmojiUrisInHtml: () => import_browser92.resolveEmojiUrisInHtml,
153
+ resolveFlowTemplateLiterals: () => import_browser92.resolveFlowTemplateLiterals,
154
+ resolveLocaleDisplayName: () => import_browser92.resolveLocaleDisplayName,
155
+ resolveLocaleEmoji: () => import_browser92.resolveLocaleEmoji,
156
+ resolveMeta: () => import_browser92.resolveMeta,
148
157
  updateMeProfile: () => updateMeProfile_default,
149
158
  updateOrganization: () => updateOrganization_default,
150
159
  useAsgardeo: () => useAsgardeo_default,
@@ -164,7 +173,7 @@ module.exports = __toCommonJS(index_exports);
164
173
 
165
174
  // src/contexts/Asgardeo/AsgardeoProvider.tsx
166
175
  var import_browser16 = require("@asgardeo/browser");
167
- var import_react19 = require("react");
176
+ var import_react20 = require("react");
168
177
 
169
178
  // src/contexts/Asgardeo/AsgardeoContext.ts
170
179
  var import_react = require("react");
@@ -1227,7 +1236,7 @@ var FlowProvider_default = FlowProvider;
1227
1236
  // src/contexts/FlowMeta/FlowMetaProvider.tsx
1228
1237
  var import_browser10 = require("@asgardeo/browser");
1229
1238
  var import_i18n = require("@asgardeo/i18n");
1230
- var import_react9 = require("react");
1239
+ var import_react10 = require("react");
1231
1240
 
1232
1241
  // src/contexts/FlowMeta/FlowMetaContext.ts
1233
1242
  var import_react6 = require("react");
@@ -1265,6 +1274,19 @@ var useAsgardeo = () => {
1265
1274
  };
1266
1275
  var useAsgardeo_default = useAsgardeo;
1267
1276
 
1277
+ // src/contexts/I18n/useI18n.ts
1278
+ var import_react9 = require("react");
1279
+ var useI18n = () => {
1280
+ const context = (0, import_react9.useContext)(I18nContext_default);
1281
+ if (!context) {
1282
+ throw new Error(
1283
+ "useI18n must be used within an I18nProvider. Make sure your component is wrapped with AsgardeoProvider which includes I18nProvider."
1284
+ );
1285
+ }
1286
+ return context;
1287
+ };
1288
+ var useI18n_default = useI18n;
1289
+
1268
1290
  // src/contexts/FlowMeta/FlowMetaProvider.tsx
1269
1291
  var import_jsx_runtime3 = require("react/jsx-runtime");
1270
1292
  var FlowMetaProvider = ({
@@ -1272,13 +1294,13 @@ var FlowMetaProvider = ({
1272
1294
  enabled = true
1273
1295
  }) => {
1274
1296
  const { baseUrl, applicationId } = useAsgardeo_default();
1275
- const i18nContext = (0, import_react9.useContext)(I18nContext_default);
1276
- const [meta, setMeta] = (0, import_react9.useState)(null);
1277
- const [isLoading, setIsLoading] = (0, import_react9.useState)(false);
1278
- const [error, setError] = (0, import_react9.useState)(null);
1279
- const [pendingLanguage, setPendingLanguage] = (0, import_react9.useState)(null);
1280
- const hasFetchedRef = (0, import_react9.useRef)(false);
1281
- const fetchFlowMeta = (0, import_react9.useCallback)(async () => {
1297
+ const i18nContext = useI18n_default();
1298
+ const [meta, setMeta] = (0, import_react10.useState)(null);
1299
+ const [isLoading, setIsLoading] = (0, import_react10.useState)(false);
1300
+ const [error, setError] = (0, import_react10.useState)(null);
1301
+ const [pendingLanguage, setPendingLanguage] = (0, import_react10.useState)(null);
1302
+ const hasFetchedRef = (0, import_react10.useRef)(false);
1303
+ const fetchFlowMeta = (0, import_react10.useCallback)(async () => {
1282
1304
  if (!enabled) {
1283
1305
  setMeta(null);
1284
1306
  return;
@@ -1286,15 +1308,20 @@ var FlowMetaProvider = ({
1286
1308
  setIsLoading(true);
1287
1309
  setError(null);
1288
1310
  try {
1289
- const result = await (0, import_browser10.getFlowMetaV2)({ baseUrl, id: applicationId, type: import_browser10.FlowMetaType.App });
1311
+ const result = await (0, import_browser10.getFlowMetaV2)({
1312
+ baseUrl,
1313
+ id: applicationId,
1314
+ language: i18nContext?.currentLanguage,
1315
+ type: import_browser10.FlowMetaType.App
1316
+ });
1290
1317
  setMeta(result);
1291
1318
  } catch (err) {
1292
1319
  setError(err instanceof Error ? err : new Error(String(err)));
1293
1320
  } finally {
1294
1321
  setIsLoading(false);
1295
1322
  }
1296
- }, [enabled, baseUrl, applicationId]);
1297
- const switchLanguage = (0, import_react9.useCallback)(
1323
+ }, [enabled, baseUrl, applicationId, i18nContext?.currentLanguage]);
1324
+ const switchLanguage = (0, import_react10.useCallback)(
1298
1325
  async (language) => {
1299
1326
  if (!enabled) return;
1300
1327
  setIsLoading(true);
@@ -1326,13 +1353,13 @@ var FlowMetaProvider = ({
1326
1353
  },
1327
1354
  [enabled, baseUrl, applicationId, i18nContext]
1328
1355
  );
1329
- (0, import_react9.useEffect)(() => {
1356
+ (0, import_react10.useEffect)(() => {
1330
1357
  if (pendingLanguage && i18nContext?.setLanguage) {
1331
1358
  i18nContext.setLanguage(pendingLanguage);
1332
1359
  setPendingLanguage(null);
1333
1360
  }
1334
1361
  }, [pendingLanguage, i18nContext?.setLanguage]);
1335
- (0, import_react9.useEffect)(() => {
1362
+ (0, import_react10.useEffect)(() => {
1336
1363
  if (!hasFetchedRef.current) {
1337
1364
  hasFetchedRef.current = true;
1338
1365
  fetchFlowMeta();
@@ -1340,7 +1367,7 @@ var FlowMetaProvider = ({
1340
1367
  }
1341
1368
  fetchFlowMeta();
1342
1369
  }, [fetchFlowMeta]);
1343
- (0, import_react9.useEffect)(() => {
1370
+ (0, import_react10.useEffect)(() => {
1344
1371
  if (!meta?.i18n?.translations || !i18nContext?.injectBundles) {
1345
1372
  return;
1346
1373
  }
@@ -1375,7 +1402,7 @@ var FlowMetaProvider_default = FlowMetaProvider;
1375
1402
  // src/contexts/I18n/I18nProvider.tsx
1376
1403
  var import_browser11 = require("@asgardeo/browser");
1377
1404
  var import_i18n2 = require("@asgardeo/i18n");
1378
- var import_react10 = require("react");
1405
+ var import_react11 = require("react");
1379
1406
  var import_jsx_runtime4 = require("react/jsx-runtime");
1380
1407
  var logger = (0, import_browser11.createPackageComponentLogger)(
1381
1408
  "@asgardeo/react",
@@ -1457,12 +1484,12 @@ var I18nProvider = ({
1457
1484
  const storageStrategy = preferences?.storageStrategy ?? "cookie";
1458
1485
  const storageKey = preferences?.storageKey ?? DEFAULT_STORAGE_KEY;
1459
1486
  const urlParamConfig = preferences?.urlParam === void 0 ? DEFAULT_URL_PARAM : preferences.urlParam;
1460
- const resolvedCookieDomain = (0, import_react10.useMemo)(() => {
1487
+ const resolvedCookieDomain = (0, import_react11.useMemo)(() => {
1461
1488
  if (storageStrategy !== "cookie") return void 0;
1462
1489
  if (preferences?.cookieDomain) return preferences.cookieDomain;
1463
1490
  return typeof window !== "undefined" ? deriveRootDomain(window.location.hostname) : void 0;
1464
1491
  }, [storageStrategy, preferences?.cookieDomain]);
1465
- const storage = (0, import_react10.useMemo)(
1492
+ const storage = (0, import_react11.useMemo)(
1466
1493
  () => createStorageAdapter(storageStrategy, storageKey, resolvedCookieDomain),
1467
1494
  [storageStrategy, storageKey, resolvedCookieDomain]
1468
1495
  );
@@ -1481,9 +1508,9 @@ var I18nProvider = ({
1481
1508
  if (browserLanguage) return browserLanguage;
1482
1509
  return preferences?.fallbackLanguage || import_i18n2.TranslationBundleConstants.FALLBACK_LOCALE;
1483
1510
  };
1484
- const [currentLanguage, setCurrentLanguage] = (0, import_react10.useState)(determineInitialLanguage);
1485
- const [injectedBundles, setInjectedBundles] = (0, import_react10.useState)({});
1486
- const injectBundles = (0, import_react10.useCallback)(
1511
+ const [currentLanguage, setCurrentLanguage] = (0, import_react11.useState)(determineInitialLanguage);
1512
+ const [injectedBundles, setInjectedBundles] = (0, import_react11.useState)({});
1513
+ const injectBundles = (0, import_react11.useCallback)(
1487
1514
  (newBundles) => {
1488
1515
  setInjectedBundles((prev) => {
1489
1516
  const merged = { ...prev };
@@ -1505,7 +1532,7 @@ var I18nProvider = ({
1505
1532
  },
1506
1533
  []
1507
1534
  );
1508
- const mergedBundles = (0, import_react10.useMemo)(() => {
1535
+ const mergedBundles = (0, import_react11.useMemo)(() => {
1509
1536
  const merged = {};
1510
1537
  Object.entries(defaultBundles).forEach(([key, bundle]) => {
1511
1538
  const languageKey = key.replace("_", "-");
@@ -1543,10 +1570,10 @@ var I18nProvider = ({
1543
1570
  return merged;
1544
1571
  }, [defaultBundles, injectedBundles, preferences?.bundles]);
1545
1572
  const fallbackLanguage = preferences?.fallbackLanguage || import_i18n2.TranslationBundleConstants.FALLBACK_LOCALE;
1546
- (0, import_react10.useEffect)(() => {
1573
+ (0, import_react11.useEffect)(() => {
1547
1574
  storage.write(currentLanguage);
1548
1575
  }, [currentLanguage, storage]);
1549
- const t = (0, import_react10.useCallback)(
1576
+ const t = (0, import_react11.useCallback)(
1550
1577
  (key, params) => {
1551
1578
  let translation;
1552
1579
  const currentBundle = mergedBundles[currentLanguage];
@@ -1572,7 +1599,7 @@ var I18nProvider = ({
1572
1599
  },
1573
1600
  [mergedBundles, currentLanguage, fallbackLanguage]
1574
1601
  );
1575
- const setLanguage = (0, import_react10.useCallback)(
1602
+ const setLanguage = (0, import_react11.useCallback)(
1576
1603
  (language) => {
1577
1604
  if (mergedBundles[language]) {
1578
1605
  setCurrentLanguage(language);
@@ -1584,7 +1611,7 @@ var I18nProvider = ({
1584
1611
  },
1585
1612
  [mergedBundles]
1586
1613
  );
1587
- const contextValue = (0, import_react10.useMemo)(
1614
+ const contextValue = (0, import_react11.useMemo)(
1588
1615
  () => ({
1589
1616
  bundles: mergedBundles,
1590
1617
  currentLanguage,
@@ -1601,11 +1628,11 @@ var I18nProvider_default = I18nProvider;
1601
1628
 
1602
1629
  // src/contexts/Organization/OrganizationProvider.tsx
1603
1630
  var import_browser12 = require("@asgardeo/browser");
1604
- var import_react12 = require("react");
1631
+ var import_react13 = require("react");
1605
1632
 
1606
1633
  // src/contexts/Organization/OrganizationContext.ts
1607
- var import_react11 = require("react");
1608
- var OrganizationContext = (0, import_react11.createContext)({
1634
+ var import_react12 = require("react");
1635
+ var OrganizationContext = (0, import_react12.createContext)({
1609
1636
  createOrganization: () => null,
1610
1637
  currentOrganization: null,
1611
1638
  error: null,
@@ -1633,9 +1660,9 @@ var OrganizationProvider = ({
1633
1660
  getAllOrganizations: getAllOrganizations2,
1634
1661
  createOrganization: createOrganization2
1635
1662
  }) => {
1636
- const [isLoading, setIsLoading] = (0, import_react12.useState)(false);
1637
- const [error, setError] = (0, import_react12.useState)(null);
1638
- const switchOrganization = (0, import_react12.useCallback)(
1663
+ const [isLoading, setIsLoading] = (0, import_react13.useState)(false);
1664
+ const [error, setError] = (0, import_react13.useState)(null);
1665
+ const switchOrganization = (0, import_react13.useCallback)(
1639
1666
  async (organization) => {
1640
1667
  if (!onOrganizationSwitch) {
1641
1668
  throw new import_browser12.AsgardeoRuntimeError(
@@ -1662,7 +1689,7 @@ var OrganizationProvider = ({
1662
1689
  },
1663
1690
  [onOrganizationSwitch, onError]
1664
1691
  );
1665
- const contextValue = (0, import_react12.useMemo)(
1692
+ const contextValue = (0, import_react13.useMemo)(
1666
1693
  () => ({
1667
1694
  createOrganization: createOrganization2,
1668
1695
  currentOrganization,
@@ -1693,7 +1720,7 @@ var import_browser15 = require("@asgardeo/browser");
1693
1720
 
1694
1721
  // src/contexts/Theme/v1/ThemeProvider.tsx
1695
1722
  var import_browser13 = require("@asgardeo/browser");
1696
- var import_react15 = require("react");
1723
+ var import_react16 = require("react");
1697
1724
 
1698
1725
  // src/utils/applyThemeToDOM.ts
1699
1726
  var applyThemeToDOM = (theme) => {
@@ -1726,9 +1753,9 @@ var normalizeThemeConfig = (config) => {
1726
1753
  var normalizeThemeConfig_default = normalizeThemeConfig;
1727
1754
 
1728
1755
  // src/contexts/Branding/useBrandingContext.ts
1729
- var import_react13 = require("react");
1756
+ var import_react14 = require("react");
1730
1757
  var useBrandingContext = () => {
1731
- const context = (0, import_react13.useContext)(BrandingContext_default);
1758
+ const context = (0, import_react14.useContext)(BrandingContext_default);
1732
1759
  if (!context) {
1733
1760
  throw new Error("useBrandingContext must be used within a BrandingProvider");
1734
1761
  }
@@ -1737,8 +1764,8 @@ var useBrandingContext = () => {
1737
1764
  var useBrandingContext_default = useBrandingContext;
1738
1765
 
1739
1766
  // src/contexts/Theme/ThemeContext.ts
1740
- var import_react14 = require("react");
1741
- var ThemeContext = (0, import_react14.createContext)(null);
1767
+ var import_react15 = require("react");
1768
+ var ThemeContext = (0, import_react15.createContext)(null);
1742
1769
  ThemeContext.displayName = "ThemeContext";
1743
1770
  var ThemeContext_default = ThemeContext;
1744
1771
 
@@ -1756,7 +1783,7 @@ var ThemeProvider = ({
1756
1783
  inheritFromBranding = true
1757
1784
  }) => {
1758
1785
  const themeConfig = normalizeThemeConfig_default(themeConfigProp);
1759
- const [colorScheme, setColorScheme] = (0, import_react15.useState)(() => {
1786
+ const [colorScheme, setColorScheme] = (0, import_react16.useState)(() => {
1760
1787
  if (mode === "light" || mode === "dark") {
1761
1788
  return mode;
1762
1789
  }
@@ -1782,7 +1809,7 @@ var ThemeProvider = ({
1782
1809
  );
1783
1810
  }
1784
1811
  }
1785
- (0, import_react15.useEffect)(() => {
1812
+ (0, import_react16.useEffect)(() => {
1786
1813
  if (inheritFromBranding && brandingActiveTheme) {
1787
1814
  if (mode === "branding") {
1788
1815
  setColorScheme(brandingActiveTheme);
@@ -1791,7 +1818,7 @@ var ThemeProvider = ({
1791
1818
  }
1792
1819
  }
1793
1820
  }, [inheritFromBranding, brandingActiveTheme, mode, isBrandingLoading]);
1794
- const finalThemeConfig = (0, import_react15.useMemo)(() => {
1821
+ const finalThemeConfig = (0, import_react16.useMemo)(() => {
1795
1822
  if (!inheritFromBranding || !brandingTheme) {
1796
1823
  return themeConfig;
1797
1824
  }
@@ -1832,18 +1859,18 @@ var ThemeProvider = ({
1832
1859
  }
1833
1860
  };
1834
1861
  }, [inheritFromBranding, brandingTheme, themeConfig]);
1835
- const theme = (0, import_react15.useMemo)(
1862
+ const theme = (0, import_react16.useMemo)(
1836
1863
  () => (0, import_browser13.createTheme)(finalThemeConfig, colorScheme === "dark"),
1837
1864
  [finalThemeConfig, colorScheme]
1838
1865
  );
1839
1866
  const direction = finalThemeConfig?.direction || "ltr";
1840
- const handleThemeChange = (0, import_react15.useCallback)((isDark) => {
1867
+ const handleThemeChange = (0, import_react16.useCallback)((isDark) => {
1841
1868
  setColorScheme(isDark ? "dark" : "light");
1842
1869
  }, []);
1843
- const toggleTheme = (0, import_react15.useCallback)(() => {
1870
+ const toggleTheme = (0, import_react16.useCallback)(() => {
1844
1871
  setColorScheme((prev) => prev === "light" ? "dark" : "light");
1845
1872
  }, []);
1846
- (0, import_react15.useEffect)(() => {
1873
+ (0, import_react16.useEffect)(() => {
1847
1874
  let observer = null;
1848
1875
  let mediaQuery = null;
1849
1876
  if (mode === "branding") {
@@ -1872,10 +1899,10 @@ var ThemeProvider = ({
1872
1899
  }
1873
1900
  };
1874
1901
  }, [mode, detection, handleThemeChange, inheritFromBranding, brandingActiveTheme]);
1875
- (0, import_react15.useEffect)(() => {
1902
+ (0, import_react16.useEffect)(() => {
1876
1903
  applyThemeToDOM_default(theme);
1877
1904
  }, [theme]);
1878
- (0, import_react15.useEffect)(() => {
1905
+ (0, import_react16.useEffect)(() => {
1879
1906
  if (typeof document !== "undefined") {
1880
1907
  document.documentElement.dir = direction;
1881
1908
  }
@@ -1895,7 +1922,7 @@ var ThemeProvider_default = ThemeProvider;
1895
1922
 
1896
1923
  // src/contexts/Theme/v2/ThemeProvider.tsx
1897
1924
  var import_browser14 = require("@asgardeo/browser");
1898
- var import_react16 = require("react");
1925
+ var import_react17 = require("react");
1899
1926
 
1900
1927
  // src/utils/v2/buildThemeConfigFromFlowMeta.ts
1901
1928
  var buildThemeConfigFromFlowMeta = (flowMetaTheme, colorScheme) => {
@@ -1949,22 +1976,22 @@ var ThemeProvider2 = ({
1949
1976
  theme: themeOverrideProp
1950
1977
  }) => {
1951
1978
  const themeOverride = normalizeThemeConfig_default(themeOverrideProp);
1952
- const flowMetaContext = (0, import_react16.useContext)(FlowMetaContext_default);
1979
+ const flowMetaContext = (0, import_react17.useContext)(FlowMetaContext_default);
1953
1980
  const flowMetaTheme = flowMetaContext?.meta?.design?.theme ?? null;
1954
1981
  const isLoading = flowMetaContext?.isLoading ?? false;
1955
1982
  const error = flowMetaContext?.error ?? null;
1956
- const [colorScheme, setColorScheme] = (0, import_react16.useState)(
1983
+ const [colorScheme, setColorScheme] = (0, import_react17.useState)(
1957
1984
  () => flowMetaTheme?.defaultColorScheme ?? "light"
1958
1985
  );
1959
- (0, import_react16.useEffect)(() => {
1986
+ (0, import_react17.useEffect)(() => {
1960
1987
  if (flowMetaTheme?.defaultColorScheme) {
1961
1988
  setColorScheme(flowMetaTheme.defaultColorScheme);
1962
1989
  }
1963
1990
  }, [flowMetaTheme?.defaultColorScheme]);
1964
- const toggleTheme = (0, import_react16.useCallback)(() => {
1991
+ const toggleTheme = (0, import_react17.useCallback)(() => {
1965
1992
  setColorScheme((prev) => prev === "light" ? "dark" : "light");
1966
1993
  }, []);
1967
- const finalThemeConfig = (0, import_react16.useMemo)(() => {
1994
+ const finalThemeConfig = (0, import_react17.useMemo)(() => {
1968
1995
  if (!flowMetaTheme) {
1969
1996
  return themeOverride;
1970
1997
  }
@@ -1991,15 +2018,15 @@ var ThemeProvider2 = ({
1991
2018
  } : {}
1992
2019
  };
1993
2020
  }, [flowMetaTheme, colorScheme, themeOverride]);
1994
- const theme = (0, import_react16.useMemo)(
2021
+ const theme = (0, import_react17.useMemo)(
1995
2022
  () => (0, import_browser14.createTheme)(finalThemeConfig, colorScheme === "dark"),
1996
2023
  [finalThemeConfig, colorScheme]
1997
2024
  );
1998
2025
  const direction = flowMetaTheme?.direction ?? "ltr";
1999
- (0, import_react16.useEffect)(() => {
2026
+ (0, import_react17.useEffect)(() => {
2000
2027
  applyThemeToDOM_default(theme);
2001
2028
  }, [theme]);
2002
- (0, import_react16.useEffect)(() => {
2029
+ (0, import_react17.useEffect)(() => {
2003
2030
  if (typeof document !== "undefined") {
2004
2031
  document.documentElement.dir = direction;
2005
2032
  }
@@ -2036,11 +2063,11 @@ var ThemeProvider3 = ({
2036
2063
  var ThemeProvider_default3 = ThemeProvider3;
2037
2064
 
2038
2065
  // src/contexts/User/UserProvider.tsx
2039
- var import_react18 = require("react");
2066
+ var import_react19 = require("react");
2040
2067
 
2041
2068
  // src/contexts/User/UserContext.ts
2042
- var import_react17 = require("react");
2043
- var UserContext = (0, import_react17.createContext)({
2069
+ var import_react18 = require("react");
2070
+ var UserContext = (0, import_react18.createContext)({
2044
2071
  flattenedProfile: null,
2045
2072
  onUpdateProfile: () => null,
2046
2073
  profile: null,
@@ -2060,7 +2087,7 @@ var UserProvider = ({
2060
2087
  onUpdateProfile,
2061
2088
  updateProfile
2062
2089
  }) => {
2063
- const contextValue = (0, import_react18.useMemo)(
2090
+ const contextValue = (0, import_react19.useMemo)(
2064
2091
  () => ({
2065
2092
  flattenedProfile: profile?.flattenedProfile,
2066
2093
  onUpdateProfile,
@@ -2095,18 +2122,18 @@ var AsgardeoProvider = ({
2095
2122
  organizationChain,
2096
2123
  ...rest
2097
2124
  }) => {
2098
- const reRenderCheckRef = (0, import_react19.useRef)(false);
2099
- const asgardeo = (0, import_react19.useMemo)(() => new AsgardeoReactClient_default(instanceId), [instanceId]);
2125
+ const reRenderCheckRef = (0, import_react20.useRef)(false);
2126
+ const asgardeo = (0, import_react20.useMemo)(() => new AsgardeoReactClient_default(instanceId), [instanceId]);
2100
2127
  const { hasAuthParams, hasCalledForThisInstance } = useBrowserUrl_default();
2101
- const [user, setUser] = (0, import_react19.useState)(null);
2102
- const [currentOrganization, setCurrentOrganization] = (0, import_react19.useState)(null);
2103
- const [isSignedInSync, setIsSignedInSync] = (0, import_react19.useState)(false);
2104
- const [isInitializedSync, setIsInitializedSync] = (0, import_react19.useState)(false);
2105
- const [isLoadingSync, setIsLoadingSync] = (0, import_react19.useState)(true);
2106
- const [myOrganizations, setMyOrganizations] = (0, import_react19.useState)([]);
2107
- const [userProfile, setUserProfile] = (0, import_react19.useState)(null);
2108
- const [baseUrl, setBaseUrl] = (0, import_react19.useState)(initialBaseUrl);
2109
- const [config, setConfig] = (0, import_react19.useState)({
2128
+ const [user, setUser] = (0, import_react20.useState)(null);
2129
+ const [currentOrganization, setCurrentOrganization] = (0, import_react20.useState)(null);
2130
+ const [isSignedInSync, setIsSignedInSync] = (0, import_react20.useState)(false);
2131
+ const [isInitializedSync, setIsInitializedSync] = (0, import_react20.useState)(false);
2132
+ const [isLoadingSync, setIsLoadingSync] = (0, import_react20.useState)(true);
2133
+ const [myOrganizations, setMyOrganizations] = (0, import_react20.useState)([]);
2134
+ const [userProfile, setUserProfile] = (0, import_react20.useState)(null);
2135
+ const [baseUrl, setBaseUrl] = (0, import_react20.useState)(initialBaseUrl);
2136
+ const [config, setConfig] = (0, import_react20.useState)({
2110
2137
  afterSignInUrl,
2111
2138
  afterSignOutUrl,
2112
2139
  applicationId,
@@ -2121,12 +2148,12 @@ var AsgardeoProvider = ({
2121
2148
  syncSession,
2122
2149
  ...rest
2123
2150
  });
2124
- const [isUpdatingSession, setIsUpdatingSession] = (0, import_react19.useState)(false);
2125
- const [brandingPreference, setBrandingPreference] = (0, import_react19.useState)(null);
2126
- const [isBrandingLoading, setIsBrandingLoading] = (0, import_react19.useState)(false);
2127
- const [brandingError, setBrandingError] = (0, import_react19.useState)(null);
2128
- const [hasFetchedBranding, setHasFetchedBranding] = (0, import_react19.useState)(false);
2129
- (0, import_react19.useEffect)(() => {
2151
+ const [isUpdatingSession, setIsUpdatingSession] = (0, import_react20.useState)(false);
2152
+ const [brandingPreference, setBrandingPreference] = (0, import_react20.useState)(null);
2153
+ const [isBrandingLoading, setIsBrandingLoading] = (0, import_react20.useState)(false);
2154
+ const [brandingError, setBrandingError] = (0, import_react20.useState)(null);
2155
+ const [hasFetchedBranding, setHasFetchedBranding] = (0, import_react20.useState)(false);
2156
+ (0, import_react20.useEffect)(() => {
2130
2157
  setBaseUrl(initialBaseUrl);
2131
2158
  if (initialBaseUrl !== baseUrl) {
2132
2159
  setHasFetchedBranding(false);
@@ -2134,7 +2161,7 @@ var AsgardeoProvider = ({
2134
2161
  setBrandingError(null);
2135
2162
  }
2136
2163
  }, [initialBaseUrl, baseUrl]);
2137
- (0, import_react19.useEffect)(() => {
2164
+ (0, import_react20.useEffect)(() => {
2138
2165
  (async () => {
2139
2166
  await asgardeo.initialize(config);
2140
2167
  const initializedConfig = await asgardeo.getConfiguration();
@@ -2225,7 +2252,7 @@ var AsgardeoProvider = ({
2225
2252
  }
2226
2253
  }
2227
2254
  }
2228
- (0, import_react19.useEffect)(() => {
2255
+ (0, import_react20.useEffect)(() => {
2229
2256
  if (reRenderCheckRef.current) {
2230
2257
  return;
2231
2258
  }
@@ -2269,7 +2296,7 @@ var AsgardeoProvider = ({
2269
2296
  }
2270
2297
  })();
2271
2298
  }, []);
2272
- (0, import_react19.useEffect)(() => {
2299
+ (0, import_react20.useEffect)(() => {
2273
2300
  let interval;
2274
2301
  (async () => {
2275
2302
  try {
@@ -2295,7 +2322,7 @@ var AsgardeoProvider = ({
2295
2322
  }
2296
2323
  };
2297
2324
  }, [asgardeo]);
2298
- (0, import_react19.useEffect)(() => {
2325
+ (0, import_react20.useEffect)(() => {
2299
2326
  (async () => {
2300
2327
  try {
2301
2328
  const status = await asgardeo.isInitialized();
@@ -2305,7 +2332,7 @@ var AsgardeoProvider = ({
2305
2332
  }
2306
2333
  })();
2307
2334
  }, [asgardeo]);
2308
- (0, import_react19.useEffect)(() => {
2335
+ (0, import_react20.useEffect)(() => {
2309
2336
  const checkLoadingState = () => {
2310
2337
  if (isUpdatingSession) {
2311
2338
  return;
@@ -2322,7 +2349,7 @@ var AsgardeoProvider = ({
2322
2349
  clearInterval(interval);
2323
2350
  };
2324
2351
  }, [asgardeo, isLoadingSync, isSignedInSync, isUpdatingSession]);
2325
- const fetchBranding = (0, import_react19.useCallback)(async () => {
2352
+ const fetchBranding = (0, import_react20.useCallback)(async () => {
2326
2353
  if (!baseUrl) {
2327
2354
  return;
2328
2355
  }
@@ -2349,11 +2376,11 @@ var AsgardeoProvider = ({
2349
2376
  setIsBrandingLoading(false);
2350
2377
  }
2351
2378
  }, [baseUrl, preferences?.i18n?.language]);
2352
- const refetchBranding = (0, import_react19.useCallback)(async () => {
2379
+ const refetchBranding = (0, import_react20.useCallback)(async () => {
2353
2380
  setHasFetchedBranding(false);
2354
2381
  await fetchBranding();
2355
2382
  }, [fetchBranding]);
2356
- (0, import_react19.useEffect)(() => {
2383
+ (0, import_react20.useEffect)(() => {
2357
2384
  if (config.platform === import_browser16.Platform.AsgardeoV2) {
2358
2385
  return;
2359
2386
  }
@@ -2419,44 +2446,44 @@ var AsgardeoProvider = ({
2419
2446
  profile: payload
2420
2447
  }));
2421
2448
  };
2422
- const getDecodedIdToken = (0, import_react19.useCallback)(
2449
+ const getDecodedIdToken = (0, import_react20.useCallback)(
2423
2450
  async () => asgardeo.getDecodedIdToken(),
2424
2451
  [asgardeo]
2425
2452
  );
2426
- const getIdToken = (0, import_react19.useCallback)(async () => asgardeo.getIdToken(), [asgardeo]);
2427
- const getAccessToken = (0, import_react19.useCallback)(
2453
+ const getIdToken = (0, import_react20.useCallback)(async () => asgardeo.getIdToken(), [asgardeo]);
2454
+ const getAccessToken = (0, import_react20.useCallback)(
2428
2455
  async () => asgardeo.getAccessToken(),
2429
2456
  [asgardeo]
2430
2457
  );
2431
- const request = (0, import_react19.useCallback)(
2458
+ const request = (0, import_react20.useCallback)(
2432
2459
  async (...args) => asgardeo.request(...args),
2433
2460
  [asgardeo]
2434
2461
  );
2435
- const requestAll = (0, import_react19.useCallback)(
2462
+ const requestAll = (0, import_react20.useCallback)(
2436
2463
  async (...args) => asgardeo.requestAll(...args),
2437
2464
  [asgardeo]
2438
2465
  );
2439
- const exchangeToken = (0, import_react19.useCallback)(
2466
+ const exchangeToken = (0, import_react20.useCallback)(
2440
2467
  async (exchangeConfig) => asgardeo.exchangeToken(exchangeConfig),
2441
2468
  [asgardeo]
2442
2469
  );
2443
- const signOut = (0, import_react19.useCallback)(
2470
+ const signOut = (0, import_react20.useCallback)(
2444
2471
  async (...args) => asgardeo.signOut(...args),
2445
2472
  [asgardeo]
2446
2473
  );
2447
- const signUp = (0, import_react19.useCallback)(
2474
+ const signUp = (0, import_react20.useCallback)(
2448
2475
  async (...args) => asgardeo.signUp(...args),
2449
2476
  [asgardeo]
2450
2477
  );
2451
- const clearSession = (0, import_react19.useCallback)(
2478
+ const clearSession = (0, import_react20.useCallback)(
2452
2479
  async (...args) => asgardeo.clearSession(...args),
2453
2480
  [asgardeo]
2454
2481
  );
2455
- const reInitialize = (0, import_react19.useCallback)(
2482
+ const reInitialize = (0, import_react20.useCallback)(
2456
2483
  async (reInitConfig) => asgardeo.reInitialize(reInitConfig),
2457
2484
  [asgardeo]
2458
2485
  );
2459
- const value = (0, import_react19.useMemo)(
2486
+ const value = (0, import_react20.useMemo)(
2460
2487
  () => ({
2461
2488
  afterSignInUrl,
2462
2489
  applicationId,
@@ -2559,9 +2586,9 @@ var AsgardeoProvider = ({
2559
2586
  var AsgardeoProvider_default = AsgardeoProvider;
2560
2587
 
2561
2588
  // src/contexts/User/useUser.ts
2562
- var import_react20 = require("react");
2589
+ var import_react21 = require("react");
2563
2590
  var useUser = () => {
2564
- const context = (0, import_react20.useContext)(UserContext_default);
2591
+ const context = (0, import_react21.useContext)(UserContext_default);
2565
2592
  if (!context) {
2566
2593
  throw new Error("useUser must be used within a UserProvider");
2567
2594
  }
@@ -2570,9 +2597,9 @@ var useUser = () => {
2570
2597
  var useUser_default = useUser;
2571
2598
 
2572
2599
  // src/contexts/Organization/useOrganization.ts
2573
- var import_react21 = require("react");
2600
+ var import_react22 = require("react");
2574
2601
  var useOrganization = () => {
2575
- const context = (0, import_react21.useContext)(OrganizationContext_default);
2602
+ const context = (0, import_react22.useContext)(OrganizationContext_default);
2576
2603
  if (!context) {
2577
2604
  throw new Error("useOrganization must be used within an OrganizationProvider");
2578
2605
  }
@@ -2581,9 +2608,9 @@ var useOrganization = () => {
2581
2608
  var useOrganization_default = useOrganization;
2582
2609
 
2583
2610
  // src/contexts/Flow/useFlow.ts
2584
- var import_react22 = require("react");
2611
+ var import_react23 = require("react");
2585
2612
  var useFlow = () => {
2586
- const context = (0, import_react22.useContext)(FlowContext_default);
2613
+ const context = (0, import_react23.useContext)(FlowContext_default);
2587
2614
  if (!context) {
2588
2615
  throw new Error("useFlow must be used within a FlowProvider");
2589
2616
  }
@@ -2591,19 +2618,6 @@ var useFlow = () => {
2591
2618
  };
2592
2619
  var useFlow_default = useFlow;
2593
2620
 
2594
- // src/contexts/I18n/useI18n.ts
2595
- var import_react23 = require("react");
2596
- var useI18n = () => {
2597
- const context = (0, import_react23.useContext)(I18nContext_default);
2598
- if (!context) {
2599
- throw new Error(
2600
- "useI18n must be used within an I18nProvider. Make sure your component is wrapped with AsgardeoProvider which includes I18nProvider."
2601
- );
2602
- }
2603
- return context;
2604
- };
2605
- var useI18n_default = useI18n;
2606
-
2607
2621
  // src/contexts/Theme/useTheme.ts
2608
2622
  var import_react24 = require("react");
2609
2623
  var useTheme = () => {
@@ -3859,7 +3873,6 @@ var useStyles4 = (theme, colorScheme, helperTextAlign, helperTextMarginLeft, has
3859
3873
  const formControl = import_css9.css`
3860
3874
  text-align: start;
3861
3875
  font-family: ${theme.vars.typography.fontFamily};
3862
- margin-bottom: calc(${theme.vars.spacing.unit} * 2);
3863
3876
  `;
3864
3877
  const helperText = import_css9.css`
3865
3878
  margin-top: calc(${theme.vars.spacing.unit} / 2);
@@ -8171,24 +8184,6 @@ var logger5 = (0, import_browser51.createPackageComponentLogger)(
8171
8184
  "@asgardeo/react",
8172
8185
  "AuthOptionFactory"
8173
8186
  );
8174
- var resolveEmojiUrisInHtml = (html) => {
8175
- const withEmojiImages = html.replace(
8176
- /<img([^>]*)src="(emoji:[^"]+)"([^>]*)\/?>/gi,
8177
- (_match, pre, src, post) => {
8178
- const emoji = (0, import_browser51.extractEmojiFromUri)(src);
8179
- if (!emoji) {
8180
- return _match;
8181
- }
8182
- const altMatch = (pre + post).match(/alt="([^"]*)"/i);
8183
- const label = altMatch ? altMatch[1] : emoji;
8184
- return `<span role="img" aria-label="${label}">${emoji}</span>`;
8185
- }
8186
- );
8187
- return withEmojiImages.replace(
8188
- /emoji:([^\s"<>&]+)/g,
8189
- (_, rest) => (0, import_browser51.isEmojiUri)(`emoji:${rest}`) ? rest : `emoji:${rest}`
8190
- );
8191
- };
8192
8187
  var richTextClass = import_css36.css`
8193
8188
  overflow-wrap: anywhere;
8194
8189
  & * {
@@ -8256,6 +8251,7 @@ var matchesSocialProvider = (actionId, eventType, buttonText, provider, authType
8256
8251
  return providerMatches;
8257
8252
  };
8258
8253
  var createAuthComponentFromFlow = (component, formValues, touchedFields, formErrors, isLoading, isFormValid, onInputChange, authType, options = {}) => {
8254
+ const { theme } = useTheme_default();
8259
8255
  const key = options.key || component.id;
8260
8256
  const resolve = (text) => {
8261
8257
  if (!text || !options.t && !options.meta) {
@@ -8425,6 +8421,11 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
8425
8421
  }
8426
8422
  case import_browser51.EmbeddedFlowComponentTypeV2.Block: {
8427
8423
  if (component.components && component.components.length > 0) {
8424
+ const formStyles = {
8425
+ display: "flex",
8426
+ flexDirection: "column",
8427
+ gap: `calc(${theme.vars.spacing.unit} * 2)`
8428
+ };
8428
8429
  const blockComponents = component.components.map(
8429
8430
  (childComponent, index) => createAuthComponentFromFlow(
8430
8431
  childComponent,
@@ -8441,7 +8442,7 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
8441
8442
  }
8442
8443
  )
8443
8444
  ).filter(Boolean);
8444
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("form", { id: component.id, children: blockComponents }, key);
8445
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("form", { id: component.id, style: formStyles, children: blockComponents }, key);
8445
8446
  }
8446
8447
  return null;
8447
8448
  }
@@ -8450,7 +8451,7 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
8450
8451
  "div",
8451
8452
  {
8452
8453
  className: richTextClass,
8453
- dangerouslySetInnerHTML: { __html: import_dompurify.default.sanitize(resolveEmojiUrisInHtml(resolve(component.label))) }
8454
+ dangerouslySetInnerHTML: { __html: import_dompurify.default.sanitize((0, import_browser51.resolveEmojiUrisInHtml)(resolve(component.label))) }
8454
8455
  },
8455
8456
  key
8456
8457
  );
@@ -12137,6 +12138,7 @@ var BaseAcceptInvite = ({
12137
12138
  delete newErrors[name];
12138
12139
  return newErrors;
12139
12140
  });
12141
+ setIsFormValid(true);
12140
12142
  }, []);
12141
12143
  const handleInputBlur = (0, import_react73.useCallback)((name) => {
12142
12144
  setTouchedFields((prev) => ({ ...prev, [name]: true }));
@@ -12149,7 +12151,7 @@ var BaseAcceptInvite = ({
12149
12151
  if ((comp.type === "PASSWORD_INPUT" || comp.type === "TEXT_INPUT" || comp.type === "EMAIL_INPUT") && comp.required && comp.ref) {
12150
12152
  const value = formValues[comp.ref];
12151
12153
  if (!value || value.trim() === "") {
12152
- errors[comp.ref] = `${comp.label || comp.ref} is required`;
12154
+ errors[comp.ref] = t("validations.required.field.error");
12153
12155
  }
12154
12156
  }
12155
12157
  if (comp.components && Array.isArray(comp.components)) {
@@ -12160,7 +12162,7 @@ var BaseAcceptInvite = ({
12160
12162
  validateComponents(components2);
12161
12163
  return { errors, isValid: Object.keys(errors).length === 0 };
12162
12164
  },
12163
- [formValues]
12165
+ [formValues, t]
12164
12166
  );
12165
12167
  const handleSubmit = (0, import_react73.useCallback)(
12166
12168
  async (component, data) => {
@@ -12170,8 +12172,8 @@ var BaseAcceptInvite = ({
12170
12172
  const components2 = currentFlow.data?.components || [];
12171
12173
  const validation = validateForm(components2);
12172
12174
  if (!validation.isValid) {
12173
- setFormErrors(validation.errors);
12174
12175
  setIsFormValid(false);
12176
+ setFormErrors(validation.errors);
12175
12177
  const touched = {};
12176
12178
  Object.keys(validation.errors).forEach((key) => {
12177
12179
  touched[key] = true;
@@ -12181,7 +12183,6 @@ var BaseAcceptInvite = ({
12181
12183
  }
12182
12184
  setIsLoading(true);
12183
12185
  setApiError(null);
12184
- setIsFormValid(true);
12185
12186
  try {
12186
12187
  const inputs = data || formValues;
12187
12188
  const payload = {
@@ -12221,7 +12222,6 @@ var BaseAcceptInvite = ({
12221
12222
  return;
12222
12223
  }
12223
12224
  setCurrentFlow(response);
12224
- setFormValues({});
12225
12225
  setFormErrors({});
12226
12226
  setTouchedFields({});
12227
12227
  } catch (err) {
@@ -12303,35 +12303,6 @@ var BaseAcceptInvite = ({
12303
12303
  ),
12304
12304
  []
12305
12305
  );
12306
- const renderComponents = (0, import_react73.useCallback)(
12307
- (components2) => renderInviteUserComponents(
12308
- components2,
12309
- formValues,
12310
- touchedFields,
12311
- formErrors,
12312
- isLoading,
12313
- isFormValid,
12314
- handleInputChange,
12315
- {
12316
- onInputBlur: handleInputBlur,
12317
- onSubmit: handleSubmit,
12318
- size,
12319
- variant
12320
- }
12321
- ),
12322
- [
12323
- formValues,
12324
- touchedFields,
12325
- formErrors,
12326
- isLoading,
12327
- isFormValid,
12328
- handleInputChange,
12329
- handleInputBlur,
12330
- handleSubmit,
12331
- size,
12332
- variant
12333
- ]
12334
- );
12335
12306
  const components = currentFlow?.data?.components || currentFlow?.data?.meta?.components || [];
12336
12307
  const { title, subtitle } = extractHeadings(components);
12337
12308
  const componentsWithoutHeadings = filterHeadings(components);
@@ -12395,7 +12366,21 @@ var BaseAcceptInvite = ({
12395
12366
  /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(Card_default.Content, { children: [
12396
12367
  apiError && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { style: { marginBottom: "1rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Alert_default, { variant: "error", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Alert_default.Description, { children: apiError.message }) }) }),
12397
12368
  /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { children: [
12398
- componentsWithoutHeadings && componentsWithoutHeadings.length > 0 ? renderComponents(componentsWithoutHeadings) : !isLoading && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Alert_default, { variant: "warning", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Typography_default, { variant: "body1", children: "No form components available" }) }),
12369
+ componentsWithoutHeadings && componentsWithoutHeadings.length > 0 ? renderInviteUserComponents(
12370
+ componentsWithoutHeadings,
12371
+ formValues,
12372
+ touchedFields,
12373
+ formErrors,
12374
+ isLoading,
12375
+ isFormValid,
12376
+ handleInputChange,
12377
+ {
12378
+ onInputBlur: handleInputBlur,
12379
+ onSubmit: handleSubmit,
12380
+ size,
12381
+ variant
12382
+ }
12383
+ ) : !isLoading && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Alert_default, { variant: "warning", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Typography_default, { variant: "body1", children: "No form components available" }) }),
12399
12384
  isLoading && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { style: { display: "flex", justifyContent: "center", padding: "1rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Spinner_default, { size: "small" }) })
12400
12385
  ] }),
12401
12386
  onGoToSignIn && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { style: { marginTop: "1.5rem", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(Typography_default, { variant: "body2", children: [
@@ -17422,10 +17407,10 @@ var LanguageSwitcher = ({ children, className }) => {
17422
17407
  const { meta, switchLanguage, isLoading } = useFlowMeta_default();
17423
17408
  const { currentLanguage } = useTranslation_default();
17424
17409
  const availableLanguageCodes = meta?.i18n?.languages ?? [];
17425
- const effectiveLanguageCodes = (0, import_react110.useMemo)(() => {
17426
- const fallbackCodes = availableLanguageCodes.length > 0 ? availableLanguageCodes : [currentLanguage];
17427
- return Array.from(/* @__PURE__ */ new Set([currentLanguage, ...fallbackCodes]));
17428
- }, [availableLanguageCodes, currentLanguage]);
17410
+ const effectiveLanguageCodes = (0, import_react110.useMemo)(
17411
+ () => availableLanguageCodes.length > 0 ? availableLanguageCodes : [currentLanguage],
17412
+ [availableLanguageCodes, currentLanguage]
17413
+ );
17429
17414
  const languages = (0, import_react110.useMemo)(
17430
17415
  () => effectiveLanguageCodes.map((code) => ({
17431
17416
  code,
@@ -17435,6 +17420,11 @@ var LanguageSwitcher = ({ children, className }) => {
17435
17420
  })),
17436
17421
  [effectiveLanguageCodes]
17437
17422
  );
17423
+ (0, import_react110.useEffect)(() => {
17424
+ if (availableLanguageCodes.length > 0 && !availableLanguageCodes.includes(currentLanguage)) {
17425
+ switchLanguage(availableLanguageCodes[0]);
17426
+ }
17427
+ }, [availableLanguageCodes, currentLanguage, switchLanguage]);
17438
17428
  const handleLanguageChange = (language) => {
17439
17429
  if (language !== currentLanguage) {
17440
17430
  switchLanguage(language);