@thunderid/javascript 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/flows/getFlows.d.ts +30 -0
- package/dist/api/flows/getFlows.d.ts.map +1 -0
- package/dist/api/user-types/getUserTypes.d.ts +23 -0
- package/dist/api/user-types/getUserTypes.d.ts.map +1 -0
- package/dist/cjs/index.cjs +2531 -1786
- package/dist/constants/AuthFlowSelectConstants.d.ts +9 -0
- package/dist/constants/AuthFlowSelectConstants.d.ts.map +1 -0
- package/dist/constants/SelectConstants.d.ts +12 -0
- package/dist/constants/SelectConstants.d.ts.map +1 -0
- package/dist/constants/UserSelectConstants.d.ts +8 -0
- package/dist/constants/UserSelectConstants.d.ts.map +1 -0
- package/dist/constants/UserTypeSelectConstants.d.ts +9 -0
- package/dist/constants/UserTypeSelectConstants.d.ts.map +1 -0
- package/dist/edge/index.js +2502 -1787
- package/dist/i18n/models/i18n.d.ts +11 -0
- package/dist/i18n/models/i18n.d.ts.map +1 -1
- package/dist/i18n/translations/en-US.d.ts.map +1 -1
- package/dist/i18n/translations/fr-FR.d.ts.map +1 -1
- package/dist/i18n/translations/hi-IN.d.ts.map +1 -1
- package/dist/i18n/translations/ja-JP.d.ts.map +1 -1
- package/dist/i18n/translations/pt-BR.d.ts.map +1 -1
- package/dist/i18n/translations/pt-PT.d.ts.map +1 -1
- package/dist/i18n/translations/si-LK.d.ts.map +1 -1
- package/dist/i18n/translations/ta-IN.d.ts.map +1 -1
- package/dist/i18n/translations/te-IN.d.ts.map +1 -1
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2502 -1787
- package/dist/models/auth-flow-select.d.ts +3 -0
- package/dist/models/auth-flow-select.d.ts.map +1 -0
- package/dist/models/config.d.ts +11 -1
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/embedded-flow.d.ts +11 -1
- package/dist/models/embedded-flow.d.ts.map +1 -1
- package/dist/models/managed-flow.d.ts +25 -0
- package/dist/models/managed-flow.d.ts.map +1 -0
- package/dist/models/managed-user-type.d.ts +25 -0
- package/dist/models/managed-user-type.d.ts.map +1 -0
- package/dist/models/select-page.d.ts +38 -0
- package/dist/models/select-page.d.ts.map +1 -0
- package/dist/models/select.d.ts +62 -0
- package/dist/models/select.d.ts.map +1 -0
- package/dist/models/user-select.d.ts +6 -0
- package/dist/models/user-select.d.ts.map +1 -0
- package/dist/models/user-type-select.d.ts +3 -0
- package/dist/models/user-type-select.d.ts.map +1 -0
- package/dist/utils/capPageSize.d.ts +9 -0
- package/dist/utils/capPageSize.d.ts.map +1 -0
- package/dist/utils/computeNextPageOffset.d.ts +9 -0
- package/dist/utils/computeNextPageOffset.d.ts.map +1 -0
- package/dist/utils/createResourceOptionsLoader.d.ts +36 -0
- package/dist/utils/createResourceOptionsLoader.d.ts.map +1 -0
- package/dist/utils/dedupeSelectOptions.d.ts +10 -0
- package/dist/utils/dedupeSelectOptions.d.ts.map +1 -0
- package/dist/utils/getSelectMessages.d.ts +12 -0
- package/dist/utils/getSelectMessages.d.ts.map +1 -0
- package/dist/utils/isAdvancingPageOffset.d.ts +9 -0
- package/dist/utils/isAdvancingPageOffset.d.ts.map +1 -0
- package/dist/utils/isRetryableError.d.ts +7 -0
- package/dist/utils/isRetryableError.d.ts.map +1 -0
- package/dist/utils/loadPageWithRetryAndLog.d.ts +19 -0
- package/dist/utils/loadPageWithRetryAndLog.d.ts.map +1 -0
- package/dist/utils/loadUntilOptionsGrow.d.ts +15 -0
- package/dist/utils/loadUntilOptionsGrow.d.ts.map +1 -0
- package/dist/utils/logResourceFailure.d.ts +25 -0
- package/dist/utils/logResourceFailure.d.ts.map +1 -0
- package/dist/utils/mapSelectPageError.d.ts +36 -0
- package/dist/utils/mapSelectPageError.d.ts.map +1 -0
- package/dist/utils/mergeOptionsBatch.d.ts +25 -0
- package/dist/utils/mergeOptionsBatch.d.ts.map +1 -0
- package/dist/utils/normalizeSelectOptions.d.ts +9 -0
- package/dist/utils/normalizeSelectOptions.d.ts.map +1 -0
- package/dist/utils/parseSelectPageQuery.d.ts +18 -0
- package/dist/utils/parseSelectPageQuery.d.ts.map +1 -0
- package/dist/utils/resolvePageSize.d.ts +9 -0
- package/dist/utils/resolvePageSize.d.ts.map +1 -0
- package/dist/utils/resolveResourceEndpoint.d.ts +1 -1
- package/dist/utils/resolveResourceEndpoint.d.ts.map +1 -1
- package/dist/utils/toAuthFlowSelectPage.d.ts +11 -0
- package/dist/utils/toAuthFlowSelectPage.d.ts.map +1 -0
- package/dist/utils/toError.d.ts +8 -0
- package/dist/utils/toError.d.ts.map +1 -0
- package/dist/utils/toListSelectPage.d.ts +14 -0
- package/dist/utils/toListSelectPage.d.ts.map +1 -0
- package/dist/utils/toSelectOption.d.ts +13 -0
- package/dist/utils/toSelectOption.d.ts.map +1 -0
- package/dist/utils/toSelectOptions.d.ts +4 -0
- package/dist/utils/toSelectOptions.d.ts.map +1 -0
- package/dist/utils/toUserSelectOption.d.ts +10 -0
- package/dist/utils/toUserSelectOption.d.ts.map +1 -0
- package/dist/utils/toUserSelectPage.d.ts +13 -0
- package/dist/utils/toUserSelectPage.d.ts.map +1 -0
- package/dist/utils/toUserTypeSelectPage.d.ts +12 -0
- package/dist/utils/toUserTypeSelectPage.d.ts.map +1 -0
- package/dist/utils/withRetry.d.ts +15 -0
- package/dist/utils/withRetry.d.ts.map +1 -0
- 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
|
*/
|
|
@@ -1079,6 +1079,12 @@ let EmbeddedFlowComponentType = /* @__PURE__ */ function(EmbeddedFlowComponentTy
|
|
|
1079
1079
|
EmbeddedFlowComponentType$1["Timer"] = "TIMER";
|
|
1080
1080
|
/** QR code display component for wallet-based flows (e.g. OpenID4VP) */
|
|
1081
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";
|
|
1082
1088
|
return EmbeddedFlowComponentType$1;
|
|
1083
1089
|
}({});
|
|
1084
1090
|
/**
|
|
@@ -1849,6 +1855,64 @@ const getUsers = async ({ filter, limit, offset,...config }) => requestManagemen
|
|
|
1849
1855
|
});
|
|
1850
1856
|
var getUsers_default = getUsers;
|
|
1851
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
|
+
|
|
1852
1916
|
//#endregion
|
|
1853
1917
|
//#region src/api/users/getUser.ts
|
|
1854
1918
|
/**
|
|
@@ -2263,6 +2327,54 @@ const AgentQueryKeys = {
|
|
|
2263
2327
|
};
|
|
2264
2328
|
var AgentQueryKeys_default = AgentQueryKeys;
|
|
2265
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
|
+
|
|
2266
2378
|
//#endregion
|
|
2267
2379
|
//#region src/errors/ThunderIDRuntimeError.ts
|
|
2268
2380
|
/**
|
|
@@ -2964,10 +3076,12 @@ const RESOURCE_ENDPOINT_KEYS = [
|
|
|
2964
3076
|
"applications",
|
|
2965
3077
|
"flowExecute",
|
|
2966
3078
|
"flowMeta",
|
|
3079
|
+
"flows",
|
|
2967
3080
|
"users",
|
|
2968
3081
|
"usersMe",
|
|
2969
3082
|
"usersMeCredentials",
|
|
2970
|
-
"usersMeMeta"
|
|
3083
|
+
"usersMeMeta",
|
|
3084
|
+
"userTypes"
|
|
2971
3085
|
];
|
|
2972
3086
|
/**
|
|
2973
3087
|
* Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
|
|
@@ -5116,1906 +5230,2507 @@ const resolveFieldName = (field) => {
|
|
|
5116
5230
|
var resolveFieldName_default = resolveFieldName;
|
|
5117
5231
|
|
|
5118
5232
|
//#endregion
|
|
5119
|
-
//#region src/utils/
|
|
5233
|
+
//#region src/utils/computeNextPageOffset.ts
|
|
5120
5234
|
/**
|
|
5121
|
-
*
|
|
5122
|
-
*
|
|
5123
|
-
*
|
|
5124
|
-
* An uncompilable `regex` is treated as passing, matching `evaluateValidationRule`:
|
|
5125
|
-
* the SDK stays lenient so a misconfigured schema cannot lock a user out of their own
|
|
5126
|
-
* 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.
|
|
5127
5237
|
*
|
|
5128
|
-
* @
|
|
5129
|
-
* @param policy - The rule to apply.
|
|
5130
|
-
* @returns A single-item list when `policy.regex` is set, otherwise an empty list.
|
|
5131
|
-
* @example
|
|
5132
|
-
* ```typescript
|
|
5133
|
-
* const results = evaluatePasswordPolicy('sh0rt', {regex: '^.{8,}$'});
|
|
5134
|
-
* const isValid = results.every(result => result.passed);
|
|
5135
|
-
* ```
|
|
5238
|
+
* @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
|
|
5136
5239
|
*/
|
|
5137
|
-
const
|
|
5138
|
-
if (!
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
matches = new RegExp(policy.regex).test(value);
|
|
5142
|
-
} catch {
|
|
5143
|
-
matches = true;
|
|
5144
|
-
}
|
|
5145
|
-
return [{
|
|
5146
|
-
key: "regex",
|
|
5147
|
-
messageKey: "validation.password.pattern",
|
|
5148
|
-
passed: matches
|
|
5149
|
-
}];
|
|
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;
|
|
5150
5244
|
};
|
|
5151
|
-
var
|
|
5245
|
+
var computeNextPageOffset_default = computeNextPageOffset;
|
|
5152
5246
|
|
|
5153
5247
|
//#endregion
|
|
5154
|
-
//#region src/utils/
|
|
5248
|
+
//#region src/utils/isAdvancingPageOffset.ts
|
|
5155
5249
|
/**
|
|
5156
|
-
*
|
|
5157
|
-
*
|
|
5158
|
-
* Every predicate a change-password UI needs is derived here so the React and Vue
|
|
5159
|
-
* components stay pure rendering concerns and cannot drift apart on what counts as a
|
|
5160
|
-
* submittable form.
|
|
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.
|
|
5161
5252
|
*
|
|
5162
|
-
* @
|
|
5163
|
-
* @param policy - The rules the new password must satisfy.
|
|
5164
|
-
* @returns The derived flags plus the per-rule results.
|
|
5165
|
-
* @example
|
|
5166
|
-
* ```typescript
|
|
5167
|
-
* const {isValid, ruleResults} = evaluateChangePasswordForm(
|
|
5168
|
-
* {confirmPassword, newPassword},
|
|
5169
|
-
* {regex: '^.{12,}$'},
|
|
5170
|
-
* );
|
|
5171
|
-
* const canSubmit = !loading && isValid;
|
|
5172
|
-
* ```
|
|
5253
|
+
* @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
|
|
5173
5254
|
*/
|
|
5174
|
-
const
|
|
5175
|
-
|
|
5176
|
-
|
|
5177
|
-
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
|
|
5181
|
-
|
|
5182
|
-
|
|
5183
|
-
|
|
5184
|
-
|
|
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;
|
|
5185
5277
|
};
|
|
5186
|
-
var
|
|
5278
|
+
var dedupeSelectOptions_default = dedupeSelectOptions;
|
|
5187
5279
|
|
|
5188
5280
|
//#endregion
|
|
5189
|
-
//#region src/utils/
|
|
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
|
+
};
|
|
5190
5316
|
/**
|
|
5191
|
-
*
|
|
5317
|
+
* Converts one raw item into an option.
|
|
5192
5318
|
*
|
|
5193
|
-
*
|
|
5194
|
-
*
|
|
5195
|
-
*
|
|
5196
|
-
* organization's policy accepts. When the schema carries no regex for this credential,
|
|
5197
|
-
* 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.
|
|
5198
5322
|
*
|
|
5199
|
-
*
|
|
5200
|
-
* @param attribute - The credential attribute this form manages (e.g. `password`, `pin`).
|
|
5201
|
-
* @param override - An explicit policy supplied by the caller, which wins outright.
|
|
5202
|
-
* @returns The policy to hand to {@link evaluatePasswordPolicy}.
|
|
5203
|
-
* @example
|
|
5204
|
-
* ```typescript
|
|
5205
|
-
* const policy = resolveChangeCredentialPolicy(userSchema, 'pin', undefined);
|
|
5206
|
-
* const results = evaluatePasswordPolicy(candidate, policy);
|
|
5207
|
-
* ```
|
|
5323
|
+
* Returns `null` when there is nothing to submit.
|
|
5208
5324
|
*/
|
|
5209
|
-
const
|
|
5210
|
-
if (
|
|
5211
|
-
|
|
5212
|
-
|
|
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
|
+
};
|
|
5213
5340
|
};
|
|
5214
|
-
var
|
|
5341
|
+
var toSelectOption_default = toSelectOption;
|
|
5215
5342
|
|
|
5216
5343
|
//#endregion
|
|
5217
|
-
//#region src/utils/
|
|
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
|
+
};
|
|
5218
5370
|
/**
|
|
5219
|
-
*
|
|
5220
|
-
*
|
|
5221
|
-
*
|
|
5222
|
-
* rendering. It says whether the credential is declared on this type at all, which is a property
|
|
5223
|
-
* of the type rather than of the account, so it cannot say whether this particular user has one
|
|
5224
|
-
* stored today. That second question is the server's to answer.
|
|
5225
|
-
*
|
|
5226
|
-
* Without this check the form would submit into a guaranteed failure. `POST
|
|
5227
|
-
* /users/me/update-credentials` rejects a write for a name not declared on the type, since the
|
|
5228
|
-
* entity layer only accepts schema-declared credential keys.
|
|
5229
|
-
*
|
|
5230
|
-
* An absent schema means the answer is not known yet, either because the profile is still loading
|
|
5231
|
-
* or because the consuming app never supplied one. Both resolve to `true` so a change-credential
|
|
5232
|
-
* affordance is never hidden on missing information alone, and so apps that do not wire up
|
|
5233
|
-
* `userSchema` keep the behaviour they had before this check existed.
|
|
5234
|
-
*
|
|
5235
|
-
* @param userSchema - The user type schema resolved by the provider, keyed by attribute.
|
|
5236
|
-
* @param attribute - The credential attribute to check (e.g. `password`, `pin`).
|
|
5237
|
-
* @returns `false` only when the schema is known and either defines no attribute named
|
|
5238
|
-
* `attribute` or defines one that isn't marked `credential: true`.
|
|
5239
|
-
* @example
|
|
5240
|
-
* ```typescript
|
|
5241
|
-
* if (!supportsCredential(userSchema, 'pin')) {
|
|
5242
|
-
* return null;
|
|
5243
|
-
* }
|
|
5244
|
-
* ```
|
|
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.
|
|
5245
5374
|
*/
|
|
5246
|
-
const
|
|
5247
|
-
|
|
5248
|
-
return userSchema[attribute]?.credential === true;
|
|
5249
|
-
};
|
|
5250
|
-
var supportsCredential_default = supportsCredential;
|
|
5375
|
+
const normalizeSelectOptions = (inputs) => (inputs ?? []).map(normalizeSelectOption).filter((option) => option !== null);
|
|
5376
|
+
var normalizeSelectOptions_default = normalizeSelectOptions;
|
|
5251
5377
|
|
|
5252
5378
|
//#endregion
|
|
5253
|
-
//#region src/utils/
|
|
5379
|
+
//#region src/utils/isRetryableError.ts
|
|
5254
5380
|
/**
|
|
5255
|
-
*
|
|
5256
|
-
*
|
|
5257
|
-
* `400` is the new password failing a server-side check. Everything else, including a
|
|
5258
|
-
* `403`, has no single field to blame here: this form collects no current-value field for
|
|
5259
|
-
* a `403` to attach to, since the server does not verify one on this path today.
|
|
5260
|
-
*
|
|
5261
|
-
* @param error - The value thrown by the credential update call.
|
|
5262
|
-
* @returns Where to show the failure and what to show.
|
|
5263
|
-
* @example
|
|
5264
|
-
* ```typescript
|
|
5265
|
-
* const {field, message, messageKey} = mapCredentialUpdateError(caughtError);
|
|
5266
|
-
* const text = message ?? t(messageKey);
|
|
5267
|
-
*
|
|
5268
|
-
* if (field) {
|
|
5269
|
-
* setFieldErrors({[field]: text});
|
|
5270
|
-
* } else {
|
|
5271
|
-
* setError(text);
|
|
5272
|
-
* }
|
|
5273
|
-
* ```
|
|
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.
|
|
5274
5383
|
*/
|
|
5275
|
-
const
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5279
|
-
|
|
5280
|
-
|
|
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();
|
|
5281
5397
|
};
|
|
5282
|
-
|
|
5283
|
-
|
|
5284
|
-
|
|
5285
|
-
|
|
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
|
|
5286
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";
|
|
5287
5448
|
return {
|
|
5288
|
-
|
|
5289
|
-
|
|
5449
|
+
cursor: nextCursor ?? void 0,
|
|
5450
|
+
finished: nextCursor === null || nextCursor === void 0 || cursorStuck,
|
|
5451
|
+
...issue ? { issue } : {},
|
|
5452
|
+
options: merged
|
|
5290
5453
|
};
|
|
5291
5454
|
};
|
|
5292
|
-
var
|
|
5455
|
+
var mergeOptionsBatch_default = mergeOptionsBatch;
|
|
5293
5456
|
|
|
5294
5457
|
//#endregion
|
|
5295
|
-
//#region src/utils/
|
|
5458
|
+
//#region src/utils/loadUntilOptionsGrow.ts
|
|
5296
5459
|
/**
|
|
5297
|
-
*
|
|
5460
|
+
* Loads batches until one adds something new, the data ends, or a few empty batches in a row have been skipped.
|
|
5298
5461
|
*
|
|
5299
|
-
*
|
|
5300
|
-
*
|
|
5301
|
-
* 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.
|
|
5302
5464
|
*
|
|
5303
|
-
* @
|
|
5304
|
-
*
|
|
5305
|
-
*
|
|
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.
|
|
5306
5468
|
*
|
|
5307
|
-
* @
|
|
5308
|
-
* @param meta - The FlowMetadataResponse to look up
|
|
5309
|
-
* @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.
|
|
5310
5470
|
*/
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
return value != null ? String(value) : "";
|
|
5319
|
-
}
|
|
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;
|
|
5320
5478
|
|
|
5321
5479
|
//#endregion
|
|
5322
|
-
//#region src/utils/
|
|
5480
|
+
//#region src/utils/capPageSize.ts
|
|
5323
5481
|
/**
|
|
5324
|
-
*
|
|
5325
|
-
*
|
|
5326
|
-
*/
|
|
5327
|
-
const TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN = /^\{\{\s*t\([^)]+\)\s*\}\}$/;
|
|
5328
|
-
/**
|
|
5329
|
-
* Regular expression to extract the key from a translation flow template literal `{{t(key)}}`.
|
|
5330
|
-
*/
|
|
5331
|
-
const TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN = /^\{\{\s*t\(([^)]+)\)\s*\}\}$/;
|
|
5332
|
-
/**
|
|
5333
|
-
* Check if a string is exactly a translation flow template literal (`{{ t(key) }}`).
|
|
5334
|
-
*
|
|
5335
|
-
* This checks that the **entire** string is the template pattern. Use
|
|
5336
|
-
* {@link FLOW_TEMPLATE_LITERAL_REGEX} from `parseFlowTemplateLiteral` to detect
|
|
5337
|
-
* templates embedded inside a larger string.
|
|
5338
|
-
*
|
|
5339
|
-
* @param value - The string to test.
|
|
5340
|
-
* @returns `true` if the trimmed value matches the pattern, `false` otherwise.
|
|
5341
|
-
*
|
|
5342
|
-
* @example
|
|
5343
|
-
* ```typescript
|
|
5344
|
-
* isTranslationFlowTemplateLiteral('{{ t(signin:heading) }}') // true
|
|
5345
|
-
* isTranslationFlowTemplateLiteral('hello world') // false
|
|
5346
|
-
* isTranslationFlowTemplateLiteral('Login via {{ t(key) }}') // false — embedded, not exact
|
|
5347
|
-
* ```
|
|
5348
|
-
*/
|
|
5349
|
-
function isTranslationFlowTemplateLiteral(value) {
|
|
5350
|
-
return TRANSLATION_FLOW_TEMPLATE_LITERAL_PATTERN.test(value.trim());
|
|
5351
|
-
}
|
|
5352
|
-
|
|
5353
|
-
//#endregion
|
|
5354
|
-
//#region src/utils/parseFlowTemplateLiteral.ts
|
|
5355
|
-
/**
|
|
5356
|
-
* Regular expression to detect a flow template literal wrapped in double braces.
|
|
5357
|
-
* Matches patterns like `{{ t(key) }}`, `{{ meta(key) }}`, etc.
|
|
5358
|
-
*
|
|
5359
|
-
* Note: this regex has no `g` flag — use `new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, 'g')`
|
|
5360
|
-
* when global replacement is needed (e.g. in resolveFlowTemplateLiterals).
|
|
5361
|
-
*/
|
|
5362
|
-
const FLOW_TEMPLATE_LITERAL_REGEX = /\{\{\s*([^}]+)\s*\}\}/;
|
|
5363
|
-
/**
|
|
5364
|
-
* Regular expression to parse a function-call expression inside flow template braces.
|
|
5365
|
-
* Matches `funcName(arg)` and captures the function name and argument.
|
|
5366
|
-
*/
|
|
5367
|
-
const FLOW_TEMPLATE_FUNCTION_REGEX = /^(\w+)\(([^)]+)\)$/;
|
|
5368
|
-
/**
|
|
5369
|
-
* Flow template literal types supported by the SDK.
|
|
5370
|
-
*
|
|
5371
|
-
* Values correspond to the function name used in the template expression,
|
|
5372
|
-
* so that a `{ t }` object from `useTranslation()` can be passed directly
|
|
5373
|
-
* as a handler map.
|
|
5374
|
-
*/
|
|
5375
|
-
let FlowTemplateLiteralType = /* @__PURE__ */ function(FlowTemplateLiteralType$1) {
|
|
5376
|
-
/** Meta template literal — `{{ meta(path) }}` — resolves against flow/page metadata */
|
|
5377
|
-
FlowTemplateLiteralType$1["META"] = "meta";
|
|
5378
|
-
/** Translation template literal — `{{ t(key) }}` */
|
|
5379
|
-
FlowTemplateLiteralType$1["TRANSLATION"] = "t";
|
|
5380
|
-
/** Unknown or unsupported template literal format */
|
|
5381
|
-
FlowTemplateLiteralType$1["UNKNOWN"] = "unknown";
|
|
5382
|
-
return FlowTemplateLiteralType$1;
|
|
5383
|
-
}({});
|
|
5384
|
-
/**
|
|
5385
|
-
* Parse a flow template literal content string and extract its type and key.
|
|
5386
|
-
*
|
|
5387
|
-
* Supports function-call expressions like:
|
|
5388
|
-
* - `t(signin:heading)` → type `TRANSLATION`, key `"signin:heading"`
|
|
5389
|
-
* - `meta(application.name)` → type `META`, key `"application.name"`
|
|
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.
|
|
5390
5484
|
*
|
|
5391
|
-
*
|
|
5392
|
-
*
|
|
5393
|
-
* @param content - The content inside the template literal braces (without `{{ }}`).
|
|
5394
|
-
* @returns Parsed flow template literal information.
|
|
5395
|
-
*
|
|
5396
|
-
* @example
|
|
5397
|
-
* ```typescript
|
|
5398
|
-
* parseFlowTemplateLiteral('t(signin:heading)')
|
|
5399
|
-
* // { type: FlowTemplateLiteralType.TRANSLATION, key: 'signin:heading', originalValue: 't(signin:heading)' }
|
|
5400
|
-
*
|
|
5401
|
-
* parseFlowTemplateLiteral('meta(application.name)')
|
|
5402
|
-
* // { type: FlowTemplateLiteralType.META, key: 'application.name', originalValue: 'meta(application.name)' }
|
|
5403
|
-
* ```
|
|
5485
|
+
* @internal Shared by the SDK packages. It is not part of the public API and can change in any release.
|
|
5404
5486
|
*/
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
const match = FLOW_TEMPLATE_FUNCTION_REGEX.exec(content);
|
|
5408
|
-
if (!match) return {
|
|
5409
|
-
originalValue,
|
|
5410
|
-
type: FlowTemplateLiteralType.UNKNOWN
|
|
5411
|
-
};
|
|
5412
|
-
const [, functionName, rawKey] = match;
|
|
5413
|
-
const key = rawKey.trim().replace(/^['"]|['"]$/g, "");
|
|
5414
|
-
switch (functionName) {
|
|
5415
|
-
case FlowTemplateLiteralType.TRANSLATION: return {
|
|
5416
|
-
key,
|
|
5417
|
-
originalValue,
|
|
5418
|
-
type: FlowTemplateLiteralType.TRANSLATION
|
|
5419
|
-
};
|
|
5420
|
-
case FlowTemplateLiteralType.META: return {
|
|
5421
|
-
key,
|
|
5422
|
-
originalValue,
|
|
5423
|
-
type: FlowTemplateLiteralType.META
|
|
5424
|
-
};
|
|
5425
|
-
default: return {
|
|
5426
|
-
originalValue,
|
|
5427
|
-
type: FlowTemplateLiteralType.UNKNOWN
|
|
5428
|
-
};
|
|
5429
|
-
}
|
|
5430
|
-
}
|
|
5487
|
+
const capPageSize = (limit) => limit === void 0 ? void 0 : Math.min(limit, SelectConstants_default.MAX_PAGE_SIZE);
|
|
5488
|
+
var capPageSize_default = capPageSize;
|
|
5431
5489
|
|
|
5432
5490
|
//#endregion
|
|
5433
|
-
//#region src/utils/
|
|
5434
|
-
/**
|
|
5435
|
-
* Global version of {@link FLOW_TEMPLATE_LITERAL_REGEX} for use with `String.prototype.replace`.
|
|
5436
|
-
*/
|
|
5437
|
-
const FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL = new RegExp(FLOW_TEMPLATE_LITERAL_REGEX.source, "g");
|
|
5438
|
-
/**
|
|
5439
|
-
* Resolves a `{{ t(key) }}` translation key, converting its colon-separated namespace to dots
|
|
5440
|
-
* e.g. "signin:fields.password.label" → "signin.fields.password.label".
|
|
5441
|
-
*/
|
|
5442
|
-
function resolveTranslation(key, t) {
|
|
5443
|
-
return t(key.replace(/:/g, "."));
|
|
5444
|
-
}
|
|
5491
|
+
//#region src/utils/resolvePageSize.ts
|
|
5445
5492
|
/**
|
|
5446
|
-
*
|
|
5447
|
-
*
|
|
5448
|
-
* Supported patterns:
|
|
5449
|
-
* - `{{ t(key) }}` — resolved via the i18n translation function.
|
|
5450
|
-
* Colon-separated namespaces are converted to dots:
|
|
5451
|
-
* `{{ t(signin:heading.label) }}` → `t('signin.heading.label')`
|
|
5452
|
-
* - `{{ meta(path) }}` — resolved via a dot-path lookup on FlowMetadataResponse.
|
|
5453
|
-
* `{{ meta(application.name) }}` → `meta.application?.name`
|
|
5454
|
-
*
|
|
5455
|
-
* Flow template literals can be embedded inside larger strings:
|
|
5456
|
-
* `"Login using {{ meta(application.name) }}"` → `"Login using My App"`
|
|
5457
|
-
*
|
|
5458
|
-
* A meta field can itself hold a translation reference instead of final display text — that case is
|
|
5459
|
-
* detected and resolved via `t()` too, so the raw template never reaches the screen.
|
|
5460
|
-
*
|
|
5461
|
-
* Unrecognized expressions are left unchanged.
|
|
5462
|
-
*
|
|
5463
|
-
* @template TFn - The concrete translation function type.
|
|
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.
|
|
5464
5495
|
*
|
|
5465
|
-
* @
|
|
5466
|
-
* @param options - Resolution context: translation function and optional flow metadata
|
|
5467
|
-
* @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.
|
|
5468
5497
|
*/
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
return text.replace(FLOW_TEMPLATE_LITERAL_REGEX_GLOBAL, (match, content) => {
|
|
5472
|
-
const parsed = parseFlowTemplateLiteral(content.trim());
|
|
5473
|
-
if (parsed.type === FlowTemplateLiteralType.TRANSLATION && parsed.key) return resolveTranslation(parsed.key, t);
|
|
5474
|
-
if (parsed.type === FlowTemplateLiteralType.META && parsed.key && meta) {
|
|
5475
|
-
const value = resolveMeta(parsed.key, meta);
|
|
5476
|
-
if (isTranslationFlowTemplateLiteral(value)) {
|
|
5477
|
-
const innerKey = value.trim().match(TRANSLATION_FLOW_TEMPLATE_LITERAL_KEY_PATTERN)[1];
|
|
5478
|
-
return resolveTranslation(innerKey, t);
|
|
5479
|
-
}
|
|
5480
|
-
return value;
|
|
5481
|
-
}
|
|
5482
|
-
return match;
|
|
5483
|
-
});
|
|
5484
|
-
}
|
|
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;
|
|
5485
5500
|
|
|
5486
5501
|
//#endregion
|
|
5487
|
-
//#region src/utils/
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
*
|
|
5493
|
-
*
|
|
5494
|
-
*
|
|
5495
|
-
*
|
|
5496
|
-
*
|
|
5497
|
-
* @
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
parsed = JSON.parse(raw);
|
|
5509
|
-
} catch {
|
|
5510
|
-
return [];
|
|
5511
|
-
}
|
|
5512
|
-
if (!Array.isArray(parsed)) return [];
|
|
5513
|
-
return parsed.filter((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry)).map((entry) => ({
|
|
5514
|
-
label: typeof entry["label"] === "string" ? entry["label"] : "",
|
|
5515
|
-
value: typeof entry["value"] === "string" ? entry["value"] : ""
|
|
5516
|
-
})).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
|
+
} };
|
|
5517
5523
|
};
|
|
5518
|
-
var
|
|
5519
|
-
|
|
5520
|
-
//#endregion
|
|
5521
|
-
//#region src/utils/countryCodeToFlagEmoji.ts
|
|
5522
|
-
/**
|
|
5523
|
-
* Converts a two-letter ISO 3166-1 alpha-2 country code to a flag emoji using
|
|
5524
|
-
* Unicode Regional Indicator Symbols (U+1F1E6–U+1F1FF).
|
|
5525
|
-
*
|
|
5526
|
-
* @param countryCode - Two-letter uppercase country code (e.g. "US", "GB")
|
|
5527
|
-
* @returns Flag emoji string (e.g. "🇺🇸", "🇬🇧")
|
|
5528
|
-
*/
|
|
5529
|
-
function countryCodeToFlagEmoji(countryCode) {
|
|
5530
|
-
return countryCode.toUpperCase().split("").map((char) => String.fromCodePoint(127397 + char.charCodeAt(0))).join("");
|
|
5531
|
-
}
|
|
5532
|
-
|
|
5533
|
-
//#endregion
|
|
5534
|
-
//#region src/utils/resolveLocaleDisplayName.ts
|
|
5535
|
-
/**
|
|
5536
|
-
* Resolves a BCP 47 locale tag to a human-readable display name using the
|
|
5537
|
-
* `Intl.DisplayNames` API.
|
|
5538
|
-
*
|
|
5539
|
-
* Falls back to the raw locale code if the runtime does not support
|
|
5540
|
-
* `Intl.DisplayNames` or if resolution returns `undefined`.
|
|
5541
|
-
*
|
|
5542
|
-
* @param locale - BCP 47 locale tag to resolve (e.g. "en", "fr", "zh-Hant")
|
|
5543
|
-
* @param displayLocale - Locale used for the display name language (defaults to "en")
|
|
5544
|
-
* @returns Human-readable language name (e.g. "English", "French")
|
|
5545
|
-
*/
|
|
5546
|
-
function resolveLocaleDisplayName(locale, displayLocale) {
|
|
5547
|
-
try {
|
|
5548
|
-
return new Intl.DisplayNames([displayLocale], { type: "language" }).of(locale) ?? locale;
|
|
5549
|
-
} catch {
|
|
5550
|
-
return locale;
|
|
5551
|
-
}
|
|
5552
|
-
}
|
|
5524
|
+
var parseSelectPageQuery_default = parseSelectPageQuery;
|
|
5553
5525
|
|
|
5554
5526
|
//#endregion
|
|
5555
|
-
//#region src/
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
|
|
5568
|
-
|
|
5569
|
-
|
|
5570
|
-
|
|
5571
|
-
|
|
5572
|
-
|
|
5573
|
-
|
|
5574
|
-
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5584
|
-
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
|
|
5588
|
-
|
|
5589
|
-
|
|
5590
|
-
|
|
5591
|
-
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
-
|
|
5595
|
-
|
|
5596
|
-
|
|
5597
|
-
|
|
5598
|
-
|
|
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
|
+
}
|
|
5599
5669
|
};
|
|
5600
|
-
|
|
5601
|
-
* Resolves a BCP 47 locale tag to a flag emoji.
|
|
5602
|
-
*
|
|
5603
|
-
* Resolution order:
|
|
5604
|
-
* 1. Country subtag when present (e.g. `"en-US"` → 🇺🇸)
|
|
5605
|
-
* 2. Language-to-country fallback map (e.g. `"en"` → 🇬🇧)
|
|
5606
|
-
* 3. Globe emoji 🌐 for unrecognised codes
|
|
5607
|
-
*
|
|
5608
|
-
* @param locale - BCP 47 locale tag (e.g. "en", "en-US", "fr-CA")
|
|
5609
|
-
* @returns Flag or globe emoji string
|
|
5610
|
-
*/
|
|
5611
|
-
function resolveLocaleEmoji(locale) {
|
|
5612
|
-
const parts = locale.split("-");
|
|
5613
|
-
const languageCode = parts[0].toLowerCase();
|
|
5614
|
-
const countryCode = (parts.length > 1 ? parts[parts.length - 1].toUpperCase() : void 0) ?? LANGUAGE_TO_COUNTRY[languageCode];
|
|
5615
|
-
if (countryCode?.length !== 2) return "🌐";
|
|
5616
|
-
return countryCodeToFlagEmoji(countryCode);
|
|
5617
|
-
}
|
|
5618
|
-
var resolveLocaleEmoji_default = resolveLocaleEmoji;
|
|
5670
|
+
var en_US_default = en_US;
|
|
5619
5671
|
|
|
5620
5672
|
//#endregion
|
|
5621
|
-
//#region src/
|
|
5622
|
-
|
|
5623
|
-
|
|
5624
|
-
|
|
5625
|
-
|
|
5626
|
-
|
|
5627
|
-
|
|
5628
|
-
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
|
|
5633
|
-
|
|
5634
|
-
|
|
5635
|
-
|
|
5636
|
-
|
|
5637
|
-
|
|
5638
|
-
|
|
5639
|
-
|
|
5640
|
-
|
|
5641
|
-
|
|
5642
|
-
|
|
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'."
|
|
5643
5814
|
}
|
|
5644
|
-
}
|
|
5815
|
+
};
|
|
5816
|
+
var fr_FR_default = fr_FR;
|
|
5645
5817
|
|
|
5646
5818
|
//#endregion
|
|
5647
|
-
//#region src/
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
|
|
5658
|
-
|
|
5659
|
-
|
|
5660
|
-
|
|
5661
|
-
|
|
5662
|
-
|
|
5663
|
-
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5676
|
-
|
|
5677
|
-
|
|
5678
|
-
|
|
5679
|
-
|
|
5680
|
-
|
|
5681
|
-
|
|
5682
|
-
|
|
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": "దశను పూర్తి చేయడానికి అనుమతించబడిన సమయం ముగిసింది."
|
|
5683
5960
|
}
|
|
5684
|
-
}
|
|
5961
|
+
};
|
|
5962
|
+
var te_IN_default = te_IN;
|
|
5685
5963
|
|
|
5686
5964
|
//#endregion
|
|
5687
|
-
//#region src/
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
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
|
+
}
|
|
5697
6107
|
};
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
5717
|
-
|
|
5718
|
-
|
|
5719
|
-
|
|
5720
|
-
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
5724
|
-
|
|
5725
|
-
|
|
5726
|
-
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
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."
|
|
5733
6252
|
}
|
|
5734
6253
|
};
|
|
5735
|
-
var
|
|
5736
|
-
|
|
5737
|
-
//#endregion
|
|
5738
|
-
//#region src/utils/buildValidatorFromRules.ts
|
|
5739
|
-
/**
|
|
5740
|
-
* Composes an array of `ValidationRule`s into a single validator function suitable for
|
|
5741
|
-
* `useForm`'s `FormField.validator` slot.
|
|
5742
|
-
*
|
|
5743
|
-
* The composed validator evaluates rules in declaration order and returns the **first**
|
|
5744
|
-
* failing rule's message — matching the SDK's render-prop shape of a single string per
|
|
5745
|
-
* field. When all rules pass it returns `null`.
|
|
5746
|
-
*
|
|
5747
|
-
* Returns `null` when no rules are supplied so callers can compose conditionally.
|
|
5748
|
-
*/
|
|
5749
|
-
const buildValidatorFromRules = (rules) => {
|
|
5750
|
-
if (!rules || rules.length === 0) return null;
|
|
5751
|
-
return (value) => {
|
|
5752
|
-
for (const rule of rules) {
|
|
5753
|
-
const message = evaluateValidationRule_default(rule, value);
|
|
5754
|
-
if (message !== null) return message;
|
|
5755
|
-
}
|
|
5756
|
-
return null;
|
|
5757
|
-
};
|
|
5758
|
-
};
|
|
5759
|
-
var buildValidatorFromRules_default = buildValidatorFromRules;
|
|
5760
|
-
|
|
5761
|
-
//#endregion
|
|
5762
|
-
//#region src/utils/withVendorCSSClassPrefix.ts
|
|
5763
|
-
/**
|
|
5764
|
-
* Adds a vendor-specific prefix to a CSS class name.
|
|
5765
|
-
*
|
|
5766
|
-
* @param className - The original CSS class name to be prefixed
|
|
5767
|
-
* @returns A new string with the vendor prefix added to the class name
|
|
5768
|
-
*
|
|
5769
|
-
* @example
|
|
5770
|
-
* ```typescript
|
|
5771
|
-
* // Usage with clsx
|
|
5772
|
-
* clsx(withVendorCSSClassPrefix('sign-in-button'), className)
|
|
5773
|
-
* // Result: "thunderid-sign-in-button"
|
|
5774
|
-
* ```
|
|
5775
|
-
*/
|
|
5776
|
-
const withVendorCSSClassPrefix = (className) => `${VendorConstants_default.VENDOR_PREFIX}-${className}`;
|
|
5777
|
-
var withVendorCSSClassPrefix_default = withVendorCSSClassPrefix;
|
|
5778
|
-
|
|
5779
|
-
//#endregion
|
|
5780
|
-
//#region src/utils/getVendorPrefix.ts
|
|
5781
|
-
/**
|
|
5782
|
-
* Resolves the vendor/brand namespace to use for storage keys, cookie names, etc.
|
|
5783
|
-
* Falls back to `VendorConstants.VENDOR_PREFIX` (the SDK-wide default) when no vendor
|
|
5784
|
-
* is configured, so there is a single source of truth for the default brand name.
|
|
5785
|
-
*
|
|
5786
|
-
* @param vendor - The vendor value from the resolved SDK configuration, if any.
|
|
5787
|
-
* @returns The resolved vendor prefix.
|
|
5788
|
-
*/
|
|
5789
|
-
const getVendorPrefix = (vendor) => vendor ?? VendorConstants_default.VENDOR_PREFIX;
|
|
5790
|
-
var getVendorPrefix_default = getVendorPrefix;
|
|
6254
|
+
var pt_BR_default = pt_BR;
|
|
5791
6255
|
|
|
5792
6256
|
//#endregion
|
|
5793
|
-
//#region src/
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
5812
|
-
|
|
5813
|
-
|
|
5814
|
-
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
|
|
5825
|
-
|
|
5826
|
-
|
|
5827
|
-
|
|
5828
|
-
|
|
5829
|
-
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
|
|
5834
|
-
|
|
5835
|
-
|
|
5836
|
-
|
|
5837
|
-
|
|
5838
|
-
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
5846
|
-
|
|
5847
|
-
|
|
5848
|
-
|
|
5849
|
-
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
|
|
5853
|
-
|
|
5854
|
-
|
|
5855
|
-
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
|
|
5862
|
-
|
|
5863
|
-
|
|
5864
|
-
|
|
5865
|
-
|
|
5866
|
-
|
|
5867
|
-
|
|
5868
|
-
|
|
5869
|
-
|
|
5870
|
-
|
|
5871
|
-
|
|
5872
|
-
|
|
5873
|
-
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
}
|
|
5878
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
5881
|
-
|
|
5882
|
-
|
|
5883
|
-
|
|
5884
|
-
}
|
|
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."
|
|
5885
6398
|
}
|
|
5886
6399
|
};
|
|
6400
|
+
var pt_PT_default = pt_PT;
|
|
5887
6401
|
|
|
5888
6402
|
//#endregion
|
|
5889
|
-
//#region src/i18n/translations/
|
|
5890
|
-
const
|
|
6403
|
+
//#region src/i18n/translations/ta-IN.ts
|
|
6404
|
+
const ta_IN = {
|
|
5891
6405
|
metadata: {
|
|
5892
|
-
localeCode: "
|
|
5893
|
-
countryCode: "
|
|
5894
|
-
languageCode: "
|
|
5895
|
-
displayName: "
|
|
6406
|
+
localeCode: "ta-IN",
|
|
6407
|
+
countryCode: "IN",
|
|
6408
|
+
languageCode: "ta",
|
|
6409
|
+
displayName: "தமிழ் (இலங்கை)",
|
|
5896
6410
|
direction: "ltr"
|
|
5897
6411
|
},
|
|
5898
6412
|
translations: {
|
|
5899
|
-
"elements.buttons.signin.text": "
|
|
5900
|
-
"elements.buttons.signout.text": "
|
|
5901
|
-
"elements.buttons.signup.text": "
|
|
5902
|
-
"elements.buttons.submit.text": "
|
|
5903
|
-
"elements.buttons.facebook.text": "
|
|
5904
|
-
"elements.buttons.google.text": "
|
|
5905
|
-
"elements.buttons.github.text": "
|
|
5906
|
-
"elements.buttons.microsoft.text": "
|
|
5907
|
-
"elements.buttons.linkedin.text": "
|
|
5908
|
-
"elements.buttons.ethereum.text": "
|
|
5909
|
-
"elements.buttons.smsotp.text": "
|
|
5910
|
-
"elements.buttons.multi.option.text": "
|
|
5911
|
-
"elements.buttons.social.text": "
|
|
5912
|
-
"elements.display.divider.or_separator": "
|
|
5913
|
-
"elements.display.copyable_text.copy": "
|
|
5914
|
-
"elements.display.copyable_text.copied": "
|
|
5915
|
-
"elements.
|
|
5916
|
-
"elements.
|
|
5917
|
-
"elements.fields.
|
|
5918
|
-
"elements.fields.
|
|
5919
|
-
"elements.fields.
|
|
5920
|
-
"elements.fields.
|
|
5921
|
-
"elements.fields.
|
|
5922
|
-
"elements.fields.
|
|
5923
|
-
"elements.fields.
|
|
5924
|
-
"elements.fields.
|
|
5925
|
-
"elements.fields.
|
|
5926
|
-
"elements.fields.
|
|
5927
|
-
"elements.fields.
|
|
5928
|
-
"elements.fields.organization.
|
|
5929
|
-
"elements.fields.organization.
|
|
5930
|
-
"elements.fields.organization.
|
|
5931
|
-
"
|
|
5932
|
-
"
|
|
5933
|
-
"
|
|
5934
|
-
"
|
|
5935
|
-
"
|
|
5936
|
-
"
|
|
5937
|
-
"
|
|
5938
|
-
"
|
|
5939
|
-
"
|
|
5940
|
-
"
|
|
5941
|
-
"
|
|
5942
|
-
"
|
|
5943
|
-
"
|
|
5944
|
-
"
|
|
5945
|
-
"
|
|
5946
|
-
"
|
|
5947
|
-
"
|
|
5948
|
-
"
|
|
5949
|
-
"
|
|
5950
|
-
"
|
|
5951
|
-
"
|
|
5952
|
-
"
|
|
5953
|
-
"
|
|
5954
|
-
"
|
|
5955
|
-
"
|
|
5956
|
-
"
|
|
5957
|
-
"
|
|
5958
|
-
"
|
|
5959
|
-
"
|
|
5960
|
-
"
|
|
5961
|
-
"
|
|
5962
|
-
"
|
|
5963
|
-
"
|
|
5964
|
-
"
|
|
5965
|
-
"
|
|
5966
|
-
"
|
|
5967
|
-
"
|
|
5968
|
-
"
|
|
5969
|
-
"
|
|
5970
|
-
"user.
|
|
5971
|
-
"user.
|
|
5972
|
-
"user.change_password.
|
|
5973
|
-
"
|
|
5974
|
-
"
|
|
5975
|
-
"
|
|
5976
|
-
"
|
|
5977
|
-
"
|
|
5978
|
-
"
|
|
5979
|
-
"
|
|
5980
|
-
"
|
|
5981
|
-
"
|
|
5982
|
-
"
|
|
5983
|
-
"
|
|
5984
|
-
"
|
|
5985
|
-
"organization.switcher.
|
|
5986
|
-
"organization.switcher.
|
|
5987
|
-
"organization.switcher.
|
|
5988
|
-
"organization.switcher.
|
|
5989
|
-
"organization.switcher.
|
|
5990
|
-
"organization.switcher.
|
|
5991
|
-
"organization.
|
|
5992
|
-
"organization.
|
|
5993
|
-
"organization.
|
|
5994
|
-
"organization.
|
|
5995
|
-
"organization.
|
|
5996
|
-
"organization.
|
|
5997
|
-
"organization.
|
|
5998
|
-
"
|
|
5999
|
-
"
|
|
6000
|
-
"
|
|
6001
|
-
"
|
|
6002
|
-
"
|
|
6003
|
-
"
|
|
6004
|
-
"
|
|
6005
|
-
"
|
|
6006
|
-
"
|
|
6007
|
-
"
|
|
6008
|
-
"
|
|
6009
|
-
"
|
|
6010
|
-
"
|
|
6011
|
-
"
|
|
6012
|
-
"
|
|
6013
|
-
"
|
|
6014
|
-
"
|
|
6015
|
-
"
|
|
6016
|
-
"
|
|
6017
|
-
"errors.
|
|
6018
|
-
"errors.
|
|
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": "படிநிலையை முடிக்க அனுமதிக்கப்பட்ட நேரம் காலாவதியானது."
|
|
6019
6544
|
}
|
|
6020
6545
|
};
|
|
6021
|
-
var
|
|
6546
|
+
var ta_IN_default = ta_IN;
|
|
6022
6547
|
|
|
6023
6548
|
//#endregion
|
|
6024
|
-
//#region src/i18n/translations/
|
|
6025
|
-
const
|
|
6549
|
+
//#region src/i18n/translations/si-LK.ts
|
|
6550
|
+
const si_LK = {
|
|
6026
6551
|
metadata: {
|
|
6027
|
-
localeCode: "
|
|
6028
|
-
countryCode: "
|
|
6029
|
-
languageCode: "
|
|
6030
|
-
displayName: "
|
|
6552
|
+
localeCode: "si_LK",
|
|
6553
|
+
countryCode: "LK",
|
|
6554
|
+
languageCode: "si",
|
|
6555
|
+
displayName: "සිංහල (ශ්රී ලංකාව)",
|
|
6031
6556
|
direction: "ltr"
|
|
6032
6557
|
},
|
|
6033
6558
|
translations: {
|
|
6034
|
-
"elements.buttons.signin.text": "
|
|
6035
|
-
"elements.buttons.signout.text": "
|
|
6036
|
-
"elements.buttons.signup.text": "
|
|
6037
|
-
"elements.buttons.submit.text": "
|
|
6038
|
-
"elements.buttons.facebook.text": "
|
|
6039
|
-
"elements.buttons.google.text": "
|
|
6040
|
-
"elements.buttons.github.text": "
|
|
6041
|
-
"elements.buttons.microsoft.text": "
|
|
6042
|
-
"elements.buttons.linkedin.text": "
|
|
6043
|
-
"elements.buttons.ethereum.text": "
|
|
6044
|
-
"elements.buttons.smsotp.text": "
|
|
6045
|
-
"elements.buttons.multi.option.text": "
|
|
6046
|
-
"elements.buttons.social.text": "
|
|
6047
|
-
"elements.display.divider.or_separator": "
|
|
6048
|
-
"elements.display.copyable_text.copy": "
|
|
6049
|
-
"elements.display.copyable_text.copied": "
|
|
6050
|
-
"elements.
|
|
6051
|
-
"elements.
|
|
6052
|
-
"elements.fields.
|
|
6053
|
-
"elements.fields.
|
|
6054
|
-
"elements.fields.
|
|
6055
|
-
"elements.fields.
|
|
6056
|
-
"elements.fields.
|
|
6057
|
-
"elements.fields.
|
|
6058
|
-
"elements.fields.
|
|
6059
|
-
"elements.fields.
|
|
6060
|
-
"elements.fields.
|
|
6061
|
-
"elements.fields.
|
|
6062
|
-
"elements.fields.
|
|
6063
|
-
"elements.fields.organization.
|
|
6064
|
-
"elements.fields.organization.
|
|
6065
|
-
"elements.fields.organization.
|
|
6066
|
-
"
|
|
6067
|
-
"
|
|
6068
|
-
"
|
|
6069
|
-
"
|
|
6070
|
-
"
|
|
6071
|
-
"
|
|
6072
|
-
"
|
|
6073
|
-
"
|
|
6074
|
-
"
|
|
6075
|
-
"
|
|
6076
|
-
"
|
|
6077
|
-
"
|
|
6078
|
-
"
|
|
6079
|
-
"
|
|
6080
|
-
"
|
|
6081
|
-
"
|
|
6082
|
-
"
|
|
6083
|
-
"
|
|
6084
|
-
"
|
|
6085
|
-
"
|
|
6086
|
-
"
|
|
6087
|
-
"
|
|
6088
|
-
"
|
|
6089
|
-
"
|
|
6090
|
-
"
|
|
6091
|
-
"
|
|
6092
|
-
"
|
|
6093
|
-
"
|
|
6094
|
-
"
|
|
6095
|
-
"
|
|
6096
|
-
"
|
|
6097
|
-
"
|
|
6098
|
-
"
|
|
6099
|
-
"
|
|
6100
|
-
"
|
|
6101
|
-
"
|
|
6102
|
-
"
|
|
6103
|
-
"
|
|
6104
|
-
"
|
|
6105
|
-
"user.
|
|
6106
|
-
"user.
|
|
6107
|
-
"user.change_password.
|
|
6108
|
-
"
|
|
6109
|
-
"
|
|
6110
|
-
"
|
|
6111
|
-
"
|
|
6112
|
-
"
|
|
6113
|
-
"
|
|
6114
|
-
"
|
|
6115
|
-
"
|
|
6116
|
-
"
|
|
6117
|
-
"
|
|
6118
|
-
"
|
|
6119
|
-
"
|
|
6120
|
-
"organization.switcher.
|
|
6121
|
-
"organization.switcher.
|
|
6122
|
-
"organization.switcher.
|
|
6123
|
-
"organization.switcher.
|
|
6124
|
-
"organization.switcher.
|
|
6125
|
-
"organization.switcher.
|
|
6126
|
-
"organization.
|
|
6127
|
-
"organization.
|
|
6128
|
-
"organization.
|
|
6129
|
-
"organization.
|
|
6130
|
-
"organization.
|
|
6131
|
-
"organization.
|
|
6132
|
-
"organization.
|
|
6133
|
-
"
|
|
6134
|
-
"
|
|
6135
|
-
"
|
|
6136
|
-
"
|
|
6137
|
-
"
|
|
6138
|
-
"
|
|
6139
|
-
"
|
|
6140
|
-
"
|
|
6141
|
-
"
|
|
6142
|
-
"
|
|
6143
|
-
"
|
|
6144
|
-
"
|
|
6145
|
-
"
|
|
6146
|
-
"
|
|
6147
|
-
"
|
|
6148
|
-
"
|
|
6149
|
-
"
|
|
6150
|
-
"
|
|
6151
|
-
"
|
|
6152
|
-
"errors.
|
|
6153
|
-
"errors.signin.
|
|
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": "පියවර සම්පූර්ණ කිරීමට ලබා දී තිබූ කාලය ඉකුත් වී ඇත."
|
|
6154
6690
|
}
|
|
6155
6691
|
};
|
|
6156
|
-
var
|
|
6692
|
+
var si_LK_default = si_LK;
|
|
6157
6693
|
|
|
6158
6694
|
//#endregion
|
|
6159
|
-
//#region src/i18n/translations/
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
|
|
6163
|
-
|
|
6164
|
-
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
|
|
6171
|
-
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
|
|
6176
|
-
|
|
6177
|
-
|
|
6178
|
-
|
|
6179
|
-
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
|
|
6190
|
-
|
|
6191
|
-
|
|
6192
|
-
|
|
6193
|
-
|
|
6194
|
-
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6198
|
-
|
|
6199
|
-
|
|
6200
|
-
|
|
6201
|
-
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
"
|
|
6231
|
-
"
|
|
6232
|
-
"
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
|
|
6244
|
-
|
|
6245
|
-
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6264
|
-
|
|
6265
|
-
|
|
6266
|
-
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
|
|
6275
|
-
|
|
6276
|
-
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
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;
|
|
6289
6849
|
}
|
|
6290
6850
|
};
|
|
6291
|
-
var
|
|
6851
|
+
var loadPageWithRetryAndLog_default = loadPageWithRetryAndLog;
|
|
6292
6852
|
|
|
6293
6853
|
//#endregion
|
|
6294
|
-
//#region src/
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
|
|
6299
|
-
|
|
6300
|
-
|
|
6301
|
-
|
|
6302
|
-
|
|
6303
|
-
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
|
|
6334
|
-
|
|
6335
|
-
|
|
6336
|
-
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
|
|
6370
|
-
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
|
|
6376
|
-
|
|
6377
|
-
|
|
6378
|
-
|
|
6379
|
-
|
|
6380
|
-
|
|
6381
|
-
|
|
6382
|
-
|
|
6383
|
-
|
|
6384
|
-
|
|
6385
|
-
|
|
6386
|
-
|
|
6387
|
-
|
|
6388
|
-
|
|
6389
|
-
|
|
6390
|
-
|
|
6391
|
-
|
|
6392
|
-
|
|
6393
|
-
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
"organization.create.buttons.cancel.text": "रद्द करें",
|
|
6403
|
-
"messages.loading.placeholder": "लोड हो रहा है...",
|
|
6404
|
-
"consent.required": "आवश्यक",
|
|
6405
|
-
"consent.essential_claims": "आवश्यक विशेषताएँ",
|
|
6406
|
-
"consent.optional_claims": "वैकल्पिक विशेषताएँ",
|
|
6407
|
-
"consent.authorize_scope": "अनुमतियाँ",
|
|
6408
|
-
"consent.essential_claims.info": "सेवा के सही ढंग से कार्य करने के लिए ये विशेषताएँ आवश्यक हैं।",
|
|
6409
|
-
"consent.optional_claims.info": "ये विशेषताएँ वैकल्पिक हैं और आपके विवेकानुसार प्रदान की जा सकती हैं।",
|
|
6410
|
-
"consent.authorize_scope.info": "ये अनुमतियाँ सेवा को अतिरिक्त सुविधाओं तक पहुँचने की अनुमति देती हैं।",
|
|
6411
|
-
"errors.heading": "त्रुटि",
|
|
6412
|
-
"errors.signin.initialization": "इनिशियलाइज़ेशन में त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
|
|
6413
|
-
"errors.signin.flow.failure": "साइन-इन प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
|
|
6414
|
-
"errors.signin.flow.completion.failure": "साइन-इन प्रक्रिया पूरी करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
|
|
6415
|
-
"errors.signin.flow.passkeys.failure": "पासकीज़ के साथ साइन-इन करते समय त्रुटि।",
|
|
6416
|
-
"errors.signin.flow.passkeys.completion.failure": "पासकीज़ साइन-इन पूरी करते समय त्रुटि।",
|
|
6417
|
-
"errors.signup.initialization": "प्रारंभीकरण के दौरान एक त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
|
|
6418
|
-
"errors.signup.flow.failure": "साइन-अप प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
|
|
6419
|
-
"errors.signup.flow.initialization.failure": "साइन-अप प्रक्रिया प्रारंभ करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
|
|
6420
|
-
"errors.signup.popup.failure": "पॉप-अप विंडो में साइन-अप जारी नहीं रखा जा सका। कृपया पुनः प्रयास करें।",
|
|
6421
|
-
"errors.signup.components.not.available": "साइन-अप फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
|
|
6422
|
-
"errors.signin.components.not.available": "साइन-इन फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
|
|
6423
|
-
"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;
|
|
6424
6962
|
}
|
|
6963
|
+
return [{
|
|
6964
|
+
key: "regex",
|
|
6965
|
+
messageKey: "validation.password.pattern",
|
|
6966
|
+
passed: matches
|
|
6967
|
+
}];
|
|
6425
6968
|
};
|
|
6426
|
-
var
|
|
6969
|
+
var evaluatePasswordPolicy_default = evaluatePasswordPolicy;
|
|
6427
6970
|
|
|
6428
6971
|
//#endregion
|
|
6429
|
-
//#region src/
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
"
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
|
|
6464
|
-
|
|
6465
|
-
|
|
6466
|
-
|
|
6467
|
-
|
|
6468
|
-
|
|
6469
|
-
|
|
6470
|
-
|
|
6471
|
-
|
|
6472
|
-
|
|
6473
|
-
|
|
6474
|
-
|
|
6475
|
-
|
|
6476
|
-
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
|
|
6481
|
-
|
|
6482
|
-
|
|
6483
|
-
|
|
6484
|
-
|
|
6485
|
-
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
|
|
6490
|
-
|
|
6491
|
-
|
|
6492
|
-
|
|
6493
|
-
|
|
6494
|
-
|
|
6495
|
-
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
|
|
6510
|
-
|
|
6511
|
-
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
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
|
+
};
|
|
6560
7109
|
};
|
|
6561
|
-
var
|
|
7110
|
+
var mapCredentialUpdateError_default = mapCredentialUpdateError;
|
|
6562
7111
|
|
|
6563
7112
|
//#endregion
|
|
6564
|
-
//#region src/
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6568
|
-
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
|
|
6572
|
-
|
|
6573
|
-
|
|
6574
|
-
|
|
6575
|
-
|
|
6576
|
-
|
|
6577
|
-
|
|
6578
|
-
|
|
6579
|
-
|
|
6580
|
-
|
|
6581
|
-
|
|
6582
|
-
|
|
6583
|
-
|
|
6584
|
-
|
|
6585
|
-
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6604
|
-
|
|
6605
|
-
|
|
6606
|
-
|
|
6607
|
-
|
|
6608
|
-
|
|
6609
|
-
|
|
6610
|
-
|
|
6611
|
-
|
|
6612
|
-
|
|
6613
|
-
|
|
6614
|
-
|
|
6615
|
-
|
|
6616
|
-
|
|
6617
|
-
|
|
6618
|
-
|
|
6619
|
-
|
|
6620
|
-
|
|
6621
|
-
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
6625
|
-
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
|
|
6629
|
-
|
|
6630
|
-
|
|
6631
|
-
|
|
6632
|
-
|
|
6633
|
-
|
|
6634
|
-
|
|
6635
|
-
|
|
6636
|
-
|
|
6637
|
-
|
|
6638
|
-
|
|
6639
|
-
|
|
6640
|
-
|
|
6641
|
-
|
|
6642
|
-
|
|
6643
|
-
|
|
6644
|
-
|
|
6645
|
-
|
|
6646
|
-
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
6650
|
-
|
|
6651
|
-
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
|
|
6660
|
-
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6678
|
-
|
|
6679
|
-
|
|
6680
|
-
|
|
6681
|
-
|
|
6682
|
-
|
|
6683
|
-
|
|
6684
|
-
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
6688
|
-
|
|
6689
|
-
|
|
6690
|
-
|
|
6691
|
-
|
|
6692
|
-
|
|
6693
|
-
|
|
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 [];
|
|
6694
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 !== "");
|
|
6695
7364
|
};
|
|
6696
|
-
var
|
|
7365
|
+
var parseKeyValuePairs_default = parseKeyValuePairs;
|
|
6697
7366
|
|
|
6698
7367
|
//#endregion
|
|
6699
|
-
//#region src/
|
|
6700
|
-
|
|
6701
|
-
|
|
6702
|
-
|
|
6703
|
-
|
|
6704
|
-
|
|
6705
|
-
|
|
6706
|
-
|
|
6707
|
-
|
|
6708
|
-
|
|
6709
|
-
|
|
6710
|
-
|
|
6711
|
-
|
|
6712
|
-
|
|
6713
|
-
|
|
6714
|
-
|
|
6715
|
-
|
|
6716
|
-
|
|
6717
|
-
|
|
6718
|
-
|
|
6719
|
-
|
|
6720
|
-
|
|
6721
|
-
|
|
6722
|
-
|
|
6723
|
-
|
|
6724
|
-
|
|
6725
|
-
|
|
6726
|
-
|
|
6727
|
-
|
|
6728
|
-
|
|
6729
|
-
"elements.fields.password.placeholder": "கடவுச்சொலை உள்ளிடவும்",
|
|
6730
|
-
"elements.fields.first_name.label": "முதல் பெயர்",
|
|
6731
|
-
"elements.fields.first_name.placeholder": "உங்கள் முதல் பெயரை உள்ளிடவும்",
|
|
6732
|
-
"elements.fields.last_name.label": "கடைசி பெயர்",
|
|
6733
|
-
"elements.fields.last_name.placeholder": "உங்கள் கடைசி பெயரை உள்ளிடவும்",
|
|
6734
|
-
"elements.fields.email.label": "மின்னஞ்சல்",
|
|
6735
|
-
"elements.fields.email.placeholder": "உங்கள் மின்னஞ்சலை உள்ளிடவும்",
|
|
6736
|
-
"elements.fields.organization.name.label": "அமைப்பின் பெயர்",
|
|
6737
|
-
"elements.fields.organization.handle.label": "அமைப்பு கையாளுதல்",
|
|
6738
|
-
"elements.fields.organization.description.label": "அமைப்பு விளக்கம்",
|
|
6739
|
-
"elements.fields.organization.select.label": "அமைப்பை தேர்ந்தெடு",
|
|
6740
|
-
"elements.fields.organization.select.placeholder": "அமைப்பை தெரிந்தெடுக்கவும்",
|
|
6741
|
-
"validations.required.field.error": "இந்த புலம் தேவை",
|
|
6742
|
-
"validation.pattern.invalid": "இந்த மதிப்பு தேவையான வடிவத்துடன் பொருந்தவில்லை.",
|
|
6743
|
-
"validation.minLength.invalid": "இந்த மதிப்பு மிகவும் குறுகியது.",
|
|
6744
|
-
"validation.maxLength.invalid": "இந்த மதிப்பு மிகவும் நீளமானது.",
|
|
6745
|
-
"signin.heading": "உள்நுழை",
|
|
6746
|
-
"signin.subheading": "தொடர உங்கள் சான்றுகளை உள்ளிடவும்.",
|
|
6747
|
-
"signin.images.app_logo.alt": "பயன்பாட்டு லோகோ",
|
|
6748
|
-
"signup.heading": "பதிவு செய்",
|
|
6749
|
-
"signup.subheading": "தொடங்க புதிய கணக்கை உருவாக்கவும்.",
|
|
6750
|
-
"email.otp.heading": "OTP சரிபார்ப்பு",
|
|
6751
|
-
"email.otp.subheading": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
|
|
6752
|
-
"email.otp.buttons.submit.text": "தொடரவும்",
|
|
6753
|
-
"identifier.first.heading": "உள்நுழை",
|
|
6754
|
-
"identifier.first.subheading": "பயனர்பெயர் அல்லது மின்னஞ்சல் முகவரியை உள்ளிடவும்.",
|
|
6755
|
-
"identifier.first.buttons.submit.text": "தொடரவும்",
|
|
6756
|
-
"sms.otp.heading": "OTP சரிபார்ப்பு",
|
|
6757
|
-
"sms.otp.subheading": "உங்கள் தொலைபேசிக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்.",
|
|
6758
|
-
"sms.otp.buttons.submit.text": "தொடரவும்",
|
|
6759
|
-
"totp.heading": "உங்கள் அடையாளத்தை சரிபார்க்கவும்",
|
|
6760
|
-
"totp.subheading": "உங்கள் அங்கீகரிப்பு செயலியில் உள்ள குறியீட்டை உள்ளிடவும்.",
|
|
6761
|
-
"totp.buttons.submit.text": "தொடரவும்",
|
|
6762
|
-
"username.password.buttons.submit.text": "தொடரவும்",
|
|
6763
|
-
"username.password.heading": "உள்நுழை",
|
|
6764
|
-
"username.password.subheading": "தொடர உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.",
|
|
6765
|
-
"passkey.button.use": "Passkey மூலம் உள்நுழையவும்",
|
|
6766
|
-
"passkey.signin.heading": "Passkey மூலம் உள்நுழையவும்",
|
|
6767
|
-
"passkey.register.heading": "Passkey-ஐ பதிவு செய்யவும்",
|
|
6768
|
-
"passkey.register.description": "கடவுச்சொல் இல்லாமல் பாதுகாப்பாக உள்நுழைய ஒரு passkey-ஐ உருவாக்கவும்.",
|
|
6769
|
-
"user.profile.heading": "சுயவிவரம்",
|
|
6770
|
-
"user.profile.update.generic.error": "உங்கள் சுயவிவரத்தை புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
|
|
6771
|
-
"user.change_password.heading": "{credential} மாற்றவும்",
|
|
6772
|
-
"user.change_password.new.label": "புதிய {credential}",
|
|
6773
|
-
"user.change_password.new.placeholder": "உங்கள் புதிய {credentialLower}-ஐ உள்ளிடவும்",
|
|
6774
|
-
"user.change_password.confirm.label": "புதிய {credential}-ஐ உறுதிப்படுத்தவும்",
|
|
6775
|
-
"user.change_password.confirm.placeholder": "உங்கள் புதிய {credentialLower}-ஐ மீண்டும் உள்ளிடவும்",
|
|
6776
|
-
"user.change_password.requirements.heading": "உங்கள் {credentialLower} பின்வருவனவற்றைக் கொண்டிருக்க வேண்டும்:",
|
|
6777
|
-
"user.change_password.submit": "{credential}-ஐ புதுப்பிக்கவும்",
|
|
6778
|
-
"user.change_password.success": "உங்கள் {credentialLower} புதுப்பிக்கப்பட்டது.",
|
|
6779
|
-
"user.change_password.mismatch.error": "{credentialLower} பொருந்தவில்லை.",
|
|
6780
|
-
"user.change_password.generic.error": "உங்கள் {credentialLower}-ஐ புதுப்பிக்கும் போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.",
|
|
6781
|
-
"user.change_password.unavailable.heading": "{credential} மாற்றங்கள் கிடைக்கவில்லை",
|
|
6782
|
-
"user.change_password.unavailable.description": "உங்கள் நிர்வாகியை தொடர்பு கொள்ளவும்.",
|
|
6783
|
-
"validation.password.pattern": "தேவையான வடிவமைப்பிற்கு பொருந்துகிறது",
|
|
6784
|
-
"organization.switcher.switch.organization": "அமைப்பை மாற்று",
|
|
6785
|
-
"organization.switcher.loading.placeholder.organizations": "அமைப்புகள் ஏற்றப்படுகின்றன...",
|
|
6786
|
-
"organization.switcher.members": "உறுப்பினர்கள்",
|
|
6787
|
-
"organization.switcher.member": "உறுப்பினர்",
|
|
6788
|
-
"organization.switcher.create.organization": "அமைப்பை உருவாக்கு",
|
|
6789
|
-
"organization.switcher.manage.organizations": "அமைப்புகளை நிர்வகிக்கவும்",
|
|
6790
|
-
"organization.switcher.buttons.manage.text": "நிர்வகி",
|
|
6791
|
-
"organization.switcher.organizations.heading": "அமைப்புகள்",
|
|
6792
|
-
"organization.switcher.buttons.switch.text": "மாற்று",
|
|
6793
|
-
"organization.switcher.no.access": "அணுகல் இல்லை",
|
|
6794
|
-
"organization.switcher.status.label": "நிலை:",
|
|
6795
|
-
"organization.switcher.showing.count": "மொத்த {total} அமைப்புகளில் {showing} காட்டப்படுகிறது",
|
|
6796
|
-
"organization.switcher.buttons.refresh.text": "புதுப்பி",
|
|
6797
|
-
"organization.switcher.buttons.load_more.text": "மேலும் அமைப்புகளை ஏற்று",
|
|
6798
|
-
"organization.switcher.loading.more": "ஏற்றப்படுகிறது...",
|
|
6799
|
-
"organization.switcher.no.organizations": "எந்த அமைப்பும் கிடைக்கவில்லை",
|
|
6800
|
-
"organization.switcher.error.prefix": "பிழை:",
|
|
6801
|
-
"organization.profile.heading": "அமைப்பு சுயவிவரம்",
|
|
6802
|
-
"organization.profile.loading": "அமைப்பை ஏற்றுகிறது...",
|
|
6803
|
-
"organization.profile.error": "அமைப்பை ஏற்ற முடியவில்லை",
|
|
6804
|
-
"organization.create.heading": "அமைப்பை உருவாக்கு",
|
|
6805
|
-
"organization.create.buttons.create_organization.text": "அமைப்பை உருவாக்கு",
|
|
6806
|
-
"organization.create.buttons.create_organization.loading.text": "உருவாக்கப்படுகிறது...",
|
|
6807
|
-
"organization.create.buttons.cancel.text": "ரத்து செய்",
|
|
6808
|
-
"messages.loading.placeholder": "ஏற்றப்படுகிறது...",
|
|
6809
|
-
"consent.required": "தேவையானது",
|
|
6810
|
-
"consent.essential_claims": "அத்தியாவசிய பண்புகள்",
|
|
6811
|
-
"consent.optional_claims": "விருப்பத் பண்புகள்",
|
|
6812
|
-
"consent.authorize_scope": "அனுமதிகள்",
|
|
6813
|
-
"consent.essential_claims.info": "சேவை சரியாக செயல்பட இந்த பண்புகள் தேவை.",
|
|
6814
|
-
"consent.optional_claims.info": "இந்த பண்புகள் விருப்பத்தேர்வு மற்றும் உங்கள் விருப்பப்படி வழங்கப்படலாம்.",
|
|
6815
|
-
"consent.authorize_scope.info": "இந்த அனுமதிகள் கூடுதல் அம்சங்களை அணுக சேவைக்கு உதவுகின்றன.",
|
|
6816
|
-
"errors.heading": "பிழை",
|
|
6817
|
-
"errors.signin.initialization": "தொடக்கத்தில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6818
|
-
"errors.signin.flow.failure": "உள்நுழைவு செயல்பாட்டின் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6819
|
-
"errors.signin.flow.completion.failure": "உள்நுழைவு செயல்பாட்டை முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6820
|
-
"errors.signin.flow.passkeys.failure": "பாஸ்கீக்கள் மூலம் உள்நுழையும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6821
|
-
"errors.signin.flow.passkeys.completion.failure": "பாஸ்கீ உள்நுழைவு முடிக்கும் போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6822
|
-
"errors.signup.initialization": "தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6823
|
-
"errors.signup.flow.failure": "பதிவு செய்யும் செயல்பாட்டில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6824
|
-
"errors.signup.flow.initialization.failure": "பதிவு செய்யும் செயல்பாட்டை தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6825
|
-
"errors.signup.popup.failure": "பாப்-அப் சாளரத்தில் பதிவைத் தொடர முடியவில்லை. மீண்டும் முயற்சிக்கவும்.",
|
|
6826
|
-
"errors.signup.components.not.available": "பதிவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6827
|
-
"errors.signin.components.not.available": "உள்நுழைவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
|
|
6828
|
-
"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;
|
|
6829
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"
|
|
6830
7446
|
};
|
|
6831
|
-
|
|
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;
|
|
6832
7466
|
|
|
6833
7467
|
//#endregion
|
|
6834
|
-
//#region src/
|
|
6835
|
-
|
|
6836
|
-
|
|
6837
|
-
|
|
6838
|
-
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6842
|
-
|
|
6843
|
-
|
|
6844
|
-
|
|
6845
|
-
|
|
6846
|
-
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
6854
|
-
|
|
6855
|
-
|
|
6856
|
-
|
|
6857
|
-
|
|
6858
|
-
|
|
6859
|
-
|
|
6860
|
-
|
|
6861
|
-
|
|
6862
|
-
|
|
6863
|
-
|
|
6864
|
-
|
|
6865
|
-
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
|
|
6869
|
-
|
|
6870
|
-
|
|
6871
|
-
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
|
|
6875
|
-
|
|
6876
|
-
|
|
6877
|
-
|
|
6878
|
-
|
|
6879
|
-
|
|
6880
|
-
|
|
6881
|
-
|
|
6882
|
-
|
|
6883
|
-
|
|
6884
|
-
|
|
6885
|
-
|
|
6886
|
-
|
|
6887
|
-
|
|
6888
|
-
|
|
6889
|
-
|
|
6890
|
-
|
|
6891
|
-
|
|
6892
|
-
|
|
6893
|
-
|
|
6894
|
-
|
|
6895
|
-
|
|
6896
|
-
"totp.buttons.submit.text": "ඉදිරියට යන්න",
|
|
6897
|
-
"username.password.buttons.submit.text": "ඉදිරියට යන්න",
|
|
6898
|
-
"username.password.heading": "ලොග් වෙන්න",
|
|
6899
|
-
"username.password.subheading": "ඉදිරියට යාමට ඔබේ පරිශීලක නාමය සහ මුරපදය ඇතුළත් කරන්න.",
|
|
6900
|
-
"passkey.button.use": "Passkey මගින් ඇතුල් වන්න",
|
|
6901
|
-
"passkey.signin.heading": "Passkey මගින් ඇතුල් වන්න",
|
|
6902
|
-
"passkey.register.heading": "Passkey ලියාපදිංචි කරන්න",
|
|
6903
|
-
"passkey.register.description": "මුරපදයක් නොමැතිව ඔබේ ගිණුමට ආරක්ෂිතව ඇතුල් වීමට passkey එකක් සාදන්න.",
|
|
6904
|
-
"user.profile.heading": "පැතිකඩ",
|
|
6905
|
-
"user.profile.update.generic.error": "ඔබේ පැතිකඩ යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය.කරුණාකර නැවත උත්සාහ කරන්න",
|
|
6906
|
-
"user.change_password.heading": "{credential} වෙනස් කරන්න",
|
|
6907
|
-
"user.change_password.new.label": "නව {credential}",
|
|
6908
|
-
"user.change_password.new.placeholder": "ඔබේ නව {credentialLower} ඇතුළත් කරන්න",
|
|
6909
|
-
"user.change_password.confirm.label": "නව {credential} තහවුරු කරන්න",
|
|
6910
|
-
"user.change_password.confirm.placeholder": "ඔබේ නව {credentialLower} නැවත ඇතුළත් කරන්න",
|
|
6911
|
-
"user.change_password.requirements.heading": "ඔබේ {credentialLower} තුළ තිබිය යුතුය:",
|
|
6912
|
-
"user.change_password.submit": "{credential} යාවත්කාලීන කරන්න",
|
|
6913
|
-
"user.change_password.success": "ඔබේ {credentialLower} යාවත්කාලීන කර ඇත.",
|
|
6914
|
-
"user.change_password.mismatch.error": "{credentialLower} නොගැලපේ.",
|
|
6915
|
-
"user.change_password.generic.error": "ඔබේ {credentialLower} යාවත්කාලීන කිරීමේදී දෝෂයක් ඇතිවිය. කරුණාකර නැවත උත්සාහ කරන්න.",
|
|
6916
|
-
"user.change_password.unavailable.heading": "{credential} වෙනස් කිරීම් ලබා ගත නොහැක",
|
|
6917
|
-
"user.change_password.unavailable.description": "කරුණාකර ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.",
|
|
6918
|
-
"validation.password.pattern": "අවශ්ය ආකෘතියට ගැලපේ",
|
|
6919
|
-
"organization.switcher.switch.organization": "සංවිධානය මාරු කරන්න",
|
|
6920
|
-
"organization.switcher.loading.placeholder.organizations": "සංවිධාන ලෝඩ් වෙමින්...",
|
|
6921
|
-
"organization.switcher.members": "සාමාජිකයන්",
|
|
6922
|
-
"organization.switcher.member": "සාමාජිකයා",
|
|
6923
|
-
"organization.switcher.create.organization": "සංවිධානයක් සාදන්න",
|
|
6924
|
-
"organization.switcher.manage.organizations": "සංවිධාන කළමනාකරණය කරන්න",
|
|
6925
|
-
"organization.switcher.buttons.manage.text": "කළමනාකරණය කරන්න",
|
|
6926
|
-
"organization.switcher.organizations.heading": "සංවිධාන",
|
|
6927
|
-
"organization.switcher.buttons.switch.text": "මාරු කරන්න",
|
|
6928
|
-
"organization.switcher.no.access": "ප්රවේශය නැත",
|
|
6929
|
-
"organization.switcher.status.label": "තත්ත්වය:",
|
|
6930
|
-
"organization.switcher.showing.count": "මුළු සංවිධාන {showing} න් {total} ක් පෙන්වමින්",
|
|
6931
|
-
"organization.switcher.buttons.refresh.text": "නැවුම් කරන්න",
|
|
6932
|
-
"organization.switcher.buttons.load_more.text": "තවත් සංවිධාන ලෝඩ් කරන්න",
|
|
6933
|
-
"organization.switcher.loading.more": "ලෝඩ් වෙමින්...",
|
|
6934
|
-
"organization.switcher.no.organizations": "සංවිධාන කිසිවක් හමු නොවීය.",
|
|
6935
|
-
"organization.switcher.error.prefix": "දෝෂය:",
|
|
6936
|
-
"organization.profile.heading": "සංවිධානයේ පැතිකඩ",
|
|
6937
|
-
"organization.profile.loading": "සංවිධානය ලෝඩ් වෙමින්...",
|
|
6938
|
-
"organization.profile.error": "සංවිධානය ලෝඩ් කිරීමට අසමත් විය",
|
|
6939
|
-
"organization.create.heading": "සංවිධානය සාදන්න",
|
|
6940
|
-
"organization.create.buttons.create_organization.text": "සංවිධානය සාදන්න",
|
|
6941
|
-
"organization.create.buttons.create_organization.loading.text": "සාදමින්...",
|
|
6942
|
-
"organization.create.buttons.cancel.text": "අවලංගු කරන්න",
|
|
6943
|
-
"messages.loading.placeholder": "ලෝඩ් වෙමින්...",
|
|
6944
|
-
"consent.required": "අවශ්යයි",
|
|
6945
|
-
"consent.essential_claims": "අත්යවශ්ය ගුණාංග",
|
|
6946
|
-
"consent.optional_claims": "විකල්ප ගුණාංග",
|
|
6947
|
-
"consent.authorize_scope": "අවසර",
|
|
6948
|
-
"consent.essential_claims.info": "සේවාව නිසි ලෙස ක්රියාත්මක වීම සඳහා මෙම ගුණාංග අවශ්ය වේ.",
|
|
6949
|
-
"consent.optional_claims.info": "මෙම ගුණාංග විකල්ප වන අතර ඔබේ අභිමතය පරිදි සැපයිය හැක.",
|
|
6950
|
-
"consent.authorize_scope.info": "මෙම අවසරයන් මගින් සේවාවට අමතර විශේෂාංග වෙත ප්රවේශ වීමට ඉඩ සලසයි.",
|
|
6951
|
-
"errors.heading": "දෝෂය",
|
|
6952
|
-
"errors.signin.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6953
|
-
"errors.signin.flow.failure": "ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6954
|
-
"errors.signin.flow.completion.failure": "ලොග් වීමේ ක්රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6955
|
-
"errors.signin.flow.passkeys.failure": "passkeys සමඟ ලොග් වීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6956
|
-
"errors.signin.flow.passkeys.completion.failure": "passkeys සමඟ ලොග් වීමේ ක්රියාවලිය සම්පූර්ණ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6957
|
-
"errors.signup.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6958
|
-
"errors.signup.flow.failure": "ගිණුම් තැනීමේ ක්රියාවලියේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6959
|
-
"errors.signup.flow.initialization.failure": "ගිණුම් තැනීමේ ක්රියාවලිය ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6960
|
-
"errors.signup.popup.failure": "උත්පතන කවුළුවේ ගිණුම් තැනීම දිගටම කරගෙන යා නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න.",
|
|
6961
|
-
"errors.signup.components.not.available": "ගිණුම් තැනීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6962
|
-
"errors.signin.components.not.available": "ප්රවේශ වීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
|
|
6963
|
-
"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);
|
|
6964
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"
|
|
6965
7544
|
};
|
|
6966
|
-
|
|
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;
|
|
6967
7583
|
|
|
6968
7584
|
//#endregion
|
|
6969
|
-
//#region src/
|
|
6970
|
-
|
|
6971
|
-
|
|
6972
|
-
|
|
6973
|
-
|
|
6974
|
-
|
|
6975
|
-
|
|
6976
|
-
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
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;
|
|
6980
7607
|
|
|
6981
7608
|
//#endregion
|
|
6982
|
-
//#region src/
|
|
7609
|
+
//#region src/utils/withVendorCSSClassPrefix.ts
|
|
6983
7610
|
/**
|
|
6984
|
-
*
|
|
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
|
|
6985
7615
|
*
|
|
6986
7616
|
* @example
|
|
6987
7617
|
* ```typescript
|
|
6988
|
-
* //
|
|
6989
|
-
*
|
|
6990
|
-
*
|
|
6991
|
-
* // Using supported locales
|
|
6992
|
-
* const locales = TranslationBundleConstants.DEFAULT_LOCALES;
|
|
7618
|
+
* // Usage with clsx
|
|
7619
|
+
* clsx(withVendorCSSClassPrefix('sign-in-button'), className)
|
|
7620
|
+
* // Result: "thunderid-sign-in-button"
|
|
6993
7621
|
* ```
|
|
6994
7622
|
*/
|
|
6995
|
-
const
|
|
6996
|
-
|
|
6997
|
-
FALLBACK_LOCALE: en_US_default.metadata.localeCode
|
|
6998
|
-
};
|
|
6999
|
-
var TranslationBundleConstants_default = TranslationBundleConstants;
|
|
7623
|
+
const withVendorCSSClassPrefix = (className) => `${VendorConstants_default.VENDOR_PREFIX}-${className}`;
|
|
7624
|
+
var withVendorCSSClassPrefix_default = withVendorCSSClassPrefix;
|
|
7000
7625
|
|
|
7001
7626
|
//#endregion
|
|
7002
|
-
//#region src/
|
|
7627
|
+
//#region src/utils/getVendorPrefix.ts
|
|
7003
7628
|
/**
|
|
7004
|
-
*
|
|
7005
|
-
*
|
|
7006
|
-
*
|
|
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.
|
|
7007
7632
|
*
|
|
7008
|
-
* @
|
|
7633
|
+
* @param vendor - The vendor value from the resolved SDK configuration, if any.
|
|
7634
|
+
* @returns The resolved vendor prefix.
|
|
7009
7635
|
*/
|
|
7010
|
-
const
|
|
7011
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
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
|
+
}
|
|
7017
7733
|
};
|
|
7018
|
-
var getDefaultI18nBundles_default = getDefaultI18nBundles;
|
|
7019
7734
|
|
|
7020
7735
|
//#endregion
|
|
7021
7736
|
//#region src/i18n/utils/normalizeTranslations.ts
|
|
@@ -7054,4 +7769,4 @@ const normalizeTranslations = (translations) => {
|
|
|
7054
7769
|
var normalizeTranslations_default = normalizeTranslations;
|
|
7055
7770
|
|
|
7056
7771
|
//#endregion
|
|
7057
|
-
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 };
|