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