@mittwald/flow-react-components 0.2.0-alpha.355 → 0.2.0-alpha.357

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/assets/doc-properties.json +1949 -1930
  3. package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.mjs +49 -53
  4. package/dist/js/components/src/components/PasswordCreationField/PasswordCreationField.mjs.map +1 -1
  5. package/dist/js/components/src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.mjs +7 -1
  6. package/dist/js/components/src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.mjs.map +1 -1
  7. package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs +11 -2
  8. package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
  9. package/dist/js/default.mjs +0 -1
  10. package/dist/js/default.mjs.map +1 -1
  11. package/dist/types/components/PasswordCreationField/PasswordCreationField.d.ts +5 -0
  12. package/dist/types/components/PasswordCreationField/PasswordCreationField.d.ts.map +1 -1
  13. package/dist/types/components/PasswordCreationField/index.d.ts +0 -1
  14. package/dist/types/components/PasswordCreationField/index.d.ts.map +1 -1
  15. package/dist/types/components/PasswordCreationField/stories/Default.stories.d.ts.map +1 -1
  16. package/dist/types/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.d.ts +2 -2
  17. package/dist/types/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.d.ts.map +1 -1
  18. package/dist/types/integrations/react-hook-form/components/Form/Form.d.ts.map +1 -1
  19. package/package.json +4 -4
  20. package/dist/js/components/src/lib/promises/useAbortablePromise.mjs +0 -16
  21. package/dist/js/components/src/lib/promises/useAbortablePromise.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
  /* */
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
- import { useState, useDeferredValue } from 'react';
4
+ import { useState, useDeferredValue, useEffect, startTransition } from 'react';
5
5
  import { ClearPropsContext } from '../ClearPropsContext/ClearPropsContext.mjs';
6
6
  import '../../lib/propsContext/propsContext.mjs';
7
7
  import { dynamic } from '../../lib/propsContext/dynamicProps/dynamic.mjs';
@@ -24,18 +24,13 @@ import '@mittwald/password-tools-js/policy';
24
24
  import '@mittwald/password-tools-js/rules';
25
25
  import { generatePassword } from './worker/generatePassword.mjs';
26
26
  import { TogglePasswordVisibilityButton } from './components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton.mjs';
27
- import { useAbortablePromise } from '../../lib/promises/useAbortablePromise.mjs';
28
27
  import { defaultPasswordCreationPolicy } from './defaultPasswordCreationPolicy.mjs';
29
28
  import { Wrap } from '../Wrap/Wrap.mjs';
30
29
  import { ReactAriaControlledValueFix } from '../../lib/react/ReactAriaControlledValueFix.mjs';
31
- import 'mobx';
32
- import '../../lib/controller/overlay/context.mjs';
33
- import { useIsMounted } from '../../lib/hooks/useIsMounted.mjs';
34
- import '@react-aria/utils';
35
- import { isPromise } from 'remeda';
36
30
  import { ValidationResultButton } from './components/ValidationResultButton/ValidationResultButton.mjs';
37
31
  import { PasswordGenerateButton } from './components/PasswordGenerateButton/PasswordGenerateButton.mjs';
38
32
  import { useLocalizedContextStringFormatter } from '../TranslationProvider/useLocalizedContextStringFormatter.mjs';
33
+ import { isPromise } from 'remeda';
39
34
 
40
35
  const PasswordCreationField = flowComponent(
41
36
  "PasswordCreationField",
@@ -46,6 +41,7 @@ const PasswordCreationField = flowComponent(
46
41
  ref,
47
42
  isDisabled,
48
43
  onChange: onChangeFromProps,
44
+ onValidationResult,
49
45
  isInvalid: invalidFromProps,
50
46
  validationPolicy = defaultPasswordCreationPolicy,
51
47
  isRequired,
@@ -58,21 +54,21 @@ const PasswordCreationField = flowComponent(
58
54
  const [internalValue, setInternalValue] = useState(
59
55
  hasDefaultValue ? defaultValue : ""
60
56
  );
61
- const deferredValue = useDeferredValue(
62
- internalValue,
63
- hasDefaultValue ? defaultValue : ""
64
- );
65
57
  const value = isControlled ? valueFromProps : internalValue;
58
+ const deferredValue = useDeferredValue(value);
66
59
  const onChangeHandler = (value2) => {
67
60
  if (onChangeFromProps) {
68
61
  onChangeFromProps(value2);
69
62
  }
70
- setInternalValue(() => value2);
63
+ if (!isControlled) {
64
+ setInternalValue(() => value2);
65
+ }
71
66
  };
72
67
  const translate = useLocalizedContextStringFormatter(locales);
73
68
  const [isPasswordRevealed, setIsPasswordRevealed] = useState(false);
74
69
  const [isLoading, setIsLoading] = useState(false);
75
70
  const initialPolicyValidationState = {
71
+ initialValidate: true,
76
72
  isValid: false,
77
73
  complexity: {
78
74
  min: validationPolicy.minComplexity,
@@ -97,69 +93,66 @@ const PasswordCreationField = flowComponent(
97
93
  translationValues
98
94
  );
99
95
  }
100
- const isMounted = useIsMounted();
101
96
  const isEmptyValue = !value;
102
97
  const isValidFromValidationResult = !isEmptyValue && stateFromValidationResult?.isValid;
103
98
  const isInvalidFromValidationResult = !isEmptyValue && !stateFromValidationResult?.isValid;
104
99
  const isInvalid = invalidFromProps || isInvalidFromValidationResult;
105
- const setOptimisticPolicyValidationResult = (isValid = true) => {
100
+ const setOptimisticPolicyValidationResult = (state = {}) => {
106
101
  setPolicyValidationResult(() => ({
107
102
  ...initialPolicyValidationState,
108
- isValid
103
+ ...state,
104
+ isValid: state.isValid ?? true
109
105
  }));
110
106
  };
111
- useAbortablePromise(
112
- async (signal) => {
113
- if (signal.aborted) {
114
- return;
115
- }
116
- const validationResult = validationPolicy.validate(value);
107
+ useEffect(() => {
108
+ startTransition(async () => {
109
+ const validationResult = validationPolicy.validate(deferredValue);
117
110
  if (!isPromise(validationResult.isValid)) {
118
- setIsLoading(false);
119
- setPolicyValidationResult((old) => ({
120
- ...old,
121
- isValid: validationResult.isValid,
122
- ruleResults: validationResult.ruleResults,
123
- complexity: validationResult.complexity
124
- }));
125
- if (isMounted) {
126
- onChangeHandler(value);
127
- }
111
+ const isValid = validationResult.isValid;
112
+ setIsLoading(() => false);
113
+ setPolicyValidationResult((old) => {
114
+ if (!old.initialValidate) {
115
+ onValidationResult?.({ password: deferredValue, isValid });
116
+ }
117
+ return {
118
+ initialValidate: false,
119
+ isValid,
120
+ ruleResults: validationResult.ruleResults,
121
+ complexity: validationResult.complexity
122
+ };
123
+ });
128
124
  return;
129
125
  }
130
126
  const nonPromiseValidationsInvalid = validationResult.ruleResults.filter((r) => !(r instanceof Promise)).some((r) => !r.isValid);
131
127
  if (!isEmptyValue) {
132
- setIsLoading(true);
128
+ setIsLoading(() => true);
133
129
  }
134
130
  if (!nonPromiseValidationsInvalid) {
135
131
  setOptimisticPolicyValidationResult();
136
132
  }
137
133
  void Promise.all([
138
- Promise.resolve(value),
134
+ Promise.resolve(deferredValue),
139
135
  ...validationResult.ruleResults.map(async (r) => {
140
- if (signal.aborted) {
141
- throw Error();
142
- }
143
136
  return r;
144
137
  })
145
138
  ]).then(([resolvedValue, ...validationResults]) => {
146
- if (signal.aborted) {
147
- return;
148
- }
149
- const isValid = !validationResults.some((r) => !r.isValid);
150
- setIsLoading(false);
151
- setPolicyValidationResult((old) => ({
152
- ...old,
153
- isValid,
154
- ruleResults: validationResults
155
- }));
156
- if (isMounted) {
157
- onChangeHandler(resolvedValue);
158
- }
139
+ startTransition(() => {
140
+ const isValid = !validationResults.some((r) => !r.isValid);
141
+ setIsLoading(() => false);
142
+ setPolicyValidationResult((old) => {
143
+ if (!old.initialValidate) {
144
+ onValidationResult?.({ password: resolvedValue, isValid });
145
+ }
146
+ return {
147
+ ...old,
148
+ isValid,
149
+ ruleResults: validationResults
150
+ };
151
+ });
152
+ });
159
153
  });
160
- },
161
- [deferredValue]
162
- );
154
+ });
155
+ }, [deferredValue]);
163
156
  const onPasswordGenerateHandler = async () => {
164
157
  const generatedPassword = await generatePassword(validationPolicy);
165
158
  setOptimisticPolicyValidationResult();
@@ -169,7 +162,10 @@ const PasswordCreationField = flowComponent(
169
162
  const onPasswordPasteHandler = (event) => {
170
163
  const pastedValue = event.clipboardData.getData("text");
171
164
  if (pastedValue !== value) {
172
- setOptimisticPolicyValidationResult("indeterminate");
165
+ setOptimisticPolicyValidationResult({
166
+ isValid: "indeterminate"
167
+ });
168
+ onChangeHandler(pastedValue);
173
169
  }
174
170
  };
175
171
  const togglePasswordVisibilityHandler = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordCreationField.mjs","sources":["../../../../../../src/components/PasswordCreationField/PasswordCreationField.tsx"],"sourcesContent":["import React, {\n type PropsWithChildren,\n useState,\n type ClipboardEvent,\n useDeferredValue,\n} from \"react\";\nimport {\n ClearPropsContext,\n dynamic,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport styles from \"./PasswordCreationField.module.scss\";\nimport * as Aria from \"react-aria-components\";\nimport formFieldStyles from \"@/components/FormField/FormField.module.scss\";\nimport clsx from \"clsx\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport type { Policy } from \"@mittwald/password-tools-js/policy\";\nimport { type ActionFn } from \"@/components/Action\";\nimport getStateFromLatestPolicyValidationResult from \"@/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult\";\nimport locales from \"./locales/*.locale.json\";\nimport generateValidationTranslation from \"@/components/PasswordCreationField/lib/generateValidationTranslation\";\nimport { FieldError } from \"@/components/FieldError\";\nimport FieldDescription from \"@/components/FieldDescription\";\nimport ComplexityIndicator from \"@/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator\";\nimport { type PolicyValidationResult } from \"@mittwald/password-tools-js/policy\";\nimport { type RuleValidationResult } from \"@mittwald/password-tools-js/rules\";\nimport { generatePassword } from \"@/components/PasswordCreationField/worker/generatePassword\";\nimport TogglePasswordVisibilityButton from \"@/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton\";\nimport { useAbortablePromise } from \"@/lib/promises/useAbortablePromise\";\nimport { defaultPasswordCreationPolicy } from \"@/components/PasswordCreationField/defaultPasswordCreationPolicy\";\nimport { FieldErrorContext } from \"react-aria-components\";\nimport { Wrap } from \"@/components/Wrap\";\nimport { ReactAriaControlledValueFix } from \"@/lib/react/ReactAriaControlledValueFix\";\nimport { useIsMounted } from \"@/lib/hooks\";\nimport { ValidationResultButton } from \"@/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton\";\nimport { PasswordGenerateButton } from \"@/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton\";\nimport { useLocalizedContextStringFormatter } from \"@/components/TranslationProvider/useLocalizedContextStringFormatter\";\nimport { isPromise } from \"remeda\";\n\nexport interface PasswordCreationFieldProps\n extends PropsWithChildren<\n Omit<Aria.TextFieldProps, \"children\" | \"value\" | \"defaultValue\"> &\n Partial<Pick<Aria.FieldErrorRenderProps, \"validationErrors\">>\n >,\n FlowComponentProps<HTMLInputElement> {\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n validationPolicy?: Policy;\n}\n\nexport interface ResolvedPolicyValidationResult\n extends Omit<PolicyValidationResult, \"isValid\"> {\n isValid: boolean | \"indeterminate\";\n ruleResults: RuleValidationResult[];\n}\n\n/**\n * @flr-generate all\n * @flr-clear-props-context\n */\nexport const PasswordCreationField = flowComponent(\n \"PasswordCreationField\",\n (props) => {\n const {\n children,\n className,\n ref,\n isDisabled,\n onChange: onChangeFromProps,\n isInvalid: invalidFromProps,\n validationPolicy = defaultPasswordCreationPolicy,\n isRequired,\n value: valueFromProps,\n defaultValue,\n ...rest\n } = props;\n\n const isControlled = typeof valueFromProps !== \"undefined\";\n const hasDefaultValue = typeof defaultValue !== \"undefined\";\n const [internalValue, setInternalValue] = useState(\n hasDefaultValue ? defaultValue : \"\",\n );\n const deferredValue = useDeferredValue(\n internalValue,\n hasDefaultValue ? defaultValue : \"\",\n );\n\n const value = isControlled ? valueFromProps : internalValue;\n\n const onChangeHandler = (value: string) => {\n if (onChangeFromProps) {\n onChangeFromProps(value);\n }\n\n setInternalValue(() => value);\n };\n\n const translate = useLocalizedContextStringFormatter(locales);\n\n const [isPasswordRevealed, setIsPasswordRevealed] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const initialPolicyValidationState: ResolvedPolicyValidationResult = {\n isValid: false,\n complexity: {\n min: validationPolicy.minComplexity,\n actual: 4,\n warning: null,\n },\n ruleResults: [],\n };\n\n const [policyValidationResult, setPolicyValidationResult] = useState(\n initialPolicyValidationState,\n );\n\n const stateFromValidationResult = getStateFromLatestPolicyValidationResult(\n policyValidationResult,\n );\n let latestValidationErrorText = undefined;\n if (stateFromValidationResult) {\n const [translationKey, translationValues] = generateValidationTranslation(\n stateFromValidationResult,\n );\n latestValidationErrorText = translate.format(\n translationKey,\n translationValues,\n );\n }\n\n const isMounted = useIsMounted();\n const isEmptyValue = !value;\n\n const isValidFromValidationResult =\n !isEmptyValue && stateFromValidationResult?.isValid;\n\n const isInvalidFromValidationResult =\n !isEmptyValue && !stateFromValidationResult?.isValid;\n\n const isInvalid = invalidFromProps || isInvalidFromValidationResult;\n\n const setOptimisticPolicyValidationResult = (\n isValid: ResolvedPolicyValidationResult[\"isValid\"] = true,\n ) => {\n setPolicyValidationResult(() => ({\n ...initialPolicyValidationState,\n isValid,\n }));\n };\n\n useAbortablePromise(\n async (signal) => {\n if (signal.aborted) {\n return;\n }\n\n const validationResult = validationPolicy.validate(value);\n if (!isPromise(validationResult.isValid)) {\n setIsLoading(false);\n setPolicyValidationResult((old) => ({\n ...old,\n isValid: validationResult.isValid as boolean,\n ruleResults: validationResult.ruleResults as RuleValidationResult[],\n complexity: validationResult.complexity,\n }));\n\n if (isMounted) {\n onChangeHandler(value);\n }\n return;\n }\n\n const nonPromiseValidationsInvalid = validationResult.ruleResults\n .filter((r): r is RuleValidationResult => !(r instanceof Promise))\n .some((r) => !r.isValid);\n\n if (!isEmptyValue) {\n setIsLoading(true);\n }\n if (!nonPromiseValidationsInvalid) {\n setOptimisticPolicyValidationResult();\n }\n\n void Promise.all([\n Promise.resolve(value),\n ...validationResult.ruleResults.map(async (r) => {\n if (signal.aborted) {\n throw Error();\n }\n\n return r;\n }),\n ]).then(([resolvedValue, ...validationResults]) => {\n if (signal.aborted) {\n return;\n }\n\n const isValid = !validationResults.some((r) => !r.isValid);\n\n setIsLoading(false);\n setPolicyValidationResult((old) => ({\n ...old,\n isValid,\n ruleResults: validationResults,\n }));\n\n if (isMounted) {\n onChangeHandler(resolvedValue);\n }\n });\n },\n [deferredValue],\n );\n\n const onPasswordGenerateHandler: ActionFn = async () => {\n const generatedPassword = await generatePassword(validationPolicy);\n setOptimisticPolicyValidationResult();\n setIsPasswordRevealed(true);\n onChangeHandler(generatedPassword);\n };\n\n const onPasswordPasteHandler = (event: ClipboardEvent) => {\n const pastedValue = event.clipboardData.getData(\"text\");\n if (pastedValue !== value) {\n setOptimisticPolicyValidationResult(\"indeterminate\");\n }\n };\n\n const togglePasswordVisibilityHandler = () => {\n setIsPasswordRevealed((old) => !old);\n };\n\n const propsContext: PropsContext = {\n Button: {\n tunnelId: \"button\",\n size: \"m\",\n variant: \"plain\",\n color: \"secondary\",\n isDisabled: isDisabled,\n className: styles.button,\n },\n CopyButton: {\n tunnelId: \"button\",\n size: \"m\",\n variant: \"plain\",\n color: \"secondary\",\n isDisabled: isDisabled,\n className: styles.button,\n text: value,\n },\n Label: {\n className: formFieldStyles.label,\n tunnelId: \"label\",\n optional: !isRequired,\n isDisabled: isDisabled,\n children: dynamic((localProps) => {\n return (\n <>\n {localProps.children}\n <PasswordGenerateButton\n isDisabled={isDisabled}\n onGeneratePasswordAction={onPasswordGenerateHandler}\n />\n <ValidationResultButton\n isEmptyValue={isEmptyValue}\n isDisabled={isDisabled}\n policyValidationResult={policyValidationResult}\n />\n </>\n );\n }),\n },\n FieldDescription: {\n className: formFieldStyles.fieldDescription,\n },\n FieldError: {\n className: formFieldStyles.customFieldError,\n children: dynamic(() => {\n if (latestValidationErrorText) {\n return latestValidationErrorText;\n }\n }),\n },\n };\n\n return (\n <ClearPropsContext>\n <TunnelProvider>\n <Aria.TextField\n {...rest}\n value={value}\n type={isPasswordRevealed ? \"text\" : \"password\"}\n onChange={onChangeHandler}\n onPaste={onPasswordPasteHandler}\n className={clsx(className, formFieldStyles.formField)}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isRequired={isRequired}\n >\n <TunnelExit id=\"label\" />\n <Aria.Group\n isDisabled={isDisabled}\n className={clsx(styles.inputGroup)}\n >\n <ReactAriaControlledValueFix\n inputContext={Aria.InputContext}\n props={{ ...props, value }}\n >\n <Aria.Input ref={ref} className={styles.input} />\n </ReactAriaControlledValueFix>\n <Aria.Group className={styles.buttonContainer}>\n <TogglePasswordVisibilityButton\n className={styles.button}\n isVisible={isPasswordRevealed}\n isDisabled={isDisabled}\n onPress={togglePasswordVisibilityHandler}\n />\n <TunnelExit id=\"button\" />\n </Aria.Group>\n <ComplexityIndicator\n isEmptyValue={isEmptyValue}\n isLoading={isLoading}\n policyValidationResult={policyValidationResult}\n />\n </Aria.Group>\n <PropsContextProvider props={propsContext}>\n {isValidFromValidationResult && (\n <FieldDescription>{latestValidationErrorText}</FieldDescription>\n )}\n {isInvalidFromValidationResult &&\n policyValidationResult.isValid !== \"indeterminate\" && (\n <FieldError>{latestValidationErrorText}</FieldError>\n )}\n <Wrap if={isInvalidFromValidationResult}>\n <FieldErrorContext.Provider\n value={{\n isInvalid: false,\n validationErrors: [],\n validationDetails: {\n customError: false,\n valid: true,\n typeMismatch: false,\n stepMismatch: false,\n valueMissing: false,\n tooShort: false,\n tooLong: false,\n rangeUnderflow: false,\n patternMismatch: false,\n badInput: false,\n rangeOverflow: false,\n },\n }}\n >\n {children}\n </FieldErrorContext.Provider>\n </Wrap>\n </PropsContextProvider>\n </Aria.TextField>\n </TunnelProvider>\n </ClearPropsContext>\n );\n },\n);\n\nexport default PasswordCreationField;\n"],"names":["value"],"mappings":"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"}
1
+ {"version":3,"file":"PasswordCreationField.mjs","sources":["../../../../../../src/components/PasswordCreationField/PasswordCreationField.tsx"],"sourcesContent":["import React, {\n type PropsWithChildren,\n useState,\n type ClipboardEvent,\n useDeferredValue,\n startTransition,\n useEffect,\n} from \"react\";\nimport {\n ClearPropsContext,\n dynamic,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport styles from \"./PasswordCreationField.module.scss\";\nimport * as Aria from \"react-aria-components\";\nimport formFieldStyles from \"@/components/FormField/FormField.module.scss\";\nimport clsx from \"clsx\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport type { Policy } from \"@mittwald/password-tools-js/policy\";\nimport { type ActionFn } from \"@/components/Action\";\nimport getStateFromLatestPolicyValidationResult from \"@/components/PasswordCreationField/lib/getStateFromLatestPolicyValidationResult\";\nimport locales from \"./locales/*.locale.json\";\nimport generateValidationTranslation from \"@/components/PasswordCreationField/lib/generateValidationTranslation\";\nimport { FieldError } from \"@/components/FieldError\";\nimport FieldDescription from \"@/components/FieldDescription\";\nimport ComplexityIndicator from \"@/components/PasswordCreationField/components/ComplexityIndicator/ComplexityIndicator\";\nimport { type PolicyValidationResult } from \"@mittwald/password-tools-js/policy\";\nimport { type RuleValidationResult } from \"@mittwald/password-tools-js/rules\";\nimport { generatePassword } from \"@/components/PasswordCreationField/worker/generatePassword\";\nimport TogglePasswordVisibilityButton from \"@/components/PasswordCreationField/components/TogglePasswordVisibilityButton/TogglePasswordVisibilityButton\";\nimport { defaultPasswordCreationPolicy } from \"@/components/PasswordCreationField/defaultPasswordCreationPolicy\";\nimport { FieldErrorContext } from \"react-aria-components\";\nimport { Wrap } from \"@/components/Wrap\";\nimport { ReactAriaControlledValueFix } from \"@/lib/react/ReactAriaControlledValueFix\";\nimport { ValidationResultButton } from \"@/components/PasswordCreationField/components/ValidationResultButton/ValidationResultButton\";\nimport { PasswordGenerateButton } from \"@/components/PasswordCreationField/components/PasswordGenerateButton/PasswordGenerateButton\";\nimport { useLocalizedContextStringFormatter } from \"@/components/TranslationProvider/useLocalizedContextStringFormatter\";\nimport { isPromise } from \"remeda\";\n\nexport interface PasswordCreationFieldProps\n extends PropsWithChildren<\n Omit<Aria.TextFieldProps, \"children\" | \"value\" | \"defaultValue\"> &\n Partial<Pick<Aria.FieldErrorRenderProps, \"validationErrors\">>\n >,\n FlowComponentProps<HTMLInputElement> {\n value?: string;\n onValidationResult?: (result: { password: string; isValid: boolean }) => void;\n defaultValue?: string;\n placeholder?: string;\n validationPolicy?: Policy;\n}\n\nexport interface ResolvedPolicyValidationResult\n extends Omit<PolicyValidationResult, \"isValid\"> {\n initialValidate: boolean;\n isValid: boolean | \"indeterminate\";\n ruleResults: RuleValidationResult[];\n}\n\n/**\n * @flr-generate all\n * @flr-clear-props-context\n */\nexport const PasswordCreationField = flowComponent(\n \"PasswordCreationField\",\n (props) => {\n const {\n children,\n className,\n ref,\n isDisabled,\n onChange: onChangeFromProps,\n onValidationResult,\n isInvalid: invalidFromProps,\n validationPolicy = defaultPasswordCreationPolicy,\n isRequired,\n value: valueFromProps,\n defaultValue,\n ...rest\n } = props;\n\n const isControlled = typeof valueFromProps !== \"undefined\";\n const hasDefaultValue = typeof defaultValue !== \"undefined\";\n const [internalValue, setInternalValue] = useState(\n hasDefaultValue ? defaultValue : \"\",\n );\n const value = isControlled ? valueFromProps : internalValue;\n const deferredValue = useDeferredValue(value);\n\n const onChangeHandler = (value: string) => {\n if (onChangeFromProps) {\n onChangeFromProps(value);\n }\n\n if (!isControlled) {\n setInternalValue(() => value);\n }\n };\n\n const translate = useLocalizedContextStringFormatter(locales);\n const [isPasswordRevealed, setIsPasswordRevealed] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const initialPolicyValidationState: ResolvedPolicyValidationResult = {\n initialValidate: true,\n isValid: false,\n complexity: {\n min: validationPolicy.minComplexity,\n actual: 4,\n warning: null,\n },\n ruleResults: [],\n };\n\n const [policyValidationResult, setPolicyValidationResult] = useState(\n initialPolicyValidationState,\n );\n\n const stateFromValidationResult = getStateFromLatestPolicyValidationResult(\n policyValidationResult,\n );\n let latestValidationErrorText = undefined;\n if (stateFromValidationResult) {\n const [translationKey, translationValues] = generateValidationTranslation(\n stateFromValidationResult,\n );\n latestValidationErrorText = translate.format(\n translationKey,\n translationValues,\n );\n }\n\n const isEmptyValue = !value;\n const isValidFromValidationResult =\n !isEmptyValue && stateFromValidationResult?.isValid;\n const isInvalidFromValidationResult =\n !isEmptyValue && !stateFromValidationResult?.isValid;\n const isInvalid = invalidFromProps || isInvalidFromValidationResult;\n\n const setOptimisticPolicyValidationResult = (\n state: Partial<ResolvedPolicyValidationResult> = {},\n ) => {\n setPolicyValidationResult(() => ({\n ...initialPolicyValidationState,\n ...state,\n isValid: state.isValid ?? true,\n }));\n };\n\n useEffect(() => {\n startTransition(async () => {\n const validationResult = validationPolicy.validate(deferredValue);\n if (!isPromise(validationResult.isValid)) {\n const isValid = validationResult.isValid as boolean;\n\n setIsLoading(() => false);\n setPolicyValidationResult((old) => {\n if (!old.initialValidate) {\n onValidationResult?.({ password: deferredValue, isValid });\n }\n\n return {\n initialValidate: false,\n isValid,\n ruleResults:\n validationResult.ruleResults as RuleValidationResult[],\n complexity: validationResult.complexity,\n };\n });\n return;\n }\n\n const nonPromiseValidationsInvalid = validationResult.ruleResults\n .filter((r): r is RuleValidationResult => !(r instanceof Promise))\n .some((r) => !r.isValid);\n\n if (!isEmptyValue) {\n setIsLoading(() => true);\n }\n if (!nonPromiseValidationsInvalid) {\n setOptimisticPolicyValidationResult();\n }\n\n void Promise.all([\n Promise.resolve(deferredValue),\n ...validationResult.ruleResults.map(async (r) => {\n return r;\n }),\n ]).then(([resolvedValue, ...validationResults]) => {\n startTransition(() => {\n const isValid = !validationResults.some((r) => !r.isValid);\n\n setIsLoading(() => false);\n setPolicyValidationResult((old) => {\n if (!old.initialValidate) {\n onValidationResult?.({ password: resolvedValue, isValid });\n }\n\n return {\n ...old,\n isValid,\n ruleResults: validationResults,\n };\n });\n });\n });\n });\n }, [deferredValue]);\n\n const onPasswordGenerateHandler: ActionFn = async () => {\n const generatedPassword = await generatePassword(validationPolicy);\n setOptimisticPolicyValidationResult();\n setIsPasswordRevealed(true);\n onChangeHandler(generatedPassword);\n };\n\n const onPasswordPasteHandler = (event: ClipboardEvent) => {\n const pastedValue = event.clipboardData.getData(\"text\");\n if (pastedValue !== value) {\n setOptimisticPolicyValidationResult({\n isValid: \"indeterminate\",\n });\n onChangeHandler(pastedValue);\n }\n };\n\n const togglePasswordVisibilityHandler = () => {\n setIsPasswordRevealed((old) => !old);\n };\n\n const propsContext: PropsContext = {\n Button: {\n tunnelId: \"button\",\n size: \"m\",\n variant: \"plain\",\n color: \"secondary\",\n isDisabled: isDisabled,\n className: styles.button,\n },\n CopyButton: {\n tunnelId: \"button\",\n size: \"m\",\n variant: \"plain\",\n color: \"secondary\",\n isDisabled: isDisabled,\n className: styles.button,\n text: value,\n },\n Label: {\n className: formFieldStyles.label,\n tunnelId: \"label\",\n optional: !isRequired,\n isDisabled: isDisabled,\n children: dynamic((localProps) => {\n return (\n <>\n {localProps.children}\n <PasswordGenerateButton\n isDisabled={isDisabled}\n onGeneratePasswordAction={onPasswordGenerateHandler}\n />\n <ValidationResultButton\n isEmptyValue={isEmptyValue}\n isDisabled={isDisabled}\n policyValidationResult={policyValidationResult}\n />\n </>\n );\n }),\n },\n FieldDescription: {\n className: formFieldStyles.fieldDescription,\n },\n FieldError: {\n className: formFieldStyles.customFieldError,\n children: dynamic(() => {\n if (latestValidationErrorText) {\n return latestValidationErrorText;\n }\n }),\n },\n };\n\n return (\n <ClearPropsContext>\n <TunnelProvider>\n <Aria.TextField\n {...rest}\n value={value}\n type={isPasswordRevealed ? \"text\" : \"password\"}\n onChange={onChangeHandler}\n onPaste={onPasswordPasteHandler}\n className={clsx(className, formFieldStyles.formField)}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isRequired={isRequired}\n >\n <TunnelExit id=\"label\" />\n <Aria.Group\n isDisabled={isDisabled}\n className={clsx(styles.inputGroup)}\n >\n <ReactAriaControlledValueFix\n inputContext={Aria.InputContext}\n props={{ ...props, value }}\n >\n <Aria.Input ref={ref} className={styles.input} />\n </ReactAriaControlledValueFix>\n <Aria.Group className={styles.buttonContainer}>\n <TogglePasswordVisibilityButton\n className={styles.button}\n isVisible={isPasswordRevealed}\n isDisabled={isDisabled}\n onPress={togglePasswordVisibilityHandler}\n />\n <TunnelExit id=\"button\" />\n </Aria.Group>\n <ComplexityIndicator\n isEmptyValue={isEmptyValue}\n isLoading={isLoading}\n policyValidationResult={policyValidationResult}\n />\n </Aria.Group>\n <PropsContextProvider props={propsContext}>\n {isValidFromValidationResult && (\n <FieldDescription>{latestValidationErrorText}</FieldDescription>\n )}\n {isInvalidFromValidationResult &&\n policyValidationResult.isValid !== \"indeterminate\" && (\n <FieldError>{latestValidationErrorText}</FieldError>\n )}\n <Wrap if={isInvalidFromValidationResult}>\n <FieldErrorContext.Provider\n value={{\n isInvalid: false,\n validationErrors: [],\n validationDetails: {\n customError: false,\n valid: true,\n typeMismatch: false,\n stepMismatch: false,\n valueMissing: false,\n tooShort: false,\n tooLong: false,\n rangeUnderflow: false,\n patternMismatch: false,\n badInput: false,\n rangeOverflow: false,\n },\n }}\n >\n {children}\n </FieldErrorContext.Provider>\n </Wrap>\n </PropsContextProvider>\n </Aria.TextField>\n </TunnelProvider>\n </ClearPropsContext>\n );\n },\n);\n\nexport default PasswordCreationField;\n"],"names":["value"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEO,MAAM,qBAAwB,GAAA,aAAA;AAAA,EACnC,uBAAA;AAAA,EACA,CAAC,KAAU,KAAA;AACT,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAU,EAAA,iBAAA;AAAA,MACV,kBAAA;AAAA,MACA,SAAW,EAAA,gBAAA;AAAA,MACX,gBAAmB,GAAA,6BAAA;AAAA,MACnB,UAAA;AAAA,MACA,KAAO,EAAA,cAAA;AAAA,MACP,YAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAM,MAAA,YAAA,GAAe,OAAO,cAAmB,KAAA,WAAA;AAC/C,IAAM,MAAA,eAAA,GAAkB,OAAO,YAAiB,KAAA,WAAA;AAChD,IAAM,MAAA,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA;AAAA,MACxC,kBAAkB,YAAe,GAAA;AAAA,KACnC;AACA,IAAM,MAAA,KAAA,GAAQ,eAAe,cAAiB,GAAA,aAAA;AAC9C,IAAM,MAAA,aAAA,GAAgB,iBAAiB,KAAK,CAAA;AAE5C,IAAM,MAAA,eAAA,GAAkB,CAACA,MAAkB,KAAA;AACzC,MAAA,IAAI,iBAAmB,EAAA;AACrB,QAAA,iBAAA,CAAkBA,MAAK,CAAA;AAAA;AAGzB,MAAA,IAAI,CAAC,YAAc,EAAA;AACjB,QAAA,gBAAA,CAAiB,MAAMA,MAAK,CAAA;AAAA;AAC9B,KACF;AAEA,IAAM,MAAA,SAAA,GAAY,mCAAmC,OAAO,CAAA;AAC5D,IAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAClE,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,IAAA,MAAM,4BAA+D,GAAA;AAAA,MACnE,eAAiB,EAAA,IAAA;AAAA,MACjB,OAAS,EAAA,KAAA;AAAA,MACT,UAAY,EAAA;AAAA,QACV,KAAK,gBAAiB,CAAA,aAAA;AAAA,QACtB,MAAQ,EAAA,CAAA;AAAA,QACR,OAAS,EAAA;AAAA,OACX;AAAA,MACA,aAAa;AAAC,KAChB;AAEA,IAAM,MAAA,CAAC,sBAAwB,EAAA,yBAAyB,CAAI,GAAA,QAAA;AAAA,MAC1D;AAAA,KACF;AAEA,IAAA,MAAM,yBAA4B,GAAA,wCAAA;AAAA,MAChC;AAAA,KACF;AACA,IAAA,IAAI,yBAA4B,GAAA,MAAA;AAChC,IAAA,IAAI,yBAA2B,EAAA;AAC7B,MAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAA,6BAAA;AAAA,QAC1C;AAAA,OACF;AACA,MAAA,yBAAA,GAA4B,SAAU,CAAA,MAAA;AAAA,QACpC,cAAA;AAAA,QACA;AAAA,OACF;AAAA;AAGF,IAAA,MAAM,eAAe,CAAC,KAAA;AACtB,IAAM,MAAA,2BAAA,GACJ,CAAC,YAAA,IAAgB,yBAA2B,EAAA,OAAA;AAC9C,IAAA,MAAM,6BACJ,GAAA,CAAC,YAAgB,IAAA,CAAC,yBAA2B,EAAA,OAAA;AAC/C,IAAA,MAAM,YAAY,gBAAoB,IAAA,6BAAA;AAEtC,IAAA,MAAM,mCAAsC,GAAA,CAC1C,KAAiD,GAAA,EAC9C,KAAA;AACH,MAAA,yBAAA,CAA0B,OAAO;AAAA,QAC/B,GAAG,4BAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACH,OAAA,EAAS,MAAM,OAAW,IAAA;AAAA,OAC1B,CAAA,CAAA;AAAA,KACJ;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,eAAA,CAAgB,YAAY;AAC1B,QAAM,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,QAAA,CAAS,aAAa,CAAA;AAChE,QAAA,IAAI,CAAC,SAAA,CAAU,gBAAiB,CAAA,OAAO,CAAG,EAAA;AACxC,UAAA,MAAM,UAAU,gBAAiB,CAAA,OAAA;AAEjC,UAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,UAAA,yBAAA,CAA0B,CAAC,GAAQ,KAAA;AACjC,YAAI,IAAA,CAAC,IAAI,eAAiB,EAAA;AACxB,cAAA,kBAAA,GAAqB,EAAE,QAAA,EAAU,aAAe,EAAA,OAAA,EAAS,CAAA;AAAA;AAG3D,YAAO,OAAA;AAAA,cACL,eAAiB,EAAA,KAAA;AAAA,cACjB,OAAA;AAAA,cACA,aACE,gBAAiB,CAAA,WAAA;AAAA,cACnB,YAAY,gBAAiB,CAAA;AAAA,aAC/B;AAAA,WACD,CAAA;AACD,UAAA;AAAA;AAGF,QAAA,MAAM,4BAA+B,GAAA,gBAAA,CAAiB,WACnD,CAAA,MAAA,CAAO,CAAC,CAAiC,KAAA,EAAE,CAAa,YAAA,OAAA,CAAQ,EAChE,IAAK,CAAA,CAAC,CAAM,KAAA,CAAC,EAAE,OAAO,CAAA;AAEzB,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAA,YAAA,CAAa,MAAM,IAAI,CAAA;AAAA;AAEzB,QAAA,IAAI,CAAC,4BAA8B,EAAA;AACjC,UAAoC,mCAAA,EAAA;AAAA;AAGtC,QAAA,KAAK,QAAQ,GAAI,CAAA;AAAA,UACf,OAAA,CAAQ,QAAQ,aAAa,CAAA;AAAA,UAC7B,GAAG,gBAAA,CAAiB,WAAY,CAAA,GAAA,CAAI,OAAO,CAAM,KAAA;AAC/C,YAAO,OAAA,CAAA;AAAA,WACR;AAAA,SACF,CAAE,CAAA,IAAA,CAAK,CAAC,CAAC,aAAA,EAAkB,oBAAiB,CAAM,KAAA;AACjD,UAAA,eAAA,CAAgB,MAAM;AACpB,YAAM,MAAA,OAAA,GAAU,CAAC,iBAAkB,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAC,EAAE,OAAO,CAAA;AAEzD,YAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,YAAA,yBAAA,CAA0B,CAAC,GAAQ,KAAA;AACjC,cAAI,IAAA,CAAC,IAAI,eAAiB,EAAA;AACxB,gBAAA,kBAAA,GAAqB,EAAE,QAAA,EAAU,aAAe,EAAA,OAAA,EAAS,CAAA;AAAA;AAG3D,cAAO,OAAA;AAAA,gBACL,GAAG,GAAA;AAAA,gBACH,OAAA;AAAA,gBACA,WAAa,EAAA;AAAA,eACf;AAAA,aACD,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KACH,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,MAAM,4BAAsC,YAAY;AACtD,MAAM,MAAA,iBAAA,GAAoB,MAAM,gBAAA,CAAiB,gBAAgB,CAAA;AACjE,MAAoC,mCAAA,EAAA;AACpC,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,MAAA,eAAA,CAAgB,iBAAiB,CAAA;AAAA,KACnC;AAEA,IAAM,MAAA,sBAAA,GAAyB,CAAC,KAA0B,KAAA;AACxD,MAAA,MAAM,WAAc,GAAA,KAAA,CAAM,aAAc,CAAA,OAAA,CAAQ,MAAM,CAAA;AACtD,MAAA,IAAI,gBAAgB,KAAO,EAAA;AACzB,QAAoC,mCAAA,CAAA;AAAA,UAClC,OAAS,EAAA;AAAA,SACV,CAAA;AACD,QAAA,eAAA,CAAgB,WAAW,CAAA;AAAA;AAC7B,KACF;AAEA,IAAA,MAAM,kCAAkC,MAAM;AAC5C,MAAsB,qBAAA,CAAA,CAAC,GAAQ,KAAA,CAAC,GAAG,CAAA;AAAA,KACrC;AAEA,IAAA,MAAM,YAA6B,GAAA;AAAA,MACjC,MAAQ,EAAA;AAAA,QACN,QAAU,EAAA,QAAA;AAAA,QACV,IAAM,EAAA,GAAA;AAAA,QACN,OAAS,EAAA,OAAA;AAAA,QACT,KAAO,EAAA,WAAA;AAAA,QACP,UAAA;AAAA,QACA,WAAW,MAAO,CAAA;AAAA,OACpB;AAAA,MACA,UAAY,EAAA;AAAA,QACV,QAAU,EAAA,QAAA;AAAA,QACV,IAAM,EAAA,GAAA;AAAA,QACN,OAAS,EAAA,OAAA;AAAA,QACT,KAAO,EAAA,WAAA;AAAA,QACP,UAAA;AAAA,QACA,WAAW,MAAO,CAAA,MAAA;AAAA,QAClB,IAAM,EAAA;AAAA,OACR;AAAA,MACA,KAAO,EAAA;AAAA,QACL,WAAW,eAAgB,CAAA,KAAA;AAAA,QAC3B,QAAU,EAAA,OAAA;AAAA,QACV,UAAU,CAAC,UAAA;AAAA,QACX,UAAA;AAAA,QACA,QAAA,EAAU,OAAQ,CAAA,CAAC,UAAe,KAAA;AAChC,UAAA,uBAEK,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,YAAW,UAAA,CAAA,QAAA;AAAA,4BACZ,GAAA;AAAA,cAAC,sBAAA;AAAA,cAAA;AAAA,gBACC,UAAA;AAAA,gBACA,wBAA0B,EAAA;AAAA;AAAA,aAC5B;AAAA,4BACA,GAAA;AAAA,cAAC,sBAAA;AAAA,cAAA;AAAA,gBACC,YAAA;AAAA,gBACA,UAAA;AAAA,gBACA;AAAA;AAAA;AACF,WACF,EAAA,CAAA;AAAA,SAEH;AAAA,OACH;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,WAAW,eAAgB,CAAA;AAAA,OAC7B;AAAA,MACA,UAAY,EAAA;AAAA,QACV,WAAW,eAAgB,CAAA,gBAAA;AAAA,QAC3B,QAAA,EAAU,QAAQ,MAAM;AACtB,UAAA,IAAI,yBAA2B,EAAA;AAC7B,YAAO,OAAA,yBAAA;AAAA;AACT,SACD;AAAA;AACH,KACF;AAEA,IACE,uBAAA,GAAA,CAAC,iBACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,cACC,EAAA,EAAA,QAAA,kBAAA,IAAA;AAAA,MAAC,IAAK,CAAA,SAAA;AAAA,MAAL;AAAA,QACE,GAAG,IAAA;AAAA,QACJ,KAAA;AAAA,QACA,IAAA,EAAM,qBAAqB,MAAS,GAAA,UAAA;AAAA,QACpC,QAAU,EAAA,eAAA;AAAA,QACV,OAAS,EAAA,sBAAA;AAAA,QACT,SAAW,EAAA,IAAA,CAAK,SAAW,EAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,QACpD,UAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,UAAA,EAAA,EAAW,IAAG,OAAQ,EAAA,CAAA;AAAA,0BACvB,IAAA;AAAA,YAAC,IAAK,CAAA,KAAA;AAAA,YAAL;AAAA,cACC,UAAA;AAAA,cACA,SAAA,EAAW,IAAK,CAAA,MAAA,CAAO,UAAU,CAAA;AAAA,cAEjC,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,2BAAA;AAAA,kBAAA;AAAA,oBACC,cAAc,IAAK,CAAA,YAAA;AAAA,oBACnB,KAAO,EAAA,EAAE,GAAG,KAAA,EAAO,KAAM,EAAA;AAAA,oBAEzB,8BAAC,IAAK,CAAA,KAAA,EAAL,EAAW,GAAU,EAAA,SAAA,EAAW,OAAO,KAAO,EAAA;AAAA;AAAA,iBACjD;AAAA,qCACC,IAAK,CAAA,KAAA,EAAL,EAAW,SAAA,EAAW,OAAO,eAC5B,EAAA,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,8BAAA;AAAA,oBAAA;AAAA,sBACC,WAAW,MAAO,CAAA,MAAA;AAAA,sBAClB,SAAW,EAAA,kBAAA;AAAA,sBACX,UAAA;AAAA,sBACA,OAAS,EAAA;AAAA;AAAA,mBACX;AAAA,kCACA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,QAAS,EAAA;AAAA,iBAC1B,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,mBAAA;AAAA,kBAAA;AAAA,oBACC,YAAA;AAAA,oBACA,SAAA;AAAA,oBACA;AAAA;AAAA;AACF;AAAA;AAAA,WACF;AAAA,0BACA,IAAA,CAAC,oBAAqB,EAAA,EAAA,KAAA,EAAO,YAC1B,EAAA,QAAA,EAAA;AAAA,YACC,2BAAA,oBAAA,GAAA,CAAC,oBAAkB,QAA0B,EAAA,yBAAA,EAAA,CAAA;AAAA,YAE9C,iCACC,sBAAuB,CAAA,OAAA,KAAY,eACjC,oBAAA,GAAA,CAAC,cAAY,QAA0B,EAAA,yBAAA,EAAA,CAAA;AAAA,4BAE3C,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAI,6BACR,EAAA,QAAA,kBAAA,GAAA;AAAA,cAAC,iBAAkB,CAAA,QAAA;AAAA,cAAlB;AAAA,gBACC,KAAO,EAAA;AAAA,kBACL,SAAW,EAAA,KAAA;AAAA,kBACX,kBAAkB,EAAC;AAAA,kBACnB,iBAAmB,EAAA;AAAA,oBACjB,WAAa,EAAA,KAAA;AAAA,oBACb,KAAO,EAAA,IAAA;AAAA,oBACP,YAAc,EAAA,KAAA;AAAA,oBACd,YAAc,EAAA,KAAA;AAAA,oBACd,YAAc,EAAA,KAAA;AAAA,oBACd,QAAU,EAAA,KAAA;AAAA,oBACV,OAAS,EAAA,KAAA;AAAA,oBACT,cAAgB,EAAA,KAAA;AAAA,oBAChB,eAAiB,EAAA,KAAA;AAAA,oBACjB,QAAU,EAAA,KAAA;AAAA,oBACV,aAAe,EAAA;AAAA;AACjB,iBACF;AAAA,gBAEC;AAAA;AAAA,aAEL,EAAA;AAAA,WACF,EAAA;AAAA;AAAA;AAAA,OAEJ,CACF,EAAA,CAAA;AAAA;AAGN;;;;"}
@@ -18,7 +18,13 @@ const ActionStateContextWrapper = (props) => {
18
18
  );
19
19
  setHasSucceeded(isSubmitted && isSubmitSuccessful);
20
20
  setIsStarted(isSubmitting && isAsyncSubmit.current);
21
- }, [form.formState, isAsyncSubmit.current]);
21
+ }, [
22
+ form.formState.isSubmitted,
23
+ form.formState.isSubmitting,
24
+ form.formState.isSubmitSuccessful,
25
+ form.formState.errors,
26
+ isAsyncSubmit.current
27
+ ]);
22
28
  return /* @__PURE__ */ jsx(
23
29
  ActionStateContext,
24
30
  {
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitButtonStateProvider.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.tsx"],"sourcesContent":["import type { FC, MutableRefObject, PropsWithChildren } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { ActionStateContext } from \"@/components/Action/ActionStateContext\";\nimport { useFormContext } from \"@/integrations/react-hook-form/components/context/formContext\";\n\ninterface Props extends PropsWithChildren {\n isAsyncSubmit: MutableRefObject<boolean>;\n}\n\nconst ActionStateContextWrapper: FC<Props> = (props) => {\n const { children, isAsyncSubmit } = props;\n\n const form = useFormContext().form;\n\n const [submitErrors, setSubmitErrors] = useState<unknown>(undefined);\n const [hasSucceeded, setHasSucceeded] = useState(false);\n const [isStarted, setIsStarted] = useState(false);\n\n useEffect(() => {\n /**\n * The mapping into sepearte states inside this effect is required, because\n * otherwise the reset() function of RHF does not work as expected\n * (subsequent resets not working, default values are not correctly re-used,\n * ...).\n *\n * A side note: This only happens if 'isSubmitted' and/or 'isSubmitting' are\n * extracted from the form state.\n */\n const { isSubmitted, isSubmitting, isSubmitSuccessful, errors } =\n form.formState;\n\n setSubmitErrors(\n isSubmitted && errors && Object.entries(errors).length > 0\n ? errors\n : undefined,\n );\n setHasSucceeded(isSubmitted && isSubmitSuccessful);\n setIsStarted(isSubmitting && isAsyncSubmit.current);\n }, [form.formState, isAsyncSubmit.current]);\n\n return (\n <ActionStateContext\n isStarted={isStarted}\n hasFailedWithError={submitErrors}\n hasSucceeded={hasSucceeded}\n >\n {children}\n </ActionStateContext>\n );\n};\n\nexport const SubmitButtonStateProvider: FC<Props> = (props) => {\n const { children, isAsyncSubmit } = props;\n\n return (\n <ActionStateContextWrapper isAsyncSubmit={isAsyncSubmit}>\n {children}\n </ActionStateContextWrapper>\n );\n};\n"],"names":[],"mappings":";;;;;AASA,MAAM,yBAAA,GAAuC,CAAC,KAAU,KAAA;AACtD,EAAM,MAAA,EAAE,QAAU,EAAA,aAAA,EAAkB,GAAA,KAAA;AAEpC,EAAM,MAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA;AAE9B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAkB,MAAS,CAAA;AACnE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AAUd,IAAA,MAAM,EAAE,WAAa,EAAA,YAAA,EAAc,kBAAoB,EAAA,MAAA,KACrD,IAAK,CAAA,SAAA;AAEP,IAAA,eAAA;AAAA,MACE,WAAA,IAAe,UAAU,MAAO,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,MAAA,GAAS,IACrD,MACA,GAAA;AAAA,KACN;AACA,IAAA,eAAA,CAAgB,eAAe,kBAAkB,CAAA;AACjD,IAAa,YAAA,CAAA,YAAA,IAAgB,cAAc,OAAO,CAAA;AAAA,KACjD,CAAC,IAAA,CAAK,SAAW,EAAA,aAAA,CAAc,OAAO,CAAC,CAAA;AAE1C,EACE,uBAAA,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,kBAAoB,EAAA,YAAA;AAAA,MACpB,YAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ,CAAA;AAEa,MAAA,yBAAA,GAAuC,CAAC,KAAU,KAAA;AAC7D,EAAM,MAAA,EAAE,QAAU,EAAA,aAAA,EAAkB,GAAA,KAAA;AAEpC,EACE,uBAAA,GAAA,CAAC,yBAA0B,EAAA,EAAA,aAAA,EACxB,QACH,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SubmitButtonStateProvider.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren, RefObject } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { ActionStateContext } from \"@/components/Action/ActionStateContext\";\nimport { useFormContext } from \"@/integrations/react-hook-form/components/context/formContext\";\n\ninterface Props extends PropsWithChildren {\n isAsyncSubmit: RefObject<boolean>;\n}\n\nconst ActionStateContextWrapper: FC<Props> = (props) => {\n const { children, isAsyncSubmit } = props;\n\n const form = useFormContext().form;\n\n const [submitErrors, setSubmitErrors] = useState<unknown>(undefined);\n const [hasSucceeded, setHasSucceeded] = useState(false);\n const [isStarted, setIsStarted] = useState(false);\n\n useEffect(() => {\n /**\n * The mapping into sepearte states inside this effect is required, because\n * otherwise the reset() function of RHF does not work as expected\n * (subsequent resets not working, default values are not correctly re-used,\n * ...).\n *\n * A side note: This only happens if 'isSubmitted' and/or 'isSubmitting' are\n * extracted from the form state.\n */\n const { isSubmitted, isSubmitting, isSubmitSuccessful, errors } =\n form.formState;\n\n setSubmitErrors(\n isSubmitted && errors && Object.entries(errors).length > 0\n ? errors\n : undefined,\n );\n setHasSucceeded(isSubmitted && isSubmitSuccessful);\n setIsStarted(isSubmitting && isAsyncSubmit.current);\n }, [\n form.formState.isSubmitted,\n form.formState.isSubmitting,\n form.formState.isSubmitSuccessful,\n form.formState.errors,\n isAsyncSubmit.current,\n ]);\n\n return (\n <ActionStateContext\n isStarted={isStarted}\n hasFailedWithError={submitErrors}\n hasSucceeded={hasSucceeded}\n >\n {children}\n </ActionStateContext>\n );\n};\n\nexport const SubmitButtonStateProvider: FC<Props> = (props) => {\n const { children, isAsyncSubmit } = props;\n\n return (\n <ActionStateContextWrapper isAsyncSubmit={isAsyncSubmit}>\n {children}\n </ActionStateContextWrapper>\n );\n};\n"],"names":[],"mappings":";;;;;AASA,MAAM,yBAAA,GAAuC,CAAC,KAAU,KAAA;AACtD,EAAM,MAAA,EAAE,QAAU,EAAA,aAAA,EAAkB,GAAA,KAAA;AAEpC,EAAM,MAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA;AAE9B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAkB,MAAS,CAAA;AACnE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AAUd,IAAA,MAAM,EAAE,WAAa,EAAA,YAAA,EAAc,kBAAoB,EAAA,MAAA,KACrD,IAAK,CAAA,SAAA;AAEP,IAAA,eAAA;AAAA,MACE,WAAA,IAAe,UAAU,MAAO,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,MAAA,GAAS,IACrD,MACA,GAAA;AAAA,KACN;AACA,IAAA,eAAA,CAAgB,eAAe,kBAAkB,CAAA;AACjD,IAAa,YAAA,CAAA,YAAA,IAAgB,cAAc,OAAO,CAAA;AAAA,GACjD,EAAA;AAAA,IACD,KAAK,SAAU,CAAA,WAAA;AAAA,IACf,KAAK,SAAU,CAAA,YAAA;AAAA,IACf,KAAK,SAAU,CAAA,kBAAA;AAAA,IACf,KAAK,SAAU,CAAA,MAAA;AAAA,IACf,aAAc,CAAA;AAAA,GACf,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,kBAAoB,EAAA,YAAA;AAAA,MACpB,YAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ,CAAA;AAEa,MAAA,yBAAA,GAAuC,CAAC,KAAU,KAAA;AAC7D,EAAM,MAAA,EAAE,QAAU,EAAA,aAAA,EAAkB,GAAA,KAAA;AAEpC,EACE,uBAAA,GAAA,CAAC,yBAA0B,EAAA,EAAA,aAAA,EACxB,QACH,EAAA,CAAA;AAEJ;;;;"}
@@ -3,7 +3,7 @@
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import { SubmitButtonStateProvider } from '../ActionGroupWrapper/SubmitButtonStateProvider.mjs';
5
5
  import { FormContextProvider } from '../context/formContext.mjs';
6
- import { useId, useRef } from 'react';
6
+ import { useId, useRef, useMemo } from 'react';
7
7
  import { FormProvider } from 'react-hook-form';
8
8
  import { AfterFormSubmitEffect } from '../AfterFormSubmitEffect/AfterFormSubmitEffect.mjs';
9
9
 
@@ -19,6 +19,7 @@ function Form(props) {
19
19
  const formId = useId();
20
20
  const isAsyncSubmit = useRef(false);
21
21
  const submitHandlerResultRef = useRef(null);
22
+ const FormViewComponent = useMemo(() => FormView, [formId]);
22
23
  const handleOnSubmit = (e) => {
23
24
  const { isSubmitting, isValidating } = form.control._formState;
24
25
  const formEvent = e && "nativeEvent" in e ? e : void 0;
@@ -36,7 +37,15 @@ function Form(props) {
36
37
  })(formEvent);
37
38
  };
38
39
  return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxs(FormContextProvider, { value: { form, id: formId }, children: [
39
- /* @__PURE__ */ jsx(SubmitButtonStateProvider, { isAsyncSubmit, children: /* @__PURE__ */ jsx(FormView, { ...formProps, id: formId, onSubmit: handleOnSubmit, children }) }),
40
+ /* @__PURE__ */ jsx(SubmitButtonStateProvider, { isAsyncSubmit, children: /* @__PURE__ */ jsx(
41
+ FormViewComponent,
42
+ {
43
+ ...formProps,
44
+ id: formId,
45
+ onSubmit: handleOnSubmit,
46
+ children
47
+ }
48
+ ) }),
40
49
  /* @__PURE__ */ jsx(
41
50
  AfterFormSubmitEffect,
42
51
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Form.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"sourcesContent":["import { SubmitButtonStateProvider } from \"@/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider\";\nimport { FormContextProvider } from \"@/integrations/react-hook-form/components/context/formContext\";\nimport type {\n ComponentProps,\n ComponentType,\n FormEvent,\n FormEventHandler,\n PropsWithChildren,\n} from \"react\";\nimport { useId, useRef } from \"react\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport { FormProvider as RhfFormContextProvider } from \"react-hook-form\";\nimport { AfterFormSubmitEffect } from \"../AfterFormSubmitEffect/AfterFormSubmitEffect\";\n\nexport type FormOnSubmitHandler<F extends FieldValues> = Parameters<\n UseFormReturn<F>[\"handleSubmit\"]\n>[0];\n\ntype FormComponentType = ComponentType<\n PropsWithChildren<{\n id: string;\n onSubmit?: FormEventHandler | FormOnSubmitHandler<never>;\n }>\n>;\n\nexport interface FormProps<F extends FieldValues>\n extends Omit<ComponentProps<\"form\">, \"onSubmit\">,\n PropsWithChildren {\n form: UseFormReturn<F>;\n onSubmit: FormOnSubmitHandler<F>;\n formComponent?: FormComponentType;\n}\n\nconst DefaultFormComponent: FormComponentType = (p) => <form {...p} />;\n\nexport function Form<F extends FieldValues>(props: FormProps<F>) {\n const {\n form,\n children,\n onSubmit,\n formComponent: FormView = DefaultFormComponent,\n ...formProps\n } = props;\n\n const formId = useId();\n const isAsyncSubmit = useRef(false);\n const submitHandlerResultRef = useRef<unknown>(null);\n\n const handleOnSubmit = (e?: FormEvent<HTMLFormElement> | F) => {\n const { isSubmitting, isValidating } = form.control._formState;\n const formEvent =\n e && \"nativeEvent\" in e ? (e as FormEvent<HTMLFormElement>) : undefined;\n\n formEvent?.stopPropagation();\n\n if (isSubmitting || isValidating) {\n formEvent?.preventDefault();\n return;\n }\n\n submitHandlerResultRef.current = undefined;\n\n form.handleSubmit((values) => {\n const result = onSubmit(values, formEvent);\n isAsyncSubmit.current = result instanceof Promise;\n submitHandlerResultRef.current = result;\n return result;\n })(formEvent);\n };\n\n return (\n <RhfFormContextProvider {...form}>\n <FormContextProvider value={{ form, id: formId }}>\n <SubmitButtonStateProvider isAsyncSubmit={isAsyncSubmit}>\n <FormView {...formProps} id={formId} onSubmit={handleOnSubmit}>\n {children}\n </FormView>\n </SubmitButtonStateProvider>\n <AfterFormSubmitEffect\n submitHandlerResultRef={submitHandlerResultRef}\n />\n </FormContextProvider>\n </RhfFormContextProvider>\n );\n}\n\nexport default Form;\n"],"names":["RhfFormContextProvider"],"mappings":";;;;;;;AAiCA,MAAM,uBAA0C,CAAC,CAAA,qBAAO,GAAA,CAAA,MAAA,EAAA,EAAM,GAAG,CAAG,EAAA,CAAA;AAE7D,SAAS,KAA4B,KAAqB,EAAA;AAC/D,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAe,QAAW,GAAA,oBAAA;AAAA,IAC1B,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAA,MAAM,SAAS,KAAM,EAAA;AACrB,EAAM,MAAA,aAAA,GAAgB,OAAO,KAAK,CAAA;AAClC,EAAM,MAAA,sBAAA,GAAyB,OAAgB,IAAI,CAAA;AAEnD,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAuC,KAAA;AAC7D,IAAA,MAAM,EAAE,YAAA,EAAc,YAAa,EAAA,GAAI,KAAK,OAAQ,CAAA,UAAA;AACpD,IAAA,MAAM,SACJ,GAAA,CAAA,IAAK,aAAiB,IAAA,CAAA,GAAK,CAAmC,GAAA,MAAA;AAEhE,IAAA,SAAA,EAAW,eAAgB,EAAA;AAE3B,IAAA,IAAI,gBAAgB,YAAc,EAAA;AAChC,MAAA,SAAA,EAAW,cAAe,EAAA;AAC1B,MAAA;AAAA;AAGF,IAAA,sBAAA,CAAuB,OAAU,GAAA,MAAA;AAEjC,IAAK,IAAA,CAAA,YAAA,CAAa,CAAC,MAAW,KAAA;AAC5B,MAAM,MAAA,MAAA,GAAS,QAAS,CAAA,MAAA,EAAQ,SAAS,CAAA;AACzC,MAAA,aAAA,CAAc,UAAU,MAAkB,YAAA,OAAA;AAC1C,MAAA,sBAAA,CAAuB,OAAU,GAAA,MAAA;AACjC,MAAO,OAAA,MAAA;AAAA,KACR,EAAE,SAAS,CAAA;AAAA,GACd;AAEA,EACE,uBAAA,GAAA,CAACA,YAAwB,EAAA,EAAA,GAAG,IAC1B,EAAA,QAAA,kBAAA,IAAA,CAAC,mBAAoB,EAAA,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,EAAI,EAAA,MAAA,EACtC,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,yBAAA,EAAA,EAA0B,aACzB,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAU,EAAA,EAAA,GAAG,SAAW,EAAA,EAAA,EAAI,MAAQ,EAAA,QAAA,EAAU,cAC5C,EAAA,QAAA,EACH,CACF,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC;AAAA;AAAA;AACF,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Form.mjs","sources":["../../../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"sourcesContent":["import { SubmitButtonStateProvider } from \"@/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider\";\nimport { FormContextProvider } from \"@/integrations/react-hook-form/components/context/formContext\";\nimport {\n type ComponentProps,\n type ComponentType,\n type FormEvent,\n type FormEventHandler,\n type PropsWithChildren,\n useMemo,\n} from \"react\";\nimport { useId, useRef } from \"react\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\";\nimport { FormProvider as RhfFormContextProvider } from \"react-hook-form\";\nimport { AfterFormSubmitEffect } from \"../AfterFormSubmitEffect/AfterFormSubmitEffect\";\n\nexport type FormOnSubmitHandler<F extends FieldValues> = Parameters<\n UseFormReturn<F>[\"handleSubmit\"]\n>[0];\n\ntype FormComponentType = ComponentType<\n PropsWithChildren<{\n id: string;\n onSubmit?: FormEventHandler | FormOnSubmitHandler<never>;\n }>\n>;\n\nexport interface FormProps<F extends FieldValues>\n extends Omit<ComponentProps<\"form\">, \"onSubmit\">,\n PropsWithChildren {\n form: UseFormReturn<F>;\n onSubmit: FormOnSubmitHandler<F>;\n formComponent?: FormComponentType;\n}\n\nconst DefaultFormComponent: FormComponentType = (p) => <form {...p} />;\n\nexport function Form<F extends FieldValues>(props: FormProps<F>) {\n const {\n form,\n children,\n onSubmit,\n formComponent: FormView = DefaultFormComponent,\n ...formProps\n } = props;\n\n const formId = useId();\n const isAsyncSubmit = useRef(false);\n const submitHandlerResultRef = useRef<unknown>(null);\n const FormViewComponent = useMemo(() => FormView, [formId]);\n\n const handleOnSubmit = (e?: FormEvent<HTMLFormElement> | F) => {\n const { isSubmitting, isValidating } = form.control._formState;\n const formEvent =\n e && \"nativeEvent\" in e ? (e as FormEvent<HTMLFormElement>) : undefined;\n\n formEvent?.stopPropagation();\n\n if (isSubmitting || isValidating) {\n formEvent?.preventDefault();\n return;\n }\n\n submitHandlerResultRef.current = undefined;\n\n form.handleSubmit((values) => {\n const result = onSubmit(values, formEvent);\n isAsyncSubmit.current = result instanceof Promise;\n submitHandlerResultRef.current = result;\n return result;\n })(formEvent);\n };\n\n return (\n <RhfFormContextProvider {...form}>\n <FormContextProvider value={{ form, id: formId }}>\n <SubmitButtonStateProvider isAsyncSubmit={isAsyncSubmit}>\n <FormViewComponent\n {...formProps}\n id={formId}\n onSubmit={handleOnSubmit}\n >\n {children}\n </FormViewComponent>\n </SubmitButtonStateProvider>\n <AfterFormSubmitEffect\n submitHandlerResultRef={submitHandlerResultRef}\n />\n </FormContextProvider>\n </RhfFormContextProvider>\n );\n}\n\nexport default Form;\n"],"names":["RhfFormContextProvider"],"mappings":";;;;;;;AAkCA,MAAM,uBAA0C,CAAC,CAAA,qBAAO,GAAA,CAAA,MAAA,EAAA,EAAM,GAAG,CAAG,EAAA,CAAA;AAE7D,SAAS,KAA4B,KAAqB,EAAA;AAC/D,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAe,QAAW,GAAA,oBAAA;AAAA,IAC1B,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAA,MAAM,SAAS,KAAM,EAAA;AACrB,EAAM,MAAA,aAAA,GAAgB,OAAO,KAAK,CAAA;AAClC,EAAM,MAAA,sBAAA,GAAyB,OAAgB,IAAI,CAAA;AACnD,EAAA,MAAM,oBAAoB,OAAQ,CAAA,MAAM,QAAU,EAAA,CAAC,MAAM,CAAC,CAAA;AAE1D,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAuC,KAAA;AAC7D,IAAA,MAAM,EAAE,YAAA,EAAc,YAAa,EAAA,GAAI,KAAK,OAAQ,CAAA,UAAA;AACpD,IAAA,MAAM,SACJ,GAAA,CAAA,IAAK,aAAiB,IAAA,CAAA,GAAK,CAAmC,GAAA,MAAA;AAEhE,IAAA,SAAA,EAAW,eAAgB,EAAA;AAE3B,IAAA,IAAI,gBAAgB,YAAc,EAAA;AAChC,MAAA,SAAA,EAAW,cAAe,EAAA;AAC1B,MAAA;AAAA;AAGF,IAAA,sBAAA,CAAuB,OAAU,GAAA,MAAA;AAEjC,IAAK,IAAA,CAAA,YAAA,CAAa,CAAC,MAAW,KAAA;AAC5B,MAAM,MAAA,MAAA,GAAS,QAAS,CAAA,MAAA,EAAQ,SAAS,CAAA;AACzC,MAAA,aAAA,CAAc,UAAU,MAAkB,YAAA,OAAA;AAC1C,MAAA,sBAAA,CAAuB,OAAU,GAAA,MAAA;AACjC,MAAO,OAAA,MAAA;AAAA,KACR,EAAE,SAAS,CAAA;AAAA,GACd;AAEA,EACE,uBAAA,GAAA,CAACA,YAAwB,EAAA,EAAA,GAAG,IAC1B,EAAA,QAAA,kBAAA,IAAA,CAAC,mBAAoB,EAAA,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,EAAI,EAAA,MAAA,EACtC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,6BAA0B,aACzB,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAG,SAAA;AAAA,QACJ,EAAI,EAAA,MAAA;AAAA,QACJ,QAAU,EAAA,cAAA;AAAA,QAET;AAAA;AAAA,KAEL,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC;AAAA;AAAA;AACF,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
@@ -213,7 +213,6 @@ export { DialogTrigger } from './components/src/components/OverlayTrigger/compon
213
213
  export { MenuTrigger } from './components/src/components/OverlayTrigger/components/MenuTrigger/MenuTrigger.mjs';
214
214
  export { OverlayTrigger } from './components/src/components/OverlayTrigger/OverlayTrigger.mjs';
215
215
  export { generatePasswordCreationFieldValidation } from './components/src/components/PasswordCreationField/lib/generatePasswordCreationFieldValidation.mjs';
216
- export { defaultPasswordCreationPolicy } from './components/src/components/PasswordCreationField/defaultPasswordCreationPolicy.mjs';
217
216
  export { PasswordCreationField } from './components/src/components/PasswordCreationField/PasswordCreationField.mjs';
218
217
  export { PopoverTrigger } from './components/src/components/Popover/components/PopoverTrigger/PopoverTrigger.mjs';
219
218
  export { PopoverContent } from './components/src/components/Popover/components/PopoverContent/PopoverContent.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"default.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"default.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,11 +5,16 @@ import { RuleValidationResult } from '@mittwald/password-tools-js/rules';
5
5
  import * as Aria from "react-aria-components";
6
6
  export interface PasswordCreationFieldProps extends PropsWithChildren<Omit<Aria.TextFieldProps, "children" | "value" | "defaultValue"> & Partial<Pick<Aria.FieldErrorRenderProps, "validationErrors">>>, FlowComponentProps<HTMLInputElement> {
7
7
  value?: string;
8
+ onValidationResult?: (result: {
9
+ password: string;
10
+ isValid: boolean;
11
+ }) => void;
8
12
  defaultValue?: string;
9
13
  placeholder?: string;
10
14
  validationPolicy?: Policy;
11
15
  }
12
16
  export interface ResolvedPolicyValidationResult extends Omit<PolicyValidationResult, "isValid"> {
17
+ initialValidate: boolean;
13
18
  isValid: boolean | "indeterminate";
14
19
  ruleResults: RuleValidationResult[];
15
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordCreationField.d.ts","sourceRoot":"","sources":["../../../../src/components/PasswordCreationField/PasswordCreationField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAOf,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAI9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAc9E,MAAM,WAAW,0BACf,SAAQ,iBAAiB,CACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAChE,EACD,kBAAkB,CAAC,gBAAgB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC;IAC/C,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;IACnC,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,6FA8SjC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"PasswordCreationField.d.ts","sourceRoot":"","sources":["../../../../src/components/PasswordCreationField/PasswordCreationField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,iBAAiB,EAMvB,MAAM,OAAO,CAAC;AAOf,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAI9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAY9E,MAAM,WAAW,0BACf,SAAQ,iBAAiB,CACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAChE,EACD,kBAAkB,CAAC,gBAAgB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;IACnC,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,6FAySjC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  export * from './lib/generatePasswordCreationFieldValidation';
2
- export * from './defaultPasswordCreationPolicy';
3
2
  export * from './view';
4
3
  export { type PasswordCreationFieldProps, PasswordCreationField, } from './PasswordCreationField';
5
4
  export { default } from './PasswordCreationField';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/PasswordCreationField/index.ts"],"names":[],"mappings":"AAAA,cAAc,gFAAgF,CAAC;AAC/F,cAAc,kEAAkE,CAAC;AAEjF,cAAc,QAAQ,CAAC;AAEvB,OAAO,EACL,KAAK,0BAA0B,EAC/B,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/PasswordCreationField/index.ts"],"names":[],"mappings":"AAAA,cAAc,gFAAgF,CAAC;AAC/F,cAAc,QAAQ,CAAC;AAEvB,OAAO,EACL,KAAK,0BAA0B,EAC/B,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Default.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/PasswordCreationField/stories/Default.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA0DjD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAmB5C,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,QAAQ,EAAE,KAAsC,CAAC;AAE9D,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAE7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAW/B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KA6BtB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC"}
1
+ {"version":3,"file":"Default.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/PasswordCreationField/stories/Default.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAEL,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAyDlB,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAoB5C,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,QAAQ,EAAE,KAAsC,CAAC;AAE9D,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAE7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAW/B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAmCtB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { FC, MutableRefObject, PropsWithChildren } from 'react';
1
+ import { FC, PropsWithChildren, RefObject } from 'react';
2
2
  interface Props extends PropsWithChildren {
3
- isAsyncSubmit: MutableRefObject<boolean>;
3
+ isAsyncSubmit: RefObject<boolean>;
4
4
  }
5
5
  export declare const SubmitButtonStateProvider: FC<Props>;
6
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitButtonStateProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAKrE,UAAU,KAAM,SAAQ,iBAAiB;IACvC,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC1C;AA4CD,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,KAAK,CAQ/C,CAAC"}
1
+ {"version":3,"file":"SubmitButtonStateProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/ActionGroupWrapper/SubmitButtonStateProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK9D,UAAU,KAAM,SAAQ,iBAAiB;IACvC,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CACnC;AAkDD,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,KAAK,CAQ/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIlE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,WAAW,IAAI,UAAU,CACjE,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC,CAAC,CAAC;AAEL,KAAK,iBAAiB,GAAG,aAAa,CACpC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;CAC1D,CAAC,CACH,CAAC;AAEF,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,WAAW,CAC9C,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAC9C,iBAAiB;IACnB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAID,wBAAgB,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,2CAiD9D;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../../../src/integrations/react-hook-form/components/Form/Form.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIlE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,WAAW,IAAI,UAAU,CACjE,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CACjC,CAAC,CAAC,CAAC,CAAC;AAEL,KAAK,iBAAiB,GAAG,aAAa,CACpC,iBAAiB,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;CAC1D,CAAC,CACH,CAAC;AAEF,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,WAAW,CAC9C,SAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAC9C,iBAAiB;IACnB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAID,wBAAgB,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,2CAsD9D;AAED,eAAe,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-react-components",
3
- "version": "0.2.0-alpha.355",
3
+ "version": "0.2.0-alpha.357",
4
4
  "type": "module",
5
5
  "description": "A React implementation of Flow, mittwald’s design system",
6
6
  "homepage": "https://mittwald.github.io/flow",
@@ -58,7 +58,7 @@
58
58
  "@chakra-ui/live-region": "^2.1.0",
59
59
  "@internationalized/string-compiler": "^3.2.6",
60
60
  "@mittwald/password-tools-js": "^2.1.6",
61
- "@mittwald/react-tunnel": "0.2.0-alpha.355",
61
+ "@mittwald/react-tunnel": "0.2.0-alpha.357",
62
62
  "@mittwald/react-use-promise": "^3.0.4",
63
63
  "@react-aria/form": "^3.0.18",
64
64
  "@react-aria/utils": "^3.29.1",
@@ -99,7 +99,7 @@
99
99
  "@faker-js/faker": "^9.9.0",
100
100
  "@internationalized/date": "^3.8.2",
101
101
  "@mittwald/flow-core": "",
102
- "@mittwald/flow-design-tokens": "0.2.0-alpha.355",
102
+ "@mittwald/flow-design-tokens": "0.2.0-alpha.357",
103
103
  "@mittwald/react-use-promise": "^3.0.4",
104
104
  "@mittwald/remote-dom-react": "1.2.2-mittwald.3",
105
105
  "@mittwald/typescript-config": "",
@@ -172,5 +172,5 @@
172
172
  "optional": true
173
173
  }
174
174
  },
175
- "gitHead": "7bf3810a7246de960df0353fee822c90cb04753b"
175
+ "gitHead": "4ba205bb5adab5c157c0e8c8b2b45f6a8d213d38"
176
176
  }
@@ -1,16 +0,0 @@
1
- "use client"
2
- /* */
3
- import { useLayoutEffect } from 'react';
4
-
5
- const useAbortablePromise = (asyncFn, dependencies) => {
6
- useLayoutEffect(() => {
7
- const controller = new AbortController();
8
- void asyncFn(controller.signal);
9
- return () => {
10
- controller.abort();
11
- };
12
- }, dependencies);
13
- };
14
-
15
- export { useAbortablePromise };
16
- //# sourceMappingURL=useAbortablePromise.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAbortablePromise.mjs","sources":["../../../../../../src/lib/promises/useAbortablePromise.ts"],"sourcesContent":["import { type DependencyList, useLayoutEffect } from \"react\";\n\nexport const useAbortablePromise = (\n asyncFn: (signal: AbortSignal) => Promise<void>,\n dependencies: DependencyList,\n) => {\n useLayoutEffect(() => {\n const controller = new AbortController();\n void asyncFn(controller.signal);\n return () => {\n controller.abort();\n };\n }, dependencies);\n};\n"],"names":[],"mappings":";;AAEa,MAAA,mBAAA,GAAsB,CACjC,OAAA,EACA,YACG,KAAA;AACH,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAK,KAAA,OAAA,CAAQ,WAAW,MAAM,CAAA;AAC9B,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA,KACnB;AAAA,KACC,YAAY,CAAA;AACjB;;;;"}