@thunderid/javascript 1.3.2 → 1.4.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 (97) hide show
  1. package/dist/api/flows/getFlows.d.ts +30 -0
  2. package/dist/api/flows/getFlows.d.ts.map +1 -0
  3. package/dist/api/user-types/getUserTypes.d.ts +23 -0
  4. package/dist/api/user-types/getUserTypes.d.ts.map +1 -0
  5. package/dist/cjs/index.cjs +2531 -1786
  6. package/dist/constants/AuthFlowSelectConstants.d.ts +9 -0
  7. package/dist/constants/AuthFlowSelectConstants.d.ts.map +1 -0
  8. package/dist/constants/SelectConstants.d.ts +12 -0
  9. package/dist/constants/SelectConstants.d.ts.map +1 -0
  10. package/dist/constants/UserSelectConstants.d.ts +8 -0
  11. package/dist/constants/UserSelectConstants.d.ts.map +1 -0
  12. package/dist/constants/UserTypeSelectConstants.d.ts +9 -0
  13. package/dist/constants/UserTypeSelectConstants.d.ts.map +1 -0
  14. package/dist/edge/index.js +2502 -1787
  15. package/dist/i18n/models/i18n.d.ts +11 -0
  16. package/dist/i18n/models/i18n.d.ts.map +1 -1
  17. package/dist/i18n/translations/en-US.d.ts.map +1 -1
  18. package/dist/i18n/translations/fr-FR.d.ts.map +1 -1
  19. package/dist/i18n/translations/hi-IN.d.ts.map +1 -1
  20. package/dist/i18n/translations/ja-JP.d.ts.map +1 -1
  21. package/dist/i18n/translations/pt-BR.d.ts.map +1 -1
  22. package/dist/i18n/translations/pt-PT.d.ts.map +1 -1
  23. package/dist/i18n/translations/si-LK.d.ts.map +1 -1
  24. package/dist/i18n/translations/ta-IN.d.ts.map +1 -1
  25. package/dist/i18n/translations/te-IN.d.ts.map +1 -1
  26. package/dist/index.d.ts +44 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2502 -1787
  29. package/dist/models/auth-flow-select.d.ts +3 -0
  30. package/dist/models/auth-flow-select.d.ts.map +1 -0
  31. package/dist/models/config.d.ts +11 -1
  32. package/dist/models/config.d.ts.map +1 -1
  33. package/dist/models/embedded-flow.d.ts +11 -1
  34. package/dist/models/embedded-flow.d.ts.map +1 -1
  35. package/dist/models/managed-flow.d.ts +25 -0
  36. package/dist/models/managed-flow.d.ts.map +1 -0
  37. package/dist/models/managed-user-type.d.ts +25 -0
  38. package/dist/models/managed-user-type.d.ts.map +1 -0
  39. package/dist/models/select-page.d.ts +38 -0
  40. package/dist/models/select-page.d.ts.map +1 -0
  41. package/dist/models/select.d.ts +62 -0
  42. package/dist/models/select.d.ts.map +1 -0
  43. package/dist/models/user-select.d.ts +6 -0
  44. package/dist/models/user-select.d.ts.map +1 -0
  45. package/dist/models/user-type-select.d.ts +3 -0
  46. package/dist/models/user-type-select.d.ts.map +1 -0
  47. package/dist/utils/capPageSize.d.ts +9 -0
  48. package/dist/utils/capPageSize.d.ts.map +1 -0
  49. package/dist/utils/computeNextPageOffset.d.ts +9 -0
  50. package/dist/utils/computeNextPageOffset.d.ts.map +1 -0
  51. package/dist/utils/createResourceOptionsLoader.d.ts +36 -0
  52. package/dist/utils/createResourceOptionsLoader.d.ts.map +1 -0
  53. package/dist/utils/dedupeSelectOptions.d.ts +10 -0
  54. package/dist/utils/dedupeSelectOptions.d.ts.map +1 -0
  55. package/dist/utils/getSelectMessages.d.ts +12 -0
  56. package/dist/utils/getSelectMessages.d.ts.map +1 -0
  57. package/dist/utils/isAdvancingPageOffset.d.ts +9 -0
  58. package/dist/utils/isAdvancingPageOffset.d.ts.map +1 -0
  59. package/dist/utils/isRetryableError.d.ts +7 -0
  60. package/dist/utils/isRetryableError.d.ts.map +1 -0
  61. package/dist/utils/loadPageWithRetryAndLog.d.ts +19 -0
  62. package/dist/utils/loadPageWithRetryAndLog.d.ts.map +1 -0
  63. package/dist/utils/loadUntilOptionsGrow.d.ts +15 -0
  64. package/dist/utils/loadUntilOptionsGrow.d.ts.map +1 -0
  65. package/dist/utils/logResourceFailure.d.ts +25 -0
  66. package/dist/utils/logResourceFailure.d.ts.map +1 -0
  67. package/dist/utils/mapSelectPageError.d.ts +36 -0
  68. package/dist/utils/mapSelectPageError.d.ts.map +1 -0
  69. package/dist/utils/mergeOptionsBatch.d.ts +25 -0
  70. package/dist/utils/mergeOptionsBatch.d.ts.map +1 -0
  71. package/dist/utils/normalizeSelectOptions.d.ts +9 -0
  72. package/dist/utils/normalizeSelectOptions.d.ts.map +1 -0
  73. package/dist/utils/parseSelectPageQuery.d.ts +18 -0
  74. package/dist/utils/parseSelectPageQuery.d.ts.map +1 -0
  75. package/dist/utils/resolvePageSize.d.ts +9 -0
  76. package/dist/utils/resolvePageSize.d.ts.map +1 -0
  77. package/dist/utils/resolveResourceEndpoint.d.ts +1 -1
  78. package/dist/utils/resolveResourceEndpoint.d.ts.map +1 -1
  79. package/dist/utils/toAuthFlowSelectPage.d.ts +11 -0
  80. package/dist/utils/toAuthFlowSelectPage.d.ts.map +1 -0
  81. package/dist/utils/toError.d.ts +8 -0
  82. package/dist/utils/toError.d.ts.map +1 -0
  83. package/dist/utils/toListSelectPage.d.ts +14 -0
  84. package/dist/utils/toListSelectPage.d.ts.map +1 -0
  85. package/dist/utils/toSelectOption.d.ts +13 -0
  86. package/dist/utils/toSelectOption.d.ts.map +1 -0
  87. package/dist/utils/toSelectOptions.d.ts +4 -0
  88. package/dist/utils/toSelectOptions.d.ts.map +1 -0
  89. package/dist/utils/toUserSelectOption.d.ts +10 -0
  90. package/dist/utils/toUserSelectOption.d.ts.map +1 -0
  91. package/dist/utils/toUserSelectPage.d.ts +13 -0
  92. package/dist/utils/toUserSelectPage.d.ts.map +1 -0
  93. package/dist/utils/toUserTypeSelectPage.d.ts +12 -0
  94. package/dist/utils/toUserTypeSelectPage.d.ts.map +1 -0
  95. package/dist/utils/withRetry.d.ts +15 -0
  96. package/dist/utils/withRetry.d.ts.map +1 -0
  97. package/package.json +1 -1
@@ -694,7 +694,7 @@ var Logger = class Logger {
694
694
  /**
695
695
  * Default logger instance
696
696
  */
697
- const logger = new Logger();
697
+ const logger$1 = new Logger();
698
698
  /**
699
699
  * Create a new logger instance with custom configuration
700
700
  */
@@ -702,22 +702,22 @@ const createLogger = (config) => new Logger(config);
702
702
  /**
703
703
  * Default export - global logger instance
704
704
  */
705
- var logger_default = logger;
705
+ var logger_default = logger$1;
706
706
  /**
707
707
  * Named exports for convenience
708
708
  */
709
- const debug = (message, ...args) => logger.debug(message, ...args);
710
- const info = (message, ...args) => logger.info(message, ...args);
711
- const warn = (message, ...args) => logger.warn(message, ...args);
712
- const error = (message, ...args) => logger.error(message, ...args);
709
+ const debug = (message, ...args) => logger$1.debug(message, ...args);
710
+ const info = (message, ...args) => logger$1.info(message, ...args);
711
+ const warn = (message, ...args) => logger$1.warn(message, ...args);
712
+ const error = (message, ...args) => logger$1.error(message, ...args);
713
713
  /**
714
714
  * Configure the default logger
715
715
  */
716
- const configure = (config) => logger.configure(config);
716
+ const configure = (config) => logger$1.configure(config);
717
717
  /**
718
718
  * Create component-specific loggers
719
719
  */
720
- const createComponentLogger = (component) => logger.child(component);
720
+ const createComponentLogger = (component) => logger$1.child(component);
721
721
  /**
722
722
  * Create package-specific logger
723
723
  */
@@ -1099,6 +1099,12 @@ let EmbeddedFlowComponentType = /* @__PURE__ */ function(EmbeddedFlowComponentTy
1099
1099
  EmbeddedFlowComponentType$1["Timer"] = "TIMER";
1100
1100
  /** QR code display component for wallet-based flows (e.g. OpenID4VP) */
1101
1101
  EmbeddedFlowComponentType$1["QrCode"] = "QR_CODE";
1102
+ /** Single-user picker with incremental, paginated directory loading */
1103
+ EmbeddedFlowComponentType$1["UserSelect"] = "USER_SELECT";
1104
+ /** Authentication-flow picker with incremental, paginated loading; submits the flow ID */
1105
+ EmbeddedFlowComponentType$1["AuthFlowSelect"] = "AUTH_FLOW_SELECT";
1106
+ /** User-type picker with incremental, paginated loading; submits the user type handle */
1107
+ EmbeddedFlowComponentType$1["UserTypeSelect"] = "USER_TYPE_SELECT";
1102
1108
  return EmbeddedFlowComponentType$1;
1103
1109
  }({});
1104
1110
  /**
@@ -1869,6 +1875,64 @@ const getUsers = async ({ filter, limit, offset,...config }) => requestManagemen
1869
1875
  });
1870
1876
  var getUsers_default = getUsers;
1871
1877
 
1878
+ //#endregion
1879
+ //#region src/api/flows/getFlows.ts
1880
+ /**
1881
+ * Retrieves a page of flows.
1882
+ *
1883
+ * @param config - Request configuration object.
1884
+ * @returns A promise that resolves with the page of flows.
1885
+ *
1886
+ * @example
1887
+ * ```typescript
1888
+ * const {flows, totalResults} = await getFlows({
1889
+ * baseUrl: 'https://localhost:8090',
1890
+ * flowType: 'AUTHENTICATION',
1891
+ * limit: 30,
1892
+ * });
1893
+ * ```
1894
+ */
1895
+ const getFlows = async ({ flowType, limit, offset,...config }) => requestManagementResource_default(config, {
1896
+ collection: "flows",
1897
+ failureMessage: "Failed to fetch flows",
1898
+ method: "GET",
1899
+ operation: "getFlows",
1900
+ query: {
1901
+ flowType,
1902
+ limit,
1903
+ offset
1904
+ }
1905
+ });
1906
+ var getFlows_default = getFlows;
1907
+
1908
+ //#endregion
1909
+ //#region src/api/user-types/getUserTypes.ts
1910
+ /**
1911
+ * Retrieves a page of user types.
1912
+ *
1913
+ * @param config - Request configuration object.
1914
+ * @returns A promise that resolves with the page of user types.
1915
+ *
1916
+ * @example
1917
+ * ```typescript
1918
+ * const {types, totalResults} = await getUserTypes({
1919
+ * baseUrl: 'https://localhost:8090',
1920
+ * limit: 30,
1921
+ * });
1922
+ * ```
1923
+ */
1924
+ const getUserTypes = async ({ limit, offset,...config }) => requestManagementResource_default(config, {
1925
+ collection: "user-types",
1926
+ failureMessage: "Failed to fetch user types",
1927
+ method: "GET",
1928
+ operation: "getUserTypes",
1929
+ query: {
1930
+ limit,
1931
+ offset
1932
+ }
1933
+ });
1934
+ var getUserTypes_default = getUserTypes;
1935
+
1872
1936
  //#endregion
1873
1937
  //#region src/api/users/getUser.ts
1874
1938
  /**
@@ -2283,6 +2347,54 @@ const AgentQueryKeys = {
2283
2347
  };
2284
2348
  var AgentQueryKeys_default = AgentQueryKeys;
2285
2349
 
2350
+ //#endregion
2351
+ //#region src/constants/UserSelectConstants.ts
2352
+ /**
2353
+ * Defaults for turning directory users into USER_SELECT options.
2354
+ */
2355
+ const UserSelectConstants = { LABEL_ATTRIBUTES: [
2356
+ "display",
2357
+ "username",
2358
+ "email"
2359
+ ] };
2360
+ var UserSelectConstants_default = UserSelectConstants;
2361
+
2362
+ //#endregion
2363
+ //#region src/constants/AuthFlowSelectConstants.ts
2364
+ /**
2365
+ * Defaults for turning authentication flows into AUTH_FLOW_SELECT options. The flow ID is submitted.
2366
+ */
2367
+ const AuthFlowSelectConstants = {
2368
+ FLOW_TYPE: "AUTHENTICATION",
2369
+ LABEL_ATTRIBUTES: ["name", "handle"]
2370
+ };
2371
+ var AuthFlowSelectConstants_default = AuthFlowSelectConstants;
2372
+
2373
+ //#endregion
2374
+ //#region src/constants/UserTypeSelectConstants.ts
2375
+ /**
2376
+ * Rules for turning user types into USER_TYPE_SELECT options.
2377
+ */
2378
+ const UserTypeSelectConstants = { MAPPING: {
2379
+ labelAttributes: ["handle"],
2380
+ valueAttribute: "handle"
2381
+ } };
2382
+ var UserTypeSelectConstants_default = UserTypeSelectConstants;
2383
+
2384
+ //#endregion
2385
+ //#region src/constants/SelectConstants.ts
2386
+ /**
2387
+ * Limits and values shared by the select pickers that list management resources.
2388
+ */
2389
+ const SelectConstants = {
2390
+ DEFAULT_PAGE_SIZE: 30,
2391
+ LOAD_MORE_OPTION_VALUE: "__load_more__",
2392
+ MAX_EMPTY_CONTINUATIONS: 3,
2393
+ MAX_FILTER_LENGTH: 512,
2394
+ MAX_PAGE_SIZE: 100
2395
+ };
2396
+ var SelectConstants_default = SelectConstants;
2397
+
2286
2398
  //#endregion
2287
2399
  //#region src/errors/ThunderIDRuntimeError.ts
2288
2400
  /**
@@ -2984,10 +3096,12 @@ const RESOURCE_ENDPOINT_KEYS = [
2984
3096
  "applications",
2985
3097
  "flowExecute",
2986
3098
  "flowMeta",
3099
+ "flows",
2987
3100
  "users",
2988
3101
  "usersMe",
2989
3102
  "usersMeCredentials",
2990
- "usersMeMeta"
3103
+ "usersMeMeta",
3104
+ "userTypes"
2991
3105
  ];
2992
3106
  /**
2993
3107
  * Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
@@ -5136,1906 +5250,2507 @@ const resolveFieldName = (field) => {
5136
5250
  var resolveFieldName_default = resolveFieldName;
5137
5251
 
5138
5252
  //#endregion
5139
- //#region src/utils/evaluatePasswordPolicy.ts
5253
+ //#region src/utils/computeNextPageOffset.ts
5140
5254
  /**
5141
- * Evaluates a password against a policy, returning one result when the policy configures
5142
- * a `regex` and none otherwise.
5143
- *
5144
- * An uncompilable `regex` is treated as passing, matching `evaluateValidationRule`:
5145
- * the SDK stays lenient so a misconfigured schema cannot lock a user out of their own
5146
- * password change.
5255
+ * Offset of the next page: the request offset plus the number of items the backend returned, or
5256
+ * `null` once the list is exhausted.
5147
5257
  *
5148
- * @param value - The candidate password.
5149
- * @param policy - The rule to apply.
5150
- * @returns A single-item list when `policy.regex` is set, otherwise an empty list.
5151
- * @example
5152
- * ```typescript
5153
- * const results = evaluatePasswordPolicy('sh0rt', {regex: '^.{8,}$'});
5154
- * const isValid = results.every(result => result.passed);
5155
- * ```
5258
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5156
5259
  */
5157
- const evaluatePasswordPolicy = (value, policy) => {
5158
- if (!policy.regex) return [];
5159
- let matches = true;
5160
- try {
5161
- matches = new RegExp(policy.regex).test(value);
5162
- } catch {
5163
- matches = true;
5164
- }
5165
- return [{
5166
- key: "regex",
5167
- messageKey: "validation.password.pattern",
5168
- passed: matches
5169
- }];
5260
+ const computeNextPageOffset = (offset, count, totalResults) => {
5261
+ if (!Number.isInteger(offset) || offset < 0 || !Number.isInteger(count) || count <= 0) return null;
5262
+ const next = offset + count;
5263
+ return totalResults !== void 0 && next >= totalResults ? null : next;
5170
5264
  };
5171
- var evaluatePasswordPolicy_default = evaluatePasswordPolicy;
5265
+ var computeNextPageOffset_default = computeNextPageOffset;
5172
5266
 
5173
5267
  //#endregion
5174
- //#region src/utils/evaluateChangePasswordForm.ts
5268
+ //#region src/utils/isAdvancingPageOffset.ts
5175
5269
  /**
5176
- * Evaluates a change-password form against a policy.
5177
- *
5178
- * Every predicate a change-password UI needs is derived here so the React and Vue
5179
- * components stay pure rendering concerns and cannot drift apart on what counts as a
5180
- * submittable form.
5270
+ * Whether a loader's reported next offset is safe to follow: `null` (exhausted) or an integer past
5271
+ * the request offset. Anything else would loop or go backwards.
5181
5272
  *
5182
- * @param values - The current field values.
5183
- * @param policy - The rules the new password must satisfy.
5184
- * @returns The derived flags plus the per-rule results.
5185
- * @example
5186
- * ```typescript
5187
- * const {isValid, ruleResults} = evaluateChangePasswordForm(
5188
- * {confirmPassword, newPassword},
5189
- * {regex: '^.{12,}$'},
5190
- * );
5191
- * const canSubmit = !loading && isValid;
5192
- * ```
5273
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5193
5274
  */
5194
- const evaluateChangePasswordForm = (values, policy) => {
5195
- const { confirmPassword, newPassword } = values;
5196
- const ruleResults = evaluatePasswordPolicy_default(newPassword, policy);
5197
- const meetsPolicy = ruleResults.every((rule) => rule.passed);
5198
- const confirmMatches = newPassword === confirmPassword;
5199
- return {
5200
- confirmMatches,
5201
- isValid: newPassword !== "" && confirmPassword !== "" && meetsPolicy && confirmMatches,
5202
- meetsPolicy,
5203
- ruleResults
5204
- };
5275
+ const isAdvancingPageOffset = (requestOffset, nextOffset) => nextOffset === null || Number.isInteger(nextOffset) && nextOffset > requestOffset;
5276
+ var isAdvancingPageOffset_default = isAdvancingPageOffset;
5277
+
5278
+ //#endregion
5279
+ //#region src/utils/dedupeSelectOptions.ts
5280
+ /**
5281
+ * Appends `incoming` to `existing`, keeping each value at its first position and taking the newest
5282
+ * data when a value repeats (offset paging can return the same item on two pages).
5283
+ *
5284
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5285
+ */
5286
+ const dedupeSelectOptions = (existing, incoming) => {
5287
+ const merged = [...existing];
5288
+ const indexByValue = new Map(merged.map((option, index) => [option.value, index]));
5289
+ incoming.forEach((option) => {
5290
+ const existingIndex = indexByValue.get(option.value);
5291
+ if (existingIndex === void 0) {
5292
+ indexByValue.set(option.value, merged.length);
5293
+ merged.push(option);
5294
+ } else merged[existingIndex] = option;
5295
+ });
5296
+ return merged;
5205
5297
  };
5206
- var evaluateChangePasswordForm_default = evaluateChangePasswordForm;
5298
+ var dedupeSelectOptions_default = dedupeSelectOptions;
5207
5299
 
5208
5300
  //#endregion
5209
- //#region src/utils/resolveChangeCredentialPolicy.ts
5301
+ //#region src/utils/toSelectOption.ts
5302
+ const DEFAULT_LABEL_ATTRIBUTES = [
5303
+ "label",
5304
+ "name",
5305
+ "title"
5306
+ ];
5307
+ const asText$1 = (raw) => {
5308
+ if (typeof raw === "string") return raw.trim() === "" ? void 0 : raw;
5309
+ return typeof raw === "number" && Number.isFinite(raw) ? String(raw) : void 0;
5310
+ };
5311
+ const walkPath = (source, path) => path.split(".").reduce((current, key) => typeof current === "object" && current !== null ? current[key] : void 0, source);
5312
+ const readText = (record, path) => asText$1(walkPath(record, path)) ?? asText$1(walkPath(record["attributes"], path));
5313
+ const firstText = (record) => {
5314
+ for (const raw of Object.values(record)) {
5315
+ const text = asText$1(raw);
5316
+ if (text !== void 0) return text;
5317
+ }
5318
+ };
5319
+ const resolveValue = (item, record, mapping) => {
5320
+ const custom = asText$1(mapping?.getValue?.(item));
5321
+ if (custom !== void 0) return custom;
5322
+ if (mapping?.valueAttribute !== void 0) return readText(record, mapping.valueAttribute);
5323
+ return readText(record, "id") ?? readText(record, "value") ?? firstText(record);
5324
+ };
5325
+ const resolveLabel = (item, record, value, mapping, defaults) => {
5326
+ const custom = asText$1(mapping?.getLabel?.(item));
5327
+ if (custom !== void 0) return custom;
5328
+ const id = readText(record, "id");
5329
+ const paths = mapping?.labelAttributes ?? (id === void 0 ? ["label"] : defaults?.labelAttributes ?? DEFAULT_LABEL_ATTRIBUTES);
5330
+ for (const path of paths) {
5331
+ const text = readText(record, path);
5332
+ if (text !== void 0 && text !== id) return text;
5333
+ }
5334
+ return value;
5335
+ };
5210
5336
  /**
5211
- * Resolves the rules a change-credential form should enforce for the given credential.
5337
+ * Converts one raw item into an option.
5212
5338
  *
5213
- * The organization's own policy, expressed as the credential attribute's `regex` in
5214
- * `GET /users/me/meta`, is the sole source of truth: the SDK does not layer its own
5215
- * character-class or length rules on top, since doing so could reject a value the
5216
- * organization's policy accepts. When the schema carries no regex for this credential,
5217
- * there is no policy to check client-side and the requirement checklist is simply empty.
5339
+ * Plain text is its own label and value. An object uses the configured `mapping`; with none, an
5340
+ * object with an `id` submits it and labels it from `defaults.labelAttributes`, an `{label, value}`
5341
+ * object is used as is, and anything else uses its first text field for both.
5218
5342
  *
5219
- * @param userSchema - The user type schema resolved by the provider, keyed by attribute.
5220
- * @param attribute - The credential attribute this form manages (e.g. `password`, `pin`).
5221
- * @param override - An explicit policy supplied by the caller, which wins outright.
5222
- * @returns The policy to hand to {@link evaluatePasswordPolicy}.
5223
- * @example
5224
- * ```typescript
5225
- * const policy = resolveChangeCredentialPolicy(userSchema, 'pin', undefined);
5226
- * const results = evaluatePasswordPolicy(candidate, policy);
5227
- * ```
5343
+ * Returns `null` when there is nothing to submit.
5228
5344
  */
5229
- const resolveChangeCredentialPolicy = (userSchema, attribute, override) => {
5230
- if (override) return override;
5231
- const schemaRegex = userSchema?.[attribute]?.regex;
5232
- return schemaRegex ? { regex: schemaRegex } : {};
5345
+ const toSelectOption = (item, mapping, defaults) => {
5346
+ if (typeof item === "string" || typeof item === "number") {
5347
+ const text = asText$1(item);
5348
+ return text === void 0 ? null : {
5349
+ label: text,
5350
+ value: text
5351
+ };
5352
+ }
5353
+ if (typeof item !== "object" || item === null) return null;
5354
+ const record = item;
5355
+ const value = resolveValue(item, record, mapping);
5356
+ return value === void 0 ? null : {
5357
+ label: resolveLabel(item, record, value, mapping, defaults),
5358
+ value
5359
+ };
5233
5360
  };
5234
- var resolveChangeCredentialPolicy_default = resolveChangeCredentialPolicy;
5361
+ var toSelectOption_default = toSelectOption;
5235
5362
 
5236
5363
  //#endregion
5237
- //#region src/utils/supportsCredential.ts
5364
+ //#region src/utils/toSelectOptions.ts
5365
+ const toSelectOptions = (items, mapping, defaults) => items.map((item) => toSelectOption_default(item, mapping, defaults)).filter((option) => option !== null);
5366
+ var toSelectOptions_default = toSelectOptions;
5367
+
5368
+ //#endregion
5369
+ //#region src/utils/normalizeSelectOptions.ts
5370
+ const asText = (raw) => {
5371
+ if (typeof raw === "string") return raw.trim() === "" ? void 0 : raw;
5372
+ return typeof raw === "number" && Number.isFinite(raw) ? String(raw) : void 0;
5373
+ };
5374
+ const normalizeSelectOption = (input) => {
5375
+ if (typeof input === "object" && input !== null) {
5376
+ const value = asText(input.value);
5377
+ if (value === void 0) return null;
5378
+ return {
5379
+ label: asText(input.label) ?? value,
5380
+ value,
5381
+ ...input.disabled === true ? { disabled: true } : {}
5382
+ };
5383
+ }
5384
+ const text = asText(input);
5385
+ return text === void 0 ? null : {
5386
+ label: text,
5387
+ value: text
5388
+ };
5389
+ };
5238
5390
  /**
5239
- * Whether the signed-in user's type allows them to set the given credential for themselves.
5240
- *
5241
- * The user type schema from `GET /users/me/meta` is the only thing a client can check before
5242
- * rendering. It says whether the credential is declared on this type at all, which is a property
5243
- * of the type rather than of the account, so it cannot say whether this particular user has one
5244
- * stored today. That second question is the server's to answer.
5245
- *
5246
- * Without this check the form would submit into a guaranteed failure. `POST
5247
- * /users/me/update-credentials` rejects a write for a name not declared on the type, since the
5248
- * entity layer only accepts schema-declared credential keys.
5249
- *
5250
- * An absent schema means the answer is not known yet, either because the profile is still loading
5251
- * or because the consuming app never supplied one. Both resolve to `true` so a change-credential
5252
- * affordance is never hidden on missing information alone, and so apps that do not wire up
5253
- * `userSchema` keep the behaviour they had before this check existed.
5254
- *
5255
- * @param userSchema - The user type schema resolved by the provider, keyed by attribute.
5256
- * @param attribute - The credential attribute to check (e.g. `password`, `pin`).
5257
- * @returns `false` only when the schema is known and either defines no attribute named
5258
- * `attribute` or defines one that isn't marked `credential: true`.
5259
- * @example
5260
- * ```typescript
5261
- * if (!supportsCredential(userSchema, 'pin')) {
5262
- * return null;
5263
- * }
5264
- * ```
5391
+ * Turns the options a caller wrote into the list a select renders. Strings and numbers stand for
5392
+ * themselves, objects set `label` and `value`, and empty or missing entries are skipped. Objects of any
5393
+ * other shape are not guessed at: map them with {@link toSelectOptions} first.
5265
5394
  */
5266
- const supportsCredential = (userSchema, attribute) => {
5267
- if (!userSchema) return true;
5268
- return userSchema[attribute]?.credential === true;
5269
- };
5270
- var supportsCredential_default = supportsCredential;
5395
+ const normalizeSelectOptions = (inputs) => (inputs ?? []).map(normalizeSelectOption).filter((option) => option !== null);
5396
+ var normalizeSelectOptions_default = normalizeSelectOptions;
5271
5397
 
5272
5398
  //#endregion
5273
- //#region src/utils/mapCredentialUpdateError.ts
5399
+ //#region src/utils/isRetryableError.ts
5274
5400
  /**
5275
- * Maps a failure from the credential write path onto the field that caused it.
5276
- *
5277
- * `400` is the new password failing a server-side check. Everything else, including a
5278
- * `403`, has no single field to blame here: this form collects no current-value field for
5279
- * a `403` to attach to, since the server does not verify one on this path today.
5280
- *
5281
- * @param error - The value thrown by the credential update call.
5282
- * @returns Where to show the failure and what to show.
5283
- * @example
5284
- * ```typescript
5285
- * const {field, message, messageKey} = mapCredentialUpdateError(caughtError);
5286
- * const text = message ?? t(messageKey);
5287
- *
5288
- * if (field) {
5289
- * setFieldErrors({[field]: text});
5290
- * } else {
5291
- * setError(text);
5292
- * }
5293
- * ```
5401
+ * Tells whether a failed read is worth trying once more: a server error (5xx) or no response at all
5402
+ * (status 0, as reported for network failures and timeouts). Client errors (4xx) are final.
5294
5403
  */
5295
- const GENERIC_MESSAGE_KEY = "user.change_password.generic.error";
5296
- const mapCredentialUpdateError = (error$1) => {
5297
- if ((error$1 instanceof ThunderIDAPIError ? error$1.statusCode : void 0) === 400 && error$1 instanceof ThunderIDError) return {
5298
- field: "newPassword",
5299
- message: error$1.message,
5300
- messageKey: GENERIC_MESSAGE_KEY
5404
+ const isRetryableError = (error$1) => {
5405
+ if (!(error$1 instanceof ThunderIDAPIError) || error$1.statusCode === void 0) return false;
5406
+ return error$1.statusCode === 0 || error$1.statusCode >= 500;
5407
+ };
5408
+ var isRetryableError_default = isRetryableError;
5409
+
5410
+ //#endregion
5411
+ //#region src/utils/withRetry.ts
5412
+ const DEFAULT_RETRY_DELAY_MS = 500;
5413
+ const pause = (delayMs, signal) => new Promise((resolve) => {
5414
+ const onAbort = () => {
5415
+ clearTimeout(timer);
5416
+ resolve();
5301
5417
  };
5302
- if (error$1 instanceof ThunderIDError) return {
5303
- field: null,
5304
- message: error$1.message,
5305
- messageKey: GENERIC_MESSAGE_KEY
5418
+ const timer = setTimeout(() => {
5419
+ signal?.removeEventListener("abort", onAbort);
5420
+ resolve();
5421
+ }, delayMs);
5422
+ signal?.addEventListener("abort", onAbort, { once: true });
5423
+ });
5424
+ /**
5425
+ * Runs a read operation and, when it fails with a retryable error, runs it once more after a short
5426
+ * pause. Only use it for operations that are safe to repeat.
5427
+ */
5428
+ const withRetry = async (operation, { delayMs = DEFAULT_RETRY_DELAY_MS, shouldRetry = isRetryableError_default, signal } = {}) => {
5429
+ try {
5430
+ return await operation();
5431
+ } catch (error$1) {
5432
+ if (signal?.aborted || !shouldRetry(error$1)) throw error$1;
5433
+ await pause(delayMs, signal);
5434
+ if (signal?.aborted) throw error$1;
5435
+ return operation();
5436
+ }
5437
+ };
5438
+ var withRetry_default = withRetry;
5439
+
5440
+ //#endregion
5441
+ //#region src/utils/mergeOptionsBatch.ts
5442
+ /**
5443
+ * Adds one loaded batch to the options loaded so far and decides whether the data has ended. Options that are
5444
+ * already present are replaced in place by their newer copy. A batch with a cursor ends when the cursor is
5445
+ * missing, or when it adds nothing and the cursor did not move (a loader that ignores its cursor). A plain list
5446
+ * ends when it adds nothing new. `null`, `undefined` and anything that is not a list count as an empty batch.
5447
+ *
5448
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5449
+ */
5450
+ const mergeOptionsBatch = ({ cursor, options }, batch) => {
5451
+ const hasCursorForm = typeof batch === "object" && batch !== null && !Array.isArray(batch);
5452
+ const rawOptions = hasCursorForm ? batch.options : batch;
5453
+ const isList = Array.isArray(rawOptions);
5454
+ const merged = dedupeSelectOptions_default([...options], normalizeSelectOptions_default(isList ? rawOptions : []));
5455
+ const addedNothing = merged.length === options.length;
5456
+ const notAList = rawOptions !== null && rawOptions !== void 0 && !isList;
5457
+ if (!hasCursorForm) return {
5458
+ cursor,
5459
+ finished: addedNothing,
5460
+ ...notAList ? { issue: "not-a-list" } : {},
5461
+ options: merged
5306
5462
  };
5463
+ const { nextCursor } = batch;
5464
+ const cursorStuck = addedNothing && nextCursor === cursor;
5465
+ let issue;
5466
+ if (notAList) issue = "not-a-list";
5467
+ else if (cursorStuck) issue = "cursor-stuck";
5307
5468
  return {
5308
- field: null,
5309
- messageKey: GENERIC_MESSAGE_KEY
5469
+ cursor: nextCursor ?? void 0,
5470
+ finished: nextCursor === null || nextCursor === void 0 || cursorStuck,
5471
+ ...issue ? { issue } : {},
5472
+ options: merged
5310
5473
  };
5311
5474
  };
5312
- var mapCredentialUpdateError_default = mapCredentialUpdateError;
5475
+ var mergeOptionsBatch_default = mergeOptionsBatch;
5313
5476
 
5314
5477
  //#endregion
5315
- //#region src/utils/resolveMeta.ts
5478
+ //#region src/utils/loadUntilOptionsGrow.ts
5316
5479
  /**
5317
- * Resolves a dot-path expression against a FlowMetadataResponse object.
5480
+ * Loads batches until one adds something new, the data ends, or a few empty batches in a row have been skipped.
5318
5481
  *
5319
- * Supports both camelCase paths (e.g. `logoUrl`) and snake_case API responses
5320
- * (e.g. `logo_url`). When a camelCase segment is not found directly, the
5321
- * function falls back to its snake_case equivalent.
5482
+ * A batch that adds nothing new while more remain would leave the list empty or stuck, so a request for more
5483
+ * options would appear to do nothing. So the loading helper keeps going, a few batches at most.
5322
5484
  *
5323
- * @example
5324
- * resolveMeta('application.name', meta) // → 'My App'
5325
- * resolveMeta('ou.name', meta) // → 'My Org'
5485
+ * @param loadBatch - Loads the next batch.
5486
+ * @param applyBatch - Adds a batch to the list. Returns `true` when it added nothing while more remain.
5487
+ * @param isCurrent - Returns `false` once the list was reset or the helper went away, which stops the loop.
5326
5488
  *
5327
- * @param path - Dot-separated path into the meta object (e.g. 'application.name')
5328
- * @param meta - The FlowMetadataResponse to look up
5329
- * @returns The resolved string value, or empty string if not found
5489
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5330
5490
  */
5331
- function resolveMeta(path, meta) {
5332
- const value = path.split(".").reduce((current, part) => {
5333
- if (current == null || typeof current !== "object") return;
5334
- const obj = current;
5335
- const snakePart = part.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
5336
- return part in obj ? obj[part] : obj[snakePart];
5337
- }, meta);
5338
- return value != null ? String(value) : "";
5339
- }
5491
+ const loadUntilOptionsGrow = async (loadBatch, applyBatch, isCurrent) => {
5492
+ for (let emptyBatches = 0; emptyBatches <= SelectConstants_default.MAX_EMPTY_CONTINUATIONS; emptyBatches += 1) {
5493
+ const batch = await loadBatch();
5494
+ if (!isCurrent() || !applyBatch(batch)) return;
5495
+ }
5496
+ };
5497
+ var loadUntilOptionsGrow_default = loadUntilOptionsGrow;
5340
5498
 
5341
5499
  //#endregion
5342
- //#region src/utils/isTranslationFlowTemplateLiteral.ts
5500
+ //#region src/utils/capPageSize.ts
5343
5501
  /**
5344
- * Regular expression to match a translation flow template literal `{{t(key)}}` (exact, full-string match).
5345
- * Optional whitespace around `{{` / `}}` is allowed.
5346
- */
5347
- const TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN = /^\{\{\s*t\([^)]+\)\s*\}\}$/;
5348
- /**
5349
- * Regular expression to extract the key from a translation flow template literal `{{t(key)}}`.
5350
- */
5351
- const TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN = /^\{\{\s*t\(([^)]+)\)\s*\}\}$/;
5352
- /**
5353
- * Check if a string is exactly a translation flow template literal (`{{ t(key) }}`).
5354
- *
5355
- * This checks that the **entire** string is the template pattern. Use
5356
- * {@link FLOW_TEMPLATE_LITERAL_REGEX} from `parseFlowTemplateLiteral` to detect
5357
- * templates embedded inside a larger string.
5358
- *
5359
- * @param value - The string to test.
5360
- * @returns `true` if the trimmed value matches the pattern, `false` otherwise.
5361
- *
5362
- * @example
5363
- * ```typescript
5364
- * isTranslationFlowTemplateLiteral('{{ t(signin:heading) }}') // true
5365
- * isTranslationFlowTemplateLiteral('hello world') // false
5366
- * isTranslationFlowTemplateLiteral('Login via {{ t(key) }}') // false — embedded, not exact
5367
- * ```
5368
- */
5369
- function isTranslationFlowTemplateLiteral(value) {
5370
- return TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN.test(value.trim());
5371
- }
5372
-
5373
- //#endregion
5374
- //#region src/utils/parseFlowTemplateLiteral.ts
5375
- /**
5376
- * Regular expression to detect a flow template literal wrapped in double braces.
5377
- * Matches patterns like `{{ t(key) }}`, `{{ meta(key) }}`, etc.
5378
- *
5379
- * Note: this regex has no `g` flag — use `new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, 'g')`
5380
- * when global replacement is needed (e.g. in resolveFlowTemplateLiterals).
5381
- */
5382
- const FLOW_TEMPLATE_LITERAL_REGEX = /\{\{\s*([^}]+)\s*\}\}/;
5383
- /**
5384
- * Regular expression to parse a function-call expression inside flow template braces.
5385
- * Matches `funcName(arg)` and captures the function name and argument.
5386
- */
5387
- const FLOW_TEMPLATE_FUNCTION_REGEX = /^(\w+)\(([^)]+)\)$/;
5388
- /**
5389
- * Flow template literal types supported by the SDK.
5390
- *
5391
- * Values correspond to the function name used in the template expression,
5392
- * so that a `{ t }` object from `useTranslation()` can be passed directly
5393
- * as a handler map.
5394
- */
5395
- let FlowTemplateLiteralType = /* @__PURE__ */ function(FlowTemplateLiteralType$1) {
5396
- /** Meta template literal — `{{ meta(path) }}` — resolves against flow/page metadata */
5397
- FlowTemplateLiteralType$1["META"] = "meta";
5398
- /** Translation template literal — `{{ t(key) }}` */
5399
- FlowTemplateLiteralType$1["TRANSLATION"] = "t";
5400
- /** Unknown or unsupported template literal format */
5401
- FlowTemplateLiteralType$1["UNKNOWN"] = "unknown";
5402
- return FlowTemplateLiteralType$1;
5403
- }({});
5404
- /**
5405
- * Parse a flow template literal content string and extract its type and key.
5406
- *
5407
- * Supports function-call expressions like:
5408
- * - `t(signin:heading)` → type `TRANSLATION`, key `"signin:heading"`
5409
- * - `meta(application.name)` → type `META`, key `"application.name"`
5502
+ * Caps a requested page size at what the management API serves. `undefined` is left for the server's default, and
5503
+ * a value below the minimum is left for the request to reject.
5410
5504
  *
5411
- * Surrounding quotes on the key argument are stripped automatically.
5412
- *
5413
- * @param content - The content inside the template literal braces (without `{{ }}`).
5414
- * @returns Parsed flow template literal information.
5415
- *
5416
- * @example
5417
- * ```typescript
5418
- * parseFlowTemplateLiteral('t(signin:heading)')
5419
- * // { type: FlowTemplateLiteralType.TRANSLATION, key: 'signin:heading', originalValue: 't(signin:heading)' }
5420
- *
5421
- * parseFlowTemplateLiteral('meta(application.name)')
5422
- * // { type: FlowTemplateLiteralType.META, key: 'application.name', originalValue: 'meta(application.name)' }
5423
- * ```
5505
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5424
5506
  */
5425
- function parseFlowTemplateLiteral(content) {
5426
- const originalValue = content;
5427
- const match = FLOW_TEMPLATE_FUNCTION_REGEX.exec(content);
5428
- if (!match) return {
5429
- originalValue,
5430
- type: FlowTemplateLiteralType.UNKNOWN
5431
- };
5432
- const [, functionName, rawKey] = match;
5433
- const key = rawKey.trim().replace(/^['"]|['"]$/g, "");
5434
- switch (functionName) {
5435
- case FlowTemplateLiteralType.TRANSLATION: return {
5436
- key,
5437
- originalValue,
5438
- type: FlowTemplateLiteralType.TRANSLATION
5439
- };
5440
- case FlowTemplateLiteralType.META: return {
5441
- key,
5442
- originalValue,
5443
- type: FlowTemplateLiteralType.META
5444
- };
5445
- default: return {
5446
- originalValue,
5447
- type: FlowTemplateLiteralType.UNKNOWN
5448
- };
5449
- }
5450
- }
5507
+ const capPageSize = (limit) => limit === void 0 ? void 0 : Math.min(limit, SelectConstants_default.MAX_PAGE_SIZE);
5508
+ var capPageSize_default = capPageSize;
5451
5509
 
5452
5510
  //#endregion
5453
- //#region src/utils/resolveFlowTemplateLiterals.ts
5454
- /**
5455
- * Global version of {@link FLOW_TEMPLATE_LITERAL_REGEX} for use with `String.prototype.replace`.
5456
- */
5457
- const FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL = new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, "g");
5458
- /**
5459
- * Resolves a `{{ t(key) }}` translation key, converting its colon-separated namespace to dots
5460
- * e.g. "signin:fields.password.label" → "signin.fields.password.label".
5461
- */
5462
- function resolveTranslation(key, t) {
5463
- return t(key.replace(/:/g, "."));
5464
- }
5511
+ //#region src/utils/resolvePageSize.ts
5465
5512
  /**
5466
- * Resolves all flow template literal expressions in a string.
5467
- *
5468
- * Supported patterns:
5469
- * - `{{ t(key) }}` — resolved via the i18n translation function.
5470
- * Colon-separated namespaces are converted to dots:
5471
- * `{{ t(signin:heading.label) }}` → `t('signin.heading.label')`
5472
- * - `{{ meta(path) }}` — resolved via a dot-path lookup on FlowMetadataResponse.
5473
- * `{{ meta(application.name) }}` → `meta.application?.name`
5474
- *
5475
- * Flow template literals can be embedded inside larger strings:
5476
- * `"Login using {{ meta(application.name) }}"` → `"Login using My App"`
5477
- *
5478
- * A meta field can itself hold a translation reference instead of final display text — that case is
5479
- * detected and resolved via `t()` too, so the raw template never reaches the screen.
5480
- *
5481
- * Unrecognized expressions are left unchanged.
5482
- *
5483
- * @template TFn - The concrete translation function type.
5513
+ * The page size a picker asks for: the default when none is given, otherwise the given size as a whole number of
5514
+ * at least 1 and at most what the management API serves.
5484
5515
  *
5485
- * @param text - The string to resolve (may contain zero or more flow template literals)
5486
- * @param options - Resolution context: translation function and optional flow metadata
5487
- * @returns The resolved string
5516
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5488
5517
  */
5489
- function resolveFlowTemplateLiterals(text, { t, meta }) {
5490
- if (!text) return "";
5491
- return text.replace(FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL, (match, content) => {
5492
- const parsed = parseFlowTemplateLiteral(content.trim());
5493
- if (parsed.type === FlowTemplateLiteralType.TRANSLATION && parsed.key) return resolveTranslation(parsed.key, t);
5494
- if (parsed.type === FlowTemplateLiteralType.META && parsed.key && meta) {
5495
- const value = resolveMeta(parsed.key, meta);
5496
- if (isTranslationFlowTemplateLiteral(value)) {
5497
- const innerKey = value.trim().match(TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN)[1];
5498
- return resolveTranslation(innerKey, t);
5499
- }
5500
- return value;
5501
- }
5502
- return match;
5503
- });
5504
- }
5518
+ const resolvePageSize = (pageSize = SelectConstants_default.DEFAULT_PAGE_SIZE) => Math.min(Math.max(1, Math.floor(pageSize)), SelectConstants_default.MAX_PAGE_SIZE);
5519
+ var resolvePageSize_default = resolvePageSize;
5505
5520
 
5506
5521
  //#endregion
5507
- //#region src/utils/parseKeyValuePairs.ts
5508
- /**
5509
- * Reads the label and value pairs a KEY_VALUE_LIST renders from the raw value found under its
5510
- * `source` key in `additionalData`. The server publishes them as a JSON-encoded array, since
5511
- * additional data carries strings, so both an array and its encoding are accepted.
5512
- *
5513
- * Entries that are not objects, or that carry no value, are dropped, since an empty row tells the
5514
- * user nothing. Anything that is not a list of pairs yields none.
5515
- *
5516
- * @param raw - The raw value found under the source key.
5517
- * @returns The pairs to render, empty when the value holds none.
5518
- *
5519
- * @example
5520
- * ```typescript
5521
- * parseKeyValuePairs('[{"label":"Email","value":"a@b.com"}]'); // [{label: 'Email', value: 'a@b.com'}]
5522
- * parseKeyValuePairs('not json'); // []
5523
- * ```
5524
- */
5525
- const parseKeyValuePairs = (raw) => {
5526
- let parsed = raw;
5527
- if (typeof raw === "string") try {
5528
- parsed = JSON.parse(raw);
5529
- } catch {
5530
- return [];
5531
- }
5532
- if (!Array.isArray(parsed)) return [];
5533
- return parsed.filter((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry)).map((entry) => ({
5534
- label: typeof entry["label"] === "string" ? entry["label"] : "",
5535
- value: typeof entry["value"] === "string" ? entry["value"] : ""
5536
- })).filter((pair) => pair.value !== "");
5522
+ //#region src/utils/parseSelectPageQuery.ts
5523
+ const DIGITS = /^\d+$/;
5524
+ /** A whole number of zero or more, given as a number or as digits in a string, as a URL query gives it. */
5525
+ const isWholeNumber = (raw) => typeof raw === "number" && Number.isSafeInteger(raw) && raw >= 0 || typeof raw === "string" && DIGITS.test(raw) && Number.isSafeInteger(Number(raw));
5526
+ /**
5527
+ * Checks the values a browser sends to a server route or server action that loads one page of a management
5528
+ * resource. The browser is not trusted: `limit` and `offset` must be whole numbers, and `filter`, only read when
5529
+ * `allowFilter` is set, must be a string of reasonable length. Anything else names the first parameter that is
5530
+ * not acceptable.
5531
+ *
5532
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
5533
+ */
5534
+ const parseSelectPageQuery = (raw, { allowFilter = false } = {}) => {
5535
+ if (raw.limit !== void 0 && !isWholeNumber(raw.limit)) return { invalid: "limit" };
5536
+ if (raw.offset !== void 0 && !isWholeNumber(raw.offset)) return { invalid: "offset" };
5537
+ if (allowFilter && raw.filter !== void 0 && (typeof raw.filter !== "string" || raw.filter.length > SelectConstants_default.MAX_FILTER_LENGTH)) return { invalid: "filter" };
5538
+ return { query: {
5539
+ filter: allowFilter && typeof raw.filter === "string" && raw.filter !== "" ? raw.filter : void 0,
5540
+ limit: raw.limit === void 0 ? void 0 : Number(raw.limit),
5541
+ offset: raw.offset === void 0 ? void 0 : Number(raw.offset)
5542
+ } };
5537
5543
  };
5538
- var parseKeyValuePairs_default = parseKeyValuePairs;
5539
-
5540
- //#endregion
5541
- //#region src/utils/countryCodeToFlagEmoji.ts
5542
- /**
5543
- * Converts a two-letter ISO 3166-1 alpha-2 country code to a flag emoji using
5544
- * Unicode Regional Indicator Symbols (U+1F1E6–U+1F1FF).
5545
- *
5546
- * @param countryCode - Two-letter uppercase country code (e.g. "US", "GB")
5547
- * @returns Flag emoji string (e.g. "🇺🇸", "🇬🇧")
5548
- */
5549
- function countryCodeToFlagEmoji(countryCode) {
5550
- return countryCode.toUpperCase().split("").map((char) => String.fromCodePoint(127397 + char.charCodeAt(0))).join("");
5551
- }
5552
-
5553
- //#endregion
5554
- //#region src/utils/resolveLocaleDisplayName.ts
5555
- /**
5556
- * Resolves a BCP 47 locale tag to a human-readable display name using the
5557
- * `Intl.DisplayNames` API.
5558
- *
5559
- * Falls back to the raw locale code if the runtime does not support
5560
- * `Intl.DisplayNames` or if resolution returns `undefined`.
5561
- *
5562
- * @param locale - BCP 47 locale tag to resolve (e.g. "en", "fr", "zh-Hant")
5563
- * @param displayLocale - Locale used for the display name language (defaults to "en")
5564
- * @returns Human-readable language name (e.g. "English", "French")
5565
- */
5566
- function resolveLocaleDisplayName(locale, displayLocale) {
5567
- try {
5568
- return new Intl.DisplayNames([displayLocale], { type: "language" }).of(locale) ?? locale;
5569
- } catch {
5570
- return locale;
5571
- }
5572
- }
5544
+ var parseSelectPageQuery_default = parseSelectPageQuery;
5573
5545
 
5574
5546
  //#endregion
5575
- //#region src/utils/resolveLocaleEmoji.ts
5576
- /**
5577
- * Maps BCP 47 language subtags to ISO 3166-1 alpha-2 country codes used for
5578
- * flag emoji resolution when no country subtag is present in the locale.
5579
- */
5580
- const LANGUAGE_TO_COUNTRY = {
5581
- am: "ET",
5582
- ar: "SA",
5583
- bn: "BD",
5584
- cs: "CZ",
5585
- da: "DK",
5586
- de: "DE",
5587
- el: "GR",
5588
- en: "GB",
5589
- es: "ES",
5590
- fa: "IR",
5591
- fi: "FI",
5592
- fr: "FR",
5593
- he: "IL",
5594
- hi: "IN",
5595
- hu: "HU",
5596
- id: "ID",
5597
- it: "IT",
5598
- ja: "JP",
5599
- ko: "KR",
5600
- ml: "IN",
5601
- ms: "MY",
5602
- nl: "NL",
5603
- no: "NO",
5604
- pl: "PL",
5605
- pt: "PT",
5606
- ro: "RO",
5607
- ru: "RU",
5608
- si: "LK",
5609
- sk: "SK",
5610
- sv: "SE",
5611
- sw: "KE",
5612
- ta: "IN",
5613
- th: "TH",
5614
- tr: "TR",
5615
- uk: "UA",
5616
- ur: "PK",
5617
- vi: "VN",
5618
- zh: "CN"
5547
+ //#region src/i18n/translations/en-US.ts
5548
+ const en_US = {
5549
+ metadata: {
5550
+ localeCode: "en-US",
5551
+ countryCode: "US",
5552
+ languageCode: "en",
5553
+ displayName: "English (United States)",
5554
+ direction: "ltr"
5555
+ },
5556
+ translations: {
5557
+ "elements.buttons.signin.text": "Sign In",
5558
+ "elements.buttons.signout.text": "Sign Out",
5559
+ "elements.buttons.signup.text": "Sign Up",
5560
+ "elements.buttons.submit.text": "Continue",
5561
+ "elements.buttons.facebook.text": "Continue with Facebook",
5562
+ "elements.buttons.google.text": "Continue with Google",
5563
+ "elements.buttons.github.text": "Continue with GitHub",
5564
+ "elements.buttons.microsoft.text": "Continue with Microsoft",
5565
+ "elements.buttons.linkedin.text": "Continue with LinkedIn",
5566
+ "elements.buttons.ethereum.text": "Continue with Sign In Ethereum",
5567
+ "elements.buttons.smsotp.text": "Continue with SMS OTP",
5568
+ "elements.buttons.multi.option.text": "Continue with {connection}",
5569
+ "elements.buttons.social.text": "Continue with {connection}",
5570
+ "elements.display.divider.or_separator": "OR",
5571
+ "elements.display.copyable_text.copy": "Copy",
5572
+ "elements.display.copyable_text.copied": "Copied!",
5573
+ "elements.display.copyable_text.show": "Show",
5574
+ "elements.display.copyable_text.hide": "Hide",
5575
+ "elements.fields.generic.placeholder": "Enter your {field}",
5576
+ "elements.fields.username.label": "Username",
5577
+ "elements.fields.username.placeholder": "Enter your username",
5578
+ "elements.fields.password.label": "Password",
5579
+ "elements.fields.password.placeholder": "Enter your password",
5580
+ "elements.fields.first_name.label": "First Name",
5581
+ "elements.fields.first_name.placeholder": "Enter your first name",
5582
+ "elements.fields.last_name.label": "Last Name",
5583
+ "elements.fields.last_name.placeholder": "Enter your last name",
5584
+ "elements.fields.email.label": "Email",
5585
+ "elements.fields.email.placeholder": "Enter your email",
5586
+ "elements.fields.organization.name.label": "Organization Name",
5587
+ "elements.fields.organization.handle.label": "Organization Handle",
5588
+ "elements.fields.organization.description.label": "Organization Description",
5589
+ "elements.fields.organization.select.label": "Select Organization",
5590
+ "elements.fields.organization.select.placeholder": "Choose an organization",
5591
+ "elements.fields.auth_flow_select.aria_label": "Select a login flow",
5592
+ "elements.fields.auth_flow_select.empty": "No login flows found.",
5593
+ "elements.fields.select.load_more": "Load more",
5594
+ "elements.fields.select.loading": "Loading…",
5595
+ "elements.fields.select.loading_more": "Loading more…",
5596
+ "elements.fields.user_select.aria_label": "Select a user",
5597
+ "elements.fields.user_select.empty": "No users found.",
5598
+ "elements.fields.user_type_select.aria_label": "Select a user type",
5599
+ "elements.fields.user_type_select.empty": "No user types found.",
5600
+ "validations.required.field.error": "This field is required",
5601
+ "validation.pattern.invalid": "This value does not match the required format.",
5602
+ "validation.minLength.invalid": "This value is too short.",
5603
+ "validation.maxLength.invalid": "This value is too long.",
5604
+ "signin.heading": "Sign In",
5605
+ "signin.subheading": "Welcome back! Please sign in to continue.",
5606
+ "signin.images.app_logo.alt": "Application logo",
5607
+ "signup.heading": "Sign Up",
5608
+ "signup.subheading": "Create a new account to get started.",
5609
+ "email.otp.heading": "OTP Verification",
5610
+ "email.otp.subheading": "Enter the code sent to your email address.",
5611
+ "email.otp.buttons.submit.text": "Continue",
5612
+ "identifier.first.heading": "Sign In",
5613
+ "identifier.first.subheading": "Enter your username or email address.",
5614
+ "identifier.first.buttons.submit.text": "Continue",
5615
+ "sms.otp.heading": "OTP Verification",
5616
+ "sms.otp.subheading": "Enter the code sent to your phone number.",
5617
+ "sms.otp.buttons.submit.text": "Continue",
5618
+ "totp.heading": "Verify Your Identity",
5619
+ "totp.subheading": "Enter the code from your authenticator app.",
5620
+ "totp.buttons.submit.text": "Continue",
5621
+ "username.password.heading": "Sign In",
5622
+ "username.password.subheading": "Enter your username and password to continue.",
5623
+ "username.password.buttons.submit.text": "Continue",
5624
+ "passkey.button.use": "Sign in with Passkey",
5625
+ "passkey.signin.heading": "Sign in with Passkey",
5626
+ "passkey.register.heading": "Register Passkey",
5627
+ "passkey.register.description": "Create a passkey to securely sign in to your account without a password.",
5628
+ "user.profile.heading": "Profile",
5629
+ "user.profile.update.generic.error": "An error occurred while updating your profile. Please try again.",
5630
+ "user.change_password.heading": "Change {credential}",
5631
+ "user.change_password.new.label": "New {credential}",
5632
+ "user.change_password.new.placeholder": "Enter your new {credentialLower}",
5633
+ "user.change_password.confirm.label": "Confirm New {credential}",
5634
+ "user.change_password.confirm.placeholder": "Re-enter your new {credentialLower}",
5635
+ "user.change_password.requirements.heading": "Your {credentialLower} must have:",
5636
+ "user.change_password.submit": "Update {credential}",
5637
+ "user.change_password.success": "Your {credentialLower} has been updated.",
5638
+ "user.change_password.mismatch.error": "{credential}s do not match.",
5639
+ "user.change_password.generic.error": "An error occurred while updating your {credentialLower}. Please try again.",
5640
+ "user.change_password.unavailable.heading": "{credential} changes unavailable",
5641
+ "user.change_password.unavailable.description": "Please contact your administrator.",
5642
+ "validation.password.pattern": "Matches the required format",
5643
+ "organization.switcher.switch.organization": "Switch Organization",
5644
+ "organization.switcher.loading.placeholder.organizations": "Loading organizations...",
5645
+ "organization.switcher.members": "members",
5646
+ "organization.switcher.member": "member",
5647
+ "organization.switcher.create.organization": "Create Organization",
5648
+ "organization.switcher.manage.organizations": "Manage Organizations",
5649
+ "organization.switcher.buttons.manage.text": "Manage",
5650
+ "organization.switcher.organizations.heading": "Organizations",
5651
+ "organization.switcher.buttons.switch.text": "Switch",
5652
+ "organization.switcher.no.access": "No Access",
5653
+ "organization.switcher.status.label": "Status:",
5654
+ "organization.switcher.showing.count": "Showing {showing} of {total} organizations",
5655
+ "organization.switcher.buttons.refresh.text": "Refresh",
5656
+ "organization.switcher.buttons.load_more.text": "Load More Organizations",
5657
+ "organization.switcher.loading.more": "Loading...",
5658
+ "organization.switcher.no.organizations": "No organizations found",
5659
+ "organization.switcher.error.prefix": "Error:",
5660
+ "organization.profile.heading": "Organization Profile",
5661
+ "organization.profile.loading": "Loading organization...",
5662
+ "organization.profile.error": "Failed to load organization",
5663
+ "organization.create.heading": "Create Organization",
5664
+ "organization.create.buttons.create_organization.text": "Create Organization",
5665
+ "organization.create.buttons.create_organization.loading.text": "Creating...",
5666
+ "organization.create.buttons.cancel.text": "Cancel",
5667
+ "messages.loading.placeholder": "Loading...",
5668
+ "consent.required": "Required",
5669
+ "consent.essential_claims": "Essential Attributes",
5670
+ "consent.optional_claims": "Optional Attributes",
5671
+ "consent.authorize_scope": "Permissions",
5672
+ "consent.essential_claims.info": "These attributes are required for the service to function properly.",
5673
+ "consent.optional_claims.info": "These attributes are optional and can be provided at your discretion.",
5674
+ "consent.authorize_scope.info": "These permissions allow the service to access additional features.",
5675
+ "errors.heading": "Error",
5676
+ "errors.signin.components.not.available": "Sign-in form is not available at the moment. Please try again later.",
5677
+ "errors.signin.initialization": "An error occurred while initializing. Please try again later.",
5678
+ "errors.signin.flow.failure": "An error occurred during the sign-in flow. Please try again later.",
5679
+ "errors.signin.flow.completion.failure": "An error occurred while completing the sign-in flow. Please try again later.",
5680
+ "errors.signin.flow.passkeys.failure": "An error occurred while signing in with passkeys. Please try again later.",
5681
+ "errors.signin.flow.passkeys.completion.failure": "An error occurred while completing the passkeys sign-in flow. Please try again later.",
5682
+ "errors.signin.timeout": "Time allowed to complete the step has expired.",
5683
+ "errors.signup.initialization": "An error occurred while initializing. Please try again later.",
5684
+ "errors.signup.flow.failure": "An error occurred during the sign-up flow. Please try again later.",
5685
+ "errors.signup.flow.initialization.failure": "An error occurred while initializing the sign-up flow. Please try again later.",
5686
+ "errors.signup.popup.failure": "Could not continue the sign-up in the pop-up window. Please try again.",
5687
+ "errors.signup.components.not.available": "Sign-up form is not available at the moment. Please try again later."
5688
+ }
5619
5689
  };
5620
- /**
5621
- * Resolves a BCP 47 locale tag to a flag emoji.
5622
- *
5623
- * Resolution order:
5624
- * 1. Country subtag when present (e.g. `"en-US"` → 🇺🇸)
5625
- * 2. Language-to-country fallback map (e.g. `"en"` → 🇬🇧)
5626
- * 3. Globe emoji 🌐 for unrecognised codes
5627
- *
5628
- * @param locale - BCP 47 locale tag (e.g. "en", "en-US", "fr-CA")
5629
- * @returns Flag or globe emoji string
5630
- */
5631
- function resolveLocaleEmoji(locale) {
5632
- const parts = locale.split("-");
5633
- const languageCode = parts[0].toLowerCase();
5634
- const countryCode = (parts.length > 1 ? parts[parts.length - 1].toUpperCase() : void 0) ?? LANGUAGE_TO_COUNTRY[languageCode];
5635
- if (countryCode?.length !== 2) return "🌐";
5636
- return countryCodeToFlagEmoji(countryCode);
5637
- }
5638
- var resolveLocaleEmoji_default = resolveLocaleEmoji;
5690
+ var en_US_default = en_US;
5639
5691
 
5640
5692
  //#endregion
5641
- //#region src/utils/getBaseLanguage.ts
5642
- /**
5643
- * Resolves a BCP 47 locale tag to its base (primary) language subtag, so that
5644
- * region-qualified tags compare equal to their bare form (e.g. "en-US" and "en"
5645
- * both resolve to "en"). Uses `Intl.Locale` when available, falling back to a
5646
- * simple split on the first "-".
5647
- *
5648
- * @param tag - BCP 47 locale tag to resolve (e.g. "en-US", "hi-IN", "en")
5649
- * @returns The lowercased base language subtag (e.g. "en", "hi")
5650
- *
5651
- * @example
5652
- * ```typescript
5653
- * getBaseLanguage('en-US') // 'en'
5654
- * getBaseLanguage('hi-IN') // 'hi'
5655
- * getBaseLanguage('en') // 'en'
5656
- * ```
5657
- */
5658
- function getBaseLanguage(tag) {
5659
- try {
5660
- return new Intl.Locale(tag).language.toLowerCase();
5661
- } catch {
5662
- return tag.split("-")[0].toLowerCase();
5693
+ //#region src/i18n/translations/fr-FR.ts
5694
+ const fr_FR = {
5695
+ metadata: {
5696
+ localeCode: "fr-FR",
5697
+ countryCode: "FR",
5698
+ languageCode: "fr",
5699
+ displayName: "Français (France)",
5700
+ direction: "ltr"
5701
+ },
5702
+ translations: {
5703
+ "elements.buttons.signin.text": "Se connecter",
5704
+ "elements.buttons.signout.text": "Se déconnecter",
5705
+ "elements.buttons.signup.text": "S'inscrire",
5706
+ "elements.buttons.submit.text": "Continuer",
5707
+ "elements.buttons.facebook.text": "Continuer avec Facebook",
5708
+ "elements.buttons.google.text": "Continuer avec Google",
5709
+ "elements.buttons.github.text": "Continuer avec GitHub",
5710
+ "elements.buttons.microsoft.text": "Continuer avec Microsoft",
5711
+ "elements.buttons.linkedin.text": "Continuer with LinkedIn",
5712
+ "elements.buttons.ethereum.text": "Continuer avec Sign In Ethereum",
5713
+ "elements.buttons.smsotp.text": "Continuer avec SMS",
5714
+ "elements.buttons.multi.option.text": "Continuer avec {connection}",
5715
+ "elements.buttons.social.text": "Continuer avec {connection}",
5716
+ "elements.display.divider.or_separator": "OU",
5717
+ "elements.display.copyable_text.copy": "Copie",
5718
+ "elements.display.copyable_text.copied": "Copié!",
5719
+ "elements.display.copyable_text.show": "Afficher",
5720
+ "elements.display.copyable_text.hide": "Masquer",
5721
+ "elements.fields.generic.placeholder": "Entrez votre {field}",
5722
+ "elements.fields.username.label": "Nom d'utilisateur",
5723
+ "elements.fields.username.placeholder": "Entrez votre nom d'utilisateur",
5724
+ "elements.fields.password.label": "Mot de passe",
5725
+ "elements.fields.password.placeholder": "Entrez votre mot de passe",
5726
+ "elements.fields.first_name.label": "Prénom",
5727
+ "elements.fields.first_name.placeholder": "Entrez votre prénom",
5728
+ "elements.fields.last_name.label": "Nom de famille",
5729
+ "elements.fields.last_name.placeholder": "Entrez votre nom de famille",
5730
+ "elements.fields.email.label": "Email",
5731
+ "elements.fields.email.placeholder": "Entrez votre email",
5732
+ "elements.fields.organization.name.label": "Nom de l'organisation",
5733
+ "elements.fields.organization.handle.label": "Identifiant de l'organisation",
5734
+ "elements.fields.organization.description.label": "Description de l'organisation",
5735
+ "elements.fields.organization.select.label": "Sélectionner l'organisation",
5736
+ "elements.fields.organization.select.placeholder": "Choisissez une organisation",
5737
+ "elements.fields.auth_flow_select.aria_label": "Sélectionner un flux de connexion",
5738
+ "elements.fields.auth_flow_select.empty": "Aucun flux de connexion trouvé.",
5739
+ "elements.fields.select.load_more": "Charger plus",
5740
+ "elements.fields.select.loading": "Chargement…",
5741
+ "elements.fields.select.loading_more": "Chargement supplémentaire…",
5742
+ "elements.fields.user_select.aria_label": "Sélectionner un utilisateur",
5743
+ "elements.fields.user_select.empty": "Aucun utilisateur trouvé.",
5744
+ "elements.fields.user_type_select.aria_label": "Sélectionner un type d’utilisateur",
5745
+ "elements.fields.user_type_select.empty": "Aucun type d’utilisateur trouvé.",
5746
+ "validations.required.field.error": "Ce champ est obligatoire",
5747
+ "validation.pattern.invalid": "Cette valeur ne correspond pas au format requis.",
5748
+ "validation.minLength.invalid": "Cette valeur est trop courte.",
5749
+ "validation.maxLength.invalid": "Cette valeur est trop longue.",
5750
+ "signin.heading": "Se connecter",
5751
+ "signin.subheading": "Entrez vos identifiants pour continuer.",
5752
+ "signin.images.app_logo.alt": "Logo de l'application",
5753
+ "signup.heading": "S'inscrire",
5754
+ "signup.subheading": "Créez un nouveau compte pour commencer.",
5755
+ "email.otp.heading": "Vérification OTP",
5756
+ "email.otp.subheading": "Entrez le code envoyé à votre adresse e-mail.",
5757
+ "email.otp.buttons.submit.text": "Continuer",
5758
+ "identifier.first.heading": "Se connecter",
5759
+ "identifier.first.subheading": "Entrez votre nom d'utilisateur ou votre adresse e-mail.",
5760
+ "identifier.first.buttons.submit.text": "Continuer",
5761
+ "sms.otp.heading": "Vérification OTP",
5762
+ "sms.otp.subheading": "Entrez le code envoyé à votre numéro de téléphone.",
5763
+ "sms.otp.buttons.submit.text": "Continuer",
5764
+ "totp.heading": "Vérifiez votre identité",
5765
+ "totp.subheading": "Entrez le code de votre application d'authentification.",
5766
+ "totp.buttons.submit.text": "Continuer",
5767
+ "username.password.buttons.submit.text": "Continuer",
5768
+ "username.password.heading": "Se connecter",
5769
+ "username.password.subheading": "Entrez votre nom d'utilisateur et votre mot de passe pour continuer.",
5770
+ "passkey.button.use": "Se connecter avec une clé d'accès",
5771
+ "passkey.signin.heading": "Se connecter avec une clé d'accès",
5772
+ "passkey.register.heading": "Enregistrer une clé d'accès",
5773
+ "passkey.register.description": "Créez une clé d'accès pour vous connecter en toute sécurité à votre compte sans mot de passe.",
5774
+ "user.profile.heading": "Profil",
5775
+ "user.profile.update.generic.error": "Une erreur est survenue lors de la mise à jour de votre profil. Veuillez réessayer.",
5776
+ "user.change_password.heading": "Modifier {credential}",
5777
+ "user.change_password.new.label": "Nouveau {credential}",
5778
+ "user.change_password.new.placeholder": "Entrez votre nouveau {credentialLower}",
5779
+ "user.change_password.confirm.label": "Confirmer le nouveau {credential}",
5780
+ "user.change_password.confirm.placeholder": "Saisissez à nouveau votre nouveau {credentialLower}",
5781
+ "user.change_password.requirements.heading": "Votre {credentialLower} doit contenir :",
5782
+ "user.change_password.submit": "Mettre à jour {credential}",
5783
+ "user.change_password.success": "Votre {credentialLower} a été mis à jour.",
5784
+ "user.change_password.mismatch.error": "Les {credentialLower}s ne correspondent pas.",
5785
+ "user.change_password.generic.error": "Une erreur est survenue lors de la mise à jour de votre {credentialLower}. Veuillez réessayer.",
5786
+ "user.change_password.unavailable.heading": "Modification du {credentialLower} indisponible",
5787
+ "user.change_password.unavailable.description": "Veuillez contacter votre administrateur.",
5788
+ "validation.password.pattern": "Correspond au format requis",
5789
+ "organization.switcher.switch.organization": "Changer d'organisation",
5790
+ "organization.switcher.loading.placeholder.organizations": "Chargement des organisations...",
5791
+ "organization.switcher.members": "membres",
5792
+ "organization.switcher.member": "membre",
5793
+ "organization.switcher.create.organization": "Créer une organisation",
5794
+ "organization.switcher.manage.organizations": "Gérer les organisations",
5795
+ "organization.switcher.buttons.manage.text": "Gérer",
5796
+ "organization.switcher.organizations.heading": "Organisations",
5797
+ "organization.switcher.buttons.switch.text": "Changer",
5798
+ "organization.switcher.no.access": "Aucun accès",
5799
+ "organization.switcher.status.label": "Statut:",
5800
+ "organization.switcher.showing.count": "Affichage de {showing} sur {total} organisations",
5801
+ "organization.switcher.buttons.refresh.text": "Rafraîchir",
5802
+ "organization.switcher.buttons.load_more.text": "Charger plus d'organisations",
5803
+ "organization.switcher.loading.more": "Chargement...",
5804
+ "organization.switcher.no.organizations": "Aucune organisation trouvée",
5805
+ "organization.switcher.error.prefix": "Erreur:",
5806
+ "organization.profile.heading": "Profil de l'organisation",
5807
+ "organization.profile.loading": "Chargement de l'organisation...",
5808
+ "organization.profile.error": "Échec du chargement de l'organisation",
5809
+ "organization.create.heading": "Créer une organisation",
5810
+ "organization.create.buttons.create_organization.text": "Créer une organisation",
5811
+ "organization.create.buttons.create_organization.loading.text": "Création en cours...",
5812
+ "organization.create.buttons.cancel.text": "Annuler",
5813
+ "messages.loading.placeholder": "Chargement...",
5814
+ "consent.required": "Obligatoire",
5815
+ "consent.essential_claims": "Attributs essentiels",
5816
+ "consent.optional_claims": "Attributs facultatifs",
5817
+ "consent.authorize_scope": "Autorisations",
5818
+ "consent.essential_claims.info": "Ces attributs sont nécessaires au bon fonctionnement du service.",
5819
+ "consent.optional_claims.info": "Ces attributs sont facultatifs et peuvent être fournis à votre discrétion.",
5820
+ "consent.authorize_scope.info": "Ces autorisations permettent au service d'accéder à des fonctionnalités supplémentaires.",
5821
+ "errors.heading": "Erreur",
5822
+ "errors.signin.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
5823
+ "errors.signin.flow.failure": "Une erreur est survenue lors du flux de connexion. Veuillez réessayer plus tard.",
5824
+ "errors.signin.flow.completion.failure": "Une erreur est survenue lors de la finalisation du flux de connexion. Veuillez réessayer plus tard.",
5825
+ "errors.signin.flow.passkeys.failure": "Une erreur est survenue lors de la connexion avec les clefs d'accès. Veuillez réessayer plus tard.",
5826
+ "errors.signin.flow.passkeys.completion.failure": "Une erreur est survenue lors de la finalisation du flux de connexion avec les clefs d'accès. Veuillez réessayer plus tard.",
5827
+ "errors.signup.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
5828
+ "errors.signup.flow.failure": "Une erreur est survenue lors du flux d'inscription. Veuillez réessayer plus tard.",
5829
+ "errors.signup.flow.initialization.failure": "Une erreur est survenue lors de l'initialisation du flux d'inscription. Veuillez réessayer plus tard.",
5830
+ "errors.signup.popup.failure": "Impossible de poursuivre l'inscription dans la fenêtre contextuelle. Veuillez réessayer.",
5831
+ "errors.signup.components.not.available": "Le formulaire d'inscription n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5832
+ "errors.signin.components.not.available": "Le formulaire de connexion n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5833
+ "errors.signin.timeout": "Le temps imparti pour effectuer cette e'tape est expire'."
5663
5834
  }
5664
- }
5835
+ };
5836
+ var fr_FR_default = fr_FR;
5665
5837
 
5666
5838
  //#endregion
5667
- //#region src/utils/normalizeLocaleTag.ts
5668
- /**
5669
- * Lowercases the language subtag and uppercases a 2-letter region subtag (the common
5670
- * `language-REGION` shape), leaving everything else as-is. Not a full BCP 47 canonicalizer,
5671
- * but deterministic and dependency-free, so case-only differences still compare equal without
5672
- * `Intl.Locale`.
5673
- */
5674
- function canonicalizeTagManually(tag) {
5675
- return tag.split("-").map((part, index) => {
5676
- if (index === 0) return part.toLowerCase();
5677
- return part.length === 2 ? part.toUpperCase() : part;
5678
- }).join("-");
5679
- }
5680
- /**
5681
- * Resolves a BCP 47 locale tag to its canonical form, so tags that differ only in casing or
5682
- * separator style compare equal (e.g. "en-us" and "en-US"). Uses `Intl.Locale` when available;
5683
- * falls back to {@link canonicalizeTagManually} when it isn't (or rejects the input), so exact
5684
- * dialect matching stays consistent either way.
5685
- *
5686
- * Unlike {@link getBaseLanguage}, this preserves the region/dialect — use it to test for an
5687
- * *exact* match (e.g. "en-IN" against "en-IN"), not a same-base-language match.
5688
- *
5689
- * @param tag - BCP 47 locale tag to resolve (e.g. "en-US", "fr-CA")
5690
- * @returns The canonical form of the tag
5691
- *
5692
- * @example
5693
- * ```typescript
5694
- * normalizeLocaleTag('en-us') // 'en-US'
5695
- * normalizeLocaleTag('fr-CA') // 'fr-CA'
5696
- * ```
5697
- */
5698
- function normalizeLocaleTag(tag) {
5699
- try {
5700
- return new Intl.Locale(tag).toString();
5701
- } catch {
5702
- return canonicalizeTagManually(tag);
5839
+ //#region src/i18n/translations/te-IN.ts
5840
+ const te_IN = {
5841
+ metadata: {
5842
+ localeCode: "te-IN",
5843
+ countryCode: "IN",
5844
+ languageCode: "te",
5845
+ displayName: "తెలుగు (భారతదేశం)",
5846
+ direction: "ltr"
5847
+ },
5848
+ translations: {
5849
+ "elements.buttons.signin.text": "సైన్ ఇన్ చేయండి",
5850
+ "elements.buttons.signout.text": "సైన్ అవుట్ చేయండి",
5851
+ "elements.buttons.signup.text": "సైన్ అప్ చేయండి",
5852
+ "elements.buttons.submit.text": "కొనసాగించండి",
5853
+ "elements.buttons.facebook.text": "Facebook తో కొనసాగించండి",
5854
+ "elements.buttons.google.text": "Google తో కొనసాగించండి",
5855
+ "elements.buttons.github.text": "GitHub తో కొనసాగించండి",
5856
+ "elements.buttons.microsoft.text": "Microsoft తో కొనసాగించండి",
5857
+ "elements.buttons.linkedin.text": "LinkedIn తో కొనసాగించండి",
5858
+ "elements.buttons.ethereum.text": "Ethereum తో సైన్ ఇన్ చేయండి",
5859
+ "elements.buttons.smsotp.text": "SMS తో కొనసాగించండి",
5860
+ "elements.buttons.multi.option.text": "{connection} తో కొనసాగించండి",
5861
+ "elements.buttons.social.text": "{connection} తో కొనసాగించండి",
5862
+ "elements.display.divider.or_separator": "లేదా",
5863
+ "elements.display.copyable_text.copy": "కాపీ చేయండి",
5864
+ "elements.display.copyable_text.copied": "కాపీ చేయబడింది!",
5865
+ "elements.display.copyable_text.show": "చూపించు",
5866
+ "elements.display.copyable_text.hide": "దాచు",
5867
+ "elements.fields.generic.placeholder": "మీ {field} ను నమోదు చేయండి",
5868
+ "elements.fields.username.label": "వినియోగదారు పేరు",
5869
+ "elements.fields.username.placeholder": "వినియోగదారు పేరును నమోదు చేయండి",
5870
+ "elements.fields.password.label": "పాస్వర్డ్",
5871
+ "elements.fields.password.placeholder": "పాస్వర్డ్ నమోదు చేయండి",
5872
+ "elements.fields.first_name.label": "మొదటి పేరు",
5873
+ "elements.fields.first_name.placeholder": "మీ మొదటి పేరును నమోదు చేయండి",
5874
+ "elements.fields.last_name.label": "చివరి పేరు",
5875
+ "elements.fields.last_name.placeholder": "మీ చివరి పేరును నమోదు చేయండి",
5876
+ "elements.fields.email.label": "ఇమెయిల్",
5877
+ "elements.fields.email.placeholder": "మీ ఇమెయిల్‌ను నమోదు చేయండి",
5878
+ "elements.fields.organization.name.label": "సంస్థ పేరు",
5879
+ "elements.fields.organization.handle.label": "సంస్థ హ్యాండిల్",
5880
+ "elements.fields.organization.description.label": "సంస్థ వివరణ",
5881
+ "elements.fields.organization.select.label": "ఆర్గనైజేషన్‌ను ఎంచుకోండి",
5882
+ "elements.fields.organization.select.placeholder": "సంస్థను ఎంచుకోండి",
5883
+ "elements.fields.auth_flow_select.aria_label": "లాగిన్ ప్రవాహాన్ని ఎంచుకోండి",
5884
+ "elements.fields.auth_flow_select.empty": "లాగిన్ ప్రవాహాలు కనుగొనబడలేదు.",
5885
+ "elements.fields.select.load_more": "మరిన్ని లోడ్ చేయండి",
5886
+ "elements.fields.select.loading": "లోడ్ అవుతోంది…",
5887
+ "elements.fields.select.loading_more": "మరిన్ని లోడ్ అవుతోంది…",
5888
+ "elements.fields.user_select.aria_label": "ఒక వినియోగదారుని ఎంచుకోండి",
5889
+ "elements.fields.user_select.empty": "వినియోగదారులు కనుగొనబడలేదు.",
5890
+ "elements.fields.user_type_select.aria_label": "వినియోగదారు రకాన్ని ఎంచుకోండి",
5891
+ "elements.fields.user_type_select.empty": "వినియోగదారు రకాలు కనుగొనబడలేదు.",
5892
+ "validations.required.field.error": "ఈ ఫీల్డ్ అవసరం",
5893
+ "validation.pattern.invalid": "ఈ విలువ అవసరమైన ఆకృతికి సరిపోలడం లేదు.",
5894
+ "validation.minLength.invalid": "ఈ విలువ చాలా చిన్నది.",
5895
+ "validation.maxLength.invalid": "ఈ విలువ చాలా పెద్దది.",
5896
+ "signin.heading": "సైన్ ఇన్ చేయండి",
5897
+ "signin.subheading": "కొనసాగించడానికి మీ వివరాలు ఇవ్వండి.",
5898
+ "signin.images.app_logo.alt": "అప్లికేషన్ లోగో",
5899
+ "signup.heading": "సైన్ అప్ చేయండి",
5900
+ "signup.subheading": "కొత్త అకౌంట్ సృష్టించండి.",
5901
+ "email.otp.heading": "OTP వెరిఫికేషన్",
5902
+ "email.otp.subheading": "మీ ఇమెయిల్‌కి పంపిన కోడ్‌ను నమోదు చేయండి.",
5903
+ "email.otp.buttons.submit.text": "కొనసాగించండి",
5904
+ "identifier.first.heading": "సైన్ ఇన్ చేయండి",
5905
+ "identifier.first.subheading": "మీ యూజర్ పేరు లేదా ఇమెయిల్ ఇవ్వండి.",
5906
+ "identifier.first.buttons.submit.text": "కొనసాగించండి",
5907
+ "sms.otp.heading": "OTP వెరిఫికేషన్",
5908
+ "sms.otp.subheading": "మీ ఫోన్ నంబర్‌కి పంపిన కోడ్‌ను నమోదు చేయండి.",
5909
+ "sms.otp.buttons.submit.text": "కొనసాగించండి",
5910
+ "totp.heading": "మీ గుర్తింపును ధృవీకరించండి",
5911
+ "totp.subheading": "మీ ఆథెంటికేటర్ యాప్‌లోని కోడ్‌ను నమోదు చేయండి.",
5912
+ "totp.buttons.submit.text": "కొనసాగించండి",
5913
+ "username.password.buttons.submit.text": "కొనసాగించండి",
5914
+ "username.password.heading": "సైన్ ఇన్ చేయండి",
5915
+ "username.password.subheading": "మీ యూజర్ పేరు మరియు పాస్‌వర్డ్ ఇవ్వండి.",
5916
+ "passkey.button.use": "Passkey తో సైన్ ఇన్ చేయండి",
5917
+ "passkey.signin.heading": "Passkey తో సైన్ ఇన్ చేయండి",
5918
+ "passkey.register.heading": "Passkey ని నమోదు చేయండి",
5919
+ "passkey.register.description": "పాస్‌వర్డ్ లేకుండా మీ ఖాతాలోకి సురక్షితంగా సైన్ ఇన్ చేయడానికి Passkey ని సృష్టించండి.",
5920
+ "user.profile.heading": "ప్రొఫైల్",
5921
+ "user.profile.update.generic.error": "ప్రొఫైల్ అప్‌డేట్ చేస్తూ లోపం వచ్చింది. దయచేసి మళ్లీ ప్రయత్నించండి.",
5922
+ "user.change_password.heading": "{credential} మార్చండి",
5923
+ "user.change_password.new.label": "కొత్త {credential}",
5924
+ "user.change_password.new.placeholder": "మీ కొత్త {credentialLower} నమోదు చేయండి",
5925
+ "user.change_password.confirm.label": "కొత్త {credential} నిర్ధారించండి",
5926
+ "user.change_password.confirm.placeholder": "మీ కొత్త {credentialLower}ని మళ్లీ నమోదు చేయండి",
5927
+ "user.change_password.requirements.heading": "మీ {credentialLower} కింది వాటిని కలిగి ఉండాలి:",
5928
+ "user.change_password.submit": "{credential} నవీకరించండి",
5929
+ "user.change_password.success": "మీ {credentialLower} నవీకరించబడింది.",
5930
+ "user.change_password.mismatch.error": "{credentialLower} సరిపోలలేదు.",
5931
+ "user.change_password.generic.error": "మీ {credentialLower} నవీకరించేటప్పుడు లోపం వచ్చింది. దయచేసి మళ్లీ ప్రయత్నించండి.",
5932
+ "user.change_password.unavailable.heading": "{credential} మార్పులు అందుబాటులో లేవు",
5933
+ "user.change_password.unavailable.description": "దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.",
5934
+ "validation.password.pattern": "అవసరమైన ఫార్మాట్‌కు సరిపోతుంది",
5935
+ "organization.switcher.switch.organization": "ఆర్గనైజేషన్ మార్చండి",
5936
+ "organization.switcher.loading.placeholder.organizations": "ఆర్గనైజేషన్‌లు లోడ్ అవుతున్నాయి...",
5937
+ "organization.switcher.members": "సభ్యులు",
5938
+ "organization.switcher.member": "సభ్యుడు",
5939
+ "organization.switcher.create.organization": "ఆర్గనైజేషన్ సృష్టించండి",
5940
+ "organization.switcher.manage.organizations": "ఆర్గనైజేషన్‌లను నిర్వహించండి",
5941
+ "organization.switcher.buttons.manage.text": "నిర్వహించండి",
5942
+ "organization.switcher.organizations.heading": "ఆర్గనైజేషన్‌లు",
5943
+ "organization.switcher.buttons.switch.text": "మార్చండి",
5944
+ "organization.switcher.no.access": "యాక్సెస్ లేదు",
5945
+ "organization.switcher.status.label": "స్టేటస్:",
5946
+ "organization.switcher.showing.count": "{total} లో {showing} ఆర్గనైజేషన్‌లు చూపుతున్నాయి",
5947
+ "organization.switcher.buttons.refresh.text": "రిఫ్రెష్ చేయండి",
5948
+ "organization.switcher.buttons.load_more.text": "మరిన్ని ఆర్గనైజేషన్‌లను లోడ్ చేయండి",
5949
+ "organization.switcher.loading.more": "లోడ్ అవుతోంది...",
5950
+ "organization.switcher.no.organizations": "ఏ ఆర్గనైజేషన్‌లు లభించలేదు",
5951
+ "organization.switcher.error.prefix": "లోపం:",
5952
+ "organization.profile.heading": "ఆర్గనైజేషన్ ప్రొఫైల్",
5953
+ "organization.profile.loading": "లోడ్ అవుతోంది...",
5954
+ "organization.profile.error": "ఆర్గనైజేషన్‌ను లోడ్ చేయడం విఫలమైంది",
5955
+ "organization.create.heading": "ఆర్గనైజేషన్ సృష్టించండి",
5956
+ "organization.create.buttons.create_organization.text": "సృష్టించండి",
5957
+ "organization.create.buttons.create_organization.loading.text": "సృష్టిస్తోంది...",
5958
+ "organization.create.buttons.cancel.text": "రద్దు చేయండి",
5959
+ "messages.loading.placeholder": "లోడ్ అవుతోంది...",
5960
+ "consent.required": "తప్పనిసరి",
5961
+ "consent.essential_claims": "ఆవశ్యక లక్షణాలు",
5962
+ "consent.optional_claims": "ఐచ్ఛిక లక్షణాలు",
5963
+ "consent.authorize_scope": "అనుమతులు",
5964
+ "consent.essential_claims.info": "సేవ సరిగ్గా పనిచేయడానికి ఈ లక్షణాలు అవసరం.",
5965
+ "consent.optional_claims.info": "ఈ లక్షణాలు ఐచ్ఛికం మరియు మీ విచక్షణ మేరకు అందించవచ్చు.",
5966
+ "consent.authorize_scope.info": "ఈ అనుమతులు సేవను అదనపు ఫీచర్‌లను యాక్సెస్ చేయడానికి అనుమతిస్తాయి.",
5967
+ "errors.heading": "లోపం",
5968
+ "errors.signin.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5969
+ "errors.signin.flow.failure": "సైన్ ఇన్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5970
+ "errors.signin.flow.completion.failure": "సైన్ ఇన్ పూర్తి చేయడంలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5971
+ "errors.signin.flow.passkeys.failure": "పాస్‌కీలతో సైన్ ఇన్ చేస్తూ లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5972
+ "errors.signin.flow.passkeys.completion.failure": "పాస్‌కీ సైన్ ఇన్ పూర్తి చేయడంలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5973
+ "errors.signup.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5974
+ "errors.signup.flow.failure": "సైన్ అప్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5975
+ "errors.signup.flow.initialization.failure": "సైన్ అప్ ప్రక్రియను ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5976
+ "errors.signup.popup.failure": "పాప్-అప్ విండోలో సైన్ అప్ కొనసాగించడం సాధ్యం కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.",
5977
+ "errors.signup.components.not.available": "సైన్ అప్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5978
+ "errors.signin.components.not.available": "సైన్ ఇన్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
5979
+ "errors.signin.timeout": "దశను పూర్తి చేయడానికి అనుమతించబడిన సమయం ముగిసింది."
5703
5980
  }
5704
- }
5981
+ };
5982
+ var te_IN_default = te_IN;
5705
5983
 
5706
5984
  //#endregion
5707
- //#region src/utils/evaluateValidationRule.ts
5708
- /**
5709
- * Default i18n fallback keys returned when a `ValidationRule.message` is not provided.
5710
- * Match the server-side defaults so a flow author who omits `message` sees the same
5711
- * string regardless of whether the rule was evaluated client-side or server-side.
5712
- */
5713
- const DEFAULT_VALIDATION_MESSAGE_KEYS = {
5714
- regex: "validation.pattern.invalid",
5715
- minLength: "validation.minLength.invalid",
5716
- maxLength: "validation.maxLength.invalid"
5985
+ //#region src/i18n/translations/hi-IN.ts
5986
+ const hi_IN = {
5987
+ metadata: {
5988
+ localeCode: "hi-IN",
5989
+ countryCode: "IN",
5990
+ languageCode: "hi",
5991
+ displayName: "हिन्दी (भारत)",
5992
+ direction: "ltr"
5993
+ },
5994
+ translations: {
5995
+ "elements.buttons.signin.text": "साइन इन",
5996
+ "elements.buttons.signout.text": "साइन आउट",
5997
+ "elements.buttons.signup.text": "साइन अप",
5998
+ "elements.buttons.submit.text": "जारी रखें",
5999
+ "elements.buttons.facebook.text": "Facebook के साथ जारी रखें",
6000
+ "elements.buttons.google.text": "Google के साथ जारी रखें",
6001
+ "elements.buttons.github.text": "GitHub के साथ जारी रखें",
6002
+ "elements.buttons.microsoft.text": "Microsoft के साथ जारी रखें",
6003
+ "elements.buttons.linkedin.text": "LinkedIn के साथ जारी रखें",
6004
+ "elements.buttons.ethereum.text": "Ethereum के साथ साइन इन करें",
6005
+ "elements.buttons.smsotp.text": "SMS के साथ जारी रखें",
6006
+ "elements.buttons.multi.option.text": "{connection} के साथ जारी रखें",
6007
+ "elements.buttons.social.text": "{connection} के साथ जारी रखें",
6008
+ "elements.display.divider.or_separator": "या",
6009
+ "elements.display.copyable_text.copy": "प्रतिलिपि",
6010
+ "elements.display.copyable_text.copied": "नकल की गई!",
6011
+ "elements.display.copyable_text.show": "दिखाएं",
6012
+ "elements.display.copyable_text.hide": "छिपाएं",
6013
+ "elements.fields.generic.placeholder": "{field} दर्ज करें",
6014
+ "elements.fields.username.label": "उपयोगकर्ता नाम",
6015
+ "elements.fields.username.placeholder": "अपना उपयोगकर्ता नाम दर्ज करें",
6016
+ "elements.fields.password.label": "पासवर्ड",
6017
+ "elements.fields.password.placeholder": "अपना पासवर्ड दर्ज करें",
6018
+ "elements.fields.first_name.label": "पहला नाम",
6019
+ "elements.fields.first_name.placeholder": "अपना पहला नाम दर्ज करें",
6020
+ "elements.fields.last_name.label": "अंतिम नाम",
6021
+ "elements.fields.last_name.placeholder": "अपना अंतिम नाम दर्ज करें",
6022
+ "elements.fields.email.label": "ईमेल",
6023
+ "elements.fields.email.placeholder": "अपना ईमेल दर्ज करें",
6024
+ "elements.fields.organization.name.label": "संगठन का नाम",
6025
+ "elements.fields.organization.handle.label": "संगठन हैंडल",
6026
+ "elements.fields.organization.description.label": "संगठन विवरण",
6027
+ "elements.fields.organization.select.label": "संगठन चुनें",
6028
+ "elements.fields.organization.select.placeholder": "एक संगठन चुनें",
6029
+ "elements.fields.auth_flow_select.aria_label": "लॉगिन फ़्लो चुनें",
6030
+ "elements.fields.auth_flow_select.empty": "कोई लॉगिन फ़्लो नहीं मिला।",
6031
+ "elements.fields.select.load_more": "और लोड करें",
6032
+ "elements.fields.select.loading": "लोड हो रहा है…",
6033
+ "elements.fields.select.loading_more": "और लोड हो रहा है…",
6034
+ "elements.fields.user_select.aria_label": "एक उपयोगकर्ता चुनें",
6035
+ "elements.fields.user_select.empty": "कोई उपयोगकर्ता नहीं मिला।",
6036
+ "elements.fields.user_type_select.aria_label": "उपयोगकर्ता प्रकार चुनें",
6037
+ "elements.fields.user_type_select.empty": "कोई उपयोगकर्ता प्रकार नहीं मिला।",
6038
+ "validations.required.field.error": "यह फील्ड आवश्यक है",
6039
+ "validation.pattern.invalid": "यह मान आवश्यक प्रारूप से मेल नहीं खाता।",
6040
+ "validation.minLength.invalid": "यह मान बहुत छोटा है।",
6041
+ "validation.maxLength.invalid": "यह मान बहुत लंबा है।",
6042
+ "signin.heading": "साइन इन",
6043
+ "signin.subheading": "जारी रखने के लिए अपनी प्रमाणिक जानकारी दर्ज करें।",
6044
+ "signin.images.app_logo.alt": "एप्लिकेशन लोगो",
6045
+ "signup.heading": "साइन अप",
6046
+ "signup.subheading": "शुरू करने के लिए नया खाता बनाएं।",
6047
+ "email.otp.heading": "OTP सत्यापन",
6048
+ "email.otp.subheading": "अपनी ईमेल पर भेजा गया कोड दर्ज करें।",
6049
+ "email.otp.buttons.submit.text": "जारी रखें",
6050
+ "identifier.first.heading": "साइन इन",
6051
+ "identifier.first.subheading": "अपना उपयोगकर्ता नाम या ईमेल दर्ज करें।",
6052
+ "identifier.first.buttons.submit.text": "जारी रखें",
6053
+ "sms.otp.heading": "OTP सत्यापन",
6054
+ "sms.otp.subheading": "अपने फ़ोन नंबर पर भेजा गया कोड दर्ज करें।",
6055
+ "sms.otp.buttons.submit.text": "जारी रखें",
6056
+ "totp.heading": "अपनी पहचान सत्यापित करें",
6057
+ "totp.subheading": "अपने ऑथेंटिकेटर ऐप से कोड दर्ज करें।",
6058
+ "totp.buttons.submit.text": "जारी रखें",
6059
+ "username.password.buttons.submit.text": "जारी रखें",
6060
+ "username.password.heading": "साइन इन",
6061
+ "username.password.subheading": "अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें।",
6062
+ "passkey.button.use": "Passkey के साथ साइन इन करें",
6063
+ "passkey.signin.heading": "Passkey के साथ साइन इन करें",
6064
+ "passkey.register.heading": "Passkey पंजीकृत करें",
6065
+ "passkey.register.description": "बिना पासवर्ड के अपने खाते में सुरक्षित रूप से साइन इन करने के लिए एक Passkey बनाएं।",
6066
+ "user.profile.heading": "प्रोफ़ाइल",
6067
+ "user.profile.update.generic.error": "प्रोफ़ाइल अपडेट करते समय त्रुटि हुई। कृपया पुनः प्रयास करें।",
6068
+ "user.change_password.heading": "{credential} बदलें",
6069
+ "user.change_password.new.label": "नया {credential}",
6070
+ "user.change_password.new.placeholder": "अपना नया {credentialLower} दर्ज करें",
6071
+ "user.change_password.confirm.label": "नए {credential} की पुष्टि करें",
6072
+ "user.change_password.confirm.placeholder": "अपना नया {credentialLower} फिर से दर्ज करें",
6073
+ "user.change_password.requirements.heading": "आपके {credentialLower} में यह होना चाहिए:",
6074
+ "user.change_password.submit": "{credential} अपडेट करें",
6075
+ "user.change_password.success": "आपका {credentialLower} अपडेट कर दिया गया है।",
6076
+ "user.change_password.mismatch.error": "{credential} मेल नहीं खाते।",
6077
+ "user.change_password.generic.error": "आपका {credentialLower} अपडेट करते समय त्रुटि हुई। कृपया पुनः प्रयास करें।",
6078
+ "user.change_password.unavailable.heading": "{credential} परिवर्तन उपलब्ध नहीं है",
6079
+ "user.change_password.unavailable.description": "कृपया अपने व्यवस्थापक से संपर्क करें।",
6080
+ "validation.password.pattern": "आवश्यक प्रारूप से मेल खाता है",
6081
+ "organization.switcher.switch.organization": "संगठन बदलें",
6082
+ "organization.switcher.loading.placeholder.organizations": "संगठन लोड हो रहे हैं...",
6083
+ "organization.switcher.members": "सदस्य",
6084
+ "organization.switcher.member": "सदस्य",
6085
+ "organization.switcher.create.organization": "संगठन बनाएं",
6086
+ "organization.switcher.manage.organizations": "संगठनों का प्रबंधन करें",
6087
+ "organization.switcher.buttons.manage.text": "प्रबंधित करें",
6088
+ "organization.switcher.organizations.heading": "संगठन",
6089
+ "organization.switcher.buttons.switch.text": "बदलें",
6090
+ "organization.switcher.no.access": "कोई पहुँच नहीं",
6091
+ "organization.switcher.status.label": "स्थिति:",
6092
+ "organization.switcher.showing.count": "{total} में से {showing} संगठन दिखा रहे हैं",
6093
+ "organization.switcher.buttons.refresh.text": "रिफ्रेश",
6094
+ "organization.switcher.buttons.load_more.text": "और संगठन लोड करें",
6095
+ "organization.switcher.loading.more": "लोड हो रहा है...",
6096
+ "organization.switcher.no.organizations": "कोई संगठन नहीं मिला",
6097
+ "organization.switcher.error.prefix": "त्रुटि:",
6098
+ "organization.profile.heading": "संगठन प्रोफ़ाइल",
6099
+ "organization.profile.loading": "संगठन लोड हो रहा है...",
6100
+ "organization.profile.error": "संगठन लोड करने में विफल",
6101
+ "organization.create.heading": "संगठन बनाएं",
6102
+ "organization.create.buttons.create_organization.text": "संगठन बनाएं",
6103
+ "organization.create.buttons.create_organization.loading.text": "बनाया जा रहा है...",
6104
+ "organization.create.buttons.cancel.text": "रद्द करें",
6105
+ "messages.loading.placeholder": "लोड हो रहा है...",
6106
+ "consent.required": "आवश्यक",
6107
+ "consent.essential_claims": "आवश्यक विशेषताएँ",
6108
+ "consent.optional_claims": "वैकल्पिक विशेषताएँ",
6109
+ "consent.authorize_scope": "अनुमतियाँ",
6110
+ "consent.essential_claims.info": "सेवा के सही ढंग से कार्य करने के लिए ये विशेषताएँ आवश्यक हैं।",
6111
+ "consent.optional_claims.info": "ये विशेषताएँ वैकल्पिक हैं और आपके विवेकानुसार प्रदान की जा सकती हैं।",
6112
+ "consent.authorize_scope.info": "ये अनुमतियाँ सेवा को अतिरिक्त सुविधाओं तक पहुँचने की अनुमति देती हैं।",
6113
+ "errors.heading": "त्रुटि",
6114
+ "errors.signin.initialization": "इनिशियलाइज़ेशन में त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6115
+ "errors.signin.flow.failure": "साइन-इन प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6116
+ "errors.signin.flow.completion.failure": "साइन-इन प्रक्रिया पूरी करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6117
+ "errors.signin.flow.passkeys.failure": "पासकीज़ के साथ साइन-इन करते समय त्रुटि।",
6118
+ "errors.signin.flow.passkeys.completion.failure": "पासकीज़ साइन-इन पूरी करते समय त्रुटि।",
6119
+ "errors.signup.initialization": "प्रारंभीकरण के दौरान एक त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6120
+ "errors.signup.flow.failure": "साइन-अप प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6121
+ "errors.signup.flow.initialization.failure": "साइन-अप प्रक्रिया प्रारंभ करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6122
+ "errors.signup.popup.failure": "पॉप-अप विंडो में साइन-अप जारी नहीं रखा जा सका। कृपया पुनः प्रयास करें।",
6123
+ "errors.signup.components.not.available": "साइन-अप फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6124
+ "errors.signin.components.not.available": "साइन-इन फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6125
+ "errors.signin.timeout": "स्टेप पूरा करने के लिए दिया गया समय खत्म हो गया है।"
6126
+ }
5717
6127
  };
5718
- /**
5719
- * Evaluates a single validation rule against the given input value.
5720
- *
5721
- * Returns `null` when the rule passes, or the rule's `message` (or the default
5722
- * fallback key if `message` is absent) when it fails.
5723
- *
5724
- * Behavior notes:
5725
- * - **regex**: an invalid regex pattern (one that cannot be compiled) is treated as
5726
- * **passing** on the client. This is lenient — the server is authoritative and
5727
- * will still enforce the rule if it can compile the pattern. Failing closed in the
5728
- * SDK risks denial-of-service for misconfigured flows.
5729
- * - **minLength / maxLength**: compared against `value.length`. A non-numeric `value`
5730
- * on the rule is treated as the rule passing.
5731
- * - Unknown rule types are treated as passing (forward compatibility with future types).
5732
- */
5733
- const evaluateValidationRule = (rule, value) => {
5734
- const fail$1 = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
5735
- switch (rule.type) {
5736
- case "regex": {
5737
- if (typeof rule.value !== "string" || rule.value === "") return null;
5738
- let re;
5739
- try {
5740
- re = new RegExp(rule.value);
5741
- } catch {
5742
- return null;
5743
- }
5744
- return re.test(value) ? null : fail$1();
5745
- }
5746
- case "minLength":
5747
- if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5748
- return value.length >= rule.value ? null : fail$1();
5749
- case "maxLength":
5750
- if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5751
- return value.length <= rule.value ? null : fail$1();
5752
- default: return null;
6128
+ var hi_IN_default = hi_IN;
6129
+
6130
+ //#endregion
6131
+ //#region src/i18n/translations/pt-BR.ts
6132
+ const pt_BR = {
6133
+ metadata: {
6134
+ localeCode: "pt-BR",
6135
+ countryCode: "BR",
6136
+ languageCode: "pt",
6137
+ displayName: "Português (Brazil)",
6138
+ direction: "ltr"
6139
+ },
6140
+ translations: {
6141
+ "elements.buttons.signin.text": "Entrar",
6142
+ "elements.buttons.signout.text": "Sair",
6143
+ "elements.buttons.signup.text": "Cadastre-se",
6144
+ "elements.buttons.submit.text": "Continuar",
6145
+ "elements.buttons.facebook.text": "Entrar com Facebook",
6146
+ "elements.buttons.google.text": "Entrar com Google",
6147
+ "elements.buttons.github.text": "Entrar com GitHub",
6148
+ "elements.buttons.microsoft.text": "Entrar com Microsoft",
6149
+ "elements.buttons.linkedin.text": "Entrar com LinkedIn",
6150
+ "elements.buttons.ethereum.text": "Entrar com Ethereum",
6151
+ "elements.buttons.smsotp.text": "Entrar com SMS",
6152
+ "elements.buttons.multi.option.text": "Entrar com {connection}",
6153
+ "elements.buttons.social.text": "Entrar com {connection}",
6154
+ "elements.display.divider.or_separator": "OU",
6155
+ "elements.display.copyable_text.copy": "Cópia",
6156
+ "elements.display.copyable_text.copied": "Copiado!",
6157
+ "elements.display.copyable_text.show": "Mostrar",
6158
+ "elements.display.copyable_text.hide": "Ocultar",
6159
+ "elements.fields.generic.placeholder": "Digite seu {field}",
6160
+ "elements.fields.username.label": "Nome de usuário",
6161
+ "elements.fields.username.placeholder": "Digite o nome de usuário",
6162
+ "elements.fields.password.label": "Senha",
6163
+ "elements.fields.password.placeholder": "Digite sua senha",
6164
+ "elements.fields.first_name.label": "Primeiro nome",
6165
+ "elements.fields.first_name.placeholder": "Digite seu primeiro nome",
6166
+ "elements.fields.last_name.label": "Sobrenome",
6167
+ "elements.fields.last_name.placeholder": "Digite seu sobrenome",
6168
+ "elements.fields.email.label": "Email",
6169
+ "elements.fields.email.placeholder": "Digite seu email",
6170
+ "elements.fields.organization.name.label": "Nome da Organização",
6171
+ "elements.fields.organization.handle.label": "Identificador da Organização",
6172
+ "elements.fields.organization.description.label": "Descrição da Organização",
6173
+ "elements.fields.organization.select.label": "Selecionar Organização",
6174
+ "elements.fields.organization.select.placeholder": "Selecione uma organização",
6175
+ "elements.fields.auth_flow_select.aria_label": "Selecionar um fluxo de login",
6176
+ "elements.fields.auth_flow_select.empty": "Nenhum fluxo de login encontrado.",
6177
+ "elements.fields.select.load_more": "Carregar mais",
6178
+ "elements.fields.select.loading": "Carregando…",
6179
+ "elements.fields.select.loading_more": "Carregando mais…",
6180
+ "elements.fields.user_select.aria_label": "Selecionar um usuário",
6181
+ "elements.fields.user_select.empty": "Nenhum usuário encontrado.",
6182
+ "elements.fields.user_type_select.aria_label": "Selecionar um tipo de usuário",
6183
+ "elements.fields.user_type_select.empty": "Nenhum tipo de usuário encontrado.",
6184
+ "validations.required.field.error": "Este campo é obrigatório",
6185
+ "validation.pattern.invalid": "Este valor não corresponde ao formato necessário.",
6186
+ "validation.minLength.invalid": "Este valor é muito curto.",
6187
+ "validation.maxLength.invalid": "Este valor é muito longo.",
6188
+ "signin.heading": "Entrar",
6189
+ "signin.subheading": "Digite suas credencias para continuar.",
6190
+ "signin.images.app_logo.alt": "Logotipo do aplicativo",
6191
+ "signup.heading": "Cadastra-se",
6192
+ "signup.subheading": "Crie uma nova conta para iniciar.",
6193
+ "email.otp.heading": "Verificação OTP",
6194
+ "email.otp.subheading": "Digite o código enviado para seu e-mail.",
6195
+ "email.otp.buttons.submit.text": "Continue",
6196
+ "identifier.first.heading": "Entrar",
6197
+ "identifier.first.subheading": "Digite seu usuário ou e-mail.",
6198
+ "identifier.first.buttons.submit.text": "Continue",
6199
+ "sms.otp.heading": "Verificação OTP",
6200
+ "sms.otp.subheading": "Digite o código enviado para seu telefone.",
6201
+ "sms.otp.buttons.submit.text": "Continue",
6202
+ "totp.heading": "Verifique sua identidade",
6203
+ "totp.subheading": "Digite o código do seu aplicativo autenticador.",
6204
+ "totp.buttons.submit.text": "Continue",
6205
+ "username.password.buttons.submit.text": "Continue",
6206
+ "username.password.heading": "Entrar",
6207
+ "username.password.subheading": "Digite seu usuário e senha para continuar.",
6208
+ "passkey.button.use": "Entrar com Passkey",
6209
+ "passkey.signin.heading": "Entrar com Passkey",
6210
+ "passkey.register.heading": "Registrar Passkey",
6211
+ "passkey.register.description": "Crie uma passkey para entrar em sua conta com segurança sem uma senha.",
6212
+ "user.profile.heading": "Perfil",
6213
+ "user.profile.update.generic.error": "Ocorreu um erro ao atualizar seu perfil. Tente novamente.",
6214
+ "user.change_password.heading": "Alterar {credential}",
6215
+ "user.change_password.new.label": "Novo {credential}",
6216
+ "user.change_password.new.placeholder": "Digite seu novo {credentialLower}",
6217
+ "user.change_password.confirm.label": "Confirmar novo {credential}",
6218
+ "user.change_password.confirm.placeholder": "Digite novamente seu novo {credentialLower}",
6219
+ "user.change_password.requirements.heading": "Seu {credentialLower} deve conter:",
6220
+ "user.change_password.submit": "Atualizar {credential}",
6221
+ "user.change_password.success": "Seu {credentialLower} foi atualizado.",
6222
+ "user.change_password.mismatch.error": "Os {credentialLower}s não coincidem.",
6223
+ "user.change_password.generic.error": "Ocorreu um erro ao atualizar seu {credentialLower}. Tente novamente.",
6224
+ "user.change_password.unavailable.heading": "Alteração de {credentialLower} indisponível",
6225
+ "user.change_password.unavailable.description": "Entre em contato com o administrador.",
6226
+ "validation.password.pattern": "Corresponde ao formato exigido",
6227
+ "organization.switcher.switch.organization": "Trocar Organização",
6228
+ "organization.switcher.loading.placeholder.organizations": "Carregando organizações...",
6229
+ "organization.switcher.members": "membros",
6230
+ "organization.switcher.member": "membro",
6231
+ "organization.switcher.create.organization": "Criar Organização",
6232
+ "organization.switcher.manage.organizations": "Gerenciar Organizações",
6233
+ "organization.switcher.buttons.manage.text": "Gerenciar",
6234
+ "organization.switcher.organizations.heading": "Organizações",
6235
+ "organization.switcher.buttons.switch.text": "Trocar",
6236
+ "organization.switcher.no.access": "Sem Acesso",
6237
+ "organization.switcher.status.label": "Situação:",
6238
+ "organization.switcher.showing.count": "Exibindo {showing} de {total} organizações",
6239
+ "organization.switcher.buttons.refresh.text": "Atualizar",
6240
+ "organization.switcher.buttons.load_more.text": "Carregar Mais Organizações",
6241
+ "organization.switcher.loading.more": "Carregando...",
6242
+ "organization.switcher.no.organizations": "Nenhuma organização encontrada",
6243
+ "organization.switcher.error.prefix": "Erro:",
6244
+ "organization.profile.heading": "Perfil da Organização",
6245
+ "organization.profile.loading": "Carregando organização...",
6246
+ "organization.profile.error": "Falha ao carregar organização",
6247
+ "organization.create.heading": "Criar Organização",
6248
+ "organization.create.buttons.create_organization.text": "Criar Organização",
6249
+ "organization.create.buttons.create_organization.loading.text": "Criando...",
6250
+ "organization.create.buttons.cancel.text": "Cancelar",
6251
+ "messages.loading.placeholder": "Carregando...",
6252
+ "consent.required": "Obrigatório",
6253
+ "consent.essential_claims": "Atributos essenciais",
6254
+ "consent.optional_claims": "Atributos opcionais",
6255
+ "consent.authorize_scope": "Permissões",
6256
+ "consent.essential_claims.info": "Esses atributos são necessários para o funcionamento adequado do serviço.",
6257
+ "consent.optional_claims.info": "Esses atributos são opcionais e podem ser fornecidos a seu critério.",
6258
+ "consent.authorize_scope.info": "Essas permissões permitem que o serviço acesse recursos adicionais.",
6259
+ "errors.heading": "Erro",
6260
+ "errors.signin.initialization": "Ocorreu um erro ao inicializar. Tente novamente mais tarde.",
6261
+ "errors.signin.flow.failure": "Ocorreu um erro durante o login. Tente novamente mais tarde.",
6262
+ "errors.signin.flow.completion.failure": "Ocorreu um erro ao completar o login. Tente novamente mais tarde.",
6263
+ "errors.signin.flow.passkeys.failure": "Ocorreu um erro ao entrar com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6264
+ "errors.signin.flow.passkeys.completion.failure": "Ocorreu um erro ao completar o login com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6265
+ "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6266
+ "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de cadastro. Tente novamente mais tarde.",
6267
+ "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de cadastro. Tente novamente mais tarde.",
6268
+ "errors.signup.popup.failure": "Não foi possível continuar o cadastro na janela pop-up. Tente novamente.",
6269
+ "errors.signup.components.not.available": "O formulário de cadastro não está disponível no momento. Tente novamente mais tarde.",
6270
+ "errors.signin.components.not.available": "O formulário de login não está disponível no momento. Tente novamente mais tarde.",
6271
+ "errors.signin.timeout": "O tempo permitido para concluir a etapa expirou."
5753
6272
  }
5754
6273
  };
5755
- var evaluateValidationRule_default = evaluateValidationRule;
5756
-
5757
- //#endregion
5758
- //#region src/utils/buildValidatorFromRules.ts
5759
- /**
5760
- * Composes an array of `ValidationRule`s into a single validator function suitable for
5761
- * `useForm`'s `FormField.validator` slot.
5762
- *
5763
- * The composed validator evaluates rules in declaration order and returns the **first**
5764
- * failing rule's message — matching the SDK's render-prop shape of a single string per
5765
- * field. When all rules pass it returns `null`.
5766
- *
5767
- * Returns `null` when no rules are supplied so callers can compose conditionally.
5768
- */
5769
- const buildValidatorFromRules = (rules) => {
5770
- if (!rules || rules.length === 0) return null;
5771
- return (value) => {
5772
- for (const rule of rules) {
5773
- const message = evaluateValidationRule_default(rule, value);
5774
- if (message !== null) return message;
5775
- }
5776
- return null;
5777
- };
5778
- };
5779
- var buildValidatorFromRules_default = buildValidatorFromRules;
5780
-
5781
- //#endregion
5782
- //#region src/utils/withVendorCSSClassPrefix.ts
5783
- /**
5784
- * Adds a vendor-specific prefix to a CSS class name.
5785
- *
5786
- * @param className - The original CSS class name to be prefixed
5787
- * @returns A new string with the vendor prefix added to the class name
5788
- *
5789
- * @example
5790
- * ```typescript
5791
- * // Usage with clsx
5792
- * clsx(withVendorCSSClassPrefix('sign-in-button'), className)
5793
- * // Result: "thunderid-sign-in-button"
5794
- * ```
5795
- */
5796
- const withVendorCSSClassPrefix = (className) => `${VendorConstants_default.VENDOR_PREFIX}-${className}`;
5797
- var withVendorCSSClassPrefix_default = withVendorCSSClassPrefix;
5798
-
5799
- //#endregion
5800
- //#region src/utils/getVendorPrefix.ts
5801
- /**
5802
- * Resolves the vendor/brand namespace to use for storage keys, cookie names, etc.
5803
- * Falls back to `VendorConstants.VENDOR_PREFIX` (the SDK-wide default) when no vendor
5804
- * is configured, so there is a single source of truth for the default brand name.
5805
- *
5806
- * @param vendor - The vendor value from the resolved SDK configuration, if any.
5807
- * @returns The resolved vendor prefix.
5808
- */
5809
- const getVendorPrefix = (vendor) => vendor ?? VendorConstants_default.VENDOR_PREFIX;
5810
- var getVendorPrefix_default = getVendorPrefix;
6274
+ var pt_BR_default = pt_BR;
5811
6275
 
5812
6276
  //#endregion
5813
- //#region src/HttpClient.ts
5814
- /**
5815
- * Abstract base class for HTTP clients. Owns all handler/callback state and
5816
- * the request lifecycle (pre-processing, transport, post-processing).
5817
- *
5818
- * Extend this class and implement `transport()` to plug in a custom HTTP transport.
5819
- *
5820
- * @example
5821
- * ```ts
5822
- * class MyHttpClient extends HttpClient {
5823
- * protected async transport<T>(config: HttpRequestConfig): Promise<HttpResponse<T>> {
5824
- * // custom fetch logic
5825
- * }
5826
- * }
5827
- * ```
5828
- */
5829
- var HttpClient = class HttpClient {
5830
- static DEFAULT_HANDLER_DISABLE_TIMEOUT = 1e3;
5831
- requestStartCallback = () => null;
5832
- requestSuccessCallback = () => null;
5833
- requestErrorCallback = () => null;
5834
- requestFinishCallback = () => null;
5835
- constructor(isHandlerEnabled = true, attachToken = () => Promise.resolve()) {
5836
- this.isHandlerEnabled = isHandlerEnabled;
5837
- this.attachToken = attachToken;
5838
- }
5839
- /**
5840
- * Public HTTP request entry point. Applies pre/post processing around `transport()`.
5841
- */
5842
- async request(config) {
5843
- const processedConfig = await this.requestHandler(config);
5844
- try {
5845
- const response = await this.transport(processedConfig);
5846
- return this.successHandler(response);
5847
- } catch (error$1) {
5848
- this.errorHandler(error$1);
5849
- throw error$1;
5850
- }
5851
- }
5852
- enableHandler() {
5853
- this.isHandlerEnabled = true;
5854
- }
5855
- disableHandler() {
5856
- this.isHandlerEnabled = false;
5857
- }
5858
- disableHandlerWithTimeout(timeout = HttpClient.DEFAULT_HANDLER_DISABLE_TIMEOUT) {
5859
- this.isHandlerEnabled = false;
5860
- setTimeout(() => {
5861
- this.isHandlerEnabled = true;
5862
- }, timeout);
5863
- }
5864
- setHttpRequestStartCallback(cb) {
5865
- this.requestStartCallback = cb;
5866
- }
5867
- setHttpRequestSuccessCallback(cb) {
5868
- this.requestSuccessCallback = cb;
5869
- }
5870
- setHttpRequestErrorCallback(cb) {
5871
- this.requestErrorCallback = cb;
5872
- }
5873
- setHttpRequestFinishCallback(cb) {
5874
- this.requestFinishCallback = cb;
5875
- }
5876
- all(values) {
5877
- return Promise.all(values);
5878
- }
5879
- spread(callback) {
5880
- return (array) => callback(...array);
5881
- }
5882
- async requestHandler(config) {
5883
- if (config.attachToken !== false) await this.attachToken(config);
5884
- if (config.shouldEncodeToFormData && config.data) {
5885
- const formData = new FormData();
5886
- Object.keys(config.data).forEach((key) => formData.append(key, config.data[key]));
5887
- config.data = formData;
5888
- }
5889
- config.startTimeInMs = Date.now();
5890
- if (this.isHandlerEnabled && typeof this.requestStartCallback === "function") this.requestStartCallback(config);
5891
- return config;
5892
- }
5893
- successHandler(response) {
5894
- if (this.isHandlerEnabled) {
5895
- if (typeof this.requestSuccessCallback === "function") this.requestSuccessCallback(response);
5896
- if (typeof this.requestFinishCallback === "function") this.requestFinishCallback();
5897
- }
5898
- return response;
5899
- }
5900
- errorHandler(error$1) {
5901
- if (this.isHandlerEnabled) {
5902
- if (typeof this.requestErrorCallback === "function") this.requestErrorCallback(error$1);
5903
- if (typeof this.requestFinishCallback === "function") this.requestFinishCallback();
5904
- }
6277
+ //#region src/i18n/translations/pt-PT.ts
6278
+ const pt_PT = {
6279
+ metadata: {
6280
+ localeCode: "pt-PT",
6281
+ countryCode: "PT",
6282
+ languageCode: "pt",
6283
+ displayName: "Português (Portugal)",
6284
+ direction: "ltr"
6285
+ },
6286
+ translations: {
6287
+ "elements.buttons.signin.text": "Iniciar Sessão",
6288
+ "elements.buttons.signout.text": "Terminar Sessão",
6289
+ "elements.buttons.signup.text": "Registar-se",
6290
+ "elements.buttons.submit.text": "Continuar",
6291
+ "elements.buttons.facebook.text": "Iniciar Sessão com Facebook",
6292
+ "elements.buttons.google.text": "Iniciar Sessão com Google",
6293
+ "elements.buttons.github.text": "Iniciar Sessão com GitHub",
6294
+ "elements.buttons.microsoft.text": "Iniciar Sessão com Microsoft",
6295
+ "elements.buttons.linkedin.text": "Iniciar Sessão com LinkedIn",
6296
+ "elements.buttons.ethereum.text": "Iniciar Sessão com Ethereum",
6297
+ "elements.buttons.smsotp.text": "Iniciar Sessão com SMS",
6298
+ "elements.buttons.multi.option.text": "Iniciar Sessão com {connection}",
6299
+ "elements.buttons.social.text": "Iniciar Sessão com {connection}",
6300
+ "elements.display.divider.or_separator": "OU",
6301
+ "elements.display.copyable_text.copy": "Cópia",
6302
+ "elements.display.copyable_text.copied": "Copiado!",
6303
+ "elements.display.copyable_text.show": "Mostrar",
6304
+ "elements.display.copyable_text.hide": "Ocultar",
6305
+ "elements.fields.generic.placeholder": "Introduza o seu {field}",
6306
+ "elements.fields.username.label": "Nome de utilizador",
6307
+ "elements.fields.username.placeholder": "Introduza o nome de utilizador",
6308
+ "elements.fields.password.label": "Palavra-passe",
6309
+ "elements.fields.password.placeholder": "Introduza a palavra-passe",
6310
+ "elements.fields.first_name.label": "Primeiro nome",
6311
+ "elements.fields.first_name.placeholder": "Introduza o primeiro nome",
6312
+ "elements.fields.last_name.label": "Apelido",
6313
+ "elements.fields.last_name.placeholder": "Introduza o apelido",
6314
+ "elements.fields.email.label": "Email",
6315
+ "elements.fields.email.placeholder": "Introduza o email",
6316
+ "elements.fields.organization.name.label": "Nome da Organização",
6317
+ "elements.fields.organization.handle.label": "Identificador da Organização",
6318
+ "elements.fields.organization.description.label": "Descrição da Organização",
6319
+ "elements.fields.organization.select.label": "Selecionar Organização",
6320
+ "elements.fields.organization.select.placeholder": "Selecione uma organização",
6321
+ "elements.fields.auth_flow_select.aria_label": "Selecionar um fluxo de início de sessão",
6322
+ "elements.fields.auth_flow_select.empty": "Nenhum fluxo de início de sessão encontrado.",
6323
+ "elements.fields.select.load_more": "Carregar mais",
6324
+ "elements.fields.select.loading": "A carregar…",
6325
+ "elements.fields.select.loading_more": "A carregar mais…",
6326
+ "elements.fields.user_select.aria_label": "Selecionar um utilizador",
6327
+ "elements.fields.user_select.empty": "Nenhum utilizador encontrado.",
6328
+ "elements.fields.user_type_select.aria_label": "Selecionar um tipo de utilizador",
6329
+ "elements.fields.user_type_select.empty": "Nenhum tipo de utilizador encontrado.",
6330
+ "validations.required.field.error": "Este campo é obrigatório",
6331
+ "validation.pattern.invalid": "Este valor não corresponde ao formato necessário.",
6332
+ "validation.minLength.invalid": "Este valor é demasiado curto.",
6333
+ "validation.maxLength.invalid": "Este valor é demasiado longo.",
6334
+ "signin.heading": "Iniciar Sessão",
6335
+ "signin.subheading": "Introduza as suas credenciais para continuar.",
6336
+ "signin.images.app_logo.alt": "Logótipo da aplicação",
6337
+ "signup.heading": "Registar-se",
6338
+ "signup.subheading": "Crie uma nova conta para começar.",
6339
+ "email.otp.heading": "Verificação OTP",
6340
+ "email.otp.subheading": "Introduza o código enviado para o seu e-mail.",
6341
+ "email.otp.buttons.submit.text": "Continuar",
6342
+ "identifier.first.heading": "Iniciar Sessão",
6343
+ "identifier.first.subheading": "Introduza o seu utilizador ou e-mail.",
6344
+ "identifier.first.buttons.submit.text": "Continuar",
6345
+ "sms.otp.heading": "Verificação OTP",
6346
+ "sms.otp.subheading": "Introduza o código enviado para o seu telemóvel.",
6347
+ "sms.otp.buttons.submit.text": "Continuar",
6348
+ "totp.heading": "Verifique a sua identidade",
6349
+ "totp.subheading": "Introduza o código da sua aplicação autenticadora.",
6350
+ "totp.buttons.submit.text": "Continuar",
6351
+ "username.password.buttons.submit.text": "Continuar",
6352
+ "username.password.heading": "Iniciar Sessão",
6353
+ "username.password.subheading": "Introduza o seu utilizador e palavra-passe para continuar.",
6354
+ "passkey.button.use": "Iniciar sessão com Passkey",
6355
+ "passkey.signin.heading": "Iniciar sessão com Passkey",
6356
+ "passkey.register.heading": "Registar Passkey",
6357
+ "passkey.register.description": "Crie uma passkey para iniciar sessão na sua conta com segurança sem palavra-passe.",
6358
+ "user.profile.heading": "Perfil",
6359
+ "user.profile.update.generic.error": "Ocorreu um erro ao actualizar o seu perfil. Tente novamente.",
6360
+ "user.change_password.heading": "Alterar {credential}",
6361
+ "user.change_password.new.label": "Novo {credential}",
6362
+ "user.change_password.new.placeholder": "Introduza o seu novo {credentialLower}",
6363
+ "user.change_password.confirm.label": "Confirmar novo {credential}",
6364
+ "user.change_password.confirm.placeholder": "Introduza novamente o seu novo {credentialLower}",
6365
+ "user.change_password.requirements.heading": "O seu {credentialLower} deve conter:",
6366
+ "user.change_password.submit": "Atualizar {credential}",
6367
+ "user.change_password.success": "O seu {credentialLower} foi atualizado.",
6368
+ "user.change_password.mismatch.error": "Os {credentialLower}s não coincidem.",
6369
+ "user.change_password.generic.error": "Ocorreu um erro ao actualizar o seu {credentialLower}. Tente novamente.",
6370
+ "user.change_password.unavailable.heading": "Alteração de {credentialLower} indisponível",
6371
+ "user.change_password.unavailable.description": "Contacte o seu administrador.",
6372
+ "validation.password.pattern": "Corresponde ao formato exigido",
6373
+ "organization.switcher.switch.organization": "Trocar Organização",
6374
+ "organization.switcher.loading.placeholder.organizations": "A carregar organizações...",
6375
+ "organization.switcher.members": "membros",
6376
+ "organization.switcher.member": "membro",
6377
+ "organization.switcher.create.organization": "Criar Organização",
6378
+ "organization.switcher.manage.organizations": "Gerir Organizações",
6379
+ "organization.switcher.buttons.manage.text": "Gerir",
6380
+ "organization.switcher.organizations.heading": "Organizações",
6381
+ "organization.switcher.buttons.switch.text": "Trocar",
6382
+ "organization.switcher.no.access": "Sem Acesso",
6383
+ "organization.switcher.status.label": "Estado:",
6384
+ "organization.switcher.showing.count": "A mostrar {showing} de {total} organizações",
6385
+ "organization.switcher.buttons.refresh.text": "Actualizar",
6386
+ "organization.switcher.buttons.load_more.text": "Carregar Mais Organizações",
6387
+ "organization.switcher.loading.more": "A carregar...",
6388
+ "organization.switcher.no.organizations": "Nenhuma organização encontrada",
6389
+ "organization.switcher.error.prefix": "Erro:",
6390
+ "organization.profile.heading": "Perfil da Organização",
6391
+ "organization.profile.loading": "A carregar organização...",
6392
+ "organization.profile.error": "Falha ao carregar organização",
6393
+ "organization.create.heading": "Criar Organização",
6394
+ "organization.create.buttons.create_organization.text": "Criar Organização",
6395
+ "organization.create.buttons.create_organization.loading.text": "A criar...",
6396
+ "organization.create.buttons.cancel.text": "Cancelar",
6397
+ "messages.loading.placeholder": "A carregar...",
6398
+ "consent.required": "Obrigatório",
6399
+ "consent.essential_claims": "Atributos essenciais",
6400
+ "consent.optional_claims": "Atributos opcionais",
6401
+ "consent.authorize_scope": "Permissões",
6402
+ "consent.essential_claims.info": "Estes atributos são necessários para o correto funcionamento do serviço.",
6403
+ "consent.optional_claims.info": "Estes atributos são opcionais e podem ser fornecidos ao seu critério.",
6404
+ "consent.authorize_scope.info": "Estas permissões permitem que o serviço aceda a funcionalidades adicionais.",
6405
+ "errors.heading": "Erro",
6406
+ "errors.signin.initialization": "Ocorreu um erro ao inicializar. Tente novamente mais tarde.",
6407
+ "errors.signin.flow.failure": "Ocorreu um erro durante o início de sessão. Tente novamente mais tarde.",
6408
+ "errors.signin.flow.completion.failure": "Ocorreu um erro ao completar o início de sessão. Tente novamente mais tarde.",
6409
+ "errors.signin.flow.passkeys.failure": "Ocorreu um erro ao iniciar sessão com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6410
+ "errors.signin.flow.passkeys.completion.failure": "Ocorreu um erro ao completar o início de sessão com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6411
+ "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6412
+ "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de registo. Tente novamente mais tarde.",
6413
+ "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de registo. Tente novamente mais tarde.",
6414
+ "errors.signup.popup.failure": "Não foi possível continuar o registo na janela pop-up. Tente novamente.",
6415
+ "errors.signup.components.not.available": "O formulário de registo não está disponível de momento. Tente novamente mais tarde.",
6416
+ "errors.signin.components.not.available": "O formulário de início de sessão não está disponível de momento. Tente novamente mais tarde.",
6417
+ "errors.signin.timeout": "O tempo permitido para completar a etapa expirou."
5905
6418
  }
5906
6419
  };
6420
+ var pt_PT_default = pt_PT;
5907
6421
 
5908
6422
  //#endregion
5909
- //#region src/i18n/translations/en-US.ts
5910
- const en_US = {
6423
+ //#region src/i18n/translations/ta-IN.ts
6424
+ const ta_IN = {
5911
6425
  metadata: {
5912
- localeCode: "en-US",
5913
- countryCode: "US",
5914
- languageCode: "en",
5915
- displayName: "English (United States)",
6426
+ localeCode: "ta-IN",
6427
+ countryCode: "IN",
6428
+ languageCode: "ta",
6429
+ displayName: "தமிழ் (இலங்கை)",
5916
6430
  direction: "ltr"
5917
6431
  },
5918
6432
  translations: {
5919
- "elements.buttons.signin.text": "Sign In",
5920
- "elements.buttons.signout.text": "Sign Out",
5921
- "elements.buttons.signup.text": "Sign Up",
5922
- "elements.buttons.submit.text": "Continue",
5923
- "elements.buttons.facebook.text": "Continue with Facebook",
5924
- "elements.buttons.google.text": "Continue with Google",
5925
- "elements.buttons.github.text": "Continue with GitHub",
5926
- "elements.buttons.microsoft.text": "Continue with Microsoft",
5927
- "elements.buttons.linkedin.text": "Continue with LinkedIn",
5928
- "elements.buttons.ethereum.text": "Continue with Sign In Ethereum",
5929
- "elements.buttons.smsotp.text": "Continue with SMS OTP",
5930
- "elements.buttons.multi.option.text": "Continue with {connection}",
5931
- "elements.buttons.social.text": "Continue with {connection}",
5932
- "elements.display.divider.or_separator": "OR",
5933
- "elements.display.copyable_text.copy": "Copy",
5934
- "elements.display.copyable_text.copied": "Copied!",
5935
- "elements.fields.generic.placeholder": "Enter your {field}",
5936
- "elements.fields.username.label": "Username",
5937
- "elements.fields.username.placeholder": "Enter your username",
5938
- "elements.fields.password.label": "Password",
5939
- "elements.fields.password.placeholder": "Enter your password",
5940
- "elements.fields.first_name.label": "First Name",
5941
- "elements.fields.first_name.placeholder": "Enter your first name",
5942
- "elements.fields.last_name.label": "Last Name",
5943
- "elements.fields.last_name.placeholder": "Enter your last name",
5944
- "elements.fields.email.label": "Email",
5945
- "elements.fields.email.placeholder": "Enter your email",
5946
- "elements.fields.organization.name.label": "Organization Name",
5947
- "elements.fields.organization.handle.label": "Organization Handle",
5948
- "elements.fields.organization.description.label": "Organization Description",
5949
- "elements.fields.organization.select.label": "Select Organization",
5950
- "elements.fields.organization.select.placeholder": "Choose an organization",
5951
- "validations.required.field.error": "This field is required",
5952
- "validation.pattern.invalid": "This value does not match the required format.",
5953
- "validation.minLength.invalid": "This value is too short.",
5954
- "validation.maxLength.invalid": "This value is too long.",
5955
- "signin.heading": "Sign In",
5956
- "signin.subheading": "Welcome back! Please sign in to continue.",
5957
- "signin.images.app_logo.alt": "Application logo",
5958
- "signup.heading": "Sign Up",
5959
- "signup.subheading": "Create a new account to get started.",
5960
- "email.otp.heading": "OTP Verification",
5961
- "email.otp.subheading": "Enter the code sent to your email address.",
5962
- "email.otp.buttons.submit.text": "Continue",
5963
- "identifier.first.heading": "Sign In",
5964
- "identifier.first.subheading": "Enter your username or email address.",
5965
- "identifier.first.buttons.submit.text": "Continue",
5966
- "sms.otp.heading": "OTP Verification",
5967
- "sms.otp.subheading": "Enter the code sent to your phone number.",
5968
- "sms.otp.buttons.submit.text": "Continue",
5969
- "totp.heading": "Verify Your Identity",
5970
- "totp.subheading": "Enter the code from your authenticator app.",
5971
- "totp.buttons.submit.text": "Continue",
5972
- "username.password.heading": "Sign In",
5973
- "username.password.subheading": "Enter your username and password to continue.",
5974
- "username.password.buttons.submit.text": "Continue",
5975
- "passkey.button.use": "Sign in with Passkey",
5976
- "passkey.signin.heading": "Sign in with Passkey",
5977
- "passkey.register.heading": "Register Passkey",
5978
- "passkey.register.description": "Create a passkey to securely sign in to your account without a password.",
5979
- "user.profile.heading": "Profile",
5980
- "user.profile.update.generic.error": "An error occurred while updating your profile. Please try again.",
5981
- "user.change_password.heading": "Change {credential}",
5982
- "user.change_password.new.label": "New {credential}",
5983
- "user.change_password.new.placeholder": "Enter your new {credentialLower}",
5984
- "user.change_password.confirm.label": "Confirm New {credential}",
5985
- "user.change_password.confirm.placeholder": "Re-enter your new {credentialLower}",
5986
- "user.change_password.requirements.heading": "Your {credentialLower} must have:",
5987
- "user.change_password.submit": "Update {credential}",
5988
- "user.change_password.success": "Your {credentialLower} has been updated.",
5989
- "user.change_password.mismatch.error": "{credential}s do not match.",
5990
- "user.change_password.generic.error": "An error occurred while updating your {credentialLower}. Please try again.",
5991
- "user.change_password.unavailable.heading": "{credential} changes unavailable",
5992
- "user.change_password.unavailable.description": "Please contact your administrator.",
5993
- "validation.password.pattern": "Matches the required format",
5994
- "organization.switcher.switch.organization": "Switch Organization",
5995
- "organization.switcher.loading.placeholder.organizations": "Loading organizations...",
5996
- "organization.switcher.members": "members",
5997
- "organization.switcher.member": "member",
5998
- "organization.switcher.create.organization": "Create Organization",
5999
- "organization.switcher.manage.organizations": "Manage Organizations",
6000
- "organization.switcher.buttons.manage.text": "Manage",
6001
- "organization.switcher.organizations.heading": "Organizations",
6002
- "organization.switcher.buttons.switch.text": "Switch",
6003
- "organization.switcher.no.access": "No Access",
6004
- "organization.switcher.status.label": "Status:",
6005
- "organization.switcher.showing.count": "Showing {showing} of {total} organizations",
6006
- "organization.switcher.buttons.refresh.text": "Refresh",
6007
- "organization.switcher.buttons.load_more.text": "Load More Organizations",
6008
- "organization.switcher.loading.more": "Loading...",
6009
- "organization.switcher.no.organizations": "No organizations found",
6010
- "organization.switcher.error.prefix": "Error:",
6011
- "organization.profile.heading": "Organization Profile",
6012
- "organization.profile.loading": "Loading organization...",
6013
- "organization.profile.error": "Failed to load organization",
6014
- "organization.create.heading": "Create Organization",
6015
- "organization.create.buttons.create_organization.text": "Create Organization",
6016
- "organization.create.buttons.create_organization.loading.text": "Creating...",
6017
- "organization.create.buttons.cancel.text": "Cancel",
6018
- "messages.loading.placeholder": "Loading...",
6019
- "consent.required": "Required",
6020
- "consent.essential_claims": "Essential Attributes",
6021
- "consent.optional_claims": "Optional Attributes",
6022
- "consent.authorize_scope": "Permissions",
6023
- "consent.essential_claims.info": "These attributes are required for the service to function properly.",
6024
- "consent.optional_claims.info": "These attributes are optional and can be provided at your discretion.",
6025
- "consent.authorize_scope.info": "These permissions allow the service to access additional features.",
6026
- "errors.heading": "Error",
6027
- "errors.signin.components.not.available": "Sign-in form is not available at the moment. Please try again later.",
6028
- "errors.signin.initialization": "An error occurred while initializing. Please try again later.",
6029
- "errors.signin.flow.failure": "An error occurred during the sign-in flow. Please try again later.",
6030
- "errors.signin.flow.completion.failure": "An error occurred while completing the sign-in flow. Please try again later.",
6031
- "errors.signin.flow.passkeys.failure": "An error occurred while signing in with passkeys. Please try again later.",
6032
- "errors.signin.flow.passkeys.completion.failure": "An error occurred while completing the passkeys sign-in flow. Please try again later.",
6033
- "errors.signin.timeout": "Time allowed to complete the step has expired.",
6034
- "errors.signup.initialization": "An error occurred while initializing. Please try again later.",
6035
- "errors.signup.flow.failure": "An error occurred during the sign-up flow. Please try again later.",
6036
- "errors.signup.flow.initialization.failure": "An error occurred while initializing the sign-up flow. Please try again later.",
6037
- "errors.signup.popup.failure": "Could not continue the sign-up in the pop-up window. Please try again.",
6038
- "errors.signup.components.not.available": "Sign-up form is not available at the moment. Please try again later."
6433
+ "elements.buttons.signin.text": "உள்நுழை",
6434
+ "elements.buttons.signout.text": "வெளியேறு",
6435
+ "elements.buttons.signup.text": "பதிவு செய்",
6436
+ "elements.buttons.submit.text": "தொடரவும்",
6437
+ "elements.buttons.facebook.text": "Facebook மூலம் தொடரவும்",
6438
+ "elements.buttons.google.text": "Google மூலம் தொடரவும்",
6439
+ "elements.buttons.github.text": "GitHub மூலம் தொடரவும்",
6440
+ "elements.buttons.microsoft.text": "Microsoft மூலம் தொடரவும்",
6441
+ "elements.buttons.linkedin.text": "LinkedIn மூலம் தொடரவும்",
6442
+ "elements.buttons.ethereum.text": "Ethereum மூலம் உள்நுழை",
6443
+ "elements.buttons.smsotp.text": "SMS மூலம் தொடரவும்",
6444
+ "elements.buttons.multi.option.text": "{connection} மூலம் தொடரவும்",
6445
+ "elements.buttons.social.text": "{connection} மூலம் தொடரவும்",
6446
+ "elements.display.divider.or_separator": "அல்லது",
6447
+ "elements.display.copyable_text.copy": "நகலெடுக்கவும்",
6448
+ "elements.display.copyable_text.copied": "நகலெடுக்கப்பட்டது!",
6449
+ "elements.display.copyable_text.show": "காட்டு",
6450
+ "elements.display.copyable_text.hide": "மறை",
6451
+ "elements.fields.generic.placeholder": "{field} உள்ளிடவும்",
6452
+ "elements.fields.username.label": "பயனர்பெயர்",
6453
+ "elements.fields.username.placeholder": "பயனர்பெயரை உள்ளிடவும்",
6454
+ "elements.fields.password.label": "கடவுச்சொல்",
6455
+ "elements.fields.password.placeholder": "கடவுச்சொலை உள்ளிடவும்",
6456
+ "elements.fields.first_name.label": "முதல் பெயர்",
6457
+ "elements.fields.first_name.placeholder": "உங்கள் முதல் பெயரை உள்ளிடவும்",
6458
+ "elements.fields.last_name.label": "கடைசி பெயர்",
6459
+ "elements.fields.last_name.placeholder": "உங்கள் கடைசி பெயரை உள்ளிடவும்",
6460
+ "elements.fields.email.label": "மின்னஞ்சல்",
6461
+ "elements.fields.email.placeholder": "உங்கள் மின்னஞ்சலை உள்ளிடவும்",
6462
+ "elements.fields.organization.name.label": "அமைப்பின் பெயர்",
6463
+ "elements.fields.organization.handle.label": "அமைப்பு கையாளுதல்",
6464
+ "elements.fields.organization.description.label": "அமைப்பு விளக்கம்",
6465
+ "elements.fields.organization.select.label": "அமைப்பை தேர்ந்தெடு",
6466
+ "elements.fields.organization.select.placeholder": "அமைப்பை தெரிந்தெடுக்கவும்",
6467
+ "elements.fields.auth_flow_select.aria_label": "உள்நுழைவு ஓட்டத்தைத் தேர்ந்தெடுக்கவும்",
6468
+ "elements.fields.auth_flow_select.empty": "உள்நுழைவு ஓட்டங்கள் எதுவும் கிடைக்கவில்லை.",
6469
+ "elements.fields.select.load_more": "மேலும் ஏற்றவும்",
6470
+ "elements.fields.select.loading": "ஏற்றுகிறது…",
6471
+ "elements.fields.select.loading_more": "மேலும் ஏற்றுகிறது…",
6472
+ "elements.fields.user_select.aria_label": "ஒரு பயனரைத் தேர்ந்தெடுக்கவும்",
6473
+ "elements.fields.user_select.empty": "பயனர்கள் எவரும் கிடைக்கவில்லை.",
6474
+ "elements.fields.user_type_select.aria_label": "பயனர் வகையைத் தேர்ந்தெடுக்கவும்",
6475
+ "elements.fields.user_type_select.empty": "பயனர் வகைகள் எவையும் கிடைக்கவில்லை.",
6476
+ "validations.required.field.error": "இந்த புலம் தேவை",
6477
+ "validation.pattern.invalid": "இந்த மதிப்பு தேவையான வடிவத்துடன் பொருந்தவில்லை.",
6478
+ "validation.minLength.invalid": "இந்த மதிப்பு மிகவும் குறுகியது.",
6479
+ "validation.maxLength.invalid": "இந்த மதிப்பு மிகவும் நீளமானது.",
6480
+ "signin.heading": "உள்நுழை",
6481
+ "signin.subheading": "தொடர உங்கள் சான்றுகளை உள்ளிடவும்.",
6482
+ "signin.images.app_logo.alt": "பயன்பாட்டு லோகோ",
6483
+ "signup.heading": "பதிவு செய்",
6484
+ "signup.subheading": "தொடங்க புதிய கணக்கை உருவாக்கவும்.",
6485
+ "email.otp.heading": "OTP சரிபார்ப்பு",
6486
+ "email.otp.subheading": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
6487
+ "email.otp.buttons.submit.text": "தொடரவும்",
6488
+ "identifier.first.heading": "உள்நுழை",
6489
+ "identifier.first.subheading": "பயனர்பெயர் அல்லது மின்னஞ்சல் முகவரியை உள்ளிடவும்.",
6490
+ "identifier.first.buttons.submit.text": "தொடரவும்",
6491
+ "sms.otp.heading": "OTP சரிபார்ப்பு",
6492
+ "sms.otp.subheading": "உங்கள் தொலைபேசிக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
6493
+ "sms.otp.buttons.submit.text": "தொடரவும்",
6494
+ "totp.heading": "உங்கள் அடையாளத்தை சரிபார்க்கவும்",
6495
+ "totp.subheading": "உங்கள் அங்கீகரிப்பு செயலியில் உள்ள குறியீட்டை உள்ளிடவும்.",
6496
+ "totp.buttons.submit.text": "தொடரவும்",
6497
+ "username.password.buttons.submit.text": "தொடரவும்",
6498
+ "username.password.heading": "உள்நுழை",
6499
+ "username.password.subheading": "தொடர உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.",
6500
+ "passkey.button.use": "Passkey மூலம் உள்நுழையவும்",
6501
+ "passkey.signin.heading": "Passkey மூலம் உள்நுழையவும்",
6502
+ "passkey.register.heading": "Passkey-ஐ பதிவு செய்யவும்",
6503
+ "passkey.register.description": "கடவுச்சொல் இல்லாமல் பாதுகாப்பாக உள்நுழைய ஒரு passkey-ஐ உருவாக்கவும்.",
6504
+ "user.profile.heading": "சுயவிவரம்",
6505
+ "user.profile.update.generic.error": "உங்கள் சுயவிவரத்தை புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
6506
+ "user.change_password.heading": "{credential} மாற்றவும்",
6507
+ "user.change_password.new.label": "புதிய {credential}",
6508
+ "user.change_password.new.placeholder": "உங்கள் புதிய {credentialLower}-ஐ உள்ளிடவும்",
6509
+ "user.change_password.confirm.label": "புதிய {credential}-ஐ உறுதிப்படுத்தவும்",
6510
+ "user.change_password.confirm.placeholder": "உங்கள் புதிய {credentialLower}-ஐ மீண்டும் உள்ளிடவும்",
6511
+ "user.change_password.requirements.heading": "உங்கள் {credentialLower} பின்வருவனவற்றைக் கொண்டிருக்க வேண்டும்:",
6512
+ "user.change_password.submit": "{credential}-ஐ புதுப்பிக்கவும்",
6513
+ "user.change_password.success": "உங்கள் {credentialLower} புதுப்பிக்கப்பட்டது.",
6514
+ "user.change_password.mismatch.error": "{credentialLower} பொருந்தவில்லை.",
6515
+ "user.change_password.generic.error": "உங்கள் {credentialLower}-ஐ புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
6516
+ "user.change_password.unavailable.heading": "{credential} மாற்றங்கள் கிடைக்கவில்லை",
6517
+ "user.change_password.unavailable.description": "உங்கள் நிர்வாகியை தொடர்பு கொள்ளவும்.",
6518
+ "validation.password.pattern": "தேவையான வடிவமைப்பிற்கு பொருந்துகிறது",
6519
+ "organization.switcher.switch.organization": "அமைப்பை மாற்று",
6520
+ "organization.switcher.loading.placeholder.organizations": "அமைப்புகள் ஏற்றப்படுகின்றன...",
6521
+ "organization.switcher.members": "உறுப்பினர்கள்",
6522
+ "organization.switcher.member": "உறுப்பினர்",
6523
+ "organization.switcher.create.organization": "அமைப்பை உருவாக்கு",
6524
+ "organization.switcher.manage.organizations": "அமைப்புகளை நிர்வகிக்கவும்",
6525
+ "organization.switcher.buttons.manage.text": "நிர்வகி",
6526
+ "organization.switcher.organizations.heading": "அமைப்புகள்",
6527
+ "organization.switcher.buttons.switch.text": "மாற்று",
6528
+ "organization.switcher.no.access": "அணுகல் இல்லை",
6529
+ "organization.switcher.status.label": "நிலை:",
6530
+ "organization.switcher.showing.count": "மொத்த {total} அமைப்புகளில் {showing} காட்டப்படுகிறது",
6531
+ "organization.switcher.buttons.refresh.text": "புதுப்பி",
6532
+ "organization.switcher.buttons.load_more.text": "மேலும் அமைப்புகளை ஏற்று",
6533
+ "organization.switcher.loading.more": "ஏற்றப்படுகிறது...",
6534
+ "organization.switcher.no.organizations": "எந்த அமைப்பும் கிடைக்கவில்லை",
6535
+ "organization.switcher.error.prefix": "பிழை:",
6536
+ "organization.profile.heading": "அமைப்பு சுயவிவரம்",
6537
+ "organization.profile.loading": "அமைப்பை ஏற்றுகிறது...",
6538
+ "organization.profile.error": "அமைப்பை ஏற்ற முடியவில்லை",
6539
+ "organization.create.heading": "அமைப்பை உருவாக்கு",
6540
+ "organization.create.buttons.create_organization.text": "அமைப்பை உருவாக்கு",
6541
+ "organization.create.buttons.create_organization.loading.text": "உருவாக்கப்படுகிறது...",
6542
+ "organization.create.buttons.cancel.text": "ரத்து செய்",
6543
+ "messages.loading.placeholder": "ஏற்றப்படுகிறது...",
6544
+ "consent.required": "தேவையானது",
6545
+ "consent.essential_claims": "அத்தியாவசிய பண்புகள்",
6546
+ "consent.optional_claims": "விருப்பத் பண்புகள்",
6547
+ "consent.authorize_scope": "அனுமதிகள்",
6548
+ "consent.essential_claims.info": "சேவை சரியாக செயல்பட இந்த பண்புகள் தேவை.",
6549
+ "consent.optional_claims.info": "இந்த பண்புகள் விருப்பத்தேர்வு மற்றும் உங்கள் விருப்பப்படி வழங்கப்படலாம்.",
6550
+ "consent.authorize_scope.info": "இந்த அனுமதிகள் கூடுதல் அம்சங்களை அணுக சேவைக்கு உதவுகின்றன.",
6551
+ "errors.heading": "பிழை",
6552
+ "errors.signin.initialization": "தொடக்கத்தில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6553
+ "errors.signin.flow.failure": "உள்நுழைவு செயல்பாட்டின் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6554
+ "errors.signin.flow.completion.failure": "உள்நுழைவு செயல்பாட்டை முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6555
+ "errors.signin.flow.passkeys.failure": "பாஸ்கீக்கள் மூலம் உள்நுழையும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6556
+ "errors.signin.flow.passkeys.completion.failure": "பாஸ்கீ உள்நுழைவு முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6557
+ "errors.signup.initialization": "தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6558
+ "errors.signup.flow.failure": "பதிவு செய்யும் செயல்பாட்டில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6559
+ "errors.signup.flow.initialization.failure": "பதிவு செய்யும் செயல்பாட்டை தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6560
+ "errors.signup.popup.failure": "பாப்-அப் சாளரத்தில் பதிவைத் தொடர முடியவில்லை. மீண்டும் முயற்சிக்கவும்.",
6561
+ "errors.signup.components.not.available": "பதிவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6562
+ "errors.signin.components.not.available": "உள்நுழைவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6563
+ "errors.signin.timeout": "படிநிலையை முடிக்க அனுமதிக்கப்பட்ட நேரம் காலாவதியானது."
6039
6564
  }
6040
6565
  };
6041
- var en_US_default = en_US;
6566
+ var ta_IN_default = ta_IN;
6042
6567
 
6043
6568
  //#endregion
6044
- //#region src/i18n/translations/fr-FR.ts
6045
- const fr_FR = {
6569
+ //#region src/i18n/translations/si-LK.ts
6570
+ const si_LK = {
6046
6571
  metadata: {
6047
- localeCode: "fr-FR",
6048
- countryCode: "FR",
6049
- languageCode: "fr",
6050
- displayName: "Français (France)",
6572
+ localeCode: "si_LK",
6573
+ countryCode: "LK",
6574
+ languageCode: "si",
6575
+ displayName: "සිංහල (ශ්‍රී ලංකාව)",
6051
6576
  direction: "ltr"
6052
6577
  },
6053
6578
  translations: {
6054
- "elements.buttons.signin.text": "Se connecter",
6055
- "elements.buttons.signout.text": "Se déconnecter",
6056
- "elements.buttons.signup.text": "S'inscrire",
6057
- "elements.buttons.submit.text": "Continuer",
6058
- "elements.buttons.facebook.text": "Continuer avec Facebook",
6059
- "elements.buttons.google.text": "Continuer avec Google",
6060
- "elements.buttons.github.text": "Continuer avec GitHub",
6061
- "elements.buttons.microsoft.text": "Continuer avec Microsoft",
6062
- "elements.buttons.linkedin.text": "Continuer with LinkedIn",
6063
- "elements.buttons.ethereum.text": "Continuer avec Sign In Ethereum",
6064
- "elements.buttons.smsotp.text": "Continuer avec SMS",
6065
- "elements.buttons.multi.option.text": "Continuer avec {connection}",
6066
- "elements.buttons.social.text": "Continuer avec {connection}",
6067
- "elements.display.divider.or_separator": "OU",
6068
- "elements.display.copyable_text.copy": "Copie",
6069
- "elements.display.copyable_text.copied": "Copié!",
6070
- "elements.fields.generic.placeholder": "Entrez votre {field}",
6071
- "elements.fields.username.label": "Nom d'utilisateur",
6072
- "elements.fields.username.placeholder": "Entrez votre nom d'utilisateur",
6073
- "elements.fields.password.label": "Mot de passe",
6074
- "elements.fields.password.placeholder": "Entrez votre mot de passe",
6075
- "elements.fields.first_name.label": "Prénom",
6076
- "elements.fields.first_name.placeholder": "Entrez votre prénom",
6077
- "elements.fields.last_name.label": "Nom de famille",
6078
- "elements.fields.last_name.placeholder": "Entrez votre nom de famille",
6079
- "elements.fields.email.label": "Email",
6080
- "elements.fields.email.placeholder": "Entrez votre email",
6081
- "elements.fields.organization.name.label": "Nom de l'organisation",
6082
- "elements.fields.organization.handle.label": "Identifiant de l'organisation",
6083
- "elements.fields.organization.description.label": "Description de l'organisation",
6084
- "elements.fields.organization.select.label": "Sélectionner l'organisation",
6085
- "elements.fields.organization.select.placeholder": "Choisissez une organisation",
6086
- "validations.required.field.error": "Ce champ est obligatoire",
6087
- "validation.pattern.invalid": "Cette valeur ne correspond pas au format requis.",
6088
- "validation.minLength.invalid": "Cette valeur est trop courte.",
6089
- "validation.maxLength.invalid": "Cette valeur est trop longue.",
6090
- "signin.heading": "Se connecter",
6091
- "signin.subheading": "Entrez vos identifiants pour continuer.",
6092
- "signin.images.app_logo.alt": "Logo de l'application",
6093
- "signup.heading": "S'inscrire",
6094
- "signup.subheading": "Créez un nouveau compte pour commencer.",
6095
- "email.otp.heading": "Vérification OTP",
6096
- "email.otp.subheading": "Entrez le code envoyé à votre adresse e-mail.",
6097
- "email.otp.buttons.submit.text": "Continuer",
6098
- "identifier.first.heading": "Se connecter",
6099
- "identifier.first.subheading": "Entrez votre nom d'utilisateur ou votre adresse e-mail.",
6100
- "identifier.first.buttons.submit.text": "Continuer",
6101
- "sms.otp.heading": "Vérification OTP",
6102
- "sms.otp.subheading": "Entrez le code envoyé à votre numéro de téléphone.",
6103
- "sms.otp.buttons.submit.text": "Continuer",
6104
- "totp.heading": "Vérifiez votre identité",
6105
- "totp.subheading": "Entrez le code de votre application d'authentification.",
6106
- "totp.buttons.submit.text": "Continuer",
6107
- "username.password.buttons.submit.text": "Continuer",
6108
- "username.password.heading": "Se connecter",
6109
- "username.password.subheading": "Entrez votre nom d'utilisateur et votre mot de passe pour continuer.",
6110
- "passkey.button.use": "Se connecter avec une clé d'accès",
6111
- "passkey.signin.heading": "Se connecter avec une clé d'accès",
6112
- "passkey.register.heading": "Enregistrer une clé d'accès",
6113
- "passkey.register.description": "Créez une clé d'accès pour vous connecter en toute sécurité à votre compte sans mot de passe.",
6114
- "user.profile.heading": "Profil",
6115
- "user.profile.update.generic.error": "Une erreur est survenue lors de la mise à jour de votre profil. Veuillez réessayer.",
6116
- "user.change_password.heading": "Modifier {credential}",
6117
- "user.change_password.new.label": "Nouveau {credential}",
6118
- "user.change_password.new.placeholder": "Entrez votre nouveau {credentialLower}",
6119
- "user.change_password.confirm.label": "Confirmer le nouveau {credential}",
6120
- "user.change_password.confirm.placeholder": "Saisissez à nouveau votre nouveau {credentialLower}",
6121
- "user.change_password.requirements.heading": "Votre {credentialLower} doit contenir :",
6122
- "user.change_password.submit": "Mettre à jour {credential}",
6123
- "user.change_password.success": "Votre {credentialLower} a été mis à jour.",
6124
- "user.change_password.mismatch.error": "Les {credentialLower}s ne correspondent pas.",
6125
- "user.change_password.generic.error": "Une erreur est survenue lors de la mise à jour de votre {credentialLower}. Veuillez réessayer.",
6126
- "user.change_password.unavailable.heading": "Modification du {credentialLower} indisponible",
6127
- "user.change_password.unavailable.description": "Veuillez contacter votre administrateur.",
6128
- "validation.password.pattern": "Correspond au format requis",
6129
- "organization.switcher.switch.organization": "Changer d'organisation",
6130
- "organization.switcher.loading.placeholder.organizations": "Chargement des organisations...",
6131
- "organization.switcher.members": "membres",
6132
- "organization.switcher.member": "membre",
6133
- "organization.switcher.create.organization": "Créer une organisation",
6134
- "organization.switcher.manage.organizations": "Gérer les organisations",
6135
- "organization.switcher.buttons.manage.text": "Gérer",
6136
- "organization.switcher.organizations.heading": "Organisations",
6137
- "organization.switcher.buttons.switch.text": "Changer",
6138
- "organization.switcher.no.access": "Aucun accès",
6139
- "organization.switcher.status.label": "Statut:",
6140
- "organization.switcher.showing.count": "Affichage de {showing} sur {total} organisations",
6141
- "organization.switcher.buttons.refresh.text": "Rafraîchir",
6142
- "organization.switcher.buttons.load_more.text": "Charger plus d'organisations",
6143
- "organization.switcher.loading.more": "Chargement...",
6144
- "organization.switcher.no.organizations": "Aucune organisation trouvée",
6145
- "organization.switcher.error.prefix": "Erreur:",
6146
- "organization.profile.heading": "Profil de l'organisation",
6147
- "organization.profile.loading": "Chargement de l'organisation...",
6148
- "organization.profile.error": "Échec du chargement de l'organisation",
6149
- "organization.create.heading": "Créer une organisation",
6150
- "organization.create.buttons.create_organization.text": "Créer une organisation",
6151
- "organization.create.buttons.create_organization.loading.text": "Création en cours...",
6152
- "organization.create.buttons.cancel.text": "Annuler",
6153
- "messages.loading.placeholder": "Chargement...",
6154
- "consent.required": "Obligatoire",
6155
- "consent.essential_claims": "Attributs essentiels",
6156
- "consent.optional_claims": "Attributs facultatifs",
6157
- "consent.authorize_scope": "Autorisations",
6158
- "consent.essential_claims.info": "Ces attributs sont nécessaires au bon fonctionnement du service.",
6159
- "consent.optional_claims.info": "Ces attributs sont facultatifs et peuvent être fournis à votre discrétion.",
6160
- "consent.authorize_scope.info": "Ces autorisations permettent au service d'accéder à des fonctionnalités supplémentaires.",
6161
- "errors.heading": "Erreur",
6162
- "errors.signin.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
6163
- "errors.signin.flow.failure": "Une erreur est survenue lors du flux de connexion. Veuillez réessayer plus tard.",
6164
- "errors.signin.flow.completion.failure": "Une erreur est survenue lors de la finalisation du flux de connexion. Veuillez réessayer plus tard.",
6165
- "errors.signin.flow.passkeys.failure": "Une erreur est survenue lors de la connexion avec les clefs d'accès. Veuillez réessayer plus tard.",
6166
- "errors.signin.flow.passkeys.completion.failure": "Une erreur est survenue lors de la finalisation du flux de connexion avec les clefs d'accès. Veuillez réessayer plus tard.",
6167
- "errors.signup.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
6168
- "errors.signup.flow.failure": "Une erreur est survenue lors du flux d'inscription. Veuillez réessayer plus tard.",
6169
- "errors.signup.flow.initialization.failure": "Une erreur est survenue lors de l'initialisation du flux d'inscription. Veuillez réessayer plus tard.",
6170
- "errors.signup.popup.failure": "Impossible de poursuivre l'inscription dans la fenêtre contextuelle. Veuillez réessayer.",
6171
- "errors.signup.components.not.available": "Le formulaire d'inscription n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
6172
- "errors.signin.components.not.available": "Le formulaire de connexion n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
6173
- "errors.signin.timeout": "Le temps imparti pour effectuer cette e'tape est expire'."
6579
+ "elements.buttons.signin.text": "ලොග් වෙන්න",
6580
+ "elements.buttons.signout.text": "ඉවත් වෙන්න",
6581
+ "elements.buttons.signup.text": "ලියාපදිංචි වෙන්න",
6582
+ "elements.buttons.submit.text": "ඉදිරියට යන්න",
6583
+ "elements.buttons.facebook.text": "Facebook සමග ඉදිරියට යන්න",
6584
+ "elements.buttons.google.text": "Google සමග ඉදිරියට යන්න",
6585
+ "elements.buttons.github.text": "GitHub සමග ඉදිරියට යන්න",
6586
+ "elements.buttons.microsoft.text": "Microsoft සමග ඉදිරියට යන්න",
6587
+ "elements.buttons.linkedin.text": "LinkedIn සමග ඉදිරියට යන්න",
6588
+ "elements.buttons.ethereum.text": "Ethereum සමග ඉදිරියට යන්න",
6589
+ "elements.buttons.smsotp.text": "SMS සමග ඉදිරියට යන්න",
6590
+ "elements.buttons.multi.option.text": "{connection} සමග ඉදිරියට යන්න",
6591
+ "elements.buttons.social.text": "{connection} සමග ඉදිරියට යන්න",
6592
+ "elements.display.divider.or_separator": "හෝ",
6593
+ "elements.display.copyable_text.copy": "පිටපත් කරන්න",
6594
+ "elements.display.copyable_text.copied": "පිටපත් කළා!",
6595
+ "elements.display.copyable_text.show": "පෙන්වන්න",
6596
+ "elements.display.copyable_text.hide": "සඟවන්න",
6597
+ "elements.fields.generic.placeholder": "ඔබේ {field} ඇතුලත් කරන්න",
6598
+ "elements.fields.username.label": "පරිශීලක නාමය",
6599
+ "elements.fields.username.placeholder": "පරිශීලක නාමය ඇතුලත් කරන්න",
6600
+ "elements.fields.password.label": "මුරපදය",
6601
+ "elements.fields.password.placeholder": "මුරපදය ඇතුලත් කරන්න",
6602
+ "elements.fields.first_name.label": "මුල් නම",
6603
+ "elements.fields.first_name.placeholder": "ඔබේ මුල් නම ඇතුලත් කරන්න",
6604
+ "elements.fields.last_name.label": "අවසන් නම",
6605
+ "elements.fields.last_name.placeholder": "ඔබේ අවසන් නම ඇතුලත් කරන්න",
6606
+ "elements.fields.email.label": "ඊමේල්",
6607
+ "elements.fields.email.placeholder": "ඔබේ ඊමේල් ලිපිනය ඇතුලත් කරන්න",
6608
+ "elements.fields.organization.name.label": "සංවිධානයේ නම",
6609
+ "elements.fields.organization.handle.label": "සංවිධාන හැඩුනුම්පත",
6610
+ "elements.fields.organization.description.label": "සංවිධානයේ විස්තරය",
6611
+ "elements.fields.organization.select.label": "සංවිධානය තෝරන්න",
6612
+ "elements.fields.organization.select.placeholder": "සංවිධානයක් සැළුම් කරන්න",
6613
+ "elements.fields.auth_flow_select.aria_label": "පිවිසුම් ප්‍රවාහයක් තෝරන්න",
6614
+ "elements.fields.auth_flow_select.empty": "පිවිසුම් ප්‍රවාහ හමු නොවීය.",
6615
+ "elements.fields.select.load_more": "තවත් පූරණය කරන්න",
6616
+ "elements.fields.select.loading": "පූරණය වේ…",
6617
+ "elements.fields.select.loading_more": "තවත් පූරණය වේ…",
6618
+ "elements.fields.user_select.aria_label": "පරිශීලකයෙකු තෝරන්න",
6619
+ "elements.fields.user_select.empty": "පරිශීලකයන් හමු නොවීය.",
6620
+ "elements.fields.user_type_select.aria_label": "පරිශීලක වර්ගයක් තෝරන්න",
6621
+ "elements.fields.user_type_select.empty": "පරිශීලක වර්ග හමු නොවීය.",
6622
+ "validations.required.field.error": "මෙම ක්ෂේත්‍රය අවශ්‍යයි",
6623
+ "validation.pattern.invalid": "මෙම අගය අවශ්‍ය ආකෘතියට නොගැලපේ.",
6624
+ "validation.minLength.invalid": "මෙම අගය ඉතා කෙටියි.",
6625
+ "validation.maxLength.invalid": "මෙම අගය ඉතා දිගයි.",
6626
+ "signin.heading": "ලොග් වෙන්න",
6627
+ "signin.subheading": "ඉදිරියට යාමට ඔබේ සත්‍යාපන තොරතුරු ඇතුළත් කරන්න.",
6628
+ "signin.images.app_logo.alt": "යෙදුමේ ලාංඡනය",
6629
+ "signup.heading": "ලියාපදිංචි වන්න",
6630
+ "signup.subheading": "ආරම්භ කිරීමට නව ගිණුමක් සාදන්න.",
6631
+ "email.otp.heading": "OTP සත්‍යාපනය",
6632
+ "email.otp.subheading": "ඔබේ විද්‍යුත් තැපැල් ලිපිනයට යවන ලද කේතය ඇතුළත් කරන්න.",
6633
+ "email.otp.buttons.submit.text": "ඉදිරියට යන්න",
6634
+ "identifier.first.heading": "ලොග් වෙන්න",
6635
+ "identifier.first.subheading": "ඔබේ පරිශීලක නාමය හෝ විද්‍යුත් තැපැල් ලිපිනය ඇතුළත් කරන්න.",
6636
+ "identifier.first.buttons.submit.text": "ඉදිරියට යන්න",
6637
+ "sms.otp.heading": "OTP සත්‍යාපනය",
6638
+ "sms.otp.subheading": "ඔබේ දුරකථන අංකයට යවන ලද කේතය ඇතුළත් කරන්න.",
6639
+ "sms.otp.buttons.submit.text": "ඉදිරියට යන්න",
6640
+ "totp.heading": "ඔබගේ අනන්‍යතාවය තහවුරු කරන්න",
6641
+ "totp.subheading": "ඔබේ authenticator යෙදුමෙන් ලබාගත් කේතය ඇතුළත් කරන්න.",
6642
+ "totp.buttons.submit.text": "ඉදිරියට යන්න",
6643
+ "username.password.buttons.submit.text": "ඉදිරියට යන්න",
6644
+ "username.password.heading": "ලොග් වෙන්න",
6645
+ "username.password.subheading": "ඉදිරියට යාමට ඔබේ පරිශීලක නාමය සහ මුරපදය ඇතුළත් කරන්න.",
6646
+ "passkey.button.use": "Passkey මගින් ඇතුල් වන්න",
6647
+ "passkey.signin.heading": "Passkey මගින් ඇතුල් වන්න",
6648
+ "passkey.register.heading": "Passkey ලියාපදිංචි කරන්න",
6649
+ "passkey.register.description": "මුරපදයක් නොමැතිව ඔබේ ගිණුමට ආරක්ෂිතව ඇතුල් වීමට passkey එකක් සාදන්න.",
6650
+ "user.profile.heading": "පැතිකඩ",
6651
+ "user.profile.update.generic.error": "ඔබේ පැතිකඩ යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය.කරුණාකර නැවත උත්සාහ කරන්න",
6652
+ "user.change_password.heading": "{credential} වෙනස් කරන්න",
6653
+ "user.change_password.new.label": "නව {credential}",
6654
+ "user.change_password.new.placeholder": "ඔබේ නව {credentialLower} ඇතුළත් කරන්න",
6655
+ "user.change_password.confirm.label": "නව {credential} තහවුරු කරන්න",
6656
+ "user.change_password.confirm.placeholder": "ඔබේ නව {credentialLower} නැවත ඇතුළත් කරන්න",
6657
+ "user.change_password.requirements.heading": "ඔබේ {credentialLower} තුළ තිබිය යුතුය:",
6658
+ "user.change_password.submit": "{credential} යාවත්කාලීන කරන්න",
6659
+ "user.change_password.success": "ඔබේ {credentialLower} යාවත්කාලීන කර ඇත.",
6660
+ "user.change_password.mismatch.error": "{credentialLower} නොගැලපේ.",
6661
+ "user.change_password.generic.error": "ඔබේ {credentialLower} යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය. කරුණාකර නැවත උත්සාහ කරන්න.",
6662
+ "user.change_password.unavailable.heading": "{credential} වෙනස් කිරීම් ලබා ගත නොහැක",
6663
+ "user.change_password.unavailable.description": "කරුණාකර ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.",
6664
+ "validation.password.pattern": "අවශ්‍ය ආකෘතියට ගැලපේ",
6665
+ "organization.switcher.switch.organization": "සංවිධානය මාරු කරන්න",
6666
+ "organization.switcher.loading.placeholder.organizations": "සංවිධාන ලෝඩ් වෙමින්...",
6667
+ "organization.switcher.members": "සාමාජිකයන්",
6668
+ "organization.switcher.member": "සාමාජිකයා",
6669
+ "organization.switcher.create.organization": "සංවිධානයක් සාදන්න",
6670
+ "organization.switcher.manage.organizations": "සංවිධාන කළමනාකරණය කරන්න",
6671
+ "organization.switcher.buttons.manage.text": "කළමනාකරණය කරන්න",
6672
+ "organization.switcher.organizations.heading": "සංවිධාන",
6673
+ "organization.switcher.buttons.switch.text": "මාරු කරන්න",
6674
+ "organization.switcher.no.access": "ප්‍රවේශය නැත",
6675
+ "organization.switcher.status.label": "තත්ත්වය:",
6676
+ "organization.switcher.showing.count": "මුළු සංවිධාන {showing} න් {total} ක් පෙන්වමින්",
6677
+ "organization.switcher.buttons.refresh.text": "නැවුම් කරන්න",
6678
+ "organization.switcher.buttons.load_more.text": "තවත් සංවිධාන ලෝඩ් කරන්න",
6679
+ "organization.switcher.loading.more": "ලෝඩ් වෙමින්...",
6680
+ "organization.switcher.no.organizations": "සංවිධාන කිසිවක් හමු නොවීය.",
6681
+ "organization.switcher.error.prefix": "දෝෂය:",
6682
+ "organization.profile.heading": "සංවිධානයේ පැතිකඩ",
6683
+ "organization.profile.loading": "සංවිධානය ලෝඩ් වෙමින්...",
6684
+ "organization.profile.error": "සංවිධානය ලෝඩ් කිරීමට අසමත් විය",
6685
+ "organization.create.heading": "සංවිධානය සාදන්න",
6686
+ "organization.create.buttons.create_organization.text": "සංවිධානය සාදන්න",
6687
+ "organization.create.buttons.create_organization.loading.text": "සාදමින්...",
6688
+ "organization.create.buttons.cancel.text": "අවලංගු කරන්න",
6689
+ "messages.loading.placeholder": "ලෝඩ් වෙමින්...",
6690
+ "consent.required": "අවශ්‍යයි",
6691
+ "consent.essential_claims": "අත්‍යවශ්‍ය ගුණාංග",
6692
+ "consent.optional_claims": "විකල්ප ගුණාංග",
6693
+ "consent.authorize_scope": "අවසර",
6694
+ "consent.essential_claims.info": "සේවාව නිසි ලෙස ක්‍රියාත්මක වීම සඳහා මෙම ගුණාංග අවශ්‍ය වේ.",
6695
+ "consent.optional_claims.info": "මෙම ගුණාංග විකල්ප වන අතර ඔබේ අභිමතය පරිදි සැපයිය හැක.",
6696
+ "consent.authorize_scope.info": "මෙම අවසරයන් මගින් සේවාවට අමතර විශේෂාංග වෙත ප්‍රවේශ වීමට ඉඩ සලසයි.",
6697
+ "errors.heading": "දෝෂය",
6698
+ "errors.signin.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6699
+ "errors.signin.flow.failure": "ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6700
+ "errors.signin.flow.completion.failure": "ලොග් වීමේ ක්‍රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6701
+ "errors.signin.flow.passkeys.failure": "passkeys සමඟ ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6702
+ "errors.signin.flow.passkeys.completion.failure": "passkeys සමඟ ලොග් වීමේ ක්‍රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6703
+ "errors.signup.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6704
+ "errors.signup.flow.failure": "ගිණුම් තැනීමේ ක්‍රියාවලියේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6705
+ "errors.signup.flow.initialization.failure": "ගිණුම් තැනීමේ ක්‍රියාවලිය ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6706
+ "errors.signup.popup.failure": "උත්පතන කවුළුවේ ගිණුම් තැනීම දිගටම කරගෙන යා නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න.",
6707
+ "errors.signup.components.not.available": "ගිණුම් තැනීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6708
+ "errors.signin.components.not.available": "ප්‍රවේශ වීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6709
+ "errors.signin.timeout": "පියවර සම්පූර්ණ කිරීමට ලබා දී තිබූ කාලය ඉකුත් වී ඇත."
6174
6710
  }
6175
6711
  };
6176
- var fr_FR_default = fr_FR;
6712
+ var si_LK_default = si_LK;
6177
6713
 
6178
6714
  //#endregion
6179
- //#region src/i18n/translations/te-IN.ts
6180
- const te_IN = {
6181
- metadata: {
6182
- localeCode: "te-IN",
6183
- countryCode: "IN",
6184
- languageCode: "te",
6185
- displayName: "తెలుగు (భారతదేశం)",
6186
- direction: "ltr"
6187
- },
6188
- translations: {
6189
- "elements.buttons.signin.text": "సైన్ ఇన్ చేయండి",
6190
- "elements.buttons.signout.text": "సైన్ అవుట్ చేయండి",
6191
- "elements.buttons.signup.text": "సైన్ అప్ చేయండి",
6192
- "elements.buttons.submit.text": "కొనసాగించండి",
6193
- "elements.buttons.facebook.text": "Facebook తో కొనసాగించండి",
6194
- "elements.buttons.google.text": "Google తో కొనసాగించండి",
6195
- "elements.buttons.github.text": "GitHub తో కొనసాగించండి",
6196
- "elements.buttons.microsoft.text": "Microsoft తో కొనసాగించండి",
6197
- "elements.buttons.linkedin.text": "LinkedIn తో కొనసాగించండి",
6198
- "elements.buttons.ethereum.text": "Ethereum తో సైన్ ఇన్ చేయండి",
6199
- "elements.buttons.smsotp.text": "SMS తో కొనసాగించండి",
6200
- "elements.buttons.multi.option.text": "{connection} తో కొనసాగించండి",
6201
- "elements.buttons.social.text": "{connection} తో కొనసాగించండి",
6202
- "elements.display.divider.or_separator": "లేదా",
6203
- "elements.display.copyable_text.copy": "కాపీ చేయండి",
6204
- "elements.display.copyable_text.copied": "కాపీ చేయబడింది!",
6205
- "elements.fields.generic.placeholder": "మీ {field} ను నమోదు చేయండి",
6206
- "elements.fields.username.label": "వినియోగదారు పేరు",
6207
- "elements.fields.username.placeholder": "వినియోగదారు పేరును నమోదు చేయండి",
6208
- "elements.fields.password.label": "పాస్వర్డ్",
6209
- "elements.fields.password.placeholder": "పాస్వర్డ్ నమోదు చేయండి",
6210
- "elements.fields.first_name.label": "మొదటి పేరు",
6211
- "elements.fields.first_name.placeholder": "మీ మొదటి పేరును నమోదు చేయండి",
6212
- "elements.fields.last_name.label": "చివరి పేరు",
6213
- "elements.fields.last_name.placeholder": "మీ చివరి పేరును నమోదు చేయండి",
6214
- "elements.fields.email.label": "ఇమెయిల్",
6215
- "elements.fields.email.placeholder": "మీ ఇమెయిల్‌ను నమోదు చేయండి",
6216
- "elements.fields.organization.name.label": "సంస్థ పేరు",
6217
- "elements.fields.organization.handle.label": "సంస్థ హ్యాండిల్",
6218
- "elements.fields.organization.description.label": "సంస్థ వివరణ",
6219
- "elements.fields.organization.select.label": "ఆర్గనైజేషన్‌ను ఎంచుకోండి",
6220
- "elements.fields.organization.select.placeholder": "సంస్థను ఎంచుకోండి",
6221
- "validations.required.field.error": "ఈ ఫీల్డ్ అవసరం",
6222
- "validation.pattern.invalid": "ఈ విలువ అవసరమైన ఆకృతికి సరిపోలడం లేదు.",
6223
- "validation.minLength.invalid": "ఈ విలువ చాలా చిన్నది.",
6224
- "validation.maxLength.invalid": "ఈ విలువ చాలా పెద్దది.",
6225
- "signin.heading": "సైన్ ఇన్ చేయండి",
6226
- "signin.subheading": "కొనసాగించడానికి మీ వివరాలు ఇవ్వండి.",
6227
- "signin.images.app_logo.alt": "అప్లికేషన్ లోగో",
6228
- "signup.heading": "సైన్ అప్ చేయండి",
6229
- "signup.subheading": "కొత్త అకౌంట్ సృష్టించండి.",
6230
- "email.otp.heading": "OTP వెరిఫికేషన్",
6231
- "email.otp.subheading": "మీ ఇమెయిల్‌కి పంపిన కోడ్‌ను నమోదు చేయండి.",
6232
- "email.otp.buttons.submit.text": "కొనసాగించండి",
6233
- "identifier.first.heading": "సైన్ ఇన్ చేయండి",
6234
- "identifier.first.subheading": "మీ యూజర్ పేరు లేదా ఇమెయిల్ ఇవ్వండి.",
6235
- "identifier.first.buttons.submit.text": "కొనసాగించండి",
6236
- "sms.otp.heading": "OTP వెరిఫికేషన్",
6237
- "sms.otp.subheading": "మీ ఫోన్ నంబర్‌కి పంపిన కోడ్‌ను నమోదు చేయండి.",
6238
- "sms.otp.buttons.submit.text": "కొనసాగించండి",
6239
- "totp.heading": "మీ గుర్తింపును ధృవీకరించండి",
6240
- "totp.subheading": "మీ ఆథెంటికేటర్ యాప్‌లోని కోడ్‌ను నమోదు చేయండి.",
6241
- "totp.buttons.submit.text": "కొనసాగించండి",
6242
- "username.password.buttons.submit.text": "కొనసాగించండి",
6243
- "username.password.heading": "సైన్ ఇన్ చేయండి",
6244
- "username.password.subheading": "మీ యూజర్ పేరు మరియు పాస్‌వర్డ్ ఇవ్వండి.",
6245
- "passkey.button.use": "Passkey తో సైన్ ఇన్ చేయండి",
6246
- "passkey.signin.heading": "Passkey తో సైన్ ఇన్ చేయండి",
6247
- "passkey.register.heading": "Passkey ని నమోదు చేయండి",
6248
- "passkey.register.description": "పాస్‌వర్డ్ లేకుండా మీ ఖాతాలోకి సురక్షితంగా సైన్ ఇన్ చేయడానికి Passkey ని సృష్టించండి.",
6249
- "user.profile.heading": "ప్రొఫైల్",
6250
- "user.profile.update.generic.error": "ప్రొఫైల్ అప్‌డేట్ చేస్తూ లోపం వచ్చింది. దయచేసి మళ్లీ ప్రయత్నించండి.",
6251
- "user.change_password.heading": "{credential} మార్చండి",
6252
- "user.change_password.new.label": "కొత్త {credential}",
6253
- "user.change_password.new.placeholder": "మీ కొత్త {credentialLower} నమోదు చేయండి",
6254
- "user.change_password.confirm.label": "కొత్త {credential} నిర్ధారించండి",
6255
- "user.change_password.confirm.placeholder": "మీ కొత్త {credentialLower}ని మళ్లీ నమోదు చేయండి",
6256
- "user.change_password.requirements.heading": "మీ {credentialLower} కింది వాటిని కలిగి ఉండాలి:",
6257
- "user.change_password.submit": "{credential} నవీకరించండి",
6258
- "user.change_password.success": "మీ {credentialLower} నవీకరించబడింది.",
6259
- "user.change_password.mismatch.error": "{credentialLower} సరిపోలలేదు.",
6260
- "user.change_password.generic.error": "మీ {credentialLower} నవీకరించేటప్పుడు లోపం వచ్చింది. దయచేసి మళ్లీ ప్రయత్నించండి.",
6261
- "user.change_password.unavailable.heading": "{credential} మార్పులు అందుబాటులో లేవు",
6262
- "user.change_password.unavailable.description": "దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.",
6263
- "validation.password.pattern": "అవసరమైన ఫార్మాట్‌కు సరిపోతుంది",
6264
- "organization.switcher.switch.organization": "ఆర్గనైజేషన్ మార్చండి",
6265
- "organization.switcher.loading.placeholder.organizations": "ఆర్గనైజేషన్‌లు లోడ్ అవుతున్నాయి...",
6266
- "organization.switcher.members": "సభ్యులు",
6267
- "organization.switcher.member": "సభ్యుడు",
6268
- "organization.switcher.create.organization": "ఆర్గనైజేషన్ సృష్టించండి",
6269
- "organization.switcher.manage.organizations": "ఆర్గనైజేషన్‌లను నిర్వహించండి",
6270
- "organization.switcher.buttons.manage.text": "నిర్వహించండి",
6271
- "organization.switcher.organizations.heading": "ఆర్గనైజేషన్‌లు",
6272
- "organization.switcher.buttons.switch.text": "మార్చండి",
6273
- "organization.switcher.no.access": "యాక్సెస్ లేదు",
6274
- "organization.switcher.status.label": "స్టేటస్:",
6275
- "organization.switcher.showing.count": "{total} లో {showing} ఆర్గనైజేషన్‌లు చూపుతున్నాయి",
6276
- "organization.switcher.buttons.refresh.text": "రిఫ్రెష్ చేయండి",
6277
- "organization.switcher.buttons.load_more.text": "మరిన్ని ఆర్గనైజేషన్‌లను లోడ్ చేయండి",
6278
- "organization.switcher.loading.more": "లోడ్ అవుతోంది...",
6279
- "organization.switcher.no.organizations": "ఏ ఆర్గనైజేషన్‌లు లభించలేదు",
6280
- "organization.switcher.error.prefix": "లోపం:",
6281
- "organization.profile.heading": "ఆర్గనైజేషన్ ప్రొఫైల్",
6282
- "organization.profile.loading": "లోడ్ అవుతోంది...",
6283
- "organization.profile.error": "ఆర్గనైజేషన్‌ను లోడ్ చేయడం విఫలమైంది",
6284
- "organization.create.heading": "ఆర్గనైజేషన్ సృష్టించండి",
6285
- "organization.create.buttons.create_organization.text": "సృష్టించండి",
6286
- "organization.create.buttons.create_organization.loading.text": "సృష్టిస్తోంది...",
6287
- "organization.create.buttons.cancel.text": "రద్దు చేయండి",
6288
- "messages.loading.placeholder": "లోడ్ అవుతోంది...",
6289
- "consent.required": "తప్పనిసరి",
6290
- "consent.essential_claims": "ఆవశ్యక లక్షణాలు",
6291
- "consent.optional_claims": "ఐచ్ఛిక లక్షణాలు",
6292
- "consent.authorize_scope": "అనుమతులు",
6293
- "consent.essential_claims.info": "సేవ సరిగ్గా పనిచేయడానికి ఈ లక్షణాలు అవసరం.",
6294
- "consent.optional_claims.info": "ఈ లక్షణాలు ఐచ్ఛికం మరియు మీ విచక్షణ మేరకు అందించవచ్చు.",
6295
- "consent.authorize_scope.info": "ఈ అనుమతులు సేవను అదనపు ఫీచర్‌లను యాక్సెస్ చేయడానికి అనుమతిస్తాయి.",
6296
- "errors.heading": "లోపం",
6297
- "errors.signin.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6298
- "errors.signin.flow.failure": "సైన్ ఇన్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6299
- "errors.signin.flow.completion.failure": "సైన్ ఇన్ పూర్తి చేయడంలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6300
- "errors.signin.flow.passkeys.failure": "పాస్‌కీలతో సైన్ ఇన్ చేస్తూ లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6301
- "errors.signin.flow.passkeys.completion.failure": "పాస్‌కీ సైన్ ఇన్ పూర్తి చేయడంలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6302
- "errors.signup.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6303
- "errors.signup.flow.failure": "సైన్ అప్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6304
- "errors.signup.flow.initialization.failure": "సైన్ అప్ ప్రక్రియను ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6305
- "errors.signup.popup.failure": "పాప్-అప్ విండోలో సైన్ అప్ కొనసాగించడం సాధ్యం కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.",
6306
- "errors.signup.components.not.available": "సైన్ అప్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6307
- "errors.signin.components.not.available": "సైన్ ఇన్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6308
- "errors.signin.timeout": "దశను పూర్తి చేయడానికి అనుమతించబడిన సమయం ముగిసింది."
6715
+ //#region src/i18n/translations/index.ts
6716
+ var translations_exports = /* @__PURE__ */ __export({
6717
+ en_US: () => en_US_default,
6718
+ fr_FR: () => fr_FR_default,
6719
+ hi_IN: () => hi_IN_default,
6720
+ pt_BR: () => pt_BR_default,
6721
+ pt_PT: () => pt_PT_default,
6722
+ si_LK: () => si_LK_default,
6723
+ ta_IN: () => ta_IN_default,
6724
+ te_IN: () => te_IN_default
6725
+ });
6726
+
6727
+ //#endregion
6728
+ //#region src/i18n/constants/TranslationBundleConstants.ts
6729
+ /**
6730
+ * Constants related to internationalization (i18n) translation bundles.
6731
+ *
6732
+ * @example
6733
+ * ```typescript
6734
+ * // Using default locale
6735
+ * const locale = TranslationBundleConstants.FALLBACK_LOCALE;
6736
+ *
6737
+ * // Using supported locales
6738
+ * const locales = TranslationBundleConstants.DEFAULT_LOCALES;
6739
+ * ```
6740
+ */
6741
+ const TranslationBundleConstants = {
6742
+ DEFAULT_LOCALES: [en_US_default.metadata.localeCode],
6743
+ FALLBACK_LOCALE: en_US_default.metadata.localeCode
6744
+ };
6745
+ var TranslationBundleConstants_default = TranslationBundleConstants;
6746
+
6747
+ //#endregion
6748
+ //#region src/i18n/utils/getDefaultI18nBundles.ts
6749
+ /**
6750
+ * Get the default i18n bundles.
6751
+ * Dynamically builds the bundles collection by iterating through supported locales
6752
+ * and importing their corresponding translation modules.
6753
+ *
6754
+ * @returns The collection of all default i18n bundles
6755
+ */
6756
+ const getDefaultI18nBundles = () => {
6757
+ const bundles = {};
6758
+ TranslationBundleConstants_default.DEFAULT_LOCALES.forEach((localeCode) => {
6759
+ const bundle = translations_exports[localeCode.replace("-", "_")];
6760
+ if (bundle && bundle.metadata?.localeCode) bundles[bundle.metadata.localeCode] = bundle;
6761
+ });
6762
+ return bundles;
6763
+ };
6764
+ var getDefaultI18nBundles_default = getDefaultI18nBundles;
6765
+
6766
+ //#endregion
6767
+ //#region src/utils/getSelectMessages.ts
6768
+ let englishFallback;
6769
+ const getEnglishFallback = () => {
6770
+ if (!englishFallback) englishFallback = getDefaultI18nBundles_default()["en-US"]?.translations ?? {};
6771
+ return englishFallback;
6772
+ };
6773
+ /**
6774
+ * The wording of `Select`: the active translations when a translate function is given, the default English
6775
+ * otherwise, so `Select` works without an I18n provider. A key the translate function does not know comes back
6776
+ * as the key itself, and is treated the same as no translation.
6777
+ *
6778
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6779
+ */
6780
+ const getSelectMessages = (translate) => {
6781
+ const text = (key) => {
6782
+ const translated = translate?.(key);
6783
+ return translated && translated !== key ? translated : getEnglishFallback()[key] ?? key;
6784
+ };
6785
+ return {
6786
+ loadMore: text("elements.fields.select.load_more"),
6787
+ loading: text("elements.fields.select.loading"),
6788
+ loadingMore: text("elements.fields.select.loading_more")
6789
+ };
6790
+ };
6791
+ var getSelectMessages_default = getSelectMessages;
6792
+
6793
+ //#endregion
6794
+ //#region src/utils/toError.ts
6795
+ /**
6796
+ * Returns the error itself when it is an `Error`, otherwise an `Error` carrying the thrown value as text.
6797
+ *
6798
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6799
+ */
6800
+ const toError = (error$1) => error$1 instanceof Error ? error$1 : new Error(String(error$1));
6801
+ var toError_default = toError;
6802
+
6803
+ //#endregion
6804
+ //#region src/utils/logResourceFailure.ts
6805
+ const logger = createPackageComponentLogger("@thunderid/javascript", "logResourceFailure");
6806
+ const describeFailure = (error$1, { attempts, limit, offset, startedAt }) => ({
6807
+ attempts,
6808
+ code: error$1 instanceof ThunderIDError ? error$1.code : "unknown",
6809
+ durationMs: Math.round(performance.now() - startedAt),
6810
+ limit,
6811
+ offset,
6812
+ status: error$1 instanceof ThunderIDAPIError ? error$1.statusCode : void 0
6813
+ });
6814
+ /**
6815
+ * Logs one error line for a failed resource load: which call, the offset and limit, the status or SDK error code,
6816
+ * the number of attempts and how long it ran. It names those fields only. The text of the failure is left out on
6817
+ * purpose, because it is whatever the server or a proxy replied and can carry data the SDK does not control. The
6818
+ * caller still gets the full error through `onError`.
6819
+ *
6820
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6821
+ */
6822
+ const logResourceFailure = (resource, error$1, details) => {
6823
+ logger.error(`Failed to load ${resource}.`, describeFailure(error$1, details));
6824
+ };
6825
+ /**
6826
+ * A failure logger for one long-lived list: the first failure of each error code is logged as an error and repeats
6827
+ * at debug level, so repeated attempts against a failing list do not flood the log.
6828
+ *
6829
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6830
+ */
6831
+ const createResourceFailureLogger = () => {
6832
+ const loggedCodes = /* @__PURE__ */ new Set();
6833
+ return (resource, error$1, details) => {
6834
+ const code = error$1 instanceof ThunderIDError ? error$1.code : "unknown";
6835
+ if (loggedCodes.has(code)) {
6836
+ logger.debug(`Failed to load ${resource} again.`, describeFailure(error$1, details));
6837
+ return;
6838
+ }
6839
+ loggedCodes.add(code);
6840
+ logResourceFailure(resource, error$1, details);
6841
+ };
6842
+ };
6843
+
6844
+ //#endregion
6845
+ //#region src/utils/loadPageWithRetryAndLog.ts
6846
+ /**
6847
+ * Runs one page request of a resource list. A server error or a failure with no response is retried once, a client
6848
+ * error is not. The final failure is logged once, with the call context, and rethrown unchanged. Use it where the
6849
+ * API call is made and the real error and its status are still known.
6850
+ *
6851
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6852
+ */
6853
+ const loadPageWithRetryAndLog = async (resource, { limit, logFailure = logResourceFailure, offset, signal }, load) => {
6854
+ const startedAt = performance.now();
6855
+ let attempts = 0;
6856
+ try {
6857
+ return await withRetry_default(() => {
6858
+ attempts += 1;
6859
+ return load();
6860
+ }, { signal });
6861
+ } catch (error$1) {
6862
+ if (!signal?.aborted) logFailure(resource, error$1, {
6863
+ attempts,
6864
+ limit,
6865
+ offset,
6866
+ startedAt
6867
+ });
6868
+ throw error$1;
6309
6869
  }
6310
6870
  };
6311
- var te_IN_default = te_IN;
6871
+ var loadPageWithRetryAndLog_default = loadPageWithRetryAndLog;
6312
6872
 
6313
6873
  //#endregion
6314
- //#region src/i18n/translations/hi-IN.ts
6315
- const hi_IN = {
6316
- metadata: {
6317
- localeCode: "hi-IN",
6318
- countryCode: "IN",
6319
- languageCode: "hi",
6320
- displayName: "हिन्दी (भारत)",
6321
- direction: "ltr"
6322
- },
6323
- translations: {
6324
- "elements.buttons.signin.text": "साइन इन",
6325
- "elements.buttons.signout.text": "साइन आउट",
6326
- "elements.buttons.signup.text": "साइन अप",
6327
- "elements.buttons.submit.text": "जारी रखें",
6328
- "elements.buttons.facebook.text": "Facebook के साथ जारी रखें",
6329
- "elements.buttons.google.text": "Google के साथ जारी रखें",
6330
- "elements.buttons.github.text": "GitHub के साथ जारी रखें",
6331
- "elements.buttons.microsoft.text": "Microsoft के साथ जारी रखें",
6332
- "elements.buttons.linkedin.text": "LinkedIn के साथ जारी रखें",
6333
- "elements.buttons.ethereum.text": "Ethereum के साथ साइन इन करें",
6334
- "elements.buttons.smsotp.text": "SMS के साथ जारी रखें",
6335
- "elements.buttons.multi.option.text": "{connection} के साथ जारी रखें",
6336
- "elements.buttons.social.text": "{connection} के साथ जारी रखें",
6337
- "elements.display.divider.or_separator": "या",
6338
- "elements.display.copyable_text.copy": "प्रतिलिपि",
6339
- "elements.display.copyable_text.copied": "नकल की गई!",
6340
- "elements.fields.generic.placeholder": "{field} दर्ज करें",
6341
- "elements.fields.username.label": "उपयोगकर्ता नाम",
6342
- "elements.fields.username.placeholder": "अपना उपयोगकर्ता नाम दर्ज करें",
6343
- "elements.fields.password.label": "पासवर्ड",
6344
- "elements.fields.password.placeholder": "अपना पासवर्ड दर्ज करें",
6345
- "elements.fields.first_name.label": "पहला नाम",
6346
- "elements.fields.first_name.placeholder": "अपना पहला नाम दर्ज करें",
6347
- "elements.fields.last_name.label": "अंतिम नाम",
6348
- "elements.fields.last_name.placeholder": "अपना अंतिम नाम दर्ज करें",
6349
- "elements.fields.email.label": "ईमेल",
6350
- "elements.fields.email.placeholder": "अपना ईमेल दर्ज करें",
6351
- "elements.fields.organization.name.label": "संगठन का नाम",
6352
- "elements.fields.organization.handle.label": "संगठन हैंडल",
6353
- "elements.fields.organization.description.label": "संगठन विवरण",
6354
- "elements.fields.organization.select.label": "संगठन चुनें",
6355
- "elements.fields.organization.select.placeholder": "एक संगठन चुनें",
6356
- "validations.required.field.error": "यह फील्ड आवश्यक है",
6357
- "validation.pattern.invalid": "यह मान आवश्यक प्रारूप से मेल नहीं खाता।",
6358
- "validation.minLength.invalid": "यह मान बहुत छोटा है।",
6359
- "validation.maxLength.invalid": "यह मान बहुत लंबा है।",
6360
- "signin.heading": "साइन इन",
6361
- "signin.subheading": "जारी रखने के लिए अपनी प्रमाणिक जानकारी दर्ज करें।",
6362
- "signin.images.app_logo.alt": "एप्लिकेशन लोगो",
6363
- "signup.heading": "साइन अप",
6364
- "signup.subheading": "शुरू करने के लिए नया खाता बनाएं।",
6365
- "email.otp.heading": "OTP सत्यापन",
6366
- "email.otp.subheading": "अपनी ईमेल पर भेजा गया कोड दर्ज करें।",
6367
- "email.otp.buttons.submit.text": "जारी रखें",
6368
- "identifier.first.heading": "साइन इन",
6369
- "identifier.first.subheading": "अपना उपयोगकर्ता नाम या ईमेल दर्ज करें।",
6370
- "identifier.first.buttons.submit.text": "जारी रखें",
6371
- "sms.otp.heading": "OTP सत्यापन",
6372
- "sms.otp.subheading": "अपने फ़ोन नंबर पर भेजा गया कोड दर्ज करें।",
6373
- "sms.otp.buttons.submit.text": "जारी रखें",
6374
- "totp.heading": "अपनी पहचान सत्यापित करें",
6375
- "totp.subheading": "अपने ऑथेंटिकेटर ऐप से कोड दर्ज करें।",
6376
- "totp.buttons.submit.text": "जारी रखें",
6377
- "username.password.buttons.submit.text": "जारी रखें",
6378
- "username.password.heading": "साइन इन",
6379
- "username.password.subheading": "अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें।",
6380
- "passkey.button.use": "Passkey के साथ साइन इन करें",
6381
- "passkey.signin.heading": "Passkey के साथ साइन इन करें",
6382
- "passkey.register.heading": "Passkey पंजीकृत करें",
6383
- "passkey.register.description": "बिना पासवर्ड के अपने खाते में सुरक्षित रूप से साइन इन करने के लिए एक Passkey बनाएं।",
6384
- "user.profile.heading": "प्रोफ़ाइल",
6385
- "user.profile.update.generic.error": "प्रोफ़ाइल अपडेट करते समय त्रुटि हुई। कृपया पुनः प्रयास करें।",
6386
- "user.change_password.heading": "{credential} बदलें",
6387
- "user.change_password.new.label": "नया {credential}",
6388
- "user.change_password.new.placeholder": "अपना नया {credentialLower} दर्ज करें",
6389
- "user.change_password.confirm.label": "नए {credential} की पुष्टि करें",
6390
- "user.change_password.confirm.placeholder": "अपना नया {credentialLower} फिर से दर्ज करें",
6391
- "user.change_password.requirements.heading": "आपके {credentialLower} में यह होना चाहिए:",
6392
- "user.change_password.submit": "{credential} अपडेट करें",
6393
- "user.change_password.success": "आपका {credentialLower} अपडेट कर दिया गया है।",
6394
- "user.change_password.mismatch.error": "{credential} मेल नहीं खाते।",
6395
- "user.change_password.generic.error": "आपका {credentialLower} अपडेट करते समय त्रुटि हुई। कृपया पुनः प्रयास करें।",
6396
- "user.change_password.unavailable.heading": "{credential} परिवर्तन उपलब्ध नहीं है",
6397
- "user.change_password.unavailable.description": "कृपया अपने व्यवस्थापक से संपर्क करें।",
6398
- "validation.password.pattern": "आवश्यक प्रारूप से मेल खाता है",
6399
- "organization.switcher.switch.organization": "संगठन बदलें",
6400
- "organization.switcher.loading.placeholder.organizations": "संगठन लोड हो रहे हैं...",
6401
- "organization.switcher.members": "सदस्य",
6402
- "organization.switcher.member": "सदस्य",
6403
- "organization.switcher.create.organization": "संगठन बनाएं",
6404
- "organization.switcher.manage.organizations": "संगठनों का प्रबंधन करें",
6405
- "organization.switcher.buttons.manage.text": "प्रबंधित करें",
6406
- "organization.switcher.organizations.heading": "संगठन",
6407
- "organization.switcher.buttons.switch.text": "बदलें",
6408
- "organization.switcher.no.access": "कोई पहुँच नहीं",
6409
- "organization.switcher.status.label": "स्थिति:",
6410
- "organization.switcher.showing.count": "{total} में से {showing} संगठन दिखा रहे हैं",
6411
- "organization.switcher.buttons.refresh.text": "रिफ्रेश",
6412
- "organization.switcher.buttons.load_more.text": "और संगठन लोड करें",
6413
- "organization.switcher.loading.more": "लोड हो रहा है...",
6414
- "organization.switcher.no.organizations": "कोई संगठन नहीं मिला",
6415
- "organization.switcher.error.prefix": "त्रुटि:",
6416
- "organization.profile.heading": "संगठन प्रोफ़ाइल",
6417
- "organization.profile.loading": "संगठन लोड हो रहा है...",
6418
- "organization.profile.error": "संगठन लोड करने में विफल",
6419
- "organization.create.heading": "संगठन बनाएं",
6420
- "organization.create.buttons.create_organization.text": "संगठन बनाएं",
6421
- "organization.create.buttons.create_organization.loading.text": "बनाया जा रहा है...",
6422
- "organization.create.buttons.cancel.text": "रद्द करें",
6423
- "messages.loading.placeholder": "लोड हो रहा है...",
6424
- "consent.required": "आवश्यक",
6425
- "consent.essential_claims": "आवश्यक विशेषताएँ",
6426
- "consent.optional_claims": "वैकल्पिक विशेषताएँ",
6427
- "consent.authorize_scope": "अनुमतियाँ",
6428
- "consent.essential_claims.info": "सेवा के सही ढंग से कार्य करने के लिए ये विशेषताएँ आवश्यक हैं।",
6429
- "consent.optional_claims.info": "ये विशेषताएँ वैकल्पिक हैं और आपके विवेकानुसार प्रदान की जा सकती हैं।",
6430
- "consent.authorize_scope.info": "ये अनुमतियाँ सेवा को अतिरिक्त सुविधाओं तक पहुँचने की अनुमति देती हैं।",
6431
- "errors.heading": "त्रुटि",
6432
- "errors.signin.initialization": "इनिशियलाइज़ेशन में त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6433
- "errors.signin.flow.failure": "साइन-इन प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6434
- "errors.signin.flow.completion.failure": "साइन-इन प्रक्रिया पूरी करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6435
- "errors.signin.flow.passkeys.failure": "पासकीज़ के साथ साइन-इन करते समय त्रुटि।",
6436
- "errors.signin.flow.passkeys.completion.failure": "पासकीज़ साइन-इन पूरी करते समय त्रुटि।",
6437
- "errors.signup.initialization": "प्रारंभीकरण के दौरान एक त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6438
- "errors.signup.flow.failure": "साइन-अप प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6439
- "errors.signup.flow.initialization.failure": "साइन-अप प्रक्रिया प्रारंभ करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6440
- "errors.signup.popup.failure": "पॉप-अप विंडो में साइन-अप जारी नहीं रखा जा सका। कृपया पुनः प्रयास करें।",
6441
- "errors.signup.components.not.available": "साइन-अप फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6442
- "errors.signin.components.not.available": "साइन-इन फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6443
- "errors.signin.timeout": "स्टेप पूरा करने के लिए दिया गया समय खत्म हो गया है।"
6874
+ //#region src/utils/createResourceOptionsLoader.ts
6875
+ /**
6876
+ * Builds the loader a select picker gives to its options helper. `config` is read on every call, so it may
6877
+ * be an object with getters that supply live values. The loader asks the page function for one page at
6878
+ * the cursor offset, retries a server or network failure once, maps the items to options, and returns them
6879
+ * with the offset of the next page. A failure that is not retried, or fails again, is logged once and thrown.
6880
+ *
6881
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
6882
+ */
6883
+ const createResourceOptionsLoader = (config) => {
6884
+ const logFailure = createResourceFailureLogger();
6885
+ return async ({ cursor, signal }) => {
6886
+ const { component, defaults, fetchPage, filter, mapping, pageSize, resource } = config;
6887
+ const offset = cursor ?? 0;
6888
+ const page = await loadPageWithRetryAndLog_default(resource, {
6889
+ limit: pageSize,
6890
+ logFailure,
6891
+ offset,
6892
+ signal
6893
+ }, () => fetchPage({
6894
+ component,
6895
+ filter,
6896
+ limit: pageSize,
6897
+ offset,
6898
+ signal
6899
+ }));
6900
+ return {
6901
+ nextCursor: isAdvancingPageOffset_default(offset, page.nextOffset) ? page.nextOffset : null,
6902
+ options: page.options ?? toSelectOptions_default(page.items ?? [], mapping, defaults)
6903
+ };
6904
+ };
6905
+ };
6906
+ var createResourceOptionsLoader_default = createResourceOptionsLoader;
6907
+
6908
+ //#endregion
6909
+ //#region src/utils/toUserSelectOption.ts
6910
+ /**
6911
+ * Converts one directory user into an option: submits the user's ID and labels it from `display`,
6912
+ * then `username`, then `email`, unless `mapping` says otherwise.
6913
+ */
6914
+ const toUserSelectOption = (user, mapping) => toSelectOption_default(user, mapping, { labelAttributes: UserSelectConstants_default.LABEL_ATTRIBUTES });
6915
+ var toUserSelectOption_default = toUserSelectOption;
6916
+
6917
+ //#endregion
6918
+ //#region src/utils/toListSelectPage.ts
6919
+ /**
6920
+ * Builds a loader page from one page of a management list response. The next offset comes from the
6921
+ * backend's own `count`, so items dropped by the mapping never shift the paging.
6922
+ */
6923
+ const toListSelectPage = (items, { count, totalResults }, requestOffset, mapping, defaults) => ({
6924
+ nextOffset: computeNextPageOffset_default(requestOffset, count, totalResults),
6925
+ options: toSelectOptions_default(items, mapping, defaults),
6926
+ totalResults
6927
+ });
6928
+ var toListSelectPage_default = toListSelectPage;
6929
+
6930
+ //#endregion
6931
+ //#region src/utils/toUserSelectPage.ts
6932
+ /**
6933
+ * Converts a `getUsers` response into a loader page. The next offset comes from the backend's own
6934
+ * `count`, so users dropped by the mapping never shift the paging.
6935
+ */
6936
+ const toUserSelectPage = (response, requestOffset, mapping) => toListSelectPage_default(response.users, response, requestOffset, mapping, { labelAttributes: UserSelectConstants_default.LABEL_ATTRIBUTES });
6937
+ var toUserSelectPage_default = toUserSelectPage;
6938
+
6939
+ //#endregion
6940
+ //#region src/utils/toAuthFlowSelectPage.ts
6941
+ /**
6942
+ * Converts a `getFlows` response into a loader page: each flow is shown by its name and submits its ID.
6943
+ */
6944
+ const toAuthFlowSelectPage = (response, requestOffset) => toListSelectPage_default(response.flows, response, requestOffset, void 0, { labelAttributes: AuthFlowSelectConstants_default.LABEL_ATTRIBUTES });
6945
+ var toAuthFlowSelectPage_default = toAuthFlowSelectPage;
6946
+
6947
+ //#endregion
6948
+ //#region src/utils/toUserTypeSelectPage.ts
6949
+ /**
6950
+ * Converts a `getUserTypes` response into a loader page: each user type is shown and submitted by
6951
+ * its handle.
6952
+ */
6953
+ const toUserTypeSelectPage = (response, requestOffset) => toListSelectPage_default(response.types, response, requestOffset, UserTypeSelectConstants_default.MAPPING);
6954
+ var toUserTypeSelectPage_default = toUserTypeSelectPage;
6955
+
6956
+ //#endregion
6957
+ //#region src/utils/evaluatePasswordPolicy.ts
6958
+ /**
6959
+ * Evaluates a password against a policy, returning one result when the policy configures
6960
+ * a `regex` and none otherwise.
6961
+ *
6962
+ * An uncompilable `regex` is treated as passing, matching `evaluateValidationRule`:
6963
+ * the SDK stays lenient so a misconfigured schema cannot lock a user out of their own
6964
+ * password change.
6965
+ *
6966
+ * @param value - The candidate password.
6967
+ * @param policy - The rule to apply.
6968
+ * @returns A single-item list when `policy.regex` is set, otherwise an empty list.
6969
+ * @example
6970
+ * ```typescript
6971
+ * const results = evaluatePasswordPolicy('sh0rt', {regex: '^.{8,}$'});
6972
+ * const isValid = results.every(result => result.passed);
6973
+ * ```
6974
+ */
6975
+ const evaluatePasswordPolicy = (value, policy) => {
6976
+ if (!policy.regex) return [];
6977
+ let matches = true;
6978
+ try {
6979
+ matches = new RegExp(policy.regex).test(value);
6980
+ } catch {
6981
+ matches = true;
6444
6982
  }
6983
+ return [{
6984
+ key: "regex",
6985
+ messageKey: "validation.password.pattern",
6986
+ passed: matches
6987
+ }];
6445
6988
  };
6446
- var hi_IN_default = hi_IN;
6989
+ var evaluatePasswordPolicy_default = evaluatePasswordPolicy;
6447
6990
 
6448
6991
  //#endregion
6449
- //#region src/i18n/translations/pt-BR.ts
6450
- const pt_BR = {
6451
- metadata: {
6452
- localeCode: "pt-BR",
6453
- countryCode: "BR",
6454
- languageCode: "pt",
6455
- displayName: "Português (Brazil)",
6456
- direction: "ltr"
6457
- },
6458
- translations: {
6459
- "elements.buttons.signin.text": "Entrar",
6460
- "elements.buttons.signout.text": "Sair",
6461
- "elements.buttons.signup.text": "Cadastre-se",
6462
- "elements.buttons.submit.text": "Continuar",
6463
- "elements.buttons.facebook.text": "Entrar com Facebook",
6464
- "elements.buttons.google.text": "Entrar com Google",
6465
- "elements.buttons.github.text": "Entrar com GitHub",
6466
- "elements.buttons.microsoft.text": "Entrar com Microsoft",
6467
- "elements.buttons.linkedin.text": "Entrar com LinkedIn",
6468
- "elements.buttons.ethereum.text": "Entrar com Ethereum",
6469
- "elements.buttons.smsotp.text": "Entrar com SMS",
6470
- "elements.buttons.multi.option.text": "Entrar com {connection}",
6471
- "elements.buttons.social.text": "Entrar com {connection}",
6472
- "elements.display.divider.or_separator": "OU",
6473
- "elements.display.copyable_text.copy": "Cópia",
6474
- "elements.display.copyable_text.copied": "Copiado!",
6475
- "elements.fields.generic.placeholder": "Digite seu {field}",
6476
- "elements.fields.username.label": "Nome de usuário",
6477
- "elements.fields.username.placeholder": "Digite o nome de usuário",
6478
- "elements.fields.password.label": "Senha",
6479
- "elements.fields.password.placeholder": "Digite sua senha",
6480
- "elements.fields.first_name.label": "Primeiro nome",
6481
- "elements.fields.first_name.placeholder": "Digite seu primeiro nome",
6482
- "elements.fields.last_name.label": "Sobrenome",
6483
- "elements.fields.last_name.placeholder": "Digite seu sobrenome",
6484
- "elements.fields.email.label": "Email",
6485
- "elements.fields.email.placeholder": "Digite seu email",
6486
- "elements.fields.organization.name.label": "Nome da Organização",
6487
- "elements.fields.organization.handle.label": "Identificador da Organização",
6488
- "elements.fields.organization.description.label": "Descrição da Organização",
6489
- "elements.fields.organization.select.label": "Selecionar Organização",
6490
- "elements.fields.organization.select.placeholder": "Selecione uma organização",
6491
- "validations.required.field.error": "Este campo é obrigatório",
6492
- "validation.pattern.invalid": "Este valor não corresponde ao formato necessário.",
6493
- "validation.minLength.invalid": "Este valor é muito curto.",
6494
- "validation.maxLength.invalid": "Este valor é muito longo.",
6495
- "signin.heading": "Entrar",
6496
- "signin.subheading": "Digite suas credencias para continuar.",
6497
- "signin.images.app_logo.alt": "Logotipo do aplicativo",
6498
- "signup.heading": "Cadastra-se",
6499
- "signup.subheading": "Crie uma nova conta para iniciar.",
6500
- "email.otp.heading": "Verificação OTP",
6501
- "email.otp.subheading": "Digite o código enviado para seu e-mail.",
6502
- "email.otp.buttons.submit.text": "Continue",
6503
- "identifier.first.heading": "Entrar",
6504
- "identifier.first.subheading": "Digite seu usuário ou e-mail.",
6505
- "identifier.first.buttons.submit.text": "Continue",
6506
- "sms.otp.heading": "Verificação OTP",
6507
- "sms.otp.subheading": "Digite o código enviado para seu telefone.",
6508
- "sms.otp.buttons.submit.text": "Continue",
6509
- "totp.heading": "Verifique sua identidade",
6510
- "totp.subheading": "Digite o código do seu aplicativo autenticador.",
6511
- "totp.buttons.submit.text": "Continue",
6512
- "username.password.buttons.submit.text": "Continue",
6513
- "username.password.heading": "Entrar",
6514
- "username.password.subheading": "Digite seu usuário e senha para continuar.",
6515
- "passkey.button.use": "Entrar com Passkey",
6516
- "passkey.signin.heading": "Entrar com Passkey",
6517
- "passkey.register.heading": "Registrar Passkey",
6518
- "passkey.register.description": "Crie uma passkey para entrar em sua conta com segurança sem uma senha.",
6519
- "user.profile.heading": "Perfil",
6520
- "user.profile.update.generic.error": "Ocorreu um erro ao atualizar seu perfil. Tente novamente.",
6521
- "user.change_password.heading": "Alterar {credential}",
6522
- "user.change_password.new.label": "Novo {credential}",
6523
- "user.change_password.new.placeholder": "Digite seu novo {credentialLower}",
6524
- "user.change_password.confirm.label": "Confirmar novo {credential}",
6525
- "user.change_password.confirm.placeholder": "Digite novamente seu novo {credentialLower}",
6526
- "user.change_password.requirements.heading": "Seu {credentialLower} deve conter:",
6527
- "user.change_password.submit": "Atualizar {credential}",
6528
- "user.change_password.success": "Seu {credentialLower} foi atualizado.",
6529
- "user.change_password.mismatch.error": "Os {credentialLower}s não coincidem.",
6530
- "user.change_password.generic.error": "Ocorreu um erro ao atualizar seu {credentialLower}. Tente novamente.",
6531
- "user.change_password.unavailable.heading": "Alteração de {credentialLower} indisponível",
6532
- "user.change_password.unavailable.description": "Entre em contato com o administrador.",
6533
- "validation.password.pattern": "Corresponde ao formato exigido",
6534
- "organization.switcher.switch.organization": "Trocar Organização",
6535
- "organization.switcher.loading.placeholder.organizations": "Carregando organizações...",
6536
- "organization.switcher.members": "membros",
6537
- "organization.switcher.member": "membro",
6538
- "organization.switcher.create.organization": "Criar Organização",
6539
- "organization.switcher.manage.organizations": "Gerenciar Organizações",
6540
- "organization.switcher.buttons.manage.text": "Gerenciar",
6541
- "organization.switcher.organizations.heading": "Organizações",
6542
- "organization.switcher.buttons.switch.text": "Trocar",
6543
- "organization.switcher.no.access": "Sem Acesso",
6544
- "organization.switcher.status.label": "Situação:",
6545
- "organization.switcher.showing.count": "Exibindo {showing} de {total} organizações",
6546
- "organization.switcher.buttons.refresh.text": "Atualizar",
6547
- "organization.switcher.buttons.load_more.text": "Carregar Mais Organizações",
6548
- "organization.switcher.loading.more": "Carregando...",
6549
- "organization.switcher.no.organizations": "Nenhuma organização encontrada",
6550
- "organization.switcher.error.prefix": "Erro:",
6551
- "organization.profile.heading": "Perfil da Organização",
6552
- "organization.profile.loading": "Carregando organização...",
6553
- "organization.profile.error": "Falha ao carregar organização",
6554
- "organization.create.heading": "Criar Organização",
6555
- "organization.create.buttons.create_organization.text": "Criar Organização",
6556
- "organization.create.buttons.create_organization.loading.text": "Criando...",
6557
- "organization.create.buttons.cancel.text": "Cancelar",
6558
- "messages.loading.placeholder": "Carregando...",
6559
- "consent.required": "Obrigatório",
6560
- "consent.essential_claims": "Atributos essenciais",
6561
- "consent.optional_claims": "Atributos opcionais",
6562
- "consent.authorize_scope": "Permissões",
6563
- "consent.essential_claims.info": "Esses atributos são necessários para o funcionamento adequado do serviço.",
6564
- "consent.optional_claims.info": "Esses atributos são opcionais e podem ser fornecidos a seu critério.",
6565
- "consent.authorize_scope.info": "Essas permissões permitem que o serviço acesse recursos adicionais.",
6566
- "errors.heading": "Erro",
6567
- "errors.signin.initialization": "Ocorreu um erro ao inicializar. Tente novamente mais tarde.",
6568
- "errors.signin.flow.failure": "Ocorreu um erro durante o login. Tente novamente mais tarde.",
6569
- "errors.signin.flow.completion.failure": "Ocorreu um erro ao completar o login. Tente novamente mais tarde.",
6570
- "errors.signin.flow.passkeys.failure": "Ocorreu um erro ao entrar com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6571
- "errors.signin.flow.passkeys.completion.failure": "Ocorreu um erro ao completar o login com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6572
- "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6573
- "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de cadastro. Tente novamente mais tarde.",
6574
- "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de cadastro. Tente novamente mais tarde.",
6575
- "errors.signup.popup.failure": "Não foi possível continuar o cadastro na janela pop-up. Tente novamente.",
6576
- "errors.signup.components.not.available": "O formulário de cadastro não está disponível no momento. Tente novamente mais tarde.",
6577
- "errors.signin.components.not.available": "O formulário de login não está disponível no momento. Tente novamente mais tarde.",
6578
- "errors.signin.timeout": "O tempo permitido para concluir a etapa expirou."
6579
- }
6992
+ //#region src/utils/evaluateChangePasswordForm.ts
6993
+ /**
6994
+ * Evaluates a change-password form against a policy.
6995
+ *
6996
+ * Every predicate a change-password UI needs is derived here so the React and Vue
6997
+ * components stay pure rendering concerns and cannot drift apart on what counts as a
6998
+ * submittable form.
6999
+ *
7000
+ * @param values - The current field values.
7001
+ * @param policy - The rules the new password must satisfy.
7002
+ * @returns The derived flags plus the per-rule results.
7003
+ * @example
7004
+ * ```typescript
7005
+ * const {isValid, ruleResults} = evaluateChangePasswordForm(
7006
+ * {confirmPassword, newPassword},
7007
+ * {regex: '^.{12,}$'},
7008
+ * );
7009
+ * const canSubmit = !loading && isValid;
7010
+ * ```
7011
+ */
7012
+ const evaluateChangePasswordForm = (values, policy) => {
7013
+ const { confirmPassword, newPassword } = values;
7014
+ const ruleResults = evaluatePasswordPolicy_default(newPassword, policy);
7015
+ const meetsPolicy = ruleResults.every((rule) => rule.passed);
7016
+ const confirmMatches = newPassword === confirmPassword;
7017
+ return {
7018
+ confirmMatches,
7019
+ isValid: newPassword !== "" && confirmPassword !== "" && meetsPolicy && confirmMatches,
7020
+ meetsPolicy,
7021
+ ruleResults
7022
+ };
7023
+ };
7024
+ var evaluateChangePasswordForm_default = evaluateChangePasswordForm;
7025
+
7026
+ //#endregion
7027
+ //#region src/utils/resolveChangeCredentialPolicy.ts
7028
+ /**
7029
+ * Resolves the rules a change-credential form should enforce for the given credential.
7030
+ *
7031
+ * The organization's own policy, expressed as the credential attribute's `regex` in
7032
+ * `GET /users/me/meta`, is the sole source of truth: the SDK does not layer its own
7033
+ * character-class or length rules on top, since doing so could reject a value the
7034
+ * organization's policy accepts. When the schema carries no regex for this credential,
7035
+ * there is no policy to check client-side and the requirement checklist is simply empty.
7036
+ *
7037
+ * @param userSchema - The user type schema resolved by the provider, keyed by attribute.
7038
+ * @param attribute - The credential attribute this form manages (e.g. `password`, `pin`).
7039
+ * @param override - An explicit policy supplied by the caller, which wins outright.
7040
+ * @returns The policy to hand to {@link evaluatePasswordPolicy}.
7041
+ * @example
7042
+ * ```typescript
7043
+ * const policy = resolveChangeCredentialPolicy(userSchema, 'pin', undefined);
7044
+ * const results = evaluatePasswordPolicy(candidate, policy);
7045
+ * ```
7046
+ */
7047
+ const resolveChangeCredentialPolicy = (userSchema, attribute, override) => {
7048
+ if (override) return override;
7049
+ const schemaRegex = userSchema?.[attribute]?.regex;
7050
+ return schemaRegex ? { regex: schemaRegex } : {};
7051
+ };
7052
+ var resolveChangeCredentialPolicy_default = resolveChangeCredentialPolicy;
7053
+
7054
+ //#endregion
7055
+ //#region src/utils/supportsCredential.ts
7056
+ /**
7057
+ * Whether the signed-in user's type allows them to set the given credential for themselves.
7058
+ *
7059
+ * The user type schema from `GET /users/me/meta` is the only thing a client can check before
7060
+ * rendering. It says whether the credential is declared on this type at all, which is a property
7061
+ * of the type rather than of the account, so it cannot say whether this particular user has one
7062
+ * stored today. That second question is the server's to answer.
7063
+ *
7064
+ * Without this check the form would submit into a guaranteed failure. `POST
7065
+ * /users/me/update-credentials` rejects a write for a name not declared on the type, since the
7066
+ * entity layer only accepts schema-declared credential keys.
7067
+ *
7068
+ * An absent schema means the answer is not known yet, either because the profile is still loading
7069
+ * or because the consuming app never supplied one. Both resolve to `true` so a change-credential
7070
+ * affordance is never hidden on missing information alone, and so apps that do not wire up
7071
+ * `userSchema` keep the behaviour they had before this check existed.
7072
+ *
7073
+ * @param userSchema - The user type schema resolved by the provider, keyed by attribute.
7074
+ * @param attribute - The credential attribute to check (e.g. `password`, `pin`).
7075
+ * @returns `false` only when the schema is known and either defines no attribute named
7076
+ * `attribute` or defines one that isn't marked `credential: true`.
7077
+ * @example
7078
+ * ```typescript
7079
+ * if (!supportsCredential(userSchema, 'pin')) {
7080
+ * return null;
7081
+ * }
7082
+ * ```
7083
+ */
7084
+ const supportsCredential = (userSchema, attribute) => {
7085
+ if (!userSchema) return true;
7086
+ return userSchema[attribute]?.credential === true;
7087
+ };
7088
+ var supportsCredential_default = supportsCredential;
7089
+
7090
+ //#endregion
7091
+ //#region src/utils/mapCredentialUpdateError.ts
7092
+ /**
7093
+ * Maps a failure from the credential write path onto the field that caused it.
7094
+ *
7095
+ * `400` is the new password failing a server-side check. Everything else, including a
7096
+ * `403`, has no single field to blame here: this form collects no current-value field for
7097
+ * a `403` to attach to, since the server does not verify one on this path today.
7098
+ *
7099
+ * @param error - The value thrown by the credential update call.
7100
+ * @returns Where to show the failure and what to show.
7101
+ * @example
7102
+ * ```typescript
7103
+ * const {field, message, messageKey} = mapCredentialUpdateError(caughtError);
7104
+ * const text = message ?? t(messageKey);
7105
+ *
7106
+ * if (field) {
7107
+ * setFieldErrors({[field]: text});
7108
+ * } else {
7109
+ * setError(text);
7110
+ * }
7111
+ * ```
7112
+ */
7113
+ const GENERIC_MESSAGE_KEY = "user.change_password.generic.error";
7114
+ const mapCredentialUpdateError = (error$1) => {
7115
+ if ((error$1 instanceof ThunderIDAPIError ? error$1.statusCode : void 0) === 400 && error$1 instanceof ThunderIDError) return {
7116
+ field: "newPassword",
7117
+ message: error$1.message,
7118
+ messageKey: GENERIC_MESSAGE_KEY
7119
+ };
7120
+ if (error$1 instanceof ThunderIDError) return {
7121
+ field: null,
7122
+ message: error$1.message,
7123
+ messageKey: GENERIC_MESSAGE_KEY
7124
+ };
7125
+ return {
7126
+ field: null,
7127
+ messageKey: GENERIC_MESSAGE_KEY
7128
+ };
6580
7129
  };
6581
- var pt_BR_default = pt_BR;
7130
+ var mapCredentialUpdateError_default = mapCredentialUpdateError;
6582
7131
 
6583
7132
  //#endregion
6584
- //#region src/i18n/translations/pt-PT.ts
6585
- const pt_PT = {
6586
- metadata: {
6587
- localeCode: "pt-PT",
6588
- countryCode: "PT",
6589
- languageCode: "pt",
6590
- displayName: "Português (Portugal)",
6591
- direction: "ltr"
6592
- },
6593
- translations: {
6594
- "elements.buttons.signin.text": "Iniciar Sessão",
6595
- "elements.buttons.signout.text": "Terminar Sessão",
6596
- "elements.buttons.signup.text": "Registar-se",
6597
- "elements.buttons.submit.text": "Continuar",
6598
- "elements.buttons.facebook.text": "Iniciar Sessão com Facebook",
6599
- "elements.buttons.google.text": "Iniciar Sessão com Google",
6600
- "elements.buttons.github.text": "Iniciar Sessão com GitHub",
6601
- "elements.buttons.microsoft.text": "Iniciar Sessão com Microsoft",
6602
- "elements.buttons.linkedin.text": "Iniciar Sessão com LinkedIn",
6603
- "elements.buttons.ethereum.text": "Iniciar Sessão com Ethereum",
6604
- "elements.buttons.smsotp.text": "Iniciar Sessão com SMS",
6605
- "elements.buttons.multi.option.text": "Iniciar Sessão com {connection}",
6606
- "elements.buttons.social.text": "Iniciar Sessão com {connection}",
6607
- "elements.display.divider.or_separator": "OU",
6608
- "elements.display.copyable_text.copy": "Cópia",
6609
- "elements.display.copyable_text.copied": "Copiado!",
6610
- "elements.fields.generic.placeholder": "Introduza o seu {field}",
6611
- "elements.fields.username.label": "Nome de utilizador",
6612
- "elements.fields.username.placeholder": "Introduza o nome de utilizador",
6613
- "elements.fields.password.label": "Palavra-passe",
6614
- "elements.fields.password.placeholder": "Introduza a palavra-passe",
6615
- "elements.fields.first_name.label": "Primeiro nome",
6616
- "elements.fields.first_name.placeholder": "Introduza o primeiro nome",
6617
- "elements.fields.last_name.label": "Apelido",
6618
- "elements.fields.last_name.placeholder": "Introduza o apelido",
6619
- "elements.fields.email.label": "Email",
6620
- "elements.fields.email.placeholder": "Introduza o email",
6621
- "elements.fields.organization.name.label": "Nome da Organização",
6622
- "elements.fields.organization.handle.label": "Identificador da Organização",
6623
- "elements.fields.organization.description.label": "Descrição da Organização",
6624
- "elements.fields.organization.select.label": "Selecionar Organização",
6625
- "elements.fields.organization.select.placeholder": "Selecione uma organização",
6626
- "validations.required.field.error": "Este campo é obrigatório",
6627
- "validation.pattern.invalid": "Este valor não corresponde ao formato necessário.",
6628
- "validation.minLength.invalid": "Este valor é demasiado curto.",
6629
- "validation.maxLength.invalid": "Este valor é demasiado longo.",
6630
- "signin.heading": "Iniciar Sessão",
6631
- "signin.subheading": "Introduza as suas credenciais para continuar.",
6632
- "signin.images.app_logo.alt": "Logótipo da aplicação",
6633
- "signup.heading": "Registar-se",
6634
- "signup.subheading": "Crie uma nova conta para começar.",
6635
- "email.otp.heading": "Verificação OTP",
6636
- "email.otp.subheading": "Introduza o código enviado para o seu e-mail.",
6637
- "email.otp.buttons.submit.text": "Continuar",
6638
- "identifier.first.heading": "Iniciar Sessão",
6639
- "identifier.first.subheading": "Introduza o seu utilizador ou e-mail.",
6640
- "identifier.first.buttons.submit.text": "Continuar",
6641
- "sms.otp.heading": "Verificação OTP",
6642
- "sms.otp.subheading": "Introduza o código enviado para o seu telemóvel.",
6643
- "sms.otp.buttons.submit.text": "Continuar",
6644
- "totp.heading": "Verifique a sua identidade",
6645
- "totp.subheading": "Introduza o código da sua aplicação autenticadora.",
6646
- "totp.buttons.submit.text": "Continuar",
6647
- "username.password.buttons.submit.text": "Continuar",
6648
- "username.password.heading": "Iniciar Sessão",
6649
- "username.password.subheading": "Introduza o seu utilizador e palavra-passe para continuar.",
6650
- "passkey.button.use": "Iniciar sessão com Passkey",
6651
- "passkey.signin.heading": "Iniciar sessão com Passkey",
6652
- "passkey.register.heading": "Registar Passkey",
6653
- "passkey.register.description": "Crie uma passkey para iniciar sessão na sua conta com segurança sem palavra-passe.",
6654
- "user.profile.heading": "Perfil",
6655
- "user.profile.update.generic.error": "Ocorreu um erro ao actualizar o seu perfil. Tente novamente.",
6656
- "user.change_password.heading": "Alterar {credential}",
6657
- "user.change_password.new.label": "Novo {credential}",
6658
- "user.change_password.new.placeholder": "Introduza o seu novo {credentialLower}",
6659
- "user.change_password.confirm.label": "Confirmar novo {credential}",
6660
- "user.change_password.confirm.placeholder": "Introduza novamente o seu novo {credentialLower}",
6661
- "user.change_password.requirements.heading": "O seu {credentialLower} deve conter:",
6662
- "user.change_password.submit": "Atualizar {credential}",
6663
- "user.change_password.success": "O seu {credentialLower} foi atualizado.",
6664
- "user.change_password.mismatch.error": "Os {credentialLower}s não coincidem.",
6665
- "user.change_password.generic.error": "Ocorreu um erro ao actualizar o seu {credentialLower}. Tente novamente.",
6666
- "user.change_password.unavailable.heading": "Alteração de {credentialLower} indisponível",
6667
- "user.change_password.unavailable.description": "Contacte o seu administrador.",
6668
- "validation.password.pattern": "Corresponde ao formato exigido",
6669
- "organization.switcher.switch.organization": "Trocar Organização",
6670
- "organization.switcher.loading.placeholder.organizations": "A carregar organizações...",
6671
- "organization.switcher.members": "membros",
6672
- "organization.switcher.member": "membro",
6673
- "organization.switcher.create.organization": "Criar Organização",
6674
- "organization.switcher.manage.organizations": "Gerir Organizações",
6675
- "organization.switcher.buttons.manage.text": "Gerir",
6676
- "organization.switcher.organizations.heading": "Organizações",
6677
- "organization.switcher.buttons.switch.text": "Trocar",
6678
- "organization.switcher.no.access": "Sem Acesso",
6679
- "organization.switcher.status.label": "Estado:",
6680
- "organization.switcher.showing.count": "A mostrar {showing} de {total} organizações",
6681
- "organization.switcher.buttons.refresh.text": "Actualizar",
6682
- "organization.switcher.buttons.load_more.text": "Carregar Mais Organizações",
6683
- "organization.switcher.loading.more": "A carregar...",
6684
- "organization.switcher.no.organizations": "Nenhuma organização encontrada",
6685
- "organization.switcher.error.prefix": "Erro:",
6686
- "organization.profile.heading": "Perfil da Organização",
6687
- "organization.profile.loading": "A carregar organização...",
6688
- "organization.profile.error": "Falha ao carregar organização",
6689
- "organization.create.heading": "Criar Organização",
6690
- "organization.create.buttons.create_organization.text": "Criar Organização",
6691
- "organization.create.buttons.create_organization.loading.text": "A criar...",
6692
- "organization.create.buttons.cancel.text": "Cancelar",
6693
- "messages.loading.placeholder": "A carregar...",
6694
- "consent.required": "Obrigatório",
6695
- "consent.essential_claims": "Atributos essenciais",
6696
- "consent.optional_claims": "Atributos opcionais",
6697
- "consent.authorize_scope": "Permissões",
6698
- "consent.essential_claims.info": "Estes atributos são necessários para o correto funcionamento do serviço.",
6699
- "consent.optional_claims.info": "Estes atributos são opcionais e podem ser fornecidos ao seu critério.",
6700
- "consent.authorize_scope.info": "Estas permissões permitem que o serviço aceda a funcionalidades adicionais.",
6701
- "errors.heading": "Erro",
6702
- "errors.signin.initialization": "Ocorreu um erro ao inicializar. Tente novamente mais tarde.",
6703
- "errors.signin.flow.failure": "Ocorreu um erro durante o início de sessão. Tente novamente mais tarde.",
6704
- "errors.signin.flow.completion.failure": "Ocorreu um erro ao completar o início de sessão. Tente novamente mais tarde.",
6705
- "errors.signin.flow.passkeys.failure": "Ocorreu um erro ao iniciar sessão com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6706
- "errors.signin.flow.passkeys.completion.failure": "Ocorreu um erro ao completar o início de sessão com as chaves de acesso (passkeys). Tente novamente mais tarde.",
6707
- "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6708
- "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de registo. Tente novamente mais tarde.",
6709
- "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de registo. Tente novamente mais tarde.",
6710
- "errors.signup.popup.failure": "Não foi possível continuar o registo na janela pop-up. Tente novamente.",
6711
- "errors.signup.components.not.available": "O formulário de registo não está disponível de momento. Tente novamente mais tarde.",
6712
- "errors.signin.components.not.available": "O formulário de início de sessão não está disponível de momento. Tente novamente mais tarde.",
6713
- "errors.signin.timeout": "O tempo permitido para completar a etapa expirou."
7133
+ //#region src/utils/mapSelectPageError.ts
7134
+ /**
7135
+ * Describes a failed select page load in a form that is safe to send to the browser.
7136
+ *
7137
+ * The text of a failure is whatever the management API, or a proxy in front of it, replied, so it can carry data the
7138
+ * SDK does not control. It is logged on the server where the call is made, and it is not copied into this result. Only
7139
+ * the status of an API error is carried over.
7140
+ *
7141
+ * @param error - The value thrown by the page loader.
7142
+ * @param resource - What was being loaded, in plain words such as `users`. It names the resource in the message.
7143
+ * @returns The message and, for an API error, the status.
7144
+ * @example
7145
+ * ```typescript
7146
+ * mapSelectPageError(new ThunderIDAPIError('...', 'getUsers-ForbiddenError-001', 'node', 403), 'users');
7147
+ * // {message: 'Failed to load users (HTTP 403).', statusCode: 403}
7148
+ * ```
7149
+ *
7150
+ * @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
7151
+ */
7152
+ const mapSelectPageError = (error$1, resource = "options") => {
7153
+ const statusCode = error$1 instanceof ThunderIDAPIError ? error$1.statusCode : void 0;
7154
+ return {
7155
+ message: `Failed to load ${resource}${statusCode ? ` (HTTP ${statusCode})` : ""}.`,
7156
+ ...statusCode === void 0 ? {} : { statusCode }
7157
+ };
7158
+ };
7159
+ var mapSelectPageError_default = mapSelectPageError;
7160
+
7161
+ //#endregion
7162
+ //#region src/utils/resolveMeta.ts
7163
+ /**
7164
+ * Resolves a dot-path expression against a FlowMetadataResponse object.
7165
+ *
7166
+ * Supports both camelCase paths (e.g. `logoUrl`) and snake_case API responses
7167
+ * (e.g. `logo_url`). When a camelCase segment is not found directly, the
7168
+ * function falls back to its snake_case equivalent.
7169
+ *
7170
+ * @example
7171
+ * resolveMeta('application.name', meta) // → 'My App'
7172
+ * resolveMeta('ou.name', meta) // → 'My Org'
7173
+ *
7174
+ * @param path - Dot-separated path into the meta object (e.g. 'application.name')
7175
+ * @param meta - The FlowMetadataResponse to look up
7176
+ * @returns The resolved string value, or empty string if not found
7177
+ */
7178
+ function resolveMeta(path, meta) {
7179
+ const value = path.split(".").reduce((current, part) => {
7180
+ if (current == null || typeof current !== "object") return;
7181
+ const obj = current;
7182
+ const snakePart = part.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
7183
+ return part in obj ? obj[part] : obj[snakePart];
7184
+ }, meta);
7185
+ return value != null ? String(value) : "";
7186
+ }
7187
+
7188
+ //#endregion
7189
+ //#region src/utils/isTranslationFlowTemplateLiteral.ts
7190
+ /**
7191
+ * Regular expression to match a translation flow template literal `{{t(key)}}` (exact, full-string match).
7192
+ * Optional whitespace around `{{` / `}}` is allowed.
7193
+ */
7194
+ const TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN = /^\{\{\s*t\([^)]+\)\s*\}\}$/;
7195
+ /**
7196
+ * Regular expression to extract the key from a translation flow template literal `{{t(key)}}`.
7197
+ */
7198
+ const TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN = /^\{\{\s*t\(([^)]+)\)\s*\}\}$/;
7199
+ /**
7200
+ * Check if a string is exactly a translation flow template literal (`{{ t(key) }}`).
7201
+ *
7202
+ * This checks that the **entire** string is the template pattern. Use
7203
+ * {@link FLOW_TEMPLATE_LITERAL_REGEX} from `parseFlowTemplateLiteral` to detect
7204
+ * templates embedded inside a larger string.
7205
+ *
7206
+ * @param value - The string to test.
7207
+ * @returns `true` if the trimmed value matches the pattern, `false` otherwise.
7208
+ *
7209
+ * @example
7210
+ * ```typescript
7211
+ * isTranslationFlowTemplateLiteral('{{ t(signin:heading) }}') // true
7212
+ * isTranslationFlowTemplateLiteral('hello world') // false
7213
+ * isTranslationFlowTemplateLiteral('Login via {{ t(key) }}') // false — embedded, not exact
7214
+ * ```
7215
+ */
7216
+ function isTranslationFlowTemplateLiteral(value) {
7217
+ return TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN.test(value.trim());
7218
+ }
7219
+
7220
+ //#endregion
7221
+ //#region src/utils/parseFlowTemplateLiteral.ts
7222
+ /**
7223
+ * Regular expression to detect a flow template literal wrapped in double braces.
7224
+ * Matches patterns like `{{ t(key) }}`, `{{ meta(key) }}`, etc.
7225
+ *
7226
+ * Note: this regex has no `g` flag — use `new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, 'g')`
7227
+ * when global replacement is needed (e.g. in resolveFlowTemplateLiterals).
7228
+ */
7229
+ const FLOW_TEMPLATE_LITERAL_REGEX = /\{\{\s*([^}]+)\s*\}\}/;
7230
+ /**
7231
+ * Regular expression to parse a function-call expression inside flow template braces.
7232
+ * Matches `funcName(arg)` and captures the function name and argument.
7233
+ */
7234
+ const FLOW_TEMPLATE_FUNCTION_REGEX = /^(\w+)\(([^)]+)\)$/;
7235
+ /**
7236
+ * Flow template literal types supported by the SDK.
7237
+ *
7238
+ * Values correspond to the function name used in the template expression,
7239
+ * so that a `{ t }` object from `useTranslation()` can be passed directly
7240
+ * as a handler map.
7241
+ */
7242
+ let FlowTemplateLiteralType = /* @__PURE__ */ function(FlowTemplateLiteralType$1) {
7243
+ /** Meta template literal — `{{ meta(path) }}` — resolves against flow/page metadata */
7244
+ FlowTemplateLiteralType$1["META"] = "meta";
7245
+ /** Translation template literal — `{{ t(key) }}` */
7246
+ FlowTemplateLiteralType$1["TRANSLATION"] = "t";
7247
+ /** Unknown or unsupported template literal format */
7248
+ FlowTemplateLiteralType$1["UNKNOWN"] = "unknown";
7249
+ return FlowTemplateLiteralType$1;
7250
+ }({});
7251
+ /**
7252
+ * Parse a flow template literal content string and extract its type and key.
7253
+ *
7254
+ * Supports function-call expressions like:
7255
+ * - `t(signin:heading)` → type `TRANSLATION`, key `"signin:heading"`
7256
+ * - `meta(application.name)` → type `META`, key `"application.name"`
7257
+ *
7258
+ * Surrounding quotes on the key argument are stripped automatically.
7259
+ *
7260
+ * @param content - The content inside the template literal braces (without `{{ }}`).
7261
+ * @returns Parsed flow template literal information.
7262
+ *
7263
+ * @example
7264
+ * ```typescript
7265
+ * parseFlowTemplateLiteral('t(signin:heading)')
7266
+ * // { type: FlowTemplateLiteralType.TRANSLATION, key: 'signin:heading', originalValue: 't(signin:heading)' }
7267
+ *
7268
+ * parseFlowTemplateLiteral('meta(application.name)')
7269
+ * // { type: FlowTemplateLiteralType.META, key: 'application.name', originalValue: 'meta(application.name)' }
7270
+ * ```
7271
+ */
7272
+ function parseFlowTemplateLiteral(content) {
7273
+ const originalValue = content;
7274
+ const match = FLOW_TEMPLATE_FUNCTION_REGEX.exec(content);
7275
+ if (!match) return {
7276
+ originalValue,
7277
+ type: FlowTemplateLiteralType.UNKNOWN
7278
+ };
7279
+ const [, functionName, rawKey] = match;
7280
+ const key = rawKey.trim().replace(/^['"]|['"]$/g, "");
7281
+ switch (functionName) {
7282
+ case FlowTemplateLiteralType.TRANSLATION: return {
7283
+ key,
7284
+ originalValue,
7285
+ type: FlowTemplateLiteralType.TRANSLATION
7286
+ };
7287
+ case FlowTemplateLiteralType.META: return {
7288
+ key,
7289
+ originalValue,
7290
+ type: FlowTemplateLiteralType.META
7291
+ };
7292
+ default: return {
7293
+ originalValue,
7294
+ type: FlowTemplateLiteralType.UNKNOWN
7295
+ };
7296
+ }
7297
+ }
7298
+
7299
+ //#endregion
7300
+ //#region src/utils/resolveFlowTemplateLiterals.ts
7301
+ /**
7302
+ * Global version of {@link FLOW_TEMPLATE_LITERAL_REGEX} for use with `String.prototype.replace`.
7303
+ */
7304
+ const FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL = new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, "g");
7305
+ /**
7306
+ * Resolves a `{{ t(key) }}` translation key, converting its colon-separated namespace to dots
7307
+ * e.g. "signin:fields.password.label" → "signin.fields.password.label".
7308
+ */
7309
+ function resolveTranslation(key, t) {
7310
+ return t(key.replace(/:/g, "."));
7311
+ }
7312
+ /**
7313
+ * Resolves all flow template literal expressions in a string.
7314
+ *
7315
+ * Supported patterns:
7316
+ * - `{{ t(key) }}` — resolved via the i18n translation function.
7317
+ * Colon-separated namespaces are converted to dots:
7318
+ * `{{ t(signin:heading.label) }}` → `t('signin.heading.label')`
7319
+ * - `{{ meta(path) }}` — resolved via a dot-path lookup on FlowMetadataResponse.
7320
+ * `{{ meta(application.name) }}` → `meta.application?.name`
7321
+ *
7322
+ * Flow template literals can be embedded inside larger strings:
7323
+ * `"Login using {{ meta(application.name) }}"` → `"Login using My App"`
7324
+ *
7325
+ * A meta field can itself hold a translation reference instead of final display text — that case is
7326
+ * detected and resolved via `t()` too, so the raw template never reaches the screen.
7327
+ *
7328
+ * Unrecognized expressions are left unchanged.
7329
+ *
7330
+ * @template TFn - The concrete translation function type.
7331
+ *
7332
+ * @param text - The string to resolve (may contain zero or more flow template literals)
7333
+ * @param options - Resolution context: translation function and optional flow metadata
7334
+ * @returns The resolved string
7335
+ */
7336
+ function resolveFlowTemplateLiterals(text, { t, meta }) {
7337
+ if (!text) return "";
7338
+ return text.replace(FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL, (match, content) => {
7339
+ const parsed = parseFlowTemplateLiteral(content.trim());
7340
+ if (parsed.type === FlowTemplateLiteralType.TRANSLATION && parsed.key) return resolveTranslation(parsed.key, t);
7341
+ if (parsed.type === FlowTemplateLiteralType.META && parsed.key && meta) {
7342
+ const value = resolveMeta(parsed.key, meta);
7343
+ if (isTranslationFlowTemplateLiteral(value)) {
7344
+ const innerKey = value.trim().match(TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN)[1];
7345
+ return resolveTranslation(innerKey, t);
7346
+ }
7347
+ return value;
7348
+ }
7349
+ return match;
7350
+ });
7351
+ }
7352
+
7353
+ //#endregion
7354
+ //#region src/utils/parseKeyValuePairs.ts
7355
+ /**
7356
+ * Reads the label and value pairs a KEY_VALUE_LIST renders from the raw value found under its
7357
+ * `source` key in `additionalData`. The server publishes them as a JSON-encoded array, since
7358
+ * additional data carries strings, so both an array and its encoding are accepted.
7359
+ *
7360
+ * Entries that are not objects, or that carry no value, are dropped, since an empty row tells the
7361
+ * user nothing. Anything that is not a list of pairs yields none.
7362
+ *
7363
+ * @param raw - The raw value found under the source key.
7364
+ * @returns The pairs to render, empty when the value holds none.
7365
+ *
7366
+ * @example
7367
+ * ```typescript
7368
+ * parseKeyValuePairs('[{"label":"Email","value":"a@b.com"}]'); // [{label: 'Email', value: 'a@b.com'}]
7369
+ * parseKeyValuePairs('not json'); // []
7370
+ * ```
7371
+ */
7372
+ const parseKeyValuePairs = (raw) => {
7373
+ let parsed = raw;
7374
+ if (typeof raw === "string") try {
7375
+ parsed = JSON.parse(raw);
7376
+ } catch {
7377
+ return [];
6714
7378
  }
7379
+ if (!Array.isArray(parsed)) return [];
7380
+ return parsed.filter((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry)).map((entry) => ({
7381
+ label: typeof entry["label"] === "string" ? entry["label"] : "",
7382
+ value: typeof entry["value"] === "string" ? entry["value"] : ""
7383
+ })).filter((pair) => pair.value !== "");
6715
7384
  };
6716
- var pt_PT_default = pt_PT;
7385
+ var parseKeyValuePairs_default = parseKeyValuePairs;
6717
7386
 
6718
7387
  //#endregion
6719
- //#region src/i18n/translations/ta-IN.ts
6720
- const ta_IN = {
6721
- metadata: {
6722
- localeCode: "ta-IN",
6723
- countryCode: "IN",
6724
- languageCode: "ta",
6725
- displayName: "தமிழ் (இலங்கை)",
6726
- direction: "ltr"
6727
- },
6728
- translations: {
6729
- "elements.buttons.signin.text": "உள்நுழை",
6730
- "elements.buttons.signout.text": "வெளியேறு",
6731
- "elements.buttons.signup.text": "பதிவு செய்",
6732
- "elements.buttons.submit.text": "தொடரவும்",
6733
- "elements.buttons.facebook.text": "Facebook மூலம் தொடரவும்",
6734
- "elements.buttons.google.text": "Google மூலம் தொடரவும்",
6735
- "elements.buttons.github.text": "GitHub மூலம் தொடரவும்",
6736
- "elements.buttons.microsoft.text": "Microsoft மூலம் தொடரவும்",
6737
- "elements.buttons.linkedin.text": "LinkedIn மூலம் தொடரவும்",
6738
- "elements.buttons.ethereum.text": "Ethereum மூலம் உள்நுழை",
6739
- "elements.buttons.smsotp.text": "SMS மூலம் தொடரவும்",
6740
- "elements.buttons.multi.option.text": "{connection} மூலம் தொடரவும்",
6741
- "elements.buttons.social.text": "{connection} மூலம் தொடரவும்",
6742
- "elements.display.divider.or_separator": "அல்லது",
6743
- "elements.display.copyable_text.copy": "நகலெடுக்கவும்",
6744
- "elements.display.copyable_text.copied": "நகலெடுக்கப்பட்டது!",
6745
- "elements.fields.generic.placeholder": "{field} உள்ளிடவும்",
6746
- "elements.fields.username.label": "பயனர்பெயர்",
6747
- "elements.fields.username.placeholder": "பயனர்பெயரை உள்ளிடவும்",
6748
- "elements.fields.password.label": "கடவுச்சொல்",
6749
- "elements.fields.password.placeholder": "கடவுச்சொலை உள்ளிடவும்",
6750
- "elements.fields.first_name.label": "முதல் பெயர்",
6751
- "elements.fields.first_name.placeholder": "உங்கள் முதல் பெயரை உள்ளிடவும்",
6752
- "elements.fields.last_name.label": "கடைசி பெயர்",
6753
- "elements.fields.last_name.placeholder": "உங்கள் கடைசி பெயரை உள்ளிடவும்",
6754
- "elements.fields.email.label": "மின்னஞ்சல்",
6755
- "elements.fields.email.placeholder": "உங்கள் மின்னஞ்சலை உள்ளிடவும்",
6756
- "elements.fields.organization.name.label": "அமைப்பின் பெயர்",
6757
- "elements.fields.organization.handle.label": "அமைப்பு கையாளுதல்",
6758
- "elements.fields.organization.description.label": "அமைப்பு விளக்கம்",
6759
- "elements.fields.organization.select.label": "அமைப்பை தேர்ந்தெடு",
6760
- "elements.fields.organization.select.placeholder": "அமைப்பை தெரிந்தெடுக்கவும்",
6761
- "validations.required.field.error": "இந்த புலம் தேவை",
6762
- "validation.pattern.invalid": "இந்த மதிப்பு தேவையான வடிவத்துடன் பொருந்தவில்லை.",
6763
- "validation.minLength.invalid": "இந்த மதிப்பு மிகவும் குறுகியது.",
6764
- "validation.maxLength.invalid": "இந்த மதிப்பு மிகவும் நீளமானது.",
6765
- "signin.heading": "உள்நுழை",
6766
- "signin.subheading": "தொடர உங்கள் சான்றுகளை உள்ளிடவும்.",
6767
- "signin.images.app_logo.alt": "பயன்பாட்டு லோகோ",
6768
- "signup.heading": "பதிவு செய்",
6769
- "signup.subheading": "தொடங்க புதிய கணக்கை உருவாக்கவும்.",
6770
- "email.otp.heading": "OTP சரிபார்ப்பு",
6771
- "email.otp.subheading": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
6772
- "email.otp.buttons.submit.text": "தொடரவும்",
6773
- "identifier.first.heading": "உள்நுழை",
6774
- "identifier.first.subheading": "பயனர்பெயர் அல்லது மின்னஞ்சல் முகவரியை உள்ளிடவும்.",
6775
- "identifier.first.buttons.submit.text": "தொடரவும்",
6776
- "sms.otp.heading": "OTP சரிபார்ப்பு",
6777
- "sms.otp.subheading": "உங்கள் தொலைபேசிக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
6778
- "sms.otp.buttons.submit.text": "தொடரவும்",
6779
- "totp.heading": "உங்கள் அடையாளத்தை சரிபார்க்கவும்",
6780
- "totp.subheading": "உங்கள் அங்கீகரிப்பு செயலியில் உள்ள குறியீட்டை உள்ளிடவும்.",
6781
- "totp.buttons.submit.text": "தொடரவும்",
6782
- "username.password.buttons.submit.text": "தொடரவும்",
6783
- "username.password.heading": "உள்நுழை",
6784
- "username.password.subheading": "தொடர உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.",
6785
- "passkey.button.use": "Passkey மூலம் உள்நுழையவும்",
6786
- "passkey.signin.heading": "Passkey மூலம் உள்நுழையவும்",
6787
- "passkey.register.heading": "Passkey-ஐ பதிவு செய்யவும்",
6788
- "passkey.register.description": "கடவுச்சொல் இல்லாமல் பாதுகாப்பாக உள்நுழைய ஒரு passkey-ஐ உருவாக்கவும்.",
6789
- "user.profile.heading": "சுயவிவரம்",
6790
- "user.profile.update.generic.error": "உங்கள் சுயவிவரத்தை புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
6791
- "user.change_password.heading": "{credential} மாற்றவும்",
6792
- "user.change_password.new.label": "புதிய {credential}",
6793
- "user.change_password.new.placeholder": "உங்கள் புதிய {credentialLower}-ஐ உள்ளிடவும்",
6794
- "user.change_password.confirm.label": "புதிய {credential}-ஐ உறுதிப்படுத்தவும்",
6795
- "user.change_password.confirm.placeholder": "உங்கள் புதிய {credentialLower}-ஐ மீண்டும் உள்ளிடவும்",
6796
- "user.change_password.requirements.heading": "உங்கள் {credentialLower} பின்வருவனவற்றைக் கொண்டிருக்க வேண்டும்:",
6797
- "user.change_password.submit": "{credential}-ஐ புதுப்பிக்கவும்",
6798
- "user.change_password.success": "உங்கள் {credentialLower} புதுப்பிக்கப்பட்டது.",
6799
- "user.change_password.mismatch.error": "{credentialLower} பொருந்தவில்லை.",
6800
- "user.change_password.generic.error": "உங்கள் {credentialLower}-ஐ புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
6801
- "user.change_password.unavailable.heading": "{credential} மாற்றங்கள் கிடைக்கவில்லை",
6802
- "user.change_password.unavailable.description": "உங்கள் நிர்வாகியை தொடர்பு கொள்ளவும்.",
6803
- "validation.password.pattern": "தேவையான வடிவமைப்பிற்கு பொருந்துகிறது",
6804
- "organization.switcher.switch.organization": "அமைப்பை மாற்று",
6805
- "organization.switcher.loading.placeholder.organizations": "அமைப்புகள் ஏற்றப்படுகின்றன...",
6806
- "organization.switcher.members": "உறுப்பினர்கள்",
6807
- "organization.switcher.member": "உறுப்பினர்",
6808
- "organization.switcher.create.organization": "அமைப்பை உருவாக்கு",
6809
- "organization.switcher.manage.organizations": "அமைப்புகளை நிர்வகிக்கவும்",
6810
- "organization.switcher.buttons.manage.text": "நிர்வகி",
6811
- "organization.switcher.organizations.heading": "அமைப்புகள்",
6812
- "organization.switcher.buttons.switch.text": "மாற்று",
6813
- "organization.switcher.no.access": "அணுகல் இல்லை",
6814
- "organization.switcher.status.label": "நிலை:",
6815
- "organization.switcher.showing.count": "மொத்த {total} அமைப்புகளில் {showing} காட்டப்படுகிறது",
6816
- "organization.switcher.buttons.refresh.text": "புதுப்பி",
6817
- "organization.switcher.buttons.load_more.text": "மேலும் அமைப்புகளை ஏற்று",
6818
- "organization.switcher.loading.more": "ஏற்றப்படுகிறது...",
6819
- "organization.switcher.no.organizations": "எந்த அமைப்பும் கிடைக்கவில்லை",
6820
- "organization.switcher.error.prefix": "பிழை:",
6821
- "organization.profile.heading": "அமைப்பு சுயவிவரம்",
6822
- "organization.profile.loading": "அமைப்பை ஏற்றுகிறது...",
6823
- "organization.profile.error": "அமைப்பை ஏற்ற முடியவில்லை",
6824
- "organization.create.heading": "அமைப்பை உருவாக்கு",
6825
- "organization.create.buttons.create_organization.text": "அமைப்பை உருவாக்கு",
6826
- "organization.create.buttons.create_organization.loading.text": "உருவாக்கப்படுகிறது...",
6827
- "organization.create.buttons.cancel.text": "ரத்து செய்",
6828
- "messages.loading.placeholder": "ஏற்றப்படுகிறது...",
6829
- "consent.required": "தேவையானது",
6830
- "consent.essential_claims": "அத்தியாவசிய பண்புகள்",
6831
- "consent.optional_claims": "விருப்பத் பண்புகள்",
6832
- "consent.authorize_scope": "அனுமதிகள்",
6833
- "consent.essential_claims.info": "சேவை சரியாக செயல்பட இந்த பண்புகள் தேவை.",
6834
- "consent.optional_claims.info": "இந்த பண்புகள் விருப்பத்தேர்வு மற்றும் உங்கள் விருப்பப்படி வழங்கப்படலாம்.",
6835
- "consent.authorize_scope.info": "இந்த அனுமதிகள் கூடுதல் அம்சங்களை அணுக சேவைக்கு உதவுகின்றன.",
6836
- "errors.heading": "பிழை",
6837
- "errors.signin.initialization": "தொடக்கத்தில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6838
- "errors.signin.flow.failure": "உள்நுழைவு செயல்பாட்டின் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6839
- "errors.signin.flow.completion.failure": "உள்நுழைவு செயல்பாட்டை முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6840
- "errors.signin.flow.passkeys.failure": "பாஸ்கீக்கள் மூலம் உள்நுழையும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6841
- "errors.signin.flow.passkeys.completion.failure": "பாஸ்கீ உள்நுழைவு முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6842
- "errors.signup.initialization": "தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6843
- "errors.signup.flow.failure": "பதிவு செய்யும் செயல்பாட்டில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6844
- "errors.signup.flow.initialization.failure": "பதிவு செய்யும் செயல்பாட்டை தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6845
- "errors.signup.popup.failure": "பாப்-அப் சாளரத்தில் பதிவைத் தொடர முடியவில்லை. மீண்டும் முயற்சிக்கவும்.",
6846
- "errors.signup.components.not.available": "பதிவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6847
- "errors.signin.components.not.available": "உள்நுழைவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6848
- "errors.signin.timeout": "படிநிலையை முடிக்க அனுமதிக்கப்பட்ட நேரம் காலாவதியானது."
7388
+ //#region src/utils/countryCodeToFlagEmoji.ts
7389
+ /**
7390
+ * Converts a two-letter ISO 3166-1 alpha-2 country code to a flag emoji using
7391
+ * Unicode Regional Indicator Symbols (U+1F1E6–U+1F1FF).
7392
+ *
7393
+ * @param countryCode - Two-letter uppercase country code (e.g. "US", "GB")
7394
+ * @returns Flag emoji string (e.g. "🇺🇸", "🇬🇧")
7395
+ */
7396
+ function countryCodeToFlagEmoji(countryCode) {
7397
+ return countryCode.toUpperCase().split("").map((char) => String.fromCodePoint(127397 + char.charCodeAt(0))).join("");
7398
+ }
7399
+
7400
+ //#endregion
7401
+ //#region src/utils/resolveLocaleDisplayName.ts
7402
+ /**
7403
+ * Resolves a BCP 47 locale tag to a human-readable display name using the
7404
+ * `Intl.DisplayNames` API.
7405
+ *
7406
+ * Falls back to the raw locale code if the runtime does not support
7407
+ * `Intl.DisplayNames` or if resolution returns `undefined`.
7408
+ *
7409
+ * @param locale - BCP 47 locale tag to resolve (e.g. "en", "fr", "zh-Hant")
7410
+ * @param displayLocale - Locale used for the display name language (defaults to "en")
7411
+ * @returns Human-readable language name (e.g. "English", "French")
7412
+ */
7413
+ function resolveLocaleDisplayName(locale, displayLocale) {
7414
+ try {
7415
+ return new Intl.DisplayNames([displayLocale], { type: "language" }).of(locale) ?? locale;
7416
+ } catch {
7417
+ return locale;
6849
7418
  }
7419
+ }
7420
+
7421
+ //#endregion
7422
+ //#region src/utils/resolveLocaleEmoji.ts
7423
+ /**
7424
+ * Maps BCP 47 language subtags to ISO 3166-1 alpha-2 country codes used for
7425
+ * flag emoji resolution when no country subtag is present in the locale.
7426
+ */
7427
+ const LANGUAGE_TO_COUNTRY = {
7428
+ am: "ET",
7429
+ ar: "SA",
7430
+ bn: "BD",
7431
+ cs: "CZ",
7432
+ da: "DK",
7433
+ de: "DE",
7434
+ el: "GR",
7435
+ en: "GB",
7436
+ es: "ES",
7437
+ fa: "IR",
7438
+ fi: "FI",
7439
+ fr: "FR",
7440
+ he: "IL",
7441
+ hi: "IN",
7442
+ hu: "HU",
7443
+ id: "ID",
7444
+ it: "IT",
7445
+ ja: "JP",
7446
+ ko: "KR",
7447
+ ml: "IN",
7448
+ ms: "MY",
7449
+ nl: "NL",
7450
+ no: "NO",
7451
+ pl: "PL",
7452
+ pt: "PT",
7453
+ ro: "RO",
7454
+ ru: "RU",
7455
+ si: "LK",
7456
+ sk: "SK",
7457
+ sv: "SE",
7458
+ sw: "KE",
7459
+ ta: "IN",
7460
+ th: "TH",
7461
+ tr: "TR",
7462
+ uk: "UA",
7463
+ ur: "PK",
7464
+ vi: "VN",
7465
+ zh: "CN"
6850
7466
  };
6851
- var ta_IN_default = ta_IN;
7467
+ /**
7468
+ * Resolves a BCP 47 locale tag to a flag emoji.
7469
+ *
7470
+ * Resolution order:
7471
+ * 1. Country subtag when present (e.g. `"en-US"` → 🇺🇸)
7472
+ * 2. Language-to-country fallback map (e.g. `"en"` → 🇬🇧)
7473
+ * 3. Globe emoji 🌐 for unrecognised codes
7474
+ *
7475
+ * @param locale - BCP 47 locale tag (e.g. "en", "en-US", "fr-CA")
7476
+ * @returns Flag or globe emoji string
7477
+ */
7478
+ function resolveLocaleEmoji(locale) {
7479
+ const parts = locale.split("-");
7480
+ const languageCode = parts[0].toLowerCase();
7481
+ const countryCode = (parts.length > 1 ? parts[parts.length - 1].toUpperCase() : void 0) ?? LANGUAGE_TO_COUNTRY[languageCode];
7482
+ if (countryCode?.length !== 2) return "🌐";
7483
+ return countryCodeToFlagEmoji(countryCode);
7484
+ }
7485
+ var resolveLocaleEmoji_default = resolveLocaleEmoji;
6852
7486
 
6853
7487
  //#endregion
6854
- //#region src/i18n/translations/si-LK.ts
6855
- const si_LK = {
6856
- metadata: {
6857
- localeCode: "si_LK",
6858
- countryCode: "LK",
6859
- languageCode: "si",
6860
- displayName: "සිංහල (ශ්‍රී ලංකාව)",
6861
- direction: "ltr"
6862
- },
6863
- translations: {
6864
- "elements.buttons.signin.text": "ලොග් වෙන්න",
6865
- "elements.buttons.signout.text": "ඉවත් වෙන්න",
6866
- "elements.buttons.signup.text": "ලියාපදිංචි වෙන්න",
6867
- "elements.buttons.submit.text": "ඉදිරියට යන්න",
6868
- "elements.buttons.facebook.text": "Facebook සමග ඉදිරියට යන්න",
6869
- "elements.buttons.google.text": "Google සමග ඉදිරියට යන්න",
6870
- "elements.buttons.github.text": "GitHub සමග ඉදිරියට යන්න",
6871
- "elements.buttons.microsoft.text": "Microsoft සමග ඉදිරියට යන්න",
6872
- "elements.buttons.linkedin.text": "LinkedIn සමග ඉදිරියට යන්න",
6873
- "elements.buttons.ethereum.text": "Ethereum සමග ඉදිරියට යන්න",
6874
- "elements.buttons.smsotp.text": "SMS සමග ඉදිරියට යන්න",
6875
- "elements.buttons.multi.option.text": "{connection} සමග ඉදිරියට යන්න",
6876
- "elements.buttons.social.text": "{connection} සමග ඉදිරියට යන්න",
6877
- "elements.display.divider.or_separator": "හෝ",
6878
- "elements.display.copyable_text.copy": "පිටපත් කරන්න",
6879
- "elements.display.copyable_text.copied": "පිටපත් කළා!",
6880
- "elements.fields.generic.placeholder": "ඔබේ {field} ඇතුලත් කරන්න",
6881
- "elements.fields.username.label": "පරිශීලක නාමය",
6882
- "elements.fields.username.placeholder": "පරිශීලක නාමය ඇතුලත් කරන්න",
6883
- "elements.fields.password.label": "මුරපදය",
6884
- "elements.fields.password.placeholder": "මුරපදය ඇතුලත් කරන්න",
6885
- "elements.fields.first_name.label": "මුල් නම",
6886
- "elements.fields.first_name.placeholder": "ඔබේ මුල් නම ඇතුලත් කරන්න",
6887
- "elements.fields.last_name.label": "අවසන් නම",
6888
- "elements.fields.last_name.placeholder": "ඔබේ අවසන් නම ඇතුලත් කරන්න",
6889
- "elements.fields.email.label": "ඊමේල්",
6890
- "elements.fields.email.placeholder": "ඔබේ ඊමේල් ලිපිනය ඇතුලත් කරන්න",
6891
- "elements.fields.organization.name.label": "සංවිධානයේ නම",
6892
- "elements.fields.organization.handle.label": "සංවිධාන හැඩුනුම්පත",
6893
- "elements.fields.organization.description.label": "සංවිධානයේ විස්තරය",
6894
- "elements.fields.organization.select.label": "සංවිධානය තෝරන්න",
6895
- "elements.fields.organization.select.placeholder": "සංවිධානයක් සැළුම් කරන්න",
6896
- "validations.required.field.error": "මෙම ක්ෂේත්‍රය අවශ්‍යයි",
6897
- "validation.pattern.invalid": "මෙම අගය අවශ්‍ය ආකෘතියට නොගැලපේ.",
6898
- "validation.minLength.invalid": "මෙම අගය ඉතා කෙටියි.",
6899
- "validation.maxLength.invalid": "මෙම අගය ඉතා දිගයි.",
6900
- "signin.heading": "ලොග් වෙන්න",
6901
- "signin.subheading": "ඉදිරියට යාමට ඔබේ සත්‍යාපන තොරතුරු ඇතුළත් කරන්න.",
6902
- "signin.images.app_logo.alt": "යෙදුමේ ලාංඡනය",
6903
- "signup.heading": "ලියාපදිංචි වන්න",
6904
- "signup.subheading": "ආරම්භ කිරීමට නව ගිණුමක් සාදන්න.",
6905
- "email.otp.heading": "OTP සත්‍යාපනය",
6906
- "email.otp.subheading": "ඔබේ විද්‍යුත් තැපැල් ලිපිනයට යවන ලද කේතය ඇතුළත් කරන්න.",
6907
- "email.otp.buttons.submit.text": "ඉදිරියට යන්න",
6908
- "identifier.first.heading": "ලොග් වෙන්න",
6909
- "identifier.first.subheading": "ඔබේ පරිශීලක නාමය හෝ විද්‍යුත් තැපැල් ලිපිනය ඇතුළත් කරන්න.",
6910
- "identifier.first.buttons.submit.text": "ඉදිරියට යන්න",
6911
- "sms.otp.heading": "OTP සත්‍යාපනය",
6912
- "sms.otp.subheading": "ඔබේ දුරකථන අංකයට යවන ලද කේතය ඇතුළත් කරන්න.",
6913
- "sms.otp.buttons.submit.text": "ඉදිරියට යන්න",
6914
- "totp.heading": "ඔබගේ අනන්‍යතාවය තහවුරු කරන්න",
6915
- "totp.subheading": "ඔබේ authenticator යෙදුමෙන් ලබාගත් කේතය ඇතුළත් කරන්න.",
6916
- "totp.buttons.submit.text": "ඉදිරියට යන්න",
6917
- "username.password.buttons.submit.text": "ඉදිරියට යන්න",
6918
- "username.password.heading": "ලොග් වෙන්න",
6919
- "username.password.subheading": "ඉදිරියට යාමට ඔබේ පරිශීලක නාමය සහ මුරපදය ඇතුළත් කරන්න.",
6920
- "passkey.button.use": "Passkey මගින් ඇතුල් වන්න",
6921
- "passkey.signin.heading": "Passkey මගින් ඇතුල් වන්න",
6922
- "passkey.register.heading": "Passkey ලියාපදිංචි කරන්න",
6923
- "passkey.register.description": "මුරපදයක් නොමැතිව ඔබේ ගිණුමට ආරක්ෂිතව ඇතුල් වීමට passkey එකක් සාදන්න.",
6924
- "user.profile.heading": "පැතිකඩ",
6925
- "user.profile.update.generic.error": "ඔබේ පැතිකඩ යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය.කරුණාකර නැවත උත්සාහ කරන්න",
6926
- "user.change_password.heading": "{credential} වෙනස් කරන්න",
6927
- "user.change_password.new.label": "නව {credential}",
6928
- "user.change_password.new.placeholder": "ඔබේ නව {credentialLower} ඇතුළත් කරන්න",
6929
- "user.change_password.confirm.label": "නව {credential} තහවුරු කරන්න",
6930
- "user.change_password.confirm.placeholder": "ඔබේ නව {credentialLower} නැවත ඇතුළත් කරන්න",
6931
- "user.change_password.requirements.heading": "ඔබේ {credentialLower} තුළ තිබිය යුතුය:",
6932
- "user.change_password.submit": "{credential} යාවත්කාලීන කරන්න",
6933
- "user.change_password.success": "ඔබේ {credentialLower} යාවත්කාලීන කර ඇත.",
6934
- "user.change_password.mismatch.error": "{credentialLower} නොගැලපේ.",
6935
- "user.change_password.generic.error": "ඔබේ {credentialLower} යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය. කරුණාකර නැවත උත්සාහ කරන්න.",
6936
- "user.change_password.unavailable.heading": "{credential} වෙනස් කිරීම් ලබා ගත නොහැක",
6937
- "user.change_password.unavailable.description": "කරුණාකර ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.",
6938
- "validation.password.pattern": "අවශ්‍ය ආකෘතියට ගැලපේ",
6939
- "organization.switcher.switch.organization": "සංවිධානය මාරු කරන්න",
6940
- "organization.switcher.loading.placeholder.organizations": "සංවිධාන ලෝඩ් වෙමින්...",
6941
- "organization.switcher.members": "සාමාජිකයන්",
6942
- "organization.switcher.member": "සාමාජිකයා",
6943
- "organization.switcher.create.organization": "සංවිධානයක් සාදන්න",
6944
- "organization.switcher.manage.organizations": "සංවිධාන කළමනාකරණය කරන්න",
6945
- "organization.switcher.buttons.manage.text": "කළමනාකරණය කරන්න",
6946
- "organization.switcher.organizations.heading": "සංවිධාන",
6947
- "organization.switcher.buttons.switch.text": "මාරු කරන්න",
6948
- "organization.switcher.no.access": "ප්‍රවේශය නැත",
6949
- "organization.switcher.status.label": "තත්ත්වය:",
6950
- "organization.switcher.showing.count": "මුළු සංවිධාන {showing} න් {total} ක් පෙන්වමින්",
6951
- "organization.switcher.buttons.refresh.text": "නැවුම් කරන්න",
6952
- "organization.switcher.buttons.load_more.text": "තවත් සංවිධාන ලෝඩ් කරන්න",
6953
- "organization.switcher.loading.more": "ලෝඩ් වෙමින්...",
6954
- "organization.switcher.no.organizations": "සංවිධාන කිසිවක් හමු නොවීය.",
6955
- "organization.switcher.error.prefix": "දෝෂය:",
6956
- "organization.profile.heading": "සංවිධානයේ පැතිකඩ",
6957
- "organization.profile.loading": "සංවිධානය ලෝඩ් වෙමින්...",
6958
- "organization.profile.error": "සංවිධානය ලෝඩ් කිරීමට අසමත් විය",
6959
- "organization.create.heading": "සංවිධානය සාදන්න",
6960
- "organization.create.buttons.create_organization.text": "සංවිධානය සාදන්න",
6961
- "organization.create.buttons.create_organization.loading.text": "සාදමින්...",
6962
- "organization.create.buttons.cancel.text": "අවලංගු කරන්න",
6963
- "messages.loading.placeholder": "ලෝඩ් වෙමින්...",
6964
- "consent.required": "අවශ්‍යයි",
6965
- "consent.essential_claims": "අත්‍යවශ්‍ය ගුණාංග",
6966
- "consent.optional_claims": "විකල්ප ගුණාංග",
6967
- "consent.authorize_scope": "අවසර",
6968
- "consent.essential_claims.info": "සේවාව නිසි ලෙස ක්‍රියාත්මක වීම සඳහා මෙම ගුණාංග අවශ්‍ය වේ.",
6969
- "consent.optional_claims.info": "මෙම ගුණාංග විකල්ප වන අතර ඔබේ අභිමතය පරිදි සැපයිය හැක.",
6970
- "consent.authorize_scope.info": "මෙම අවසරයන් මගින් සේවාවට අමතර විශේෂාංග වෙත ප්‍රවේශ වීමට ඉඩ සලසයි.",
6971
- "errors.heading": "දෝෂය",
6972
- "errors.signin.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6973
- "errors.signin.flow.failure": "ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6974
- "errors.signin.flow.completion.failure": "ලොග් වීමේ ක්‍රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6975
- "errors.signin.flow.passkeys.failure": "passkeys සමඟ ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6976
- "errors.signin.flow.passkeys.completion.failure": "passkeys සමඟ ලොග් වීමේ ක්‍රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6977
- "errors.signup.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6978
- "errors.signup.flow.failure": "ගිණුම් තැනීමේ ක්‍රියාවලියේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6979
- "errors.signup.flow.initialization.failure": "ගිණුම් තැනීමේ ක්‍රියාවලිය ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6980
- "errors.signup.popup.failure": "උත්පතන කවුළුවේ ගිණුම් තැනීම දිගටම කරගෙන යා නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න.",
6981
- "errors.signup.components.not.available": "ගිණුම් තැනීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6982
- "errors.signin.components.not.available": "ප්‍රවේශ වීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6983
- "errors.signin.timeout": "පියවර සම්පූර්ණ කිරීමට ලබා දී තිබූ කාලය ඉකුත් වී ඇත."
7488
+ //#region src/utils/getBaseLanguage.ts
7489
+ /**
7490
+ * Resolves a BCP 47 locale tag to its base (primary) language subtag, so that
7491
+ * region-qualified tags compare equal to their bare form (e.g. "en-US" and "en"
7492
+ * both resolve to "en"). Uses `Intl.Locale` when available, falling back to a
7493
+ * simple split on the first "-".
7494
+ *
7495
+ * @param tag - BCP 47 locale tag to resolve (e.g. "en-US", "hi-IN", "en")
7496
+ * @returns The lowercased base language subtag (e.g. "en", "hi")
7497
+ *
7498
+ * @example
7499
+ * ```typescript
7500
+ * getBaseLanguage('en-US') // 'en'
7501
+ * getBaseLanguage('hi-IN') // 'hi'
7502
+ * getBaseLanguage('en') // 'en'
7503
+ * ```
7504
+ */
7505
+ function getBaseLanguage(tag) {
7506
+ try {
7507
+ return new Intl.Locale(tag).language.toLowerCase();
7508
+ } catch {
7509
+ return tag.split("-")[0].toLowerCase();
7510
+ }
7511
+ }
7512
+
7513
+ //#endregion
7514
+ //#region src/utils/normalizeLocaleTag.ts
7515
+ /**
7516
+ * Lowercases the language subtag and uppercases a 2-letter region subtag (the common
7517
+ * `language-REGION` shape), leaving everything else as-is. Not a full BCP 47 canonicalizer,
7518
+ * but deterministic and dependency-free, so case-only differences still compare equal without
7519
+ * `Intl.Locale`.
7520
+ */
7521
+ function canonicalizeTagManually(tag) {
7522
+ return tag.split("-").map((part, index) => {
7523
+ if (index === 0) return part.toLowerCase();
7524
+ return part.length === 2 ? part.toUpperCase() : part;
7525
+ }).join("-");
7526
+ }
7527
+ /**
7528
+ * Resolves a BCP 47 locale tag to its canonical form, so tags that differ only in casing or
7529
+ * separator style compare equal (e.g. "en-us" and "en-US"). Uses `Intl.Locale` when available;
7530
+ * falls back to {@link canonicalizeTagManually} when it isn't (or rejects the input), so exact
7531
+ * dialect matching stays consistent either way.
7532
+ *
7533
+ * Unlike {@link getBaseLanguage}, this preserves the region/dialect — use it to test for an
7534
+ * *exact* match (e.g. "en-IN" against "en-IN"), not a same-base-language match.
7535
+ *
7536
+ * @param tag - BCP 47 locale tag to resolve (e.g. "en-US", "fr-CA")
7537
+ * @returns The canonical form of the tag
7538
+ *
7539
+ * @example
7540
+ * ```typescript
7541
+ * normalizeLocaleTag('en-us') // 'en-US'
7542
+ * normalizeLocaleTag('fr-CA') // 'fr-CA'
7543
+ * ```
7544
+ */
7545
+ function normalizeLocaleTag(tag) {
7546
+ try {
7547
+ return new Intl.Locale(tag).toString();
7548
+ } catch {
7549
+ return canonicalizeTagManually(tag);
6984
7550
  }
7551
+ }
7552
+
7553
+ //#endregion
7554
+ //#region src/utils/evaluateValidationRule.ts
7555
+ /**
7556
+ * Default i18n fallback keys returned when a `ValidationRule.message` is not provided.
7557
+ * Match the server-side defaults so a flow author who omits `message` sees the same
7558
+ * string regardless of whether the rule was evaluated client-side or server-side.
7559
+ */
7560
+ const DEFAULT_VALIDATION_MESSAGE_KEYS = {
7561
+ regex: "validation.pattern.invalid",
7562
+ minLength: "validation.minLength.invalid",
7563
+ maxLength: "validation.maxLength.invalid"
6985
7564
  };
6986
- var si_LK_default = si_LK;
7565
+ /**
7566
+ * Evaluates a single validation rule against the given input value.
7567
+ *
7568
+ * Returns `null` when the rule passes, or the rule's `message` (or the default
7569
+ * fallback key if `message` is absent) when it fails.
7570
+ *
7571
+ * Behavior notes:
7572
+ * - **regex**: an invalid regex pattern (one that cannot be compiled) is treated as
7573
+ * **passing** on the client. This is lenient — the server is authoritative and
7574
+ * will still enforce the rule if it can compile the pattern. Failing closed in the
7575
+ * SDK risks denial-of-service for misconfigured flows.
7576
+ * - **minLength / maxLength**: compared against `value.length`. A non-numeric `value`
7577
+ * on the rule is treated as the rule passing.
7578
+ * - Unknown rule types are treated as passing (forward compatibility with future types).
7579
+ */
7580
+ const evaluateValidationRule = (rule, value) => {
7581
+ const fail$1 = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
7582
+ switch (rule.type) {
7583
+ case "regex": {
7584
+ if (typeof rule.value !== "string" || rule.value === "") return null;
7585
+ let re;
7586
+ try {
7587
+ re = new RegExp(rule.value);
7588
+ } catch {
7589
+ return null;
7590
+ }
7591
+ return re.test(value) ? null : fail$1();
7592
+ }
7593
+ case "minLength":
7594
+ if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
7595
+ return value.length >= rule.value ? null : fail$1();
7596
+ case "maxLength":
7597
+ if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
7598
+ return value.length <= rule.value ? null : fail$1();
7599
+ default: return null;
7600
+ }
7601
+ };
7602
+ var evaluateValidationRule_default = evaluateValidationRule;
6987
7603
 
6988
7604
  //#endregion
6989
- //#region src/i18n/translations/index.ts
6990
- var translations_exports = /* @__PURE__ */ __export({
6991
- en_US: () => en_US_default,
6992
- fr_FR: () => fr_FR_default,
6993
- hi_IN: () => hi_IN_default,
6994
- pt_BR: () => pt_BR_default,
6995
- pt_PT: () => pt_PT_default,
6996
- si_LK: () => si_LK_default,
6997
- ta_IN: () => ta_IN_default,
6998
- te_IN: () => te_IN_default
6999
- });
7605
+ //#region src/utils/buildValidatorFromRules.ts
7606
+ /**
7607
+ * Composes an array of `ValidationRule`s into a single validator function suitable for
7608
+ * `useForm`'s `FormField.validator` slot.
7609
+ *
7610
+ * The composed validator evaluates rules in declaration order and returns the **first**
7611
+ * failing rule's message — matching the SDK's render-prop shape of a single string per
7612
+ * field. When all rules pass it returns `null`.
7613
+ *
7614
+ * Returns `null` when no rules are supplied so callers can compose conditionally.
7615
+ */
7616
+ const buildValidatorFromRules = (rules) => {
7617
+ if (!rules || rules.length === 0) return null;
7618
+ return (value) => {
7619
+ for (const rule of rules) {
7620
+ const message = evaluateValidationRule_default(rule, value);
7621
+ if (message !== null) return message;
7622
+ }
7623
+ return null;
7624
+ };
7625
+ };
7626
+ var buildValidatorFromRules_default = buildValidatorFromRules;
7000
7627
 
7001
7628
  //#endregion
7002
- //#region src/i18n/constants/TranslationBundleConstants.ts
7629
+ //#region src/utils/withVendorCSSClassPrefix.ts
7003
7630
  /**
7004
- * Constants related to internationalization (i18n) translation bundles.
7631
+ * Adds a vendor-specific prefix to a CSS class name.
7632
+ *
7633
+ * @param className - The original CSS class name to be prefixed
7634
+ * @returns A new string with the vendor prefix added to the class name
7005
7635
  *
7006
7636
  * @example
7007
7637
  * ```typescript
7008
- * // Using default locale
7009
- * const locale = TranslationBundleConstants.FALLBACK_LOCALE;
7010
- *
7011
- * // Using supported locales
7012
- * const locales = TranslationBundleConstants.DEFAULT_LOCALES;
7638
+ * // Usage with clsx
7639
+ * clsx(withVendorCSSClassPrefix('sign-in-button'), className)
7640
+ * // Result: "thunderid-sign-in-button"
7013
7641
  * ```
7014
7642
  */
7015
- const TranslationBundleConstants = {
7016
- DEFAULT_LOCALES: [en_US_default.metadata.localeCode],
7017
- FALLBACK_LOCALE: en_US_default.metadata.localeCode
7018
- };
7019
- var TranslationBundleConstants_default = TranslationBundleConstants;
7643
+ const withVendorCSSClassPrefix = (className) => `${VendorConstants_default.VENDOR_PREFIX}-${className}`;
7644
+ var withVendorCSSClassPrefix_default = withVendorCSSClassPrefix;
7020
7645
 
7021
7646
  //#endregion
7022
- //#region src/i18n/utils/getDefaultI18nBundles.ts
7647
+ //#region src/utils/getVendorPrefix.ts
7023
7648
  /**
7024
- * Get the default i18n bundles.
7025
- * Dynamically builds the bundles collection by iterating through supported locales
7026
- * and importing their corresponding translation modules.
7649
+ * Resolves the vendor/brand namespace to use for storage keys, cookie names, etc.
7650
+ * Falls back to `VendorConstants.VENDOR_PREFIX` (the SDK-wide default) when no vendor
7651
+ * is configured, so there is a single source of truth for the default brand name.
7027
7652
  *
7028
- * @returns The collection of all default i18n bundles
7653
+ * @param vendor - The vendor value from the resolved SDK configuration, if any.
7654
+ * @returns The resolved vendor prefix.
7029
7655
  */
7030
- const getDefaultI18nBundles = () => {
7031
- const bundles = {};
7032
- TranslationBundleConstants_default.DEFAULT_LOCALES.forEach((localeCode) => {
7033
- const bundle = translations_exports[localeCode.replace("-", "_")];
7034
- if (bundle && bundle.metadata?.localeCode) bundles[bundle.metadata.localeCode] = bundle;
7035
- });
7036
- return bundles;
7656
+ const getVendorPrefix = (vendor) => vendor ?? VendorConstants_default.VENDOR_PREFIX;
7657
+ var getVendorPrefix_default = getVendorPrefix;
7658
+
7659
+ //#endregion
7660
+ //#region src/HttpClient.ts
7661
+ /**
7662
+ * Abstract base class for HTTP clients. Owns all handler/callback state and
7663
+ * the request lifecycle (pre-processing, transport, post-processing).
7664
+ *
7665
+ * Extend this class and implement `transport()` to plug in a custom HTTP transport.
7666
+ *
7667
+ * @example
7668
+ * ```ts
7669
+ * class MyHttpClient extends HttpClient {
7670
+ * protected async transport<T>(config: HttpRequestConfig): Promise<HttpResponse<T>> {
7671
+ * // custom fetch logic
7672
+ * }
7673
+ * }
7674
+ * ```
7675
+ */
7676
+ var HttpClient = class HttpClient {
7677
+ static DEFAULT_HANDLER_DISABLE_TIMEOUT = 1e3;
7678
+ requestStartCallback = () => null;
7679
+ requestSuccessCallback = () => null;
7680
+ requestErrorCallback = () => null;
7681
+ requestFinishCallback = () => null;
7682
+ constructor(isHandlerEnabled = true, attachToken = () => Promise.resolve()) {
7683
+ this.isHandlerEnabled = isHandlerEnabled;
7684
+ this.attachToken = attachToken;
7685
+ }
7686
+ /**
7687
+ * Public HTTP request entry point. Applies pre/post processing around `transport()`.
7688
+ */
7689
+ async request(config) {
7690
+ const processedConfig = await this.requestHandler(config);
7691
+ try {
7692
+ const response = await this.transport(processedConfig);
7693
+ return this.successHandler(response);
7694
+ } catch (error$1) {
7695
+ this.errorHandler(error$1);
7696
+ throw error$1;
7697
+ }
7698
+ }
7699
+ enableHandler() {
7700
+ this.isHandlerEnabled = true;
7701
+ }
7702
+ disableHandler() {
7703
+ this.isHandlerEnabled = false;
7704
+ }
7705
+ disableHandlerWithTimeout(timeout = HttpClient.DEFAULT_HANDLER_DISABLE_TIMEOUT) {
7706
+ this.isHandlerEnabled = false;
7707
+ setTimeout(() => {
7708
+ this.isHandlerEnabled = true;
7709
+ }, timeout);
7710
+ }
7711
+ setHttpRequestStartCallback(cb) {
7712
+ this.requestStartCallback = cb;
7713
+ }
7714
+ setHttpRequestSuccessCallback(cb) {
7715
+ this.requestSuccessCallback = cb;
7716
+ }
7717
+ setHttpRequestErrorCallback(cb) {
7718
+ this.requestErrorCallback = cb;
7719
+ }
7720
+ setHttpRequestFinishCallback(cb) {
7721
+ this.requestFinishCallback = cb;
7722
+ }
7723
+ all(values) {
7724
+ return Promise.all(values);
7725
+ }
7726
+ spread(callback) {
7727
+ return (array) => callback(...array);
7728
+ }
7729
+ async requestHandler(config) {
7730
+ if (config.attachToken !== false) await this.attachToken(config);
7731
+ if (config.shouldEncodeToFormData && config.data) {
7732
+ const formData = new FormData();
7733
+ Object.keys(config.data).forEach((key) => formData.append(key, config.data[key]));
7734
+ config.data = formData;
7735
+ }
7736
+ config.startTimeInMs = Date.now();
7737
+ if (this.isHandlerEnabled && typeof this.requestStartCallback === "function") this.requestStartCallback(config);
7738
+ return config;
7739
+ }
7740
+ successHandler(response) {
7741
+ if (this.isHandlerEnabled) {
7742
+ if (typeof this.requestSuccessCallback === "function") this.requestSuccessCallback(response);
7743
+ if (typeof this.requestFinishCallback === "function") this.requestFinishCallback();
7744
+ }
7745
+ return response;
7746
+ }
7747
+ errorHandler(error$1) {
7748
+ if (this.isHandlerEnabled) {
7749
+ if (typeof this.requestErrorCallback === "function") this.requestErrorCallback(error$1);
7750
+ if (typeof this.requestFinishCallback === "function") this.requestFinishCallback();
7751
+ }
7752
+ }
7037
7753
  };
7038
- var getDefaultI18nBundles_default = getDefaultI18nBundles;
7039
7754
 
7040
7755
  //#endregion
7041
7756
  //#region src/i18n/utils/normalizeTranslations.ts
@@ -7077,6 +7792,7 @@ var normalizeTranslations_default = normalizeTranslations;
7077
7792
  exports.AgentQueryKeys = AgentQueryKeys_default;
7078
7793
  exports.ApplicationNativeAuthenticationConstants = ApplicationNativeAuthenticationConstants_default;
7079
7794
  exports.ApplicationQueryKeys = ApplicationQueryKeys_default;
7795
+ exports.AuthFlowSelectConstants = AuthFlowSelectConstants_default;
7080
7796
  exports.AuthenticationHelper = AuthenticationHelper_default;
7081
7797
  exports.BackchannelLogoutConstants = BackchannelLogoutConstants_default;
7082
7798
  exports.ConsentConstants = ConsentConstants_default;
@@ -7107,6 +7823,7 @@ exports.OAuth2GrantTypes = OAuth2GrantTypes;
7107
7823
  exports.OAuth2ResponseTypes = OAuth2ResponseTypes;
7108
7824
  exports.OIDCRequestConstants = OIDCRequestConstants_default;
7109
7825
  exports.REFRESH_TOKEN_ISSUING_GRANTS = REFRESH_TOKEN_ISSUING_GRANTS;
7826
+ exports.SelectConstants = SelectConstants_default;
7110
7827
  exports.StorageManager = StorageManager_default;
7111
7828
  exports.ThunderIDAPIError = ThunderIDAPIError;
7112
7829
  exports.ThunderIDAuthException = ThunderIDAuthException;
@@ -7117,11 +7834,15 @@ exports.TokenConstants = TokenConstants_default;
7117
7834
  exports.TokenEndpointAuthMethods = TokenEndpointAuthMethods;
7118
7835
  exports.TranslationBundleConstants = TranslationBundleConstants_default;
7119
7836
  exports.UserQueryKeys = UserQueryKeys_default;
7837
+ exports.UserSelectConstants = UserSelectConstants_default;
7838
+ exports.UserTypeSelectConstants = UserTypeSelectConstants_default;
7120
7839
  exports.VendorConstants = VendorConstants_default;
7121
7840
  exports.arrayBufferToBase64url = arrayBufferToBase64url_default;
7122
7841
  exports.base64urlToArrayBuffer = base64urlToArrayBuffer_default;
7123
7842
  exports.bem = bem_default;
7124
7843
  exports.buildValidatorFromRules = buildValidatorFromRules_default;
7844
+ exports.capPageSize = capPageSize_default;
7845
+ exports.computeNextPageOffset = computeNextPageOffset_default;
7125
7846
  exports.configureLogger = configure;
7126
7847
  exports.countryCodeToFlagEmoji = countryCodeToFlagEmoji;
7127
7848
  exports.createAgent = createAgent_default;
@@ -7130,9 +7851,12 @@ exports.createComponentLogger = createComponentLogger;
7130
7851
  exports.createLogger = createLogger;
7131
7852
  exports.createPackageComponentLogger = createPackageComponentLogger;
7132
7853
  exports.createPackageLogger = createPackageLogger;
7854
+ exports.createResourceFailureLogger = createResourceFailureLogger;
7855
+ exports.createResourceOptionsLoader = createResourceOptionsLoader_default;
7133
7856
  exports.createTheme = createTheme_default;
7134
7857
  exports.createUser = createUser_default;
7135
7858
  exports.debug = debug;
7859
+ exports.dedupeSelectOptions = dedupeSelectOptions_default;
7136
7860
  exports.deepMerge = deepMerge_default;
7137
7861
  exports.deleteAgent = deleteAgent_default;
7138
7862
  exports.deleteApplication = deleteApplication_default;
@@ -7158,25 +7882,37 @@ exports.getApplications = getApplications_default;
7158
7882
  exports.getBaseLanguage = getBaseLanguage;
7159
7883
  exports.getDefaultI18nBundles = getDefaultI18nBundles_default;
7160
7884
  exports.getFlowMeta = getFlowMeta_default;
7885
+ exports.getFlows = getFlows_default;
7161
7886
  exports.getLatestStateParam = getLatestStateParam_default;
7162
7887
  exports.getOrganizationUnitChildren = getOrganizationUnitChildren_default;
7163
7888
  exports.getRedirectBasedSignUpUrl = getRedirectBasedSignUpUrl_default;
7889
+ exports.getSelectMessages = getSelectMessages_default;
7164
7890
  exports.getUser = getUser_default;
7165
7891
  exports.getUserInfo = getUserInfo_default;
7892
+ exports.getUserTypes = getUserTypes_default;
7166
7893
  exports.getUsers = getUsers_default;
7167
7894
  exports.getUsersMe = getUsersMe_default;
7168
7895
  exports.getUsersMeMeta = getUsersMeMeta_default;
7169
7896
  exports.getVendorPrefix = getVendorPrefix_default;
7170
7897
  exports.hasUnresolvedTranslationParams = hasUnresolvedTranslationParams;
7171
7898
  exports.info = info;
7899
+ exports.isAdvancingPageOffset = isAdvancingPageOffset_default;
7172
7900
  exports.isEmojiUri = isEmojiUri_default;
7173
7901
  exports.isEmpty = isEmpty_default;
7174
7902
  exports.isRecognizedBaseUrlPattern = isRecognizedBaseUrlPattern_default;
7903
+ exports.isRetryableError = isRetryableError_default;
7904
+ exports.loadPageWithRetryAndLog = loadPageWithRetryAndLog_default;
7905
+ exports.loadUntilOptionsGrow = loadUntilOptionsGrow_default;
7906
+ exports.logResourceFailure = logResourceFailure;
7175
7907
  exports.logger = logger_default;
7176
7908
  exports.mapCredentialUpdateError = mapCredentialUpdateError_default;
7909
+ exports.mapSelectPageError = mapSelectPageError_default;
7910
+ exports.mergeOptionsBatch = mergeOptionsBatch_default;
7177
7911
  exports.normalizeLocaleTag = normalizeLocaleTag;
7912
+ exports.normalizeSelectOptions = normalizeSelectOptions_default;
7178
7913
  exports.normalizeTranslations = normalizeTranslations_default;
7179
7914
  exports.parseKeyValuePairs = parseKeyValuePairs_default;
7915
+ exports.parseSelectPageQuery = parseSelectPageQuery_default;
7180
7916
  exports.processOpenIDScopes = processOpenIDScopes_default;
7181
7917
  exports.removeTrailingSlash = removeTrailingSlash_default;
7182
7918
  exports.resolveChangeCredentialPolicy = resolveChangeCredentialPolicy_default;
@@ -7185,11 +7921,19 @@ exports.resolveFlowTemplateLiterals = resolveFlowTemplateLiterals;
7185
7921
  exports.resolveLocaleDisplayName = resolveLocaleDisplayName;
7186
7922
  exports.resolveLocaleEmoji = resolveLocaleEmoji_default;
7187
7923
  exports.resolveMeta = resolveMeta;
7924
+ exports.resolvePageSize = resolvePageSize_default;
7188
7925
  exports.resolveResourceEndpoint = resolveResourceEndpoint_default;
7189
7926
  exports.set = set_default;
7190
7927
  exports.startCase = startCase_default;
7191
7928
  exports.substituteTranslationParams = substituteTranslationParams_default;
7192
7929
  exports.supportsCredential = supportsCredential_default;
7930
+ exports.toAuthFlowSelectPage = toAuthFlowSelectPage_default;
7931
+ exports.toError = toError_default;
7932
+ exports.toSelectOption = toSelectOption_default;
7933
+ exports.toSelectOptions = toSelectOptions_default;
7934
+ exports.toUserSelectOption = toUserSelectOption_default;
7935
+ exports.toUserSelectPage = toUserSelectPage_default;
7936
+ exports.toUserTypeSelectPage = toUserTypeSelectPage_default;
7193
7937
  exports.updateAgent = updateAgent_default;
7194
7938
  exports.updateApplication = updateApplication_default;
7195
7939
  exports.updateMeCredentials = updateMeCredentials_default;
@@ -7197,4 +7941,5 @@ exports.updateMeProfile = updateMeProfile_default;
7197
7941
  exports.updateUser = updateUser_default;
7198
7942
  exports.validateLogoutTokenClaims = validateLogoutTokenClaims_default;
7199
7943
  exports.warn = warn;
7944
+ exports.withRetry = withRetry_default;
7200
7945
  exports.withVendorCSSClassPrefix = withVendorCSSClassPrefix_default;