rn-inputforge 0.4.0 → 0.5.1
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/README.md +959 -39
- package/lib/commonjs/a11y/audit.js +72 -0
- package/lib/commonjs/a11y/audit.js.map +1 -0
- package/lib/commonjs/a11y/index.js +13 -0
- package/lib/commonjs/a11y/index.js.map +1 -0
- package/lib/commonjs/adapters/index.js +25 -0
- package/lib/commonjs/adapters/index.js.map +1 -0
- package/lib/commonjs/adapters/reactHookForm.js +107 -0
- package/lib/commonjs/adapters/reactHookForm.js.map +1 -0
- package/lib/commonjs/autofill/index.js +25 -0
- package/lib/commonjs/autofill/index.js.map +1 -0
- package/lib/commonjs/autofill/profiles.js +199 -0
- package/lib/commonjs/autofill/profiles.js.map +1 -0
- package/lib/commonjs/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js +99 -0
- package/lib/commonjs/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js.map +1 -0
- package/lib/commonjs/components/FieldFlowA11yAudit/index.js +13 -0
- package/lib/commonjs/components/FieldFlowA11yAudit/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js +104 -0
- package/lib/commonjs/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
- package/lib/commonjs/components/FieldFlowAffordance/index.js +13 -0
- package/lib/commonjs/components/FieldFlowAffordance/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowAuthActions/FieldFlowAuthActions.js +130 -0
- package/lib/commonjs/components/FieldFlowAuthActions/FieldFlowAuthActions.js.map +1 -0
- package/lib/commonjs/components/FieldFlowAuthActions/index.js +13 -0
- package/lib/commonjs/components/FieldFlowAuthActions/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowCompleteness/FieldFlowCompleteness.js +100 -0
- package/lib/commonjs/components/FieldFlowCompleteness/FieldFlowCompleteness.js.map +1 -0
- package/lib/commonjs/components/FieldFlowCompleteness/index.js +13 -0
- package/lib/commonjs/components/FieldFlowCompleteness/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js +146 -0
- package/lib/commonjs/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
- package/lib/commonjs/components/FieldFlowCreditCard/index.js +13 -0
- package/lib/commonjs/components/FieldFlowCreditCard/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +156 -0
- package/lib/commonjs/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
- package/lib/commonjs/components/FieldFlowDraftBanner/index.js +13 -0
- package/lib/commonjs/components/FieldFlowDraftBanner/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowFormHeader/FieldFlowFormHeader.js +102 -0
- package/lib/commonjs/components/FieldFlowFormHeader/FieldFlowFormHeader.js.map +1 -0
- package/lib/commonjs/components/FieldFlowFormHeader/index.js +13 -0
- package/lib/commonjs/components/FieldFlowFormHeader/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInfoTip/FieldFlowInfoTip.js +121 -0
- package/lib/commonjs/components/FieldFlowInfoTip/FieldFlowInfoTip.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInfoTip/index.js +13 -0
- package/lib/commonjs/components/FieldFlowInfoTip/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js +142 -0
- package/lib/commonjs/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInlineAlert/index.js +13 -0
- package/lib/commonjs/components/FieldFlowInlineAlert/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js +179 -53
- package/lib/commonjs/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
- package/lib/commonjs/components/FieldFlowInput/styles.js +60 -8
- package/lib/commonjs/components/FieldFlowInput/styles.js.map +1 -1
- package/lib/commonjs/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js +137 -0
- package/lib/commonjs/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js.map +1 -0
- package/lib/commonjs/components/FieldFlowKeyboardToolbar/index.js +19 -0
- package/lib/commonjs/components/FieldFlowKeyboardToolbar/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +136 -0
- package/lib/commonjs/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
- package/lib/commonjs/components/FieldFlowNumberStepper/index.js +13 -0
- package/lib/commonjs/components/FieldFlowNumberStepper/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +122 -0
- package/lib/commonjs/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
- package/lib/commonjs/components/FieldFlowPasswordStrength/index.js +13 -0
- package/lib/commonjs/components/FieldFlowPasswordStrength/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js +263 -0
- package/lib/commonjs/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
- package/lib/commonjs/components/FieldFlowPhone/index.js +13 -0
- package/lib/commonjs/components/FieldFlowPhone/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js +106 -0
- package/lib/commonjs/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
- package/lib/commonjs/components/FieldFlowRating/index.js +13 -0
- package/lib/commonjs/components/FieldFlowRating/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js +141 -0
- package/lib/commonjs/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSection/index.js +13 -0
- package/lib/commonjs/components/FieldFlowSection/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js +195 -0
- package/lib/commonjs/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSegmented/index.js +13 -0
- package/lib/commonjs/components/FieldFlowSegmented/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js +200 -0
- package/lib/commonjs/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSignature/index.js +13 -0
- package/lib/commonjs/components/FieldFlowSignature/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSkeleton/FieldFlowSkeleton.js +101 -0
- package/lib/commonjs/components/FieldFlowSkeleton/FieldFlowSkeleton.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSkeleton/index.js +13 -0
- package/lib/commonjs/components/FieldFlowSkeleton/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js +178 -0
- package/lib/commonjs/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
- package/lib/commonjs/components/FieldFlowSlider/index.js +13 -0
- package/lib/commonjs/components/FieldFlowSlider/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js +166 -0
- package/lib/commonjs/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
- package/lib/commonjs/components/FieldFlowStepper/index.js +13 -0
- package/lib/commonjs/components/FieldFlowStepper/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js +240 -0
- package/lib/commonjs/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
- package/lib/commonjs/components/FieldFlowTags/index.js +13 -0
- package/lib/commonjs/components/FieldFlowTags/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js +227 -0
- package/lib/commonjs/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
- package/lib/commonjs/components/FieldFlowTypeahead/index.js +13 -0
- package/lib/commonjs/components/FieldFlowTypeahead/index.js.map +1 -0
- package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js +191 -0
- package/lib/commonjs/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
- package/lib/commonjs/components/FieldFlowUpload/index.js +13 -0
- package/lib/commonjs/components/FieldFlowUpload/index.js.map +1 -0
- package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +6 -4
- package/lib/commonjs/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -1
- package/lib/commonjs/hooks/index.js +56 -0
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/useFieldFlowArray.js +110 -0
- package/lib/commonjs/hooks/useFieldFlowArray.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowCompleteness.js +46 -0
- package/lib/commonjs/hooks/useFieldFlowCompleteness.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js +53 -0
- package/lib/commonjs/hooks/useFieldFlowDirtyGuard.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowDraft.js +168 -0
- package/lib/commonjs/hooks/useFieldFlowDraft.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowForm.js +224 -30
- package/lib/commonjs/hooks/useFieldFlowForm.js.map +1 -1
- package/lib/commonjs/hooks/useFieldFlowSteps.js +77 -0
- package/lib/commonjs/hooks/useFieldFlowSteps.js.map +1 -0
- package/lib/commonjs/hooks/useFieldFlowSubmitQueue.js +145 -0
- package/lib/commonjs/hooks/useFieldFlowSubmitQueue.js.map +1 -0
- package/lib/commonjs/hooks/useFormIntelligence.js +130 -0
- package/lib/commonjs/hooks/useFormIntelligence.js.map +1 -0
- package/lib/commonjs/hooks/useKeyboardManager.js +15 -0
- package/lib/commonjs/hooks/useKeyboardManager.js.map +1 -1
- package/lib/commonjs/hooks/useSmartPaste.js +27 -0
- package/lib/commonjs/hooks/useSmartPaste.js.map +1 -0
- package/lib/commonjs/i18n/index.js +25 -0
- package/lib/commonjs/i18n/index.js.map +1 -0
- package/lib/commonjs/i18n/messages.js +88 -0
- package/lib/commonjs/i18n/messages.js.map +1 -0
- package/lib/commonjs/index.js +466 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/intelligence/formAccessibility.js +79 -0
- package/lib/commonjs/intelligence/formAccessibility.js.map +1 -0
- package/lib/commonjs/intelligence/index.js +31 -0
- package/lib/commonjs/intelligence/index.js.map +1 -0
- package/lib/commonjs/intelligence/types.js +2 -0
- package/lib/commonjs/intelligence/types.js.map +1 -0
- package/lib/commonjs/motion/index.js +20 -0
- package/lib/commonjs/motion/index.js.map +1 -0
- package/lib/commonjs/motion/useFieldMotion.js +111 -0
- package/lib/commonjs/motion/useFieldMotion.js.map +1 -0
- package/lib/commonjs/motion/useReducedMotion.js +32 -0
- package/lib/commonjs/motion/useReducedMotion.js.map +1 -0
- package/lib/commonjs/paste/index.js +19 -0
- package/lib/commonjs/paste/index.js.map +1 -0
- package/lib/commonjs/paste/smartPaste.js +113 -0
- package/lib/commonjs/paste/smartPaste.js.map +1 -0
- package/lib/commonjs/schema/FieldFlowSchemaForm.js +219 -0
- package/lib/commonjs/schema/FieldFlowSchemaForm.js.map +1 -0
- package/lib/commonjs/schema/index.js +13 -0
- package/lib/commonjs/schema/index.js.map +1 -0
- package/lib/commonjs/schema/types.js +6 -0
- package/lib/commonjs/schema/types.js.map +1 -0
- package/lib/commonjs/theme/ThemeProvider.js +65 -4
- package/lib/commonjs/theme/ThemeProvider.js.map +1 -1
- package/lib/commonjs/theme/appearance.js +93 -0
- package/lib/commonjs/theme/appearance.js.map +1 -0
- package/lib/commonjs/theme/defaultTheme.js +17 -2
- package/lib/commonjs/theme/defaultTheme.js.map +1 -1
- package/lib/commonjs/theme/index.js +32 -0
- package/lib/commonjs/theme/index.js.map +1 -1
- package/lib/commonjs/theme/presets.js +142 -0
- package/lib/commonjs/theme/presets.js.map +1 -0
- package/lib/commonjs/types/globals.d.js +2 -0
- package/lib/commonjs/types/globals.d.js.map +1 -0
- package/lib/commonjs/utils/affordance.js +151 -0
- package/lib/commonjs/utils/affordance.js.map +1 -0
- package/lib/commonjs/utils/passwordStrength.js +79 -0
- package/lib/commonjs/utils/passwordStrength.js.map +1 -0
- package/lib/commonjs/utils/phoneCountries.js +119 -0
- package/lib/commonjs/utils/phoneCountries.js.map +1 -0
- package/lib/commonjs/validation/validators.js +10 -7
- package/lib/commonjs/validation/validators.js.map +1 -1
- package/lib/module/a11y/audit.js +68 -0
- package/lib/module/a11y/audit.js.map +1 -0
- package/lib/module/a11y/index.js +4 -0
- package/lib/module/a11y/index.js.map +1 -0
- package/lib/module/adapters/index.js +4 -0
- package/lib/module/adapters/index.js.map +1 -0
- package/lib/module/adapters/reactHookForm.js +100 -0
- package/lib/module/adapters/reactHookForm.js.map +1 -0
- package/lib/module/autofill/index.js +4 -0
- package/lib/module/autofill/index.js.map +1 -0
- package/lib/module/autofill/profiles.js +193 -0
- package/lib/module/autofill/profiles.js.map +1 -0
- package/lib/module/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js +94 -0
- package/lib/module/components/FieldFlowA11yAudit/FieldFlowA11yAudit.js.map +1 -0
- package/lib/module/components/FieldFlowA11yAudit/index.js +4 -0
- package/lib/module/components/FieldFlowA11yAudit/index.js.map +1 -0
- package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js +99 -0
- package/lib/module/components/FieldFlowAffordance/FieldFlowAffordance.js.map +1 -0
- package/lib/module/components/FieldFlowAffordance/index.js +4 -0
- package/lib/module/components/FieldFlowAffordance/index.js.map +1 -0
- package/lib/module/components/FieldFlowAuthActions/FieldFlowAuthActions.js +125 -0
- package/lib/module/components/FieldFlowAuthActions/FieldFlowAuthActions.js.map +1 -0
- package/lib/module/components/FieldFlowAuthActions/index.js +4 -0
- package/lib/module/components/FieldFlowAuthActions/index.js.map +1 -0
- package/lib/module/components/FieldFlowCompleteness/FieldFlowCompleteness.js +95 -0
- package/lib/module/components/FieldFlowCompleteness/FieldFlowCompleteness.js.map +1 -0
- package/lib/module/components/FieldFlowCompleteness/index.js +4 -0
- package/lib/module/components/FieldFlowCompleteness/index.js.map +1 -0
- package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js +141 -0
- package/lib/module/components/FieldFlowCreditCard/FieldFlowCreditCard.js.map +1 -0
- package/lib/module/components/FieldFlowCreditCard/index.js +4 -0
- package/lib/module/components/FieldFlowCreditCard/index.js.map +1 -0
- package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js +151 -0
- package/lib/module/components/FieldFlowDraftBanner/FieldFlowDraftBanner.js.map +1 -0
- package/lib/module/components/FieldFlowDraftBanner/index.js +4 -0
- package/lib/module/components/FieldFlowDraftBanner/index.js.map +1 -0
- package/lib/module/components/FieldFlowFormHeader/FieldFlowFormHeader.js +97 -0
- package/lib/module/components/FieldFlowFormHeader/FieldFlowFormHeader.js.map +1 -0
- package/lib/module/components/FieldFlowFormHeader/index.js +4 -0
- package/lib/module/components/FieldFlowFormHeader/index.js.map +1 -0
- package/lib/module/components/FieldFlowInfoTip/FieldFlowInfoTip.js +116 -0
- package/lib/module/components/FieldFlowInfoTip/FieldFlowInfoTip.js.map +1 -0
- package/lib/module/components/FieldFlowInfoTip/index.js +4 -0
- package/lib/module/components/FieldFlowInfoTip/index.js.map +1 -0
- package/lib/module/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js +137 -0
- package/lib/module/components/FieldFlowInlineAlert/FieldFlowInlineAlert.js.map +1 -0
- package/lib/module/components/FieldFlowInlineAlert/index.js +4 -0
- package/lib/module/components/FieldFlowInlineAlert/index.js.map +1 -0
- package/lib/module/components/FieldFlowInput/FieldFlowInput.js +180 -54
- package/lib/module/components/FieldFlowInput/FieldFlowInput.js.map +1 -1
- package/lib/module/components/FieldFlowInput/styles.js +60 -8
- package/lib/module/components/FieldFlowInput/styles.js.map +1 -1
- package/lib/module/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js +131 -0
- package/lib/module/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.js.map +1 -0
- package/lib/module/components/FieldFlowKeyboardToolbar/index.js +4 -0
- package/lib/module/components/FieldFlowKeyboardToolbar/index.js.map +1 -0
- package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js +131 -0
- package/lib/module/components/FieldFlowNumberStepper/FieldFlowNumberStepper.js.map +1 -0
- package/lib/module/components/FieldFlowNumberStepper/index.js +4 -0
- package/lib/module/components/FieldFlowNumberStepper/index.js.map +1 -0
- package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js +117 -0
- package/lib/module/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.js.map +1 -0
- package/lib/module/components/FieldFlowPasswordStrength/index.js +4 -0
- package/lib/module/components/FieldFlowPasswordStrength/index.js.map +1 -0
- package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js +258 -0
- package/lib/module/components/FieldFlowPhone/FieldFlowPhone.js.map +1 -0
- package/lib/module/components/FieldFlowPhone/index.js +4 -0
- package/lib/module/components/FieldFlowPhone/index.js.map +1 -0
- package/lib/module/components/FieldFlowRating/FieldFlowRating.js +101 -0
- package/lib/module/components/FieldFlowRating/FieldFlowRating.js.map +1 -0
- package/lib/module/components/FieldFlowRating/index.js +4 -0
- package/lib/module/components/FieldFlowRating/index.js.map +1 -0
- package/lib/module/components/FieldFlowSection/FieldFlowSection.js +136 -0
- package/lib/module/components/FieldFlowSection/FieldFlowSection.js.map +1 -0
- package/lib/module/components/FieldFlowSection/index.js +4 -0
- package/lib/module/components/FieldFlowSection/index.js.map +1 -0
- package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js +190 -0
- package/lib/module/components/FieldFlowSegmented/FieldFlowSegmented.js.map +1 -0
- package/lib/module/components/FieldFlowSegmented/index.js +4 -0
- package/lib/module/components/FieldFlowSegmented/index.js.map +1 -0
- package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js +195 -0
- package/lib/module/components/FieldFlowSignature/FieldFlowSignature.js.map +1 -0
- package/lib/module/components/FieldFlowSignature/index.js +4 -0
- package/lib/module/components/FieldFlowSignature/index.js.map +1 -0
- package/lib/module/components/FieldFlowSkeleton/FieldFlowSkeleton.js +96 -0
- package/lib/module/components/FieldFlowSkeleton/FieldFlowSkeleton.js.map +1 -0
- package/lib/module/components/FieldFlowSkeleton/index.js +4 -0
- package/lib/module/components/FieldFlowSkeleton/index.js.map +1 -0
- package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js +173 -0
- package/lib/module/components/FieldFlowSlider/FieldFlowSlider.js.map +1 -0
- package/lib/module/components/FieldFlowSlider/index.js +4 -0
- package/lib/module/components/FieldFlowSlider/index.js.map +1 -0
- package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js +161 -0
- package/lib/module/components/FieldFlowStepper/FieldFlowStepper.js.map +1 -0
- package/lib/module/components/FieldFlowStepper/index.js +4 -0
- package/lib/module/components/FieldFlowStepper/index.js.map +1 -0
- package/lib/module/components/FieldFlowTags/FieldFlowTags.js +235 -0
- package/lib/module/components/FieldFlowTags/FieldFlowTags.js.map +1 -0
- package/lib/module/components/FieldFlowTags/index.js +4 -0
- package/lib/module/components/FieldFlowTags/index.js.map +1 -0
- package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js +222 -0
- package/lib/module/components/FieldFlowTypeahead/FieldFlowTypeahead.js.map +1 -0
- package/lib/module/components/FieldFlowTypeahead/index.js +4 -0
- package/lib/module/components/FieldFlowTypeahead/index.js.map +1 -0
- package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js +186 -0
- package/lib/module/components/FieldFlowUpload/FieldFlowUpload.js.map +1 -0
- package/lib/module/components/FieldFlowUpload/index.js +4 -0
- package/lib/module/components/FieldFlowUpload/index.js.map +1 -0
- package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js +5 -3
- package/lib/module/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.js.map +1 -1
- package/lib/module/hooks/index.js +8 -0
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/useFieldFlowArray.js +106 -0
- package/lib/module/hooks/useFieldFlowArray.js.map +1 -0
- package/lib/module/hooks/useFieldFlowCompleteness.js +42 -0
- package/lib/module/hooks/useFieldFlowCompleteness.js.map +1 -0
- package/lib/module/hooks/useFieldFlowDirtyGuard.js +49 -0
- package/lib/module/hooks/useFieldFlowDirtyGuard.js.map +1 -0
- package/lib/module/hooks/useFieldFlowDraft.js +165 -0
- package/lib/module/hooks/useFieldFlowDraft.js.map +1 -0
- package/lib/module/hooks/useFieldFlowForm.js +224 -30
- package/lib/module/hooks/useFieldFlowForm.js.map +1 -1
- package/lib/module/hooks/useFieldFlowSteps.js +73 -0
- package/lib/module/hooks/useFieldFlowSteps.js.map +1 -0
- package/lib/module/hooks/useFieldFlowSubmitQueue.js +141 -0
- package/lib/module/hooks/useFieldFlowSubmitQueue.js.map +1 -0
- package/lib/module/hooks/useFormIntelligence.js +126 -0
- package/lib/module/hooks/useFormIntelligence.js.map +1 -0
- package/lib/module/hooks/useKeyboardManager.js +15 -0
- package/lib/module/hooks/useKeyboardManager.js.map +1 -1
- package/lib/module/hooks/useSmartPaste.js +23 -0
- package/lib/module/hooks/useSmartPaste.js.map +1 -0
- package/lib/module/i18n/index.js +4 -0
- package/lib/module/i18n/index.js.map +1 -0
- package/lib/module/i18n/messages.js +82 -0
- package/lib/module/i18n/messages.js.map +1 -0
- package/lib/module/index.js +46 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/intelligence/formAccessibility.js +72 -0
- package/lib/module/intelligence/formAccessibility.js.map +1 -0
- package/lib/module/intelligence/index.js +4 -0
- package/lib/module/intelligence/index.js.map +1 -0
- package/lib/module/intelligence/types.js +2 -0
- package/lib/module/intelligence/types.js.map +1 -0
- package/lib/module/motion/index.js +5 -0
- package/lib/module/motion/index.js.map +1 -0
- package/lib/module/motion/useFieldMotion.js +107 -0
- package/lib/module/motion/useFieldMotion.js.map +1 -0
- package/lib/module/motion/useReducedMotion.js +29 -0
- package/lib/module/motion/useReducedMotion.js.map +1 -0
- package/lib/module/paste/index.js +4 -0
- package/lib/module/paste/index.js.map +1 -0
- package/lib/module/paste/smartPaste.js +108 -0
- package/lib/module/paste/smartPaste.js.map +1 -0
- package/lib/module/schema/FieldFlowSchemaForm.js +214 -0
- package/lib/module/schema/FieldFlowSchemaForm.js.map +1 -0
- package/lib/module/schema/index.js +4 -0
- package/lib/module/schema/index.js.map +1 -0
- package/lib/module/schema/types.js +4 -0
- package/lib/module/schema/types.js.map +1 -0
- package/lib/module/theme/ThemeProvider.js +66 -5
- package/lib/module/theme/ThemeProvider.js.map +1 -1
- package/lib/module/theme/appearance.js +87 -0
- package/lib/module/theme/appearance.js.map +1 -0
- package/lib/module/theme/defaultTheme.js +17 -2
- package/lib/module/theme/defaultTheme.js.map +1 -1
- package/lib/module/theme/index.js +2 -0
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/presets.js +138 -0
- package/lib/module/theme/presets.js.map +1 -0
- package/lib/module/types/globals.d.js +2 -0
- package/lib/module/types/globals.d.js.map +1 -0
- package/lib/module/utils/affordance.js +140 -0
- package/lib/module/utils/affordance.js.map +1 -0
- package/lib/module/utils/passwordStrength.js +74 -0
- package/lib/module/utils/passwordStrength.js.map +1 -0
- package/lib/module/utils/phoneCountries.js +113 -0
- package/lib/module/utils/phoneCountries.js.map +1 -0
- package/lib/module/validation/validators.js +10 -7
- package/lib/module/validation/validators.js.map +1 -1
- package/lib/typescript/a11y/audit.d.ts +32 -0
- package/lib/typescript/a11y/audit.d.ts.map +1 -0
- package/lib/typescript/a11y/index.d.ts +3 -0
- package/lib/typescript/a11y/index.d.ts.map +1 -0
- package/lib/typescript/adapters/index.d.ts +3 -0
- package/lib/typescript/adapters/index.d.ts.map +1 -0
- package/lib/typescript/adapters/reactHookForm.d.ts +56 -0
- package/lib/typescript/adapters/reactHookForm.d.ts.map +1 -0
- package/lib/typescript/autofill/index.d.ts +3 -0
- package/lib/typescript/autofill/index.d.ts.map +1 -0
- package/lib/typescript/autofill/profiles.d.ts +48 -0
- package/lib/typescript/autofill/profiles.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowA11yAudit/FieldFlowA11yAudit.d.ts +21 -0
- package/lib/typescript/components/FieldFlowA11yAudit/FieldFlowA11yAudit.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowA11yAudit/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowA11yAudit/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts +29 -0
- package/lib/typescript/components/FieldFlowAffordance/FieldFlowAffordance.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowAffordance/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowAffordance/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowAuthActions/FieldFlowAuthActions.d.ts +29 -0
- package/lib/typescript/components/FieldFlowAuthActions/FieldFlowAuthActions.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowAuthActions/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowAuthActions/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowCompleteness/FieldFlowCompleteness.d.ts +25 -0
- package/lib/typescript/components/FieldFlowCompleteness/FieldFlowCompleteness.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowCompleteness/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowCompleteness/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts +27 -0
- package/lib/typescript/components/FieldFlowCreditCard/FieldFlowCreditCard.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowCreditCard/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowCreditCard/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts +24 -0
- package/lib/typescript/components/FieldFlowDraftBanner/FieldFlowDraftBanner.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowDraftBanner/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowFormHeader/FieldFlowFormHeader.d.ts +23 -0
- package/lib/typescript/components/FieldFlowFormHeader/FieldFlowFormHeader.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowFormHeader/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowFormHeader/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInfoTip/FieldFlowInfoTip.d.ts +19 -0
- package/lib/typescript/components/FieldFlowInfoTip/FieldFlowInfoTip.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInfoTip/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowInfoTip/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInlineAlert/FieldFlowInlineAlert.d.ts +22 -0
- package/lib/typescript/components/FieldFlowInlineAlert/FieldFlowInlineAlert.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInlineAlert/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowInlineAlert/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowInput/FieldFlowInput.d.ts.map +1 -1
- package/lib/typescript/components/FieldFlowInput/styles.d.ts +52 -1
- package/lib/typescript/components/FieldFlowInput/styles.d.ts.map +1 -1
- package/lib/typescript/components/FieldFlowInput/types.d.ts +50 -0
- package/lib/typescript/components/FieldFlowInput/types.d.ts.map +1 -1
- package/lib/typescript/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.d.ts +30 -0
- package/lib/typescript/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowKeyboardToolbar/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowKeyboardToolbar/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts +34 -0
- package/lib/typescript/components/FieldFlowNumberStepper/FieldFlowNumberStepper.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowNumberStepper/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts +26 -0
- package/lib/typescript/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowPasswordStrength/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts +40 -0
- package/lib/typescript/components/FieldFlowPhone/FieldFlowPhone.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowPhone/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowPhone/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts +30 -0
- package/lib/typescript/components/FieldFlowRating/FieldFlowRating.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowRating/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowRating/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts +35 -0
- package/lib/typescript/components/FieldFlowSection/FieldFlowSection.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSection/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowSection/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts +28 -0
- package/lib/typescript/components/FieldFlowSegmented/FieldFlowSegmented.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSegmented/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowSegmented/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts +41 -0
- package/lib/typescript/components/FieldFlowSignature/FieldFlowSignature.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSignature/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowSignature/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSkeleton/FieldFlowSkeleton.d.ts +21 -0
- package/lib/typescript/components/FieldFlowSkeleton/FieldFlowSkeleton.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSkeleton/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowSkeleton/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts +30 -0
- package/lib/typescript/components/FieldFlowSlider/FieldFlowSlider.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowSlider/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowSlider/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts +31 -0
- package/lib/typescript/components/FieldFlowStepper/FieldFlowStepper.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowStepper/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowStepper/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts +41 -0
- package/lib/typescript/components/FieldFlowTags/FieldFlowTags.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowTags/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowTags/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts +43 -0
- package/lib/typescript/components/FieldFlowTypeahead/FieldFlowTypeahead.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowTypeahead/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowTypeahead/index.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts +52 -0
- package/lib/typescript/components/FieldFlowUpload/FieldFlowUpload.d.ts.map +1 -0
- package/lib/typescript/components/FieldFlowUpload/index.d.ts +3 -0
- package/lib/typescript/components/FieldFlowUpload/index.d.ts.map +1 -0
- package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts +3 -2
- package/lib/typescript/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.d.ts.map +1 -1
- package/lib/typescript/hooks/index.d.ts +17 -1
- package/lib/typescript/hooks/index.d.ts.map +1 -1
- package/lib/typescript/hooks/useFieldFlowArray.d.ts +54 -0
- package/lib/typescript/hooks/useFieldFlowArray.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowCompleteness.d.ts +28 -0
- package/lib/typescript/hooks/useFieldFlowCompleteness.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts +26 -0
- package/lib/typescript/hooks/useFieldFlowDirtyGuard.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowDraft.d.ts +64 -0
- package/lib/typescript/hooks/useFieldFlowDraft.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowForm.d.ts +80 -2
- package/lib/typescript/hooks/useFieldFlowForm.d.ts.map +1 -1
- package/lib/typescript/hooks/useFieldFlowSteps.d.ts +42 -0
- package/lib/typescript/hooks/useFieldFlowSteps.d.ts.map +1 -0
- package/lib/typescript/hooks/useFieldFlowSubmitQueue.d.ts +45 -0
- package/lib/typescript/hooks/useFieldFlowSubmitQueue.d.ts.map +1 -0
- package/lib/typescript/hooks/useFormIntelligence.d.ts +23 -0
- package/lib/typescript/hooks/useFormIntelligence.d.ts.map +1 -0
- package/lib/typescript/hooks/useKeyboardManager.d.ts +6 -0
- package/lib/typescript/hooks/useKeyboardManager.d.ts.map +1 -1
- package/lib/typescript/hooks/useSmartPaste.d.ts +14 -0
- package/lib/typescript/hooks/useSmartPaste.d.ts.map +1 -0
- package/lib/typescript/i18n/index.d.ts +3 -0
- package/lib/typescript/i18n/index.d.ts.map +1 -0
- package/lib/typescript/i18n/messages.d.ts +16 -0
- package/lib/typescript/i18n/messages.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +73 -5
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/intelligence/formAccessibility.d.ts +21 -0
- package/lib/typescript/intelligence/formAccessibility.d.ts.map +1 -0
- package/lib/typescript/intelligence/index.d.ts +4 -0
- package/lib/typescript/intelligence/index.d.ts.map +1 -0
- package/lib/typescript/intelligence/types.d.ts +36 -0
- package/lib/typescript/intelligence/types.d.ts.map +1 -0
- package/lib/typescript/motion/index.d.ts +4 -0
- package/lib/typescript/motion/index.d.ts.map +1 -0
- package/lib/typescript/motion/useFieldMotion.d.ts +31 -0
- package/lib/typescript/motion/useFieldMotion.d.ts.map +1 -0
- package/lib/typescript/motion/useReducedMotion.d.ts +5 -0
- package/lib/typescript/motion/useReducedMotion.d.ts.map +1 -0
- package/lib/typescript/paste/index.d.ts +3 -0
- package/lib/typescript/paste/index.d.ts.map +1 -0
- package/lib/typescript/paste/smartPaste.d.ts +32 -0
- package/lib/typescript/paste/smartPaste.d.ts.map +1 -0
- package/lib/typescript/schema/FieldFlowSchemaForm.d.ts +28 -0
- package/lib/typescript/schema/FieldFlowSchemaForm.d.ts.map +1 -0
- package/lib/typescript/schema/index.d.ts +4 -0
- package/lib/typescript/schema/index.d.ts.map +1 -0
- package/lib/typescript/schema/types.d.ts +43 -0
- package/lib/typescript/schema/types.d.ts.map +1 -0
- package/lib/typescript/theme/ThemeProvider.d.ts +18 -4
- package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/theme/appearance.d.ts +19 -0
- package/lib/typescript/theme/appearance.d.ts.map +1 -0
- package/lib/typescript/theme/defaultTheme.d.ts.map +1 -1
- package/lib/typescript/theme/index.d.ts +3 -0
- package/lib/typescript/theme/index.d.ts.map +1 -1
- package/lib/typescript/theme/presets.d.ts +134 -0
- package/lib/typescript/theme/presets.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +26 -0
- package/lib/typescript/types/index.d.ts.map +1 -1
- package/lib/typescript/utils/affordance.d.ts +36 -0
- package/lib/typescript/utils/affordance.d.ts.map +1 -0
- package/lib/typescript/utils/passwordStrength.d.ts +26 -0
- package/lib/typescript/utils/passwordStrength.d.ts.map +1 -0
- package/lib/typescript/utils/phoneCountries.d.ts +12 -0
- package/lib/typescript/utils/phoneCountries.d.ts.map +1 -0
- package/lib/typescript/validation/validators.d.ts +3 -1
- package/lib/typescript/validation/validators.d.ts.map +1 -1
- package/package.json +19 -2
- package/src/a11y/audit.ts +99 -0
- package/src/a11y/index.ts +7 -0
- package/src/adapters/index.ts +9 -0
- package/src/adapters/reactHookForm.tsx +152 -0
- package/src/autofill/index.ts +10 -0
- package/src/autofill/profiles.ts +224 -0
- package/src/components/FieldFlowA11yAudit/FieldFlowA11yAudit.tsx +112 -0
- package/src/components/FieldFlowA11yAudit/index.ts +2 -0
- package/src/components/FieldFlowAffordance/FieldFlowAffordance.tsx +143 -0
- package/src/components/FieldFlowAffordance/index.ts +2 -0
- package/src/components/FieldFlowAuthActions/FieldFlowAuthActions.tsx +146 -0
- package/src/components/FieldFlowAuthActions/index.ts +6 -0
- package/src/components/FieldFlowCompleteness/FieldFlowCompleteness.tsx +109 -0
- package/src/components/FieldFlowCompleteness/index.ts +2 -0
- package/src/components/FieldFlowCreditCard/FieldFlowCreditCard.tsx +152 -0
- package/src/components/FieldFlowCreditCard/index.ts +2 -0
- package/src/components/FieldFlowDraftBanner/FieldFlowDraftBanner.tsx +169 -0
- package/src/components/FieldFlowDraftBanner/index.ts +2 -0
- package/src/components/FieldFlowFormHeader/FieldFlowFormHeader.tsx +106 -0
- package/src/components/FieldFlowFormHeader/index.ts +2 -0
- package/src/components/FieldFlowInfoTip/FieldFlowInfoTip.tsx +120 -0
- package/src/components/FieldFlowInfoTip/index.ts +2 -0
- package/src/components/FieldFlowInlineAlert/FieldFlowInlineAlert.tsx +134 -0
- package/src/components/FieldFlowInlineAlert/index.ts +2 -0
- package/src/components/FieldFlowInput/FieldFlowInput.tsx +240 -61
- package/src/components/FieldFlowInput/styles.ts +69 -11
- package/src/components/FieldFlowInput/types.ts +54 -0
- package/src/components/FieldFlowKeyboardToolbar/FieldFlowKeyboardToolbar.tsx +150 -0
- package/src/components/FieldFlowKeyboardToolbar/index.ts +5 -0
- package/src/components/FieldFlowNumberStepper/FieldFlowNumberStepper.tsx +156 -0
- package/src/components/FieldFlowNumberStepper/index.ts +2 -0
- package/src/components/FieldFlowPasswordStrength/FieldFlowPasswordStrength.tsx +148 -0
- package/src/components/FieldFlowPasswordStrength/index.ts +2 -0
- package/src/components/FieldFlowPhone/FieldFlowPhone.tsx +298 -0
- package/src/components/FieldFlowPhone/index.ts +2 -0
- package/src/components/FieldFlowRating/FieldFlowRating.tsx +121 -0
- package/src/components/FieldFlowRating/index.ts +2 -0
- package/src/components/FieldFlowSection/FieldFlowSection.tsx +176 -0
- package/src/components/FieldFlowSection/index.ts +2 -0
- package/src/components/FieldFlowSegmented/FieldFlowSegmented.tsx +248 -0
- package/src/components/FieldFlowSegmented/index.ts +2 -0
- package/src/components/FieldFlowSignature/FieldFlowSignature.tsx +241 -0
- package/src/components/FieldFlowSignature/index.ts +7 -0
- package/src/components/FieldFlowSkeleton/FieldFlowSkeleton.tsx +105 -0
- package/src/components/FieldFlowSkeleton/index.ts +2 -0
- package/src/components/FieldFlowSlider/FieldFlowSlider.tsx +190 -0
- package/src/components/FieldFlowSlider/index.ts +2 -0
- package/src/components/FieldFlowStepper/FieldFlowStepper.tsx +190 -0
- package/src/components/FieldFlowStepper/index.ts +2 -0
- package/src/components/FieldFlowTags/FieldFlowTags.tsx +319 -0
- package/src/components/FieldFlowTags/index.ts +2 -0
- package/src/components/FieldFlowTypeahead/FieldFlowTypeahead.tsx +261 -0
- package/src/components/FieldFlowTypeahead/index.ts +2 -0
- package/src/components/FieldFlowUpload/FieldFlowUpload.tsx +226 -0
- package/src/components/FieldFlowUpload/index.ts +6 -0
- package/src/components/KeyboardAwareFormWrapper/KeyboardAwareFormWrapper.tsx +8 -4
- package/src/hooks/index.ts +48 -0
- package/src/hooks/useFieldFlowArray.ts +153 -0
- package/src/hooks/useFieldFlowCompleteness.ts +69 -0
- package/src/hooks/useFieldFlowDirtyGuard.ts +70 -0
- package/src/hooks/useFieldFlowDraft.ts +221 -0
- package/src/hooks/useFieldFlowForm.ts +357 -28
- package/src/hooks/useFieldFlowSteps.ts +130 -0
- package/src/hooks/useFieldFlowSubmitQueue.ts +206 -0
- package/src/hooks/useFormIntelligence.ts +207 -0
- package/src/hooks/useKeyboardManager.ts +26 -0
- package/src/hooks/useSmartPaste.ts +33 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/messages.ts +101 -0
- package/src/index.ts +251 -3
- package/src/intelligence/formAccessibility.ts +87 -0
- package/src/intelligence/index.ts +12 -0
- package/src/intelligence/types.ts +34 -0
- package/src/motion/index.ts +3 -0
- package/src/motion/useFieldMotion.ts +120 -0
- package/src/motion/useReducedMotion.ts +31 -0
- package/src/paste/index.ts +7 -0
- package/src/paste/smartPaste.ts +132 -0
- package/src/schema/FieldFlowSchemaForm.tsx +274 -0
- package/src/schema/index.ts +8 -0
- package/src/schema/types.ts +63 -0
- package/src/theme/ThemeProvider.tsx +96 -7
- package/src/theme/appearance.ts +105 -0
- package/src/theme/defaultTheme.ts +11 -0
- package/src/theme/index.ts +3 -0
- package/src/theme/presets.ts +120 -0
- package/src/types/globals.d.ts +2 -0
- package/src/types/index.ts +28 -0
- package/src/utils/affordance.ts +138 -0
- package/src/utils/passwordStrength.ts +109 -0
- package/src/utils/phoneCountries.ts +44 -0
- package/src/validation/validators.ts +17 -7
|
@@ -7,6 +7,18 @@ import { resolveFieldConfig, implicitRulesForType } from '../../utils/keyboardTy
|
|
|
7
7
|
import { sanitizeNumeric, sanitizePhone, truncate } from '../../utils/formatters';
|
|
8
8
|
import { runRules } from '../../validation/validators';
|
|
9
9
|
import { renderFieldFlowIcon } from '../../icons/renderIcon';
|
|
10
|
+
import { useFieldMotion } from '../../motion/useFieldMotion';
|
|
11
|
+
import { FieldFlowAffordance } from '../FieldFlowAffordance';
|
|
12
|
+
import { FieldFlowPasswordStrength } from '../FieldFlowPasswordStrength';
|
|
13
|
+
import { FieldFlowInfoTip } from '../FieldFlowInfoTip';
|
|
14
|
+
import {
|
|
15
|
+
affordanceKindFromFieldType,
|
|
16
|
+
type FieldFlowAffordanceKind,
|
|
17
|
+
} from '../../utils/affordance';
|
|
18
|
+
import {
|
|
19
|
+
autofillRoleFromFieldType,
|
|
20
|
+
getAutofillProps,
|
|
21
|
+
} from '../../autofill/profiles';
|
|
10
22
|
import { createStyles, iconColorFor, labelColorFor } from './styles';
|
|
11
23
|
import type { FieldFlowInputProps } from './types';
|
|
12
24
|
|
|
@@ -45,6 +57,16 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
45
57
|
onRightIconPress,
|
|
46
58
|
iconSize = 18,
|
|
47
59
|
clearable,
|
|
60
|
+
suggestions,
|
|
61
|
+
suggestionsAlwaysVisible = false,
|
|
62
|
+
showStrength,
|
|
63
|
+
prefix,
|
|
64
|
+
suffix,
|
|
65
|
+
motion = true,
|
|
66
|
+
autofill,
|
|
67
|
+
inputAccessoryViewID,
|
|
68
|
+
helperStatus,
|
|
69
|
+
infoTip,
|
|
48
70
|
maxLength,
|
|
49
71
|
showCharacterCount,
|
|
50
72
|
onSubmitEditing,
|
|
@@ -84,6 +106,11 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
84
106
|
[type, required, rules],
|
|
85
107
|
);
|
|
86
108
|
|
|
109
|
+
const autofillProps = useMemo(() => {
|
|
110
|
+
const role = autofill ?? autofillRoleFromFieldType(type);
|
|
111
|
+
return role ? getAutofillProps(role) : undefined;
|
|
112
|
+
}, [autofill, type]);
|
|
113
|
+
|
|
87
114
|
const resolvedError = errorText ?? localError;
|
|
88
115
|
const state = useFieldState({
|
|
89
116
|
isFocused,
|
|
@@ -100,6 +127,14 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
100
127
|
);
|
|
101
128
|
const iconColor = iconColorFor(theme, state);
|
|
102
129
|
|
|
130
|
+
const fieldMotion = useFieldMotion({
|
|
131
|
+
enabled: motion,
|
|
132
|
+
isFocused,
|
|
133
|
+
hasError: Boolean(hasError || resolvedError),
|
|
134
|
+
isSuccess: Boolean(isSuccess || successText),
|
|
135
|
+
duration: theme.animation.duration,
|
|
136
|
+
});
|
|
137
|
+
|
|
103
138
|
const isFloating = variant === 'floating';
|
|
104
139
|
const floatUp = isFocused || currentValue.length > 0;
|
|
105
140
|
const floatAnim = useRef(new Animated.Value(floatUp ? 1 : 0)).current;
|
|
@@ -138,17 +173,34 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
138
173
|
[type, maxLength, isControlled, onChangeText, validateOnChange, runValidation],
|
|
139
174
|
);
|
|
140
175
|
|
|
176
|
+
const blurHideTimer = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
177
|
+
|
|
141
178
|
const handleFocus = useCallback(() => {
|
|
179
|
+
if (blurHideTimer.current) {
|
|
180
|
+
clearTimeout(blurHideTimer.current);
|
|
181
|
+
blurHideTimer.current = null;
|
|
182
|
+
}
|
|
142
183
|
setIsFocused(true);
|
|
143
184
|
onFocus?.();
|
|
144
185
|
}, [onFocus]);
|
|
145
186
|
|
|
146
187
|
const handleBlur = useCallback(() => {
|
|
147
|
-
|
|
188
|
+
// Delay hiding suggestion chips so a chip press can register first
|
|
189
|
+
blurHideTimer.current = setTimeout(() => {
|
|
190
|
+
setIsFocused(false);
|
|
191
|
+
blurHideTimer.current = null;
|
|
192
|
+
}, 180);
|
|
148
193
|
runValidation(currentValue);
|
|
149
194
|
onBlur?.();
|
|
150
195
|
}, [runValidation, currentValue, onBlur]);
|
|
151
196
|
|
|
197
|
+
useEffect(
|
|
198
|
+
() => () => {
|
|
199
|
+
if (blurHideTimer.current) clearTimeout(blurHideTimer.current);
|
|
200
|
+
},
|
|
201
|
+
[],
|
|
202
|
+
);
|
|
203
|
+
|
|
152
204
|
const handleClear = useCallback(() => {
|
|
153
205
|
if (!isControlled) setInternalValue('');
|
|
154
206
|
onChangeText?.('');
|
|
@@ -197,78 +249,205 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
197
249
|
|
|
198
250
|
const showExternalLabel = Boolean(label) && !isFloating;
|
|
199
251
|
|
|
252
|
+
const affordanceConfig = useMemo(() => {
|
|
253
|
+
if (!suggestions) return null;
|
|
254
|
+
if (suggestions === true) {
|
|
255
|
+
const kind = affordanceKindFromFieldType(type);
|
|
256
|
+
return kind ? { kind, chips: undefined as undefined } : null;
|
|
257
|
+
}
|
|
258
|
+
if (typeof suggestions === 'string') {
|
|
259
|
+
return { kind: suggestions as FieldFlowAffordanceKind, chips: undefined as undefined };
|
|
260
|
+
}
|
|
261
|
+
return { kind: 'custom' as FieldFlowAffordanceKind, chips: suggestions };
|
|
262
|
+
}, [suggestions, type]);
|
|
263
|
+
|
|
264
|
+
const showAffordance =
|
|
265
|
+
Boolean(affordanceConfig) &&
|
|
266
|
+
!disabled &&
|
|
267
|
+
!readOnly &&
|
|
268
|
+
(suggestionsAlwaysVisible || isFocused);
|
|
269
|
+
|
|
270
|
+
const renderAffix = (affix: string | React.ReactNode | undefined, side: 'left' | 'right') => {
|
|
271
|
+
if (affix == null || affix === false) return null;
|
|
272
|
+
if (typeof affix === 'string') {
|
|
273
|
+
return (
|
|
274
|
+
<Text
|
|
275
|
+
style={[
|
|
276
|
+
styles.affixText,
|
|
277
|
+
side === 'left' ? styles.iconSlotLeft : styles.iconSlotRight,
|
|
278
|
+
]}
|
|
279
|
+
numberOfLines={1}
|
|
280
|
+
>
|
|
281
|
+
{affix}
|
|
282
|
+
</Text>
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
return <View style={side === 'left' ? styles.iconSlotLeft : styles.iconSlotRight}>{affix}</View>;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
const focusRing = theme.appearance?.focusRing ?? 'softGlow';
|
|
289
|
+
const showFocusRing = motion && focusRing !== 'underlinePulse';
|
|
290
|
+
const resolvedHelperStatus =
|
|
291
|
+
helperStatus ??
|
|
292
|
+
(resolvedError ? 'error' : successText ? 'success' : helperText ? 'info' : 'none');
|
|
293
|
+
|
|
294
|
+
const helperIconName =
|
|
295
|
+
resolvedHelperStatus === 'success'
|
|
296
|
+
? 'check'
|
|
297
|
+
: resolvedHelperStatus === 'error' || resolvedHelperStatus === 'warning'
|
|
298
|
+
? 'alert'
|
|
299
|
+
: resolvedHelperStatus === 'info'
|
|
300
|
+
? 'info'
|
|
301
|
+
: null;
|
|
302
|
+
|
|
303
|
+
const helperIconColor =
|
|
304
|
+
resolvedHelperStatus === 'success'
|
|
305
|
+
? theme.colors.success
|
|
306
|
+
: resolvedHelperStatus === 'error'
|
|
307
|
+
? theme.colors.error
|
|
308
|
+
: resolvedHelperStatus === 'warning'
|
|
309
|
+
? theme.colors.warning
|
|
310
|
+
: theme.colors.info;
|
|
311
|
+
|
|
312
|
+
const helperTextStyle =
|
|
313
|
+
resolvedError
|
|
314
|
+
? styles.errorText
|
|
315
|
+
: successText
|
|
316
|
+
? styles.successText
|
|
317
|
+
: resolvedHelperStatus === 'warning'
|
|
318
|
+
? styles.warningText
|
|
319
|
+
: resolvedHelperStatus === 'info' && helperText
|
|
320
|
+
? styles.infoText
|
|
321
|
+
: styles.helperText;
|
|
322
|
+
|
|
200
323
|
return (
|
|
201
324
|
<View style={[styles.wrapper, containerStyle]} testID={testID}>
|
|
202
325
|
{showExternalLabel ? (
|
|
203
|
-
<
|
|
204
|
-
{label}
|
|
205
|
-
{required ? ' *' : ''}
|
|
206
|
-
</Text>
|
|
207
|
-
) : null}
|
|
208
|
-
|
|
209
|
-
<View style={[styles.inputContainer, inputContainerStyle]}>
|
|
210
|
-
{isFloating && label ? (
|
|
211
|
-
<Animated.Text style={[styles.floatingLabel, floatingLabelStyle, labelStyle]} pointerEvents="none">
|
|
326
|
+
<View style={styles.labelRow}>
|
|
327
|
+
<Text style={[styles.label, labelStyle]}>
|
|
212
328
|
{label}
|
|
213
329
|
{required ? ' *' : ''}
|
|
214
|
-
</
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
330
|
+
</Text>
|
|
331
|
+
{infoTip ? <FieldFlowInfoTip tip={infoTip} theme={themeOverride} /> : null}
|
|
332
|
+
</View>
|
|
333
|
+
) : null}
|
|
334
|
+
|
|
335
|
+
<Animated.View style={fieldMotion.containerStyle}>
|
|
336
|
+
<View style={[styles.inputContainer, inputContainerStyle]}>
|
|
337
|
+
{showFocusRing ? (
|
|
338
|
+
<Animated.View
|
|
339
|
+
pointerEvents="none"
|
|
340
|
+
style={[
|
|
341
|
+
styles.focusGlow,
|
|
342
|
+
{
|
|
343
|
+
opacity: fieldMotion.glowOpacity.interpolate({
|
|
344
|
+
inputRange: [0, 1],
|
|
345
|
+
outputRange: [0, focusRing === 'solid' ? 1 : 0.22],
|
|
346
|
+
}),
|
|
347
|
+
borderColor: theme.colors.borderFocused,
|
|
348
|
+
},
|
|
349
|
+
]}
|
|
350
|
+
/>
|
|
351
|
+
) : null}
|
|
352
|
+
|
|
353
|
+
{isFloating && label ? (
|
|
354
|
+
<Animated.Text style={[styles.floatingLabel, floatingLabelStyle, labelStyle]} pointerEvents="none">
|
|
355
|
+
{label}
|
|
356
|
+
{required ? ' *' : ''}
|
|
357
|
+
</Animated.Text>
|
|
358
|
+
) : null}
|
|
359
|
+
|
|
360
|
+
{resolvedLeftIcon ? (
|
|
361
|
+
<Pressable
|
|
362
|
+
onPress={onLeftIconPress}
|
|
363
|
+
disabled={!onLeftIconPress}
|
|
364
|
+
style={[styles.iconSlot, styles.iconSlotLeft]}
|
|
365
|
+
hitSlop={8}
|
|
366
|
+
accessibilityRole={onLeftIconPress ? 'button' : undefined}
|
|
367
|
+
>
|
|
368
|
+
{renderFieldFlowIcon(resolvedLeftIcon, iconColor, iconSize)}
|
|
369
|
+
</Pressable>
|
|
370
|
+
) : null}
|
|
371
|
+
|
|
372
|
+
{renderAffix(prefix, 'left')}
|
|
373
|
+
|
|
374
|
+
<TextInput
|
|
375
|
+
ref={innerRef}
|
|
376
|
+
value={currentValue}
|
|
377
|
+
onChangeText={handleChangeText}
|
|
378
|
+
onFocus={handleFocus}
|
|
379
|
+
onBlur={handleBlur}
|
|
380
|
+
onSubmitEditing={onSubmitEditing}
|
|
381
|
+
editable={!disabled && !readOnly && !loading}
|
|
382
|
+
placeholder={isFloating ? (floatUp ? placeholder : undefined) : placeholder}
|
|
383
|
+
placeholderTextColor={theme.colors.placeholder}
|
|
384
|
+
keyboardType={fieldConfig.keyboardType}
|
|
385
|
+
secureTextEntry={fieldConfig.secureTextEntry && !showPassword}
|
|
386
|
+
autoCapitalize={autofillProps?.autoCapitalize ?? fieldConfig.autoCapitalize}
|
|
387
|
+
autoCorrect={autofillProps?.autoCorrect ?? fieldConfig.autoCorrect}
|
|
388
|
+
multiline={fieldConfig.multiline && type !== 'chat'}
|
|
389
|
+
maxLength={maxLength}
|
|
390
|
+
returnKeyType={fieldConfig.multiline ? 'default' : 'done'}
|
|
391
|
+
inputAccessoryViewID={inputAccessoryViewID}
|
|
392
|
+
style={[styles.input, inputStyle]}
|
|
393
|
+
{...autofillProps}
|
|
394
|
+
{...rest}
|
|
395
|
+
/>
|
|
396
|
+
|
|
397
|
+
{renderAffix(suffix, 'right')}
|
|
398
|
+
|
|
399
|
+
{resolvedRightIcon ? (
|
|
400
|
+
<Animated.View style={{ transform: [{ scale: fieldMotion.successScale }] }}>
|
|
401
|
+
<Pressable
|
|
402
|
+
onPress={rightIconPress}
|
|
403
|
+
disabled={!rightIconPress}
|
|
404
|
+
style={[styles.iconSlot, styles.iconSlotRight]}
|
|
405
|
+
hitSlop={8}
|
|
406
|
+
accessibilityRole={rightIconPress ? 'button' : undefined}
|
|
407
|
+
>
|
|
408
|
+
{renderFieldFlowIcon(resolvedRightIcon, iconColor, iconSize)}
|
|
409
|
+
</Pressable>
|
|
410
|
+
</Animated.View>
|
|
411
|
+
) : null}
|
|
412
|
+
</View>
|
|
413
|
+
</Animated.View>
|
|
414
|
+
|
|
415
|
+
{showAffordance && affordanceConfig ? (
|
|
416
|
+
<FieldFlowAffordance
|
|
417
|
+
kind={affordanceConfig.kind}
|
|
418
|
+
chips={affordanceConfig.chips}
|
|
231
419
|
value={currentValue}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
placeholder={isFloating ? (floatUp ? placeholder : undefined) : placeholder}
|
|
238
|
-
placeholderTextColor={theme.colors.placeholder}
|
|
239
|
-
keyboardType={fieldConfig.keyboardType}
|
|
240
|
-
secureTextEntry={fieldConfig.secureTextEntry && !showPassword}
|
|
241
|
-
autoCapitalize={fieldConfig.autoCapitalize}
|
|
242
|
-
autoCorrect={fieldConfig.autoCorrect}
|
|
243
|
-
multiline={fieldConfig.multiline && type !== 'chat'}
|
|
244
|
-
maxLength={maxLength}
|
|
245
|
-
returnKeyType={fieldConfig.multiline ? 'default' : 'done'}
|
|
246
|
-
style={[styles.input, inputStyle]}
|
|
247
|
-
{...rest}
|
|
420
|
+
onSelect={next => {
|
|
421
|
+
handleChangeText(next);
|
|
422
|
+
innerRef.current?.focus();
|
|
423
|
+
}}
|
|
424
|
+
theme={themeOverride}
|
|
248
425
|
/>
|
|
426
|
+
) : null}
|
|
249
427
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
{renderFieldFlowIcon(resolvedRightIcon, iconColor, iconSize)}
|
|
259
|
-
</Pressable>
|
|
260
|
-
) : null}
|
|
261
|
-
</View>
|
|
428
|
+
{type === 'password' && showStrength ? (
|
|
429
|
+
<FieldFlowPasswordStrength
|
|
430
|
+
password={currentValue}
|
|
431
|
+
showRules={typeof showStrength === 'object' ? showStrength.showRules : true}
|
|
432
|
+
rules={typeof showStrength === 'object' ? showStrength.rules : undefined}
|
|
433
|
+
theme={themeOverride}
|
|
434
|
+
/>
|
|
435
|
+
) : null}
|
|
262
436
|
|
|
263
437
|
{(helperText || resolvedError || successText || (showCharacterCount && maxLength)) && (
|
|
264
|
-
<View style={styles.footerRow}>
|
|
265
|
-
<View style={
|
|
438
|
+
<Animated.View style={[styles.footerRow, { opacity: fieldMotion.messageOpacity }]}>
|
|
439
|
+
<View style={styles.helperRow}>
|
|
440
|
+
{helperIconName && (resolvedError || successText || helperText) ? (
|
|
441
|
+
<View style={{ marginTop: 1 }}>
|
|
442
|
+
{renderFieldFlowIcon(helperIconName, helperIconColor, 13)}
|
|
443
|
+
</View>
|
|
444
|
+
) : null}
|
|
266
445
|
{resolvedError ? (
|
|
267
|
-
<Text style={[
|
|
446
|
+
<Text style={[helperTextStyle, errorStyle, helperStyle]}>{resolvedError}</Text>
|
|
268
447
|
) : successText ? (
|
|
269
|
-
<Text style={[
|
|
448
|
+
<Text style={[helperTextStyle, helperStyle]}>{successText}</Text>
|
|
270
449
|
) : helperText ? (
|
|
271
|
-
<Text style={[
|
|
450
|
+
<Text style={[helperTextStyle, helperStyle]}>{helperText}</Text>
|
|
272
451
|
) : null}
|
|
273
452
|
</View>
|
|
274
453
|
{showCharacterCount && maxLength ? (
|
|
@@ -276,7 +455,7 @@ export const FieldFlowInput = forwardRef<TextInput, FieldFlowInputProps>(functio
|
|
|
276
455
|
{currentValue.length}/{maxLength}
|
|
277
456
|
</Text>
|
|
278
457
|
) : null}
|
|
279
|
-
</View>
|
|
458
|
+
</Animated.View>
|
|
280
459
|
)}
|
|
281
460
|
</View>
|
|
282
461
|
);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import type { FieldFlowState, FieldFlowTheme, FieldFlowVariant } from '../../types';
|
|
3
|
+
import { surfaceShadow } from '../../theme/appearance';
|
|
3
4
|
|
|
4
5
|
export function borderColorFor(theme: FieldFlowTheme, state: FieldFlowState): string {
|
|
5
6
|
switch (state) {
|
|
@@ -33,32 +34,51 @@ export function createStyles(
|
|
|
33
34
|
const isUnderline = variant === 'underline';
|
|
34
35
|
const isFilled = variant === 'filled';
|
|
35
36
|
const isFloating = variant === 'floating';
|
|
37
|
+
const appearance = theme.appearance;
|
|
38
|
+
const surface = appearance?.surface ?? 'flat';
|
|
39
|
+
const focusRing = appearance?.focusRing ?? 'softGlow';
|
|
36
40
|
const borderW = state === 'focused' ? theme.spacing.borderWidthFocused : theme.spacing.borderWidth;
|
|
41
|
+
const shadow = !isUnderline ? surfaceShadow(surface) : null;
|
|
42
|
+
|
|
43
|
+
let backgroundColor = theme.colors.background;
|
|
44
|
+
if (state === 'disabled') backgroundColor = theme.colors.backgroundDisabled;
|
|
45
|
+
else if (isFilled || surface === 'soft') backgroundColor = theme.colors.surfaceMuted ?? theme.colors.backgroundDisabled;
|
|
46
|
+
else if (surface === 'inset') backgroundColor = theme.colors.surfaceMuted ?? theme.colors.backgroundDisabled;
|
|
47
|
+
else if (surface === 'elevated') backgroundColor = theme.colors.surfaceElevated ?? theme.colors.background;
|
|
48
|
+
else if (isUnderline) backgroundColor = 'transparent';
|
|
49
|
+
|
|
50
|
+
const glowPad = focusRing === 'solid' ? 2 : focusRing === 'softGlow' ? 3 : 0;
|
|
37
51
|
|
|
38
52
|
return StyleSheet.create({
|
|
39
53
|
wrapper: {
|
|
40
54
|
marginBottom: theme.spacing.gap * 2,
|
|
41
55
|
},
|
|
56
|
+
labelRow: {
|
|
57
|
+
flexDirection: 'row',
|
|
58
|
+
alignItems: 'center',
|
|
59
|
+
gap: 6,
|
|
60
|
+
marginBottom: theme.spacing.gap / 1.5,
|
|
61
|
+
},
|
|
42
62
|
label: {
|
|
43
63
|
fontSize: theme.typography.labelFontSize,
|
|
44
|
-
marginBottom: theme.spacing.gap / 1.5,
|
|
45
64
|
color: labelColorFor(theme, state),
|
|
46
65
|
fontWeight: '500',
|
|
47
66
|
fontFamily: theme.typography.fontFamily,
|
|
67
|
+
flexShrink: 1,
|
|
48
68
|
},
|
|
49
69
|
inputContainer: {
|
|
70
|
+
position: 'relative',
|
|
71
|
+
overflow: 'visible',
|
|
50
72
|
flexDirection: 'row',
|
|
51
73
|
alignItems: multiline ? 'flex-start' : 'center',
|
|
52
|
-
backgroundColor
|
|
53
|
-
? theme.colors.backgroundDisabled
|
|
54
|
-
: isFilled
|
|
55
|
-
? theme.colors.backgroundDisabled
|
|
56
|
-
: isUnderline
|
|
57
|
-
? 'transparent'
|
|
58
|
-
: theme.colors.background,
|
|
74
|
+
backgroundColor,
|
|
59
75
|
borderRadius: isUnderline ? 0 : theme.spacing.borderRadius,
|
|
60
|
-
borderWidth: isUnderline ? 0 : isFilled ? 0 : borderW,
|
|
61
|
-
borderBottomWidth: isUnderline
|
|
76
|
+
borderWidth: isUnderline ? 0 : isFilled && surface !== 'inset' ? 0 : borderW,
|
|
77
|
+
borderBottomWidth: isUnderline
|
|
78
|
+
? borderW + (state === 'focused' && focusRing === 'underlinePulse' ? 1 : state === 'focused' ? 0.5 : 0)
|
|
79
|
+
: isFilled && surface !== 'inset'
|
|
80
|
+
? 0
|
|
81
|
+
: borderW,
|
|
62
82
|
borderColor: borderColorFor(theme, state),
|
|
63
83
|
paddingHorizontal: theme.spacing.paddingHorizontal,
|
|
64
84
|
paddingVertical: multiline ? theme.spacing.paddingVertical : 0,
|
|
@@ -66,11 +86,29 @@ export function createStyles(
|
|
|
66
86
|
? undefined
|
|
67
87
|
: theme.spacing.paddingVertical * 2 + theme.typography.fontSize + 6 + (isFloating ? 6 : 0),
|
|
68
88
|
paddingTop: isFloating && !multiline ? theme.spacing.paddingVertical + 6 : undefined,
|
|
89
|
+
...(shadow ?? null),
|
|
90
|
+
},
|
|
91
|
+
focusGlow: {
|
|
92
|
+
position: 'absolute',
|
|
93
|
+
top: -glowPad,
|
|
94
|
+
left: -glowPad,
|
|
95
|
+
right: -glowPad,
|
|
96
|
+
bottom: -glowPad,
|
|
97
|
+
borderWidth: focusRing === 'solid' ? 2 : focusRing === 'softGlow' ? 3 : 0,
|
|
98
|
+
borderRadius: theme.spacing.borderRadius + glowPad,
|
|
99
|
+
},
|
|
100
|
+
affixText: {
|
|
101
|
+
fontSize: theme.typography.fontSize,
|
|
102
|
+
color: theme.colors.label,
|
|
103
|
+
fontFamily: theme.typography.fontFamily,
|
|
104
|
+
fontWeight: '500',
|
|
69
105
|
},
|
|
70
106
|
floatingLabel: {
|
|
71
107
|
position: 'absolute',
|
|
72
108
|
left: theme.spacing.paddingHorizontal,
|
|
73
|
-
backgroundColor: isFilled
|
|
109
|
+
backgroundColor: isFilled || surface === 'soft' || surface === 'inset'
|
|
110
|
+
? theme.colors.surfaceMuted ?? theme.colors.backgroundDisabled
|
|
111
|
+
: theme.colors.background,
|
|
74
112
|
paddingHorizontal: 4,
|
|
75
113
|
zIndex: 2,
|
|
76
114
|
fontFamily: theme.typography.fontFamily,
|
|
@@ -98,8 +136,16 @@ export function createStyles(
|
|
|
98
136
|
},
|
|
99
137
|
footerRow: {
|
|
100
138
|
flexDirection: 'row',
|
|
139
|
+
alignItems: 'flex-start',
|
|
101
140
|
justifyContent: 'space-between',
|
|
102
141
|
marginTop: theme.spacing.gap / 1.5,
|
|
142
|
+
gap: 6,
|
|
143
|
+
},
|
|
144
|
+
helperRow: {
|
|
145
|
+
flex: 1,
|
|
146
|
+
flexDirection: 'row',
|
|
147
|
+
alignItems: 'flex-start',
|
|
148
|
+
gap: 6,
|
|
103
149
|
},
|
|
104
150
|
helperText: {
|
|
105
151
|
fontSize: theme.typography.helperFontSize,
|
|
@@ -119,6 +165,18 @@ export function createStyles(
|
|
|
119
165
|
flexShrink: 1,
|
|
120
166
|
fontFamily: theme.typography.fontFamily,
|
|
121
167
|
},
|
|
168
|
+
warningText: {
|
|
169
|
+
fontSize: theme.typography.helperFontSize,
|
|
170
|
+
color: theme.colors.warning,
|
|
171
|
+
flexShrink: 1,
|
|
172
|
+
fontFamily: theme.typography.fontFamily,
|
|
173
|
+
},
|
|
174
|
+
infoText: {
|
|
175
|
+
fontSize: theme.typography.helperFontSize,
|
|
176
|
+
color: theme.colors.info,
|
|
177
|
+
flexShrink: 1,
|
|
178
|
+
fontFamily: theme.typography.fontFamily,
|
|
179
|
+
},
|
|
122
180
|
charCount: {
|
|
123
181
|
fontSize: theme.typography.helperFontSize,
|
|
124
182
|
color: theme.colors.placeholder,
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type React from 'react';
|
|
1
2
|
import type { TextInputProps, ViewStyle, TextStyle } from 'react-native';
|
|
2
3
|
import type { FieldFlowFieldType, FieldFlowRules, FieldFlowVariant, DeepPartial, FieldFlowTheme } from '../../types';
|
|
3
4
|
import type { FieldFlowIconSource } from '../../icons';
|
|
5
|
+
import type { FieldFlowAffordanceChip, FieldFlowAffordanceKind } from '../../utils/affordance';
|
|
6
|
+
import type { PasswordStrengthRule } from '../../utils/passwordStrength';
|
|
7
|
+
import type { FieldFlowAutofillRole } from '../../autofill/profiles';
|
|
4
8
|
|
|
5
9
|
export interface FieldFlowInputProps
|
|
6
10
|
extends Omit<TextInputProps, 'style' | 'onChangeText' | 'onFocus' | 'onBlur' | 'onSubmitEditing'> {
|
|
@@ -56,6 +60,56 @@ export interface FieldFlowInputProps
|
|
|
56
60
|
/** Shows an "x" clear button when there's text (defaults to true for `search`, false otherwise). */
|
|
57
61
|
clearable?: boolean;
|
|
58
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Smart suggestion chips shown while the field is focused.
|
|
65
|
+
* - `true` — infer from `type` (email → domains, phone → dial codes, number/decimal → currency)
|
|
66
|
+
* - `'email' | 'phone' | 'currency'` — force a preset
|
|
67
|
+
* - `string[]` / chip objects — fully custom list
|
|
68
|
+
*/
|
|
69
|
+
suggestions?: boolean | FieldFlowAffordanceKind | FieldFlowAffordanceChip[] | string[];
|
|
70
|
+
/** Keep suggestion chips visible even when blurred. Default: false. */
|
|
71
|
+
suggestionsAlwaysVisible?: boolean;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Show a password strength meter under the field (only meaningful for `type="password"`).
|
|
75
|
+
* Pass `true` for defaults, or `{ showRules?: boolean; rules?: PasswordStrengthRule[] }`.
|
|
76
|
+
*/
|
|
77
|
+
showStrength?: boolean | { showRules?: boolean; rules?: PasswordStrengthRule[] };
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Text or node rendered inside the field before the value (e.g. `+92`, `$`, `https://`).
|
|
81
|
+
* Shown in addition to `leftIcon` when both are set.
|
|
82
|
+
*/
|
|
83
|
+
prefix?: string | React.ReactNode;
|
|
84
|
+
/** Text or node rendered inside the field after the value (e.g. `kg`, `.com`). */
|
|
85
|
+
suffix?: string | React.ReactNode;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Micro-interactions: focus glow, error shake, message fade, success pop.
|
|
89
|
+
* Respects OS Reduce Motion. Default: true.
|
|
90
|
+
*/
|
|
91
|
+
motion?: boolean;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Platform autofill role (`email`, `password`, `oneTimeCode`, …).
|
|
95
|
+
* When omitted, a sensible default is inferred from `type` (email/phone/password).
|
|
96
|
+
* Pass `off` to disable. See `autofillProfiles` for screen bundles.
|
|
97
|
+
*/
|
|
98
|
+
autofill?: FieldFlowAutofillRole;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* iOS keyboard accessory id — pair with `FieldFlowKeyboardToolbar` `nativeID`.
|
|
102
|
+
*/
|
|
103
|
+
inputAccessoryViewID?: string;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Soft status icon beside helper / success / warning copy.
|
|
107
|
+
* Error state always shows an alert icon when helperStatus is unset.
|
|
108
|
+
*/
|
|
109
|
+
helperStatus?: 'info' | 'success' | 'warning' | 'error' | 'none';
|
|
110
|
+
/** Tip text — renders a `FieldFlowInfoTip` next to the label. */
|
|
111
|
+
infoTip?: string;
|
|
112
|
+
|
|
59
113
|
maxLength?: number;
|
|
60
114
|
showCharacterCount?: boolean;
|
|
61
115
|
|