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