@mittwald/flow-react-components 0.2.0-alpha.224 → 0.2.0-alpha.225
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/CHANGELOG.md +6 -0
- package/dist/assets/doc-properties.json +5684 -4234
- package/dist/assets/passwordGeneration.worker-s7H8GYaN.js.map +1 -0
- package/dist/css/all.css +1 -1
- package/dist/js/@mittwald/password-tools-js.mjs +5 -0
- package/dist/js/@mittwald/password-tools-js.mjs.map +1 -0
- package/dist/js/_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs +64 -0
- package/dist/js/_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs.map +1 -0
- package/dist/js/components/src/components/FileField/FileField.mjs +3 -2
- package/dist/js/components/src/components/FileField/FileField.mjs.map +1 -1
- package/dist/js/components/src/components/Header/Header.mjs +1 -1
- package/dist/js/components/src/components/Header/Header.mjs.map +1 -1
- package/dist/js/components/src/components/Label/Label.mjs +30 -4
- package/dist/js/components/src/components/Label/Label.mjs.map +1 -1
- package/dist/js/components/src/components/Label/Label.module.scss.mjs +6 -2
- package/dist/js/components/src/components/Label/Label.module.scss.mjs.map +1 -1
- package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.mjs +303 -0
- package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.module.scss.mjs +15 -0
- package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.module.scss.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.mjs +69 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.module.scss.mjs +23 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.module.scss.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.mjs +27 -0
- package/dist/js/components/src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.mjs +46 -0
- package/dist/js/components/src/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.mjs +44 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.mjs +36 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.module.scss.mjs +9 -0
- package/dist/js/components/src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.module.scss.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/defaultPasswordCreationPolicy.mjs +30 -0
- package/dist/js/components/src/components/PasswordCreationField/defaultPasswordCreationPolicy.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/generateValidationTranslation.mjs +29 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/generateValidationTranslation.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult.mjs +32 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.mjs +16 -0
- package/dist/js/components/src/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/worker/generatePassword.mjs +31 -0
- package/dist/js/components/src/components/PasswordCreationField/worker/generatePassword.mjs.map +1 -0
- package/dist/js/components/src/components/PasswordCreationField/worker/passwordGeneration.worker.mjs +32 -0
- package/dist/js/components/src/components/PasswordCreationField/worker/passwordGeneration.worker.mjs.map +1 -0
- package/dist/js/components/src/components/Section/Section.mjs +1 -1
- package/dist/js/components/src/components/Section/Section.mjs.map +1 -1
- package/dist/js/components/src/components/Section/components/SectionHeader/SectionHeader.mjs +2 -2
- package/dist/js/components/src/components/Section/components/SectionHeader/SectionHeader.mjs.map +1 -1
- package/dist/js/components/src/components/propTypes/index.mjs +1 -0
- package/dist/js/components/src/components/propTypes/index.mjs.map +1 -1
- package/dist/js/components/src/integrations/react-hook-form/components/Field/Field.mjs +11 -5
- package/dist/js/components/src/integrations/react-hook-form/components/Field/Field.mjs.map +1 -1
- package/dist/js/components/src/lib/promises/useAbortablePromise.mjs +16 -0
- package/dist/js/components/src/lib/promises/useAbortablePromise.mjs.map +1 -0
- package/dist/js/components/src/lib/propsContext/PropsContextProvider.mjs.map +1 -1
- package/dist/js/default.mjs +1 -0
- package/dist/js/default.mjs.map +1 -1
- package/dist/js/flr-universal.mjs +1 -0
- package/dist/js/flr-universal.mjs.map +1 -1
- package/dist/types/components/FileField/FileField.d.ts +2 -2
- package/dist/types/components/FileField/FileField.d.ts.map +1 -1
- package/dist/types/components/Header/Header.d.ts +2 -2
- package/dist/types/components/Header/Header.d.ts.map +1 -1
- package/dist/types/components/Label/Label.d.ts.map +1 -1
- package/dist/types/components/Label/stories/Default.stories.d.ts +1 -0
- package/dist/types/components/Label/stories/Default.stories.d.ts.map +1 -1
- package/dist/types/components/PasswordCreationField/PasswordCreationField.d.ts +22 -0
- package/dist/types/components/PasswordCreationField/PasswordCreationField.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/PasswordCreationField.test.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/PasswordCreationField.test.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.d.ts +10 -0
- package/dist/types/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.d.ts +10 -0
- package/dist/types/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.d.ts +11 -0
- package/dist/types/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/defaultPasswordCreationPolicy.d.ts +3 -0
- package/dist/types/components/PasswordCreationField/defaultPasswordCreationPolicy.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/index.d.ts +4 -0
- package/dist/types/components/PasswordCreationField/index.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/lib/generateValidationTranslation.d.ts +4 -0
- package/dist/types/components/PasswordCreationField/lib/generateValidationTranslation.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/stories/Default.stories.d.ts +12 -0
- package/dist/types/components/PasswordCreationField/stories/Default.stories.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/view.d.ts +8 -0
- package/dist/types/components/PasswordCreationField/view.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/worker/generatePassword.d.ts +3 -0
- package/dist/types/components/PasswordCreationField/worker/generatePassword.d.ts.map +1 -0
- package/dist/types/components/PasswordCreationField/worker/passwordGeneration.worker.d.ts +2 -0
- package/dist/types/components/PasswordCreationField/worker/passwordGeneration.worker.d.ts.map +1 -0
- package/dist/types/components/Section/Section.d.ts.map +1 -1
- package/dist/types/components/Section/components/SectionHeader/SectionHeader.d.ts +2 -2
- package/dist/types/components/Section/components/SectionHeader/SectionHeader.d.ts.map +1 -1
- package/dist/types/components/propTypes/index.d.ts +2 -0
- package/dist/types/components/propTypes/index.d.ts.map +1 -1
- package/dist/types/components/public.d.ts +1 -0
- package/dist/types/components/public.d.ts.map +1 -1
- package/dist/types/integrations/@mittwald/password-tools-js/index.d.ts +3 -0
- package/dist/types/integrations/@mittwald/password-tools-js/index.d.ts.map +1 -0
- package/dist/types/integrations/react-hook-form/components/Field/Field.d.ts.map +1 -1
- package/dist/types/lib/promises/useAbortablePromise.d.ts +7 -0
- package/dist/types/lib/promises/useAbortablePromise.d.ts.map +1 -0
- package/dist/types/lib/propsContext/PropsContextProvider.d.ts.map +1 -1
- package/dist/types/lib/propsContext/propsContext.d.ts +2 -0
- package/dist/types/lib/propsContext/propsContext.d.ts.map +1 -1
- package/dist/types/views/PasswordCreationFieldView.d.ts +5 -0
- package/dist/types/views/PasswordCreationFieldView.d.ts.map +1 -0
- package/package.json +12 -5
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { useState, useLayoutEffect } from 'react';
|
|
5
|
+
import styles from './ComplexityIndicator.module.scss.mjs';
|
|
6
|
+
import { getStatusFromPolicyValidationResult } from '../../lib/getStatusFromPolicyValidationResult.mjs';
|
|
7
|
+
import clsx from 'clsx';
|
|
8
|
+
|
|
9
|
+
const ComplexityIndicator = (props) => {
|
|
10
|
+
const { policyValidationResult, isLoading, isEmptyValue } = props;
|
|
11
|
+
const complexityScore = policyValidationResult?.complexity;
|
|
12
|
+
const [state, setState] = useState({
|
|
13
|
+
percentage: 0,
|
|
14
|
+
status: "success"
|
|
15
|
+
});
|
|
16
|
+
useLayoutEffect(() => {
|
|
17
|
+
let complexityFulfilledPercentage = -1;
|
|
18
|
+
if (policyValidationResult?.isValid === "indeterminate") {
|
|
19
|
+
complexityFulfilledPercentage = 100;
|
|
20
|
+
} else if (complexityScore && !isEmptyValue) {
|
|
21
|
+
complexityFulfilledPercentage = Math.min(
|
|
22
|
+
100 / (complexityScore.min + 1) * (complexityScore.actual + 1),
|
|
23
|
+
100
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
const policyValidationStatus = getStatusFromPolicyValidationResult(
|
|
27
|
+
policyValidationResult
|
|
28
|
+
);
|
|
29
|
+
setState({
|
|
30
|
+
status: policyValidationStatus,
|
|
31
|
+
percentage: complexityFulfilledPercentage
|
|
32
|
+
});
|
|
33
|
+
}, [policyValidationResult, isEmptyValue]);
|
|
34
|
+
const complexityVisible = state.percentage !== -1;
|
|
35
|
+
const complexityFulfilled = state.percentage === 100;
|
|
36
|
+
const percentageClassName = clsx(
|
|
37
|
+
styles.bar,
|
|
38
|
+
styles[`bar-background-status-${state.status}`],
|
|
39
|
+
{
|
|
40
|
+
[styles.loading]: isLoading,
|
|
41
|
+
[styles.running]: !complexityFulfilled
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
"aria-hidden": true,
|
|
48
|
+
"data-container": "complexity",
|
|
49
|
+
"data-complexity-visible": complexityVisible,
|
|
50
|
+
"data-complexity-status": state.status,
|
|
51
|
+
"data-complexity-percentage": state.percentage,
|
|
52
|
+
className: clsx(styles.complexityIndicator, {
|
|
53
|
+
[styles.hide]: !complexityVisible
|
|
54
|
+
}),
|
|
55
|
+
children: /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
style: {
|
|
59
|
+
width: `${state.percentage}%`
|
|
60
|
+
},
|
|
61
|
+
className: percentageClassName
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { ComplexityIndicator, ComplexityIndicator as default };
|
|
69
|
+
//# sourceMappingURL=ComplexityIndicator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplexityIndicator.mjs","sources":["../../../../../../../../src/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator.tsx"],"sourcesContent":["import React, { type FC, useLayoutEffect, useState } from \"react\";\nimport styles from \"./ComplexityIndicator.module.scss\";\nimport { getStatusFromPolicyValidationResult } from \"@/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult\";\nimport clsx from \"clsx\";\nimport type { ResolvedPolicyValidationResult } from \"@/components/PasswordCreationField/PasswordCreationField\";\nimport { type Status } from \"@/lib/types/props\";\n\nexport type ComplexityStatus = Exclude<Status, \"info\"> | \"indeterminate\";\n\nexport interface ComplexityIndicatorProps {\n isLoading: boolean;\n isEmptyValue: boolean;\n policyValidationResult: ResolvedPolicyValidationResult;\n}\n\n/** @internal */\nexport const ComplexityIndicator: FC<ComplexityIndicatorProps> = (props) => {\n const { policyValidationResult, isLoading, isEmptyValue } = props;\n const complexityScore = policyValidationResult?.complexity;\n\n const [state, setState] = useState<{\n status: ComplexityStatus;\n percentage: number;\n }>({\n percentage: 0,\n status: \"success\",\n });\n\n useLayoutEffect(() => {\n let complexityFulfilledPercentage = -1;\n if (policyValidationResult?.isValid === \"indeterminate\") {\n complexityFulfilledPercentage = 100;\n } else if (complexityScore && !isEmptyValue) {\n complexityFulfilledPercentage = Math.min(\n (100 / (complexityScore.min + 1)) * (complexityScore.actual + 1),\n 100,\n );\n }\n\n const policyValidationStatus = getStatusFromPolicyValidationResult(\n policyValidationResult,\n );\n\n setState({\n status: policyValidationStatus,\n percentage: complexityFulfilledPercentage,\n });\n }, [policyValidationResult, isEmptyValue]);\n\n const complexityVisible = state.percentage !== -1;\n const complexityFulfilled = state.percentage === 100;\n\n const percentageClassName = clsx(\n styles.bar,\n styles[`bar-background-status-${state.status}`],\n {\n [styles.loading as string]: isLoading,\n [styles.running as string]: !complexityFulfilled,\n },\n );\n\n return (\n <div\n aria-hidden={true}\n data-container=\"complexity\"\n data-complexity-visible={complexityVisible}\n data-complexity-status={state.status}\n data-complexity-percentage={state.percentage}\n className={clsx(styles.complexityIndicator, {\n [styles.hide as string]: !complexityVisible,\n })}\n >\n <div\n style={{\n width: `${state.percentage}%`,\n }}\n className={percentageClassName}\n />\n </div>\n );\n};\n\nexport default ComplexityIndicator;\n"],"names":[],"mappings":";;;;;;AAgBa,MAAA,mBAAA,GAAoD,CAAC,KAAU,KAAA;AAC1E,EAAA,MAAM,EAAE,sBAAA,EAAwB,SAAW,EAAA,YAAA,EAAiB,GAAA,KAAA;AAC5D,EAAA,MAAM,kBAAkB,sBAAwB,EAAA,UAAA;AAEhD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAGvB,CAAA;AAAA,IACD,UAAY,EAAA,CAAA;AAAA,IACZ,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,6BAAgC,GAAA,EAAA;AACpC,IAAI,IAAA,sBAAA,EAAwB,YAAY,eAAiB,EAAA;AACvD,MAAgC,6BAAA,GAAA,GAAA;AAAA,KAClC,MAAA,IAAW,eAAmB,IAAA,CAAC,YAAc,EAAA;AAC3C,MAAA,6BAAA,GAAgC,IAAK,CAAA,GAAA;AAAA,QAClC,GAAO,IAAA,eAAA,CAAgB,GAAM,GAAA,CAAA,CAAA,IAAO,gBAAgB,MAAS,GAAA,CAAA,CAAA;AAAA,QAC9D;AAAA,OACF;AAAA;AAGF,IAAA,MAAM,sBAAyB,GAAA,mCAAA;AAAA,MAC7B;AAAA,KACF;AAEA,IAAS,QAAA,CAAA;AAAA,MACP,MAAQ,EAAA,sBAAA;AAAA,MACR,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACA,EAAA,CAAC,sBAAwB,EAAA,YAAY,CAAC,CAAA;AAEzC,EAAM,MAAA,iBAAA,GAAoB,MAAM,UAAe,KAAA,EAAA;AAC/C,EAAM,MAAA,mBAAA,GAAsB,MAAM,UAAe,KAAA,GAAA;AAEjD,EAAA,MAAM,mBAAsB,GAAA,IAAA;AAAA,IAC1B,MAAO,CAAA,GAAA;AAAA,IACP,MAAO,CAAA,CAAA,sBAAA,EAAyB,KAAM,CAAA,MAAM,CAAE,CAAA,CAAA;AAAA,IAC9C;AAAA,MACE,CAAC,MAAO,CAAA,OAAiB,GAAG,SAAA;AAAA,MAC5B,CAAC,MAAA,CAAO,OAAiB,GAAG,CAAC;AAAA;AAC/B,GACF;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,IAAA;AAAA,MACb,gBAAe,EAAA,YAAA;AAAA,MACf,yBAAyB,EAAA,iBAAA;AAAA,MACzB,0BAAwB,KAAM,CAAA,MAAA;AAAA,MAC9B,8BAA4B,KAAM,CAAA,UAAA;AAAA,MAClC,SAAA,EAAW,IAAK,CAAA,MAAA,CAAO,mBAAqB,EAAA;AAAA,QAC1C,CAAC,MAAA,CAAO,IAAc,GAAG,CAAC;AAAA,OAC3B,CAAA;AAAA,MAED,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAO,EAAA;AAAA,YACL,KAAA,EAAO,CAAG,EAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,WAC5B;AAAA,UACA,SAAW,EAAA;AAAA;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
const complexityIndicator = "flow--password-creation-field--complexity-indicator";
|
|
4
|
+
const hide = "flow--password-creation-field--complexity-indicator--hide";
|
|
5
|
+
const bar = "flow--password-creation-field--complexity-indicator--bar";
|
|
6
|
+
const running = "flow--password-creation-field--complexity-indicator--running";
|
|
7
|
+
const loading = "flow--password-creation-field--complexity-indicator--loading";
|
|
8
|
+
const shimmer = "flow--password-creation-field--complexity-indicator--shimmer";
|
|
9
|
+
const styles = {
|
|
10
|
+
complexityIndicator: complexityIndicator,
|
|
11
|
+
hide: hide,
|
|
12
|
+
bar: bar,
|
|
13
|
+
running: running,
|
|
14
|
+
"bar-background-status-danger": "flow--password-creation-field--complexity-indicator--bar-background-status-danger",
|
|
15
|
+
"bar-background-status-success": "flow--password-creation-field--complexity-indicator--bar-background-status-success",
|
|
16
|
+
"bar-background-status-warning": "flow--password-creation-field--complexity-indicator--bar-background-status-warning",
|
|
17
|
+
"bar-background-status-indeterminate": "flow--password-creation-field--complexity-indicator--bar-background-status-indeterminate",
|
|
18
|
+
loading: loading,
|
|
19
|
+
shimmer: shimmer
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { bar, complexityIndicator, styles as default, hide, loading, running, shimmer };
|
|
23
|
+
//# sourceMappingURL=ComplexityIndicator.module.scss.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplexityIndicator.module.scss.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
6
|
+
import locales from '../../../../../../_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs';
|
|
7
|
+
import { Button } from '../../../Button/Button.mjs';
|
|
8
|
+
import { Action } from '../../../Action/Action.mjs';
|
|
9
|
+
|
|
10
|
+
const PasswordGenerateButton = (props) => {
|
|
11
|
+
const { className, isDisabled, onGeneratePasswordAction } = props;
|
|
12
|
+
const translate = useLocalizedStringFormatter(locales);
|
|
13
|
+
return /* @__PURE__ */ jsx(Action, { action: onGeneratePasswordAction, children: /* @__PURE__ */ jsx(
|
|
14
|
+
Button,
|
|
15
|
+
{
|
|
16
|
+
"data-component": "generatePassword",
|
|
17
|
+
isDisabled,
|
|
18
|
+
className,
|
|
19
|
+
variant: "plain",
|
|
20
|
+
color: "dark",
|
|
21
|
+
children: translate.format("button.generate")
|
|
22
|
+
}
|
|
23
|
+
) });
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { PasswordGenerateButton };
|
|
27
|
+
//# sourceMappingURL=PasswordGenerateButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordGenerateButton.mjs","sources":["../../../../../../../../src/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton.tsx"],"sourcesContent":["import { type FC } from \"react\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport locales from \"./../../locales/*.locale.json\";\nimport { Button } from \"@/components/Button\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { Action, type ActionFn } from \"@/components/Action\";\n\ninterface Props extends PropsWithClassName {\n isDisabled?: boolean;\n onGeneratePasswordAction?: ActionFn;\n}\n\nexport const PasswordGenerateButton: FC<Props> = (props) => {\n const { className, isDisabled, onGeneratePasswordAction } = props;\n const translate = useLocalizedStringFormatter(locales);\n\n return (\n <Action action={onGeneratePasswordAction}>\n <Button\n data-component=\"generatePassword\"\n isDisabled={isDisabled}\n className={className}\n variant=\"plain\"\n color=\"dark\"\n >\n {translate.format(\"button.generate\")}\n </Button>\n </Action>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAYa,MAAA,sBAAA,GAAoC,CAAC,KAAU,KAAA;AAC1D,EAAA,MAAM,EAAE,SAAA,EAAW,UAAY,EAAA,wBAAA,EAA6B,GAAA,KAAA;AAC5D,EAAM,MAAA,SAAA,GAAY,4BAA4B,OAAO,CAAA;AAErD,EACE,uBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,MAAA,EAAQ,wBACd,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,gBAAe,EAAA,kBAAA;AAAA,MACf,UAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAQ,EAAA,OAAA;AAAA,MACR,KAAM,EAAA,MAAA;AAAA,MAEL,QAAA,EAAA,SAAA,CAAU,OAAO,iBAAiB;AAAA;AAAA,GAEvC,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import { TooltipTrigger } from '../../../Tooltip/components/TooltipTrigger/TooltipTrigger.mjs';
|
|
6
|
+
import { Tooltip } from '../../../Tooltip/Tooltip.mjs';
|
|
7
|
+
import { Button } from '../../../Button/Button.mjs';
|
|
8
|
+
import '@tabler/icons-react';
|
|
9
|
+
import '../../../Icon/Icon.mjs';
|
|
10
|
+
import '../../../../lib/viewComponentContext/viewComponentContext.mjs';
|
|
11
|
+
import { IconHide } from '../../../Icon/components/icons/IconHide.mjs';
|
|
12
|
+
import { IconShow } from '../../../Icon/components/icons/IconShow.mjs';
|
|
13
|
+
import { Action } from '../../../Action/Action.mjs';
|
|
14
|
+
import locales from '../../../../../../_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs';
|
|
15
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
16
|
+
|
|
17
|
+
const TogglePasswordVisibilityButton = ({
|
|
18
|
+
isVisible,
|
|
19
|
+
isDisabled = false,
|
|
20
|
+
onPress,
|
|
21
|
+
className
|
|
22
|
+
}) => {
|
|
23
|
+
const translate = useLocalizedStringFormatter(locales);
|
|
24
|
+
const icon = isVisible ? /* @__PURE__ */ jsx(IconHide, {}) : /* @__PURE__ */ jsx(IconShow, {});
|
|
25
|
+
const tooltipText = translate.format(
|
|
26
|
+
"button.generate.tooltip." + (isVisible ? "hide" : "show")
|
|
27
|
+
);
|
|
28
|
+
return /* @__PURE__ */ jsx(Action, { action: onPress, children: /* @__PURE__ */ jsx(TooltipTrigger, { children: /* @__PURE__ */ jsxs(
|
|
29
|
+
Button,
|
|
30
|
+
{
|
|
31
|
+
className,
|
|
32
|
+
size: "m",
|
|
33
|
+
variant: "plain",
|
|
34
|
+
color: "secondary",
|
|
35
|
+
isDisabled,
|
|
36
|
+
"data-component": "toggleRevealPassword",
|
|
37
|
+
children: [
|
|
38
|
+
icon,
|
|
39
|
+
/* @__PURE__ */ jsx(Tooltip, { children: tooltipText })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
) }) });
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { TogglePasswordVisibilityButton, TogglePasswordVisibilityButton as default };
|
|
46
|
+
//# sourceMappingURL=TogglePasswordVisibilityButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TogglePasswordVisibilityButton.mjs","sources":["../../../../../../../../src/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.tsx"],"sourcesContent":["import React, { type FC } from \"react\";\nimport { Tooltip, TooltipTrigger } from \"@/components/Tooltip\";\nimport Button from \"@/components/Button\";\nimport { IconHide, IconShow } from \"@/components/Icon/components/icons\";\nimport { Action, type ActionFn } from \"@/components/Action\";\nimport locales from \"./../../locales/*.locale.json\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\n\ninterface Props extends PropsWithClassName {\n isDisabled?: boolean;\n isVisible: boolean;\n onPress: ActionFn;\n}\n\n/** @internal */\nexport const TogglePasswordVisibilityButton: FC<Props> = ({\n isVisible,\n isDisabled = false,\n onPress,\n className,\n}) => {\n const translate = useLocalizedStringFormatter(locales);\n\n const icon = isVisible ? <IconHide /> : <IconShow />;\n const tooltipText = translate.format(\n \"button.generate.tooltip.\" + (isVisible ? \"hide\" : \"show\"),\n );\n\n return (\n <Action action={onPress}>\n <TooltipTrigger>\n <Button\n className={className}\n size=\"m\"\n variant=\"plain\"\n color=\"secondary\"\n isDisabled={isDisabled}\n data-component=\"toggleRevealPassword\"\n >\n {icon}\n <Tooltip>{tooltipText}</Tooltip>\n </Button>\n </TooltipTrigger>\n </Action>\n );\n};\n\nexport default TogglePasswordVisibilityButton;\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAgBO,MAAM,iCAA4C,CAAC;AAAA,EACxD,SAAA;AAAA,EACA,UAAa,GAAA,KAAA;AAAA,EACb,OAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAM,MAAA,SAAA,GAAY,4BAA4B,OAAO,CAAA;AAErD,EAAA,MAAM,OAAO,SAAY,mBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,CAAA,uBAAM,QAAS,EAAA,EAAA,CAAA;AAClD,EAAA,MAAM,cAAc,SAAU,CAAA,MAAA;AAAA,IAC5B,0BAAA,IAA8B,YAAY,MAAS,GAAA,MAAA;AAAA,GACrD;AAEA,EAAA,uBACG,GAAA,CAAA,MAAA,EAAA,EAAO,MAAQ,EAAA,OAAA,EACd,8BAAC,cACC,EAAA,EAAA,QAAA,kBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAK,EAAA,GAAA;AAAA,MACL,OAAQ,EAAA,OAAA;AAAA,MACR,KAAM,EAAA,WAAA;AAAA,MACN,UAAA;AAAA,MACA,gBAAe,EAAA,sBAAA;AAAA,MAEd,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACD,GAAA,CAAC,WAAS,QAAY,EAAA,WAAA,EAAA;AAAA;AAAA;AAAA,KAE1B,CACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
6
|
+
import locales from '../../../../../../_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs';
|
|
7
|
+
import { ValidationResultEntry } from '../ValidationResultEntry/ValidationResultEntry.mjs';
|
|
8
|
+
import { Button } from '../../../Button/Button.mjs';
|
|
9
|
+
import { ContextualHelp } from '../../../ContextualHelp/ContextualHelp.mjs';
|
|
10
|
+
import { ContextualHelpTrigger } from '../../../ContextualHelp/components/ContextualHelpTrigger/ContextualHelpTrigger.mjs';
|
|
11
|
+
import { Heading } from '../../../Heading/Heading.mjs';
|
|
12
|
+
|
|
13
|
+
const ValidationResultButton = (props) => {
|
|
14
|
+
const { policyValidationResult, isDisabled, isEmptyValue, className } = props;
|
|
15
|
+
const translate = useLocalizedStringFormatter(locales);
|
|
16
|
+
const validationResultComponents = policyValidationResult?.ruleResults?.filter((r) => {
|
|
17
|
+
return isEmptyValue ? !r.isValid : true;
|
|
18
|
+
}).map((result, index) => {
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
ValidationResultEntry,
|
|
21
|
+
{
|
|
22
|
+
result
|
|
23
|
+
},
|
|
24
|
+
`${result.identifier}-${index}`
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
return /* @__PURE__ */ jsxs(ContextualHelpTrigger, { children: [
|
|
28
|
+
/* @__PURE__ */ jsx(
|
|
29
|
+
Button,
|
|
30
|
+
{
|
|
31
|
+
"data-component": "showPasswordRules",
|
|
32
|
+
isDisabled,
|
|
33
|
+
className
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
/* @__PURE__ */ jsxs(ContextualHelp, { children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Heading, { children: translate.format("password.requirements.heading") }),
|
|
38
|
+
validationResultComponents
|
|
39
|
+
] })
|
|
40
|
+
] });
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { ValidationResultButton };
|
|
44
|
+
//# sourceMappingURL=ValidationResultButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationResultButton.mjs","sources":["../../../../../../../../src/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton.tsx"],"sourcesContent":["import React, { type FC } from \"react\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\n\nimport locales from \"./../../locales/*.locale.json\";\nimport type { ResolvedPolicyValidationResult } from \"@/components/PasswordCreationField/PasswordCreationField\";\nimport ValidationResultEntry from \"@/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry\";\nimport { Button } from \"@/components/Button\";\nimport {\n ContextualHelp,\n ContextualHelpTrigger,\n} from \"@/components/ContextualHelp\";\nimport { Heading } from \"@/components/Heading\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\n\ninterface Props extends PropsWithClassName {\n policyValidationResult?: ResolvedPolicyValidationResult;\n isDisabled?: boolean;\n isEmptyValue: boolean;\n}\n\nexport const ValidationResultButton: FC<Props> = (props) => {\n const { policyValidationResult, isDisabled, isEmptyValue, className } = props;\n\n const translate = useLocalizedStringFormatter(locales);\n\n const validationResultComponents = policyValidationResult?.ruleResults\n ?.filter((r) => {\n return isEmptyValue ? !r.isValid : true;\n })\n .map((result, index) => {\n return (\n <ValidationResultEntry\n key={`${result.identifier}-${index}`}\n result={result}\n />\n );\n });\n\n return (\n <ContextualHelpTrigger>\n <Button\n data-component=\"showPasswordRules\"\n isDisabled={isDisabled}\n className={className}\n />\n <ContextualHelp>\n <Heading>{translate.format(\"password.requirements.heading\")}</Heading>\n {validationResultComponents}\n </ContextualHelp>\n </ContextualHelpTrigger>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAoBa,MAAA,sBAAA,GAAoC,CAAC,KAAU,KAAA;AAC1D,EAAA,MAAM,EAAE,sBAAA,EAAwB,UAAY,EAAA,YAAA,EAAc,WAAc,GAAA,KAAA;AAExE,EAAM,MAAA,SAAA,GAAY,4BAA4B,OAAO,CAAA;AAErD,EAAA,MAAM,0BAA6B,GAAA,sBAAA,EAAwB,WACvD,EAAA,MAAA,CAAO,CAAC,CAAM,KAAA;AACd,IAAO,OAAA,YAAA,GAAe,CAAC,CAAA,CAAE,OAAU,GAAA,IAAA;AAAA,GACpC,CAAA,CACA,GAAI,CAAA,CAAC,QAAQ,KAAU,KAAA;AACtB,IACE,uBAAA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QAEC;AAAA,OAAA;AAAA,MADK,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KAEpC;AAAA,GAEH,CAAA;AAEH,EAAA,4BACG,qBACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,gBAAe,EAAA,mBAAA;AAAA,QACf,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,yBACC,cACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAS,EAAA,EAAA,QAAA,EAAA,SAAA,CAAU,MAAO,CAAA,+BAA+B,CAAE,EAAA,CAAA;AAAA,MAC3D;AAAA,KACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import { Text } from '../../../Text/Text.mjs';
|
|
6
|
+
import { IconCircleCheck, IconCircleMinus } from '@tabler/icons-react';
|
|
7
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
8
|
+
import { generateValidationTranslation } from '../../lib/generateValidationTranslation.mjs';
|
|
9
|
+
import locales from '../../../../../../_virtual/_.locale.json@95341064edeb0e38b66d786dbd62955c.mjs';
|
|
10
|
+
import styles from './ValidationResultEntry.module.scss.mjs';
|
|
11
|
+
|
|
12
|
+
const ValidationResultEntry = (props) => {
|
|
13
|
+
const { result } = props;
|
|
14
|
+
const translate = useLocalizedStringFormatter(locales);
|
|
15
|
+
const icon = result.isValid ? /* @__PURE__ */ jsx(IconCircleCheck, { color: "green" }) : /* @__PURE__ */ jsx(IconCircleMinus, { color: "red" });
|
|
16
|
+
const [translationKey, translationValues] = generateValidationTranslation(
|
|
17
|
+
result,
|
|
18
|
+
true
|
|
19
|
+
);
|
|
20
|
+
return /* @__PURE__ */ jsxs(
|
|
21
|
+
Text,
|
|
22
|
+
{
|
|
23
|
+
className: styles.validationResultEntry,
|
|
24
|
+
"data-rule": result.ruleType,
|
|
25
|
+
"data-rule-valid": result.isValid,
|
|
26
|
+
children: [
|
|
27
|
+
icon,
|
|
28
|
+
translate.format(translationKey, translationValues)
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
translationKey
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { ValidationResultEntry, ValidationResultEntry as default };
|
|
36
|
+
//# sourceMappingURL=ValidationResultEntry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationResultEntry.mjs","sources":["../../../../../../../../src/components/PasswordCreationField/components/ValidationResultEntry/ValidationResultEntry.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport { Text } from \"@/components/Text\";\nimport { IconCircleCheck, IconCircleMinus } from \"@tabler/icons-react\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport generateValidationTranslation from \"@/components/PasswordCreationField/lib/generateValidationTranslation\";\nimport locales from \"./../../locales/*.locale.json\";\nimport styles from \"./ValidationResultEntry.module.scss\";\nimport type { RuleValidationResult } from \"@mittwald/password-tools-js/rules\";\n\ninterface Props {\n result: RuleValidationResult;\n}\n\n/** @internal */\nexport const ValidationResultEntry: FC<Props> = (props) => {\n const { result } = props;\n const translate = useLocalizedStringFormatter(locales);\n\n const icon = result.isValid ? (\n <IconCircleCheck color=\"green\" />\n ) : (\n <IconCircleMinus color=\"red\" />\n );\n\n const [translationKey, translationValues] = generateValidationTranslation(\n result,\n true,\n );\n\n return (\n <Text\n className={styles.validationResultEntry}\n data-rule={result.ruleType}\n data-rule-valid={result.isValid}\n key={translationKey}\n >\n {icon}\n {translate.format(translationKey, translationValues)}\n </Text>\n );\n};\n\nexport default ValidationResultEntry;\n"],"names":[],"mappings":";;;;;;;;;AAea,MAAA,qBAAA,GAAmC,CAAC,KAAU,KAAA;AACzD,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,SAAA,GAAY,4BAA4B,OAAO,CAAA;AAErD,EAAM,MAAA,IAAA,GAAO,MAAO,CAAA,OAAA,mBACjB,GAAA,CAAA,eAAA,EAAA,EAAgB,KAAM,EAAA,OAAA,EAAQ,CAE/B,mBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,KAAA,EAAM,KAAM,EAAA,CAAA;AAG/B,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAA,6BAAA;AAAA,IAC1C,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,MAAO,CAAA,qBAAA;AAAA,MAClB,aAAW,MAAO,CAAA,QAAA;AAAA,MAClB,mBAAiB,MAAO,CAAA,OAAA;AAAA,MAGvB,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QACA,SAAA,CAAU,MAAO,CAAA,cAAA,EAAgB,iBAAiB;AAAA;AAAA,KAAA;AAAA,IAH9C;AAAA,GAIP;AAEJ;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
const validationResultEntry = "flow--password-creation-field--validation-result-entry";
|
|
4
|
+
const styles = {
|
|
5
|
+
validationResultEntry: validationResultEntry
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export { styles as default, validationResultEntry };
|
|
9
|
+
//# sourceMappingURL=ValidationResultEntry.module.scss.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationResultEntry.module.scss.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
package/dist/js/components/src/components/PasswordCreationField/defaultPasswordCreationPolicy.mjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { Policy } from '@mittwald/password-tools-js/policy';
|
|
4
|
+
import { RuleType } from '@mittwald/password-tools-js/rules';
|
|
5
|
+
|
|
6
|
+
const defaultPasswordCreationPolicy = Policy.fromDeclaration({
|
|
7
|
+
minComplexity: 3,
|
|
8
|
+
rules: [
|
|
9
|
+
{
|
|
10
|
+
ruleType: RuleType.length,
|
|
11
|
+
min: 12
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
ruleType: RuleType.hibp
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
identifier: "special",
|
|
18
|
+
ruleType: RuleType.charPool,
|
|
19
|
+
charPools: ["special"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
identifier: "numbers",
|
|
23
|
+
ruleType: RuleType.charPool,
|
|
24
|
+
charPools: ["numbers"]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export { defaultPasswordCreationPolicy };
|
|
30
|
+
//# sourceMappingURL=defaultPasswordCreationPolicy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultPasswordCreationPolicy.mjs","sources":["../../../../../../src/components/PasswordCreationField/defaultPasswordCreationPolicy.ts"],"sourcesContent":["import { Policy } from \"@mittwald/password-tools-js/policy\";\nimport { RuleType } from \"@mittwald/password-tools-js/rules\";\n\nexport const defaultPasswordCreationPolicy = Policy.fromDeclaration({\n minComplexity: 3,\n rules: [\n {\n ruleType: RuleType.length,\n min: 12,\n },\n {\n ruleType: RuleType.hibp,\n },\n {\n identifier: \"special\",\n ruleType: RuleType.charPool,\n charPools: [\"special\"],\n },\n {\n identifier: \"numbers\",\n ruleType: RuleType.charPool,\n charPools: [\"numbers\"],\n },\n ],\n});\n"],"names":[],"mappings":";;;AAGa,MAAA,6BAAA,GAAgC,OAAO,eAAgB,CAAA;AAAA,EAClE,aAAe,EAAA,CAAA;AAAA,EACf,KAAO,EAAA;AAAA,IACL;AAAA,MACE,UAAU,QAAS,CAAA,MAAA;AAAA,MACnB,GAAK,EAAA;AAAA,KACP;AAAA,IACA;AAAA,MACE,UAAU,QAAS,CAAA;AAAA,KACrB;AAAA,IACA;AAAA,MACE,UAAY,EAAA,SAAA;AAAA,MACZ,UAAU,QAAS,CAAA,QAAA;AAAA,MACnB,SAAA,EAAW,CAAC,SAAS;AAAA,KACvB;AAAA,IACA;AAAA,MACE,UAAY,EAAA,SAAA;AAAA,MACZ,UAAU,QAAS,CAAA,QAAA;AAAA,MACnB,SAAA,EAAW,CAAC,SAAS;AAAA;AACvB;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
const generateTranslationString = (rule, shortVersion = false) => {
|
|
4
|
+
const translateString = `validation.${rule.ruleType ?? "general"}`;
|
|
5
|
+
let finalTranslationString = "";
|
|
6
|
+
if ("min" in rule || "max" in rule) {
|
|
7
|
+
const breakingBoundaryProperty = rule.failingBoundary ? rule.failingBoundary : "min";
|
|
8
|
+
if (rule.identifier) {
|
|
9
|
+
finalTranslationString = `${translateString}.${rule.identifier}.${breakingBoundaryProperty}`;
|
|
10
|
+
} else {
|
|
11
|
+
finalTranslationString = `${translateString}.${breakingBoundaryProperty}`;
|
|
12
|
+
}
|
|
13
|
+
} else if (rule.identifier) {
|
|
14
|
+
finalTranslationString = `${translateString}.${rule.identifier}`;
|
|
15
|
+
} else {
|
|
16
|
+
finalTranslationString = translateString;
|
|
17
|
+
}
|
|
18
|
+
return shortVersion ? `${finalTranslationString}.short` : finalTranslationString;
|
|
19
|
+
};
|
|
20
|
+
const generateValidationTranslation = (r, shotVersion = false) => {
|
|
21
|
+
const translationKey = generateTranslationString(r, shotVersion);
|
|
22
|
+
return [
|
|
23
|
+
translationKey,
|
|
24
|
+
r
|
|
25
|
+
];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { generateValidationTranslation as default, generateValidationTranslation };
|
|
29
|
+
//# sourceMappingURL=generateValidationTranslation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateValidationTranslation.mjs","sources":["../../../../../../../src/components/PasswordCreationField/lib/generateValidationTranslation.ts"],"sourcesContent":["import type { RuleValidationResult } from \"@mittwald/password-tools-js/rules\";\n\nconst generateTranslationString = (\n rule: Partial<RuleValidationResult>,\n shortVersion = false,\n): string => {\n const translateString = `validation.${rule.ruleType ?? \"general\"}`;\n let finalTranslationString = \"\";\n\n if (\"min\" in rule || \"max\" in rule) {\n const breakingBoundaryProperty = rule.failingBoundary\n ? rule.failingBoundary\n : \"min\";\n\n if (rule.identifier) {\n finalTranslationString = `${translateString}.${rule.identifier}.${breakingBoundaryProperty}`;\n } else {\n finalTranslationString = `${translateString}.${breakingBoundaryProperty}`;\n }\n } else if (rule.identifier) {\n finalTranslationString = `${translateString}.${rule.identifier}`;\n } else {\n finalTranslationString = translateString;\n }\n\n return shortVersion\n ? `${finalTranslationString}.short`\n : finalTranslationString;\n};\n\nexport const generateValidationTranslation = (\n r: Partial<RuleValidationResult>,\n shotVersion = false,\n): [string, Record<string, string | number | boolean> | undefined] => {\n const translationKey = generateTranslationString(r, shotVersion);\n\n return [\n translationKey,\n r as unknown as Record<string, string | number | boolean> | undefined,\n ];\n};\n\nexport default generateValidationTranslation;\n"],"names":[],"mappings":"AAEA,MAAM,yBAA4B,GAAA,CAChC,IACA,EAAA,YAAA,GAAe,KACJ,KAAA;AACX,EAAA,MAAM,eAAkB,GAAA,CAAA,WAAA,EAAc,IAAK,CAAA,QAAA,IAAY,SAAS,CAAA,CAAA;AAChE,EAAA,IAAI,sBAAyB,GAAA,EAAA;AAE7B,EAAI,IAAA,KAAA,IAAS,IAAQ,IAAA,KAAA,IAAS,IAAM,EAAA;AAClC,IAAA,MAAM,wBAA2B,GAAA,IAAA,CAAK,eAClC,GAAA,IAAA,CAAK,eACL,GAAA,KAAA;AAEJ,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAA,sBAAA,GAAyB,GAAG,eAAe,CAAA,CAAA,EAAI,IAAK,CAAA,UAAU,IAAI,wBAAwB,CAAA,CAAA;AAAA,KACrF,MAAA;AACL,MAAyB,sBAAA,GAAA,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,wBAAwB,CAAA,CAAA;AAAA;AACzE,GACF,MAAA,IAAW,KAAK,UAAY,EAAA;AAC1B,IAAA,sBAAA,GAAyB,CAAG,EAAA,eAAe,CAAI,CAAA,EAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,GACzD,MAAA;AACL,IAAyB,sBAAA,GAAA,eAAA;AAAA;AAG3B,EAAO,OAAA,YAAA,GACH,CAAG,EAAA,sBAAsB,CACzB,MAAA,CAAA,GAAA,sBAAA;AACN,CAAA;AAEO,MAAM,6BAAgC,GAAA,CAC3C,CACA,EAAA,WAAA,GAAc,KACsD,KAAA;AACpE,EAAM,MAAA,cAAA,GAAiB,yBAA0B,CAAA,CAAA,EAAG,WAAW,CAAA;AAE/D,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import '@mittwald/password-tools-js/rules';
|
|
4
|
+
|
|
5
|
+
const getStateFromLatestPolicyValidationResult = (result) => {
|
|
6
|
+
if (!result.isValid && result.ruleResults.length >= 1) {
|
|
7
|
+
const failingRule = result.ruleResults.find((r) => !r.isValid);
|
|
8
|
+
if (!failingRule) {
|
|
9
|
+
return {
|
|
10
|
+
isValid: false,
|
|
11
|
+
identifier: "failingComplexity"
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return failingRule;
|
|
15
|
+
}
|
|
16
|
+
if (result.isValid === "indeterminate") {
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
19
|
+
if (result.complexity.actual <= result.complexity.min) {
|
|
20
|
+
return {
|
|
21
|
+
isValid: result.isValid,
|
|
22
|
+
identifier: "optimizeComplexity"
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
isValid: true,
|
|
27
|
+
identifier: "securePassword"
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { getStateFromLatestPolicyValidationResult as default, getStateFromLatestPolicyValidationResult };
|
|
32
|
+
//# sourceMappingURL=getStateFromLatestPolicyValidationResult.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStateFromLatestPolicyValidationResult.mjs","sources":["../../../../../../../src/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult.ts"],"sourcesContent":["import { type RuleValidationResult } from \"@mittwald/password-tools-js/rules\";\nimport type { ResolvedPolicyValidationResult } from \"@/components/PasswordCreationField/PasswordCreationField\";\n\n/** @internal */\nexport const getStateFromLatestPolicyValidationResult = (\n result: ResolvedPolicyValidationResult,\n): undefined | Partial<RuleValidationResult> => {\n if (!result.isValid && result.ruleResults.length >= 1) {\n const failingRule = result.ruleResults.find((r) => !r.isValid);\n if (!failingRule) {\n return {\n isValid: false,\n identifier: \"failingComplexity\",\n };\n }\n\n return failingRule;\n }\n\n if (result.isValid === \"indeterminate\") {\n return undefined;\n }\n\n if (result.complexity.actual <= result.complexity.min) {\n return {\n isValid: result.isValid,\n identifier: \"optimizeComplexity\",\n };\n }\n return {\n isValid: true,\n identifier: \"securePassword\",\n };\n};\n\nexport default getStateFromLatestPolicyValidationResult;\n"],"names":[],"mappings":";;AAIa,MAAA,wCAAA,GAA2C,CACtD,MAC8C,KAAA;AAC9C,EAAA,IAAI,CAAC,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,WAAA,CAAY,UAAU,CAAG,EAAA;AACrD,IAAM,MAAA,WAAA,GAAc,OAAO,WAAY,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,KAAA;AAAA,QACT,UAAY,EAAA;AAAA,OACd;AAAA;AAGF,IAAO,OAAA,WAAA;AAAA;AAGT,EAAI,IAAA,MAAA,CAAO,YAAY,eAAiB,EAAA;AACtC,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,MAAO,CAAA,UAAA,CAAW,MAAU,IAAA,MAAA,CAAO,WAAW,GAAK,EAAA;AACrD,IAAO,OAAA;AAAA,MACL,SAAS,MAAO,CAAA,OAAA;AAAA,MAChB,UAAY,EAAA;AAAA,KACd;AAAA;AAEF,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,IAAA;AAAA,IACT,UAAY,EAAA;AAAA,GACd;AACF;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
const getStatusFromPolicyValidationResult = (result) => {
|
|
4
|
+
if (result.isValid === true) {
|
|
5
|
+
if (result.complexity && result.complexity.actual === result.complexity.min && result.complexity.min !== 4) {
|
|
6
|
+
return "warning";
|
|
7
|
+
}
|
|
8
|
+
return "success";
|
|
9
|
+
} else if (result.isValid === "indeterminate") {
|
|
10
|
+
return "indeterminate";
|
|
11
|
+
}
|
|
12
|
+
return "danger";
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { getStatusFromPolicyValidationResult as default, getStatusFromPolicyValidationResult };
|
|
16
|
+
//# sourceMappingURL=getStatusFromPolicyValidationResult.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatusFromPolicyValidationResult.mjs","sources":["../../../../../../../src/components/PasswordCreationField/lib/getStatusFromPolicyValidationResult.ts"],"sourcesContent":["import type { ResolvedPolicyValidationResult } from \"@/components/PasswordCreationField/PasswordCreationField\";\nimport type { ComplexityStatus } from \"@/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator\";\n\n/**\n * @param result\n * @internal\n */\nexport const getStatusFromPolicyValidationResult = (\n result: ResolvedPolicyValidationResult,\n): ComplexityStatus => {\n if (result.isValid === true) {\n if (\n result.complexity &&\n result.complexity.actual === result.complexity.min &&\n result.complexity.min !== 4\n ) {\n return \"warning\";\n }\n\n return \"success\";\n } else if (result.isValid === \"indeterminate\") {\n return \"indeterminate\";\n }\n\n return \"danger\";\n};\n\nexport default getStatusFromPolicyValidationResult;\n"],"names":[],"mappings":"AAOa,MAAA,mCAAA,GAAsC,CACjD,MACqB,KAAA;AACrB,EAAI,IAAA,MAAA,CAAO,YAAY,IAAM,EAAA;AAC3B,IACE,IAAA,MAAA,CAAO,UACP,IAAA,MAAA,CAAO,UAAW,CAAA,MAAA,KAAW,MAAO,CAAA,UAAA,CAAW,GAC/C,IAAA,MAAA,CAAO,UAAW,CAAA,GAAA,KAAQ,CAC1B,EAAA;AACA,MAAO,OAAA,SAAA;AAAA;AAGT,IAAO,OAAA,SAAA;AAAA,GACT,MAAA,IAAW,MAAO,CAAA,OAAA,KAAY,eAAiB,EAAA;AAC7C,IAAO,OAAA,eAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { Generator } from '@mittwald/password-tools-js/generator';
|
|
4
|
+
|
|
5
|
+
const generatePassword = async (validationPolicy) => {
|
|
6
|
+
if (typeof Worker === "undefined") {
|
|
7
|
+
return new Generator(validationPolicy).generatePassword();
|
|
8
|
+
}
|
|
9
|
+
const { default: GeneratorWorker } = await import('./passwordGeneration.worker.mjs');
|
|
10
|
+
const worker = new GeneratorWorker();
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
worker.onmessage = (e) => {
|
|
13
|
+
const [action, data] = e.data;
|
|
14
|
+
if (action === "generatePassword") {
|
|
15
|
+
resolve(data);
|
|
16
|
+
} else if (action === "error") {
|
|
17
|
+
reject(data);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
worker.postMessage([
|
|
21
|
+
"generatePassword",
|
|
22
|
+
JSON.stringify({
|
|
23
|
+
...validationPolicy,
|
|
24
|
+
rules: [...validationPolicy.rules].map((r) => r.config)
|
|
25
|
+
})
|
|
26
|
+
]);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export { generatePassword };
|
|
31
|
+
//# sourceMappingURL=generatePassword.mjs.map
|
package/dist/js/components/src/components/PasswordCreationField/worker/generatePassword.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatePassword.mjs","sources":["../../../../../../../src/components/PasswordCreationField/worker/generatePassword.ts"],"sourcesContent":["import type { Policy } from \"@mittwald/password-tools-js/policy\";\nimport { Generator } from \"@mittwald/password-tools-js/generator\";\n\nexport const generatePassword = async (\n validationPolicy: Policy,\n): Promise<string> => {\n if (typeof Worker === \"undefined\") {\n return new Generator(validationPolicy).generatePassword();\n }\n\n const { default: GeneratorWorker } = await import(\n `./passwordGeneration.worker?worker&inline`\n );\n\n const worker = new GeneratorWorker();\n return new Promise((resolve, reject) => {\n worker.onmessage = (e: MessageEvent) => {\n const [action, data] = e.data;\n if (action === \"generatePassword\") {\n resolve(data);\n } else if (action === \"error\") {\n reject(data);\n }\n };\n\n worker.postMessage([\n \"generatePassword\",\n JSON.stringify({\n ...validationPolicy,\n rules: [...validationPolicy.rules].map((r) => r.config),\n }),\n ]);\n });\n};\n"],"names":[],"mappings":";;AAGa,MAAA,gBAAA,GAAmB,OAC9B,gBACoB,KAAA;AACpB,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAA,OAAO,IAAI,SAAA,CAAU,gBAAgB,CAAA,CAAE,gBAAiB,EAAA;AAAA;AAG1D,EAAA,MAAM,EAAE,OAAS,EAAA,eAAA,EAAoB,GAAA,MAAM,OACzC,iCACF,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,IAAI,eAAgB,EAAA;AACnC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAO,MAAA,CAAA,SAAA,GAAY,CAAC,CAAoB,KAAA;AACtC,MAAA,MAAM,CAAC,MAAA,EAAQ,IAAI,CAAA,GAAI,CAAE,CAAA,IAAA;AACzB,MAAA,IAAI,WAAW,kBAAoB,EAAA;AACjC,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,OACd,MAAA,IAAW,WAAW,OAAS,EAAA;AAC7B,QAAA,MAAA,CAAO,IAAI,CAAA;AAAA;AACb,KACF;AAEA,IAAA,MAAA,CAAO,WAAY,CAAA;AAAA,MACjB,kBAAA;AAAA,MACA,KAAK,SAAU,CAAA;AAAA,QACb,GAAG,gBAAA;AAAA,QACH,KAAA,EAAO,CAAC,GAAG,gBAAiB,CAAA,KAAK,EAAE,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,MAAM;AAAA,OACvD;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AACH;;;;"}
|