@seedgrid/fe-components 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocked-email-domains.json +41 -0
- package/dist/buttons/SgButton.d.ts +43 -0
- package/dist/buttons/SgButton.d.ts.map +1 -0
- package/dist/buttons/SgButton.js +123 -0
- package/dist/buttons/SgFloatActionButton.d.ts +60 -0
- package/dist/buttons/SgFloatActionButton.d.ts.map +1 -0
- package/dist/buttons/SgFloatActionButton.js +532 -0
- package/dist/buttons/SgSpeedDial.d.ts +40 -0
- package/dist/buttons/SgSpeedDial.d.ts.map +1 -0
- package/dist/buttons/SgSpeedDial.js +149 -0
- package/dist/buttons/SgSplitButton.d.ts +32 -0
- package/dist/buttons/SgSplitButton.d.ts.map +1 -0
- package/dist/buttons/SgSplitButton.js +81 -0
- package/dist/clock/SgClock.d.ts +28 -0
- package/dist/clock/SgClock.d.ts.map +1 -0
- package/dist/clock/SgClock.js +280 -0
- package/dist/clock/SgTimeProvider.d.ts +13 -0
- package/dist/clock/SgTimeProvider.d.ts.map +1 -0
- package/dist/clock/SgTimeProvider.js +44 -0
- package/dist/clock/themes/SgClockThemePicker.d.ts +14 -0
- package/dist/clock/themes/SgClockThemePicker.d.ts.map +1 -0
- package/dist/clock/themes/SgClockThemePicker.js +71 -0
- package/dist/clock/themes/SgClockThemePreview.d.ts +7 -0
- package/dist/clock/themes/SgClockThemePreview.d.ts.map +1 -0
- package/dist/clock/themes/SgClockThemePreview.js +11 -0
- package/dist/clock/themes/builtins.d.ts +3 -0
- package/dist/clock/themes/builtins.d.ts.map +1 -0
- package/dist/clock/themes/builtins.js +241 -0
- package/dist/clock/themes/index.d.ts +9 -0
- package/dist/clock/themes/index.d.ts.map +1 -0
- package/dist/clock/themes/index.js +7 -0
- package/dist/clock/themes/provider.d.ts +19 -0
- package/dist/clock/themes/provider.d.ts.map +1 -0
- package/dist/clock/themes/provider.js +54 -0
- package/dist/clock/themes/registry.d.ts +9 -0
- package/dist/clock/themes/registry.d.ts.map +1 -0
- package/dist/clock/themes/registry.js +25 -0
- package/dist/clock/themes/renderTheme.d.ts +7 -0
- package/dist/clock/themes/renderTheme.d.ts.map +1 -0
- package/dist/clock/themes/renderTheme.js +41 -0
- package/dist/clock/themes/types.d.ts +21 -0
- package/dist/clock/themes/types.d.ts.map +1 -0
- package/dist/clock/themes/types.js +1 -0
- package/dist/clock/themes/urlThemeCache.d.ts +2 -0
- package/dist/clock/themes/urlThemeCache.d.ts.map +1 -0
- package/dist/clock/themes/urlThemeCache.js +11 -0
- package/dist/clock/themes/useDarkFlag.d.ts +2 -0
- package/dist/clock/themes/useDarkFlag.d.ts.map +1 -0
- package/dist/clock/themes/useDarkFlag.js +14 -0
- package/dist/commons/SgBadge.d.ts +51 -0
- package/dist/commons/SgBadge.d.ts.map +1 -0
- package/dist/commons/SgBadge.js +141 -0
- package/dist/commons/SgBadgeOverlay.d.ts +13 -0
- package/dist/commons/SgBadgeOverlay.d.ts.map +1 -0
- package/dist/commons/SgBadgeOverlay.js +20 -0
- package/dist/commons/SgButton.d.ts +39 -0
- package/dist/commons/SgButton.d.ts.map +1 -0
- package/dist/commons/SgButton.js +116 -0
- package/dist/commons/SgPopup.d.ts +42 -0
- package/dist/commons/SgPopup.d.ts.map +1 -0
- package/dist/commons/SgPopup.js +218 -0
- package/dist/commons/SgToast.d.ts +44 -0
- package/dist/commons/SgToast.d.ts.map +1 -0
- package/dist/commons/SgToast.js +97 -0
- package/dist/commons/SgToaster.d.ts +11 -0
- package/dist/commons/SgToaster.d.ts.map +1 -0
- package/dist/commons/SgToaster.js +85 -0
- package/dist/commons/common-passwords.d.ts +2 -0
- package/dist/commons/common-passwords.d.ts.map +1 -0
- package/dist/commons/common-passwords.js +167 -0
- package/dist/environment/SgEnvironmentProvider.d.ts +31 -0
- package/dist/environment/SgEnvironmentProvider.d.ts.map +1 -0
- package/dist/environment/SgEnvironmentProvider.js +120 -0
- package/dist/environment/persistence.d.ts +44 -0
- package/dist/environment/persistence.d.ts.map +1 -0
- package/dist/environment/persistence.js +149 -0
- package/dist/gadgets/clock/SgClock.d.ts +18 -0
- package/dist/gadgets/clock/SgClock.d.ts.map +1 -0
- package/dist/gadgets/clock/SgClock.js +407 -0
- package/dist/gadgets/clock/SgTimeProvider.d.ts +13 -0
- package/dist/gadgets/clock/SgTimeProvider.d.ts.map +1 -0
- package/dist/gadgets/clock/SgTimeProvider.js +44 -0
- package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts +14 -0
- package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/SgClockThemePicker.js +71 -0
- package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts +7 -0
- package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/SgClockThemePreview.js +11 -0
- package/dist/gadgets/clock/themes/builtins.d.ts +3 -0
- package/dist/gadgets/clock/themes/builtins.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/builtins.js +241 -0
- package/dist/gadgets/clock/themes/index.d.ts +9 -0
- package/dist/gadgets/clock/themes/index.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/index.js +7 -0
- package/dist/gadgets/clock/themes/provider.d.ts +19 -0
- package/dist/gadgets/clock/themes/provider.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/provider.js +54 -0
- package/dist/gadgets/clock/themes/registry.d.ts +9 -0
- package/dist/gadgets/clock/themes/registry.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/registry.js +25 -0
- package/dist/gadgets/clock/themes/renderTheme.d.ts +7 -0
- package/dist/gadgets/clock/themes/renderTheme.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/renderTheme.js +41 -0
- package/dist/gadgets/clock/themes/types.d.ts +21 -0
- package/dist/gadgets/clock/themes/types.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/types.js +1 -0
- package/dist/gadgets/clock/themes/urlThemeCache.d.ts +2 -0
- package/dist/gadgets/clock/themes/urlThemeCache.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/urlThemeCache.js +11 -0
- package/dist/gadgets/clock/themes/useDarkFlag.d.ts +2 -0
- package/dist/gadgets/clock/themes/useDarkFlag.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/useDarkFlag.js +14 -0
- package/dist/gadgets/flip-digit/SgFlipDigit.d.ts +23 -0
- package/dist/gadgets/flip-digit/SgFlipDigit.d.ts.map +1 -0
- package/dist/gadgets/flip-digit/SgFlipDigit.js +118 -0
- package/dist/gadgets/flip-digit/index.d.ts +3 -0
- package/dist/gadgets/flip-digit/index.d.ts.map +1 -0
- package/dist/gadgets/flip-digit/index.js +1 -0
- package/dist/i18n/en-US.json +76 -0
- package/dist/i18n/es.json +76 -0
- package/dist/i18n/index.d.ts +328 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +87 -0
- package/dist/i18n/pt-BR.json +76 -0
- package/dist/i18n/pt-PT.json +76 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/inputs/FloatingInput.d.ts +13 -0
- package/dist/inputs/FloatingInput.d.ts.map +1 -0
- package/dist/inputs/FloatingInput.js +53 -0
- package/dist/inputs/FloatingSelect.d.ts +15 -0
- package/dist/inputs/FloatingSelect.d.ts.map +1 -0
- package/dist/inputs/FloatingSelect.js +52 -0
- package/dist/inputs/FloatingTextArea.d.ts +11 -0
- package/dist/inputs/FloatingTextArea.d.ts.map +1 -0
- package/dist/inputs/FloatingTextArea.js +34 -0
- package/dist/inputs/InputBirthDate.d.ts +13 -0
- package/dist/inputs/InputBirthDate.d.ts.map +1 -0
- package/dist/inputs/InputBirthDate.js +46 -0
- package/dist/inputs/InputDate.d.ts +8 -0
- package/dist/inputs/InputDate.d.ts.map +1 -0
- package/dist/inputs/InputDate.js +23 -0
- package/dist/inputs/InputEmail.d.ts +14 -0
- package/dist/inputs/InputEmail.d.ts.map +1 -0
- package/dist/inputs/InputEmail.js +43 -0
- package/dist/inputs/InputPassword.d.ts +12 -0
- package/dist/inputs/InputPassword.d.ts.map +1 -0
- package/dist/inputs/InputPassword.js +42 -0
- package/dist/inputs/MaskedInputs.d.ts +27 -0
- package/dist/inputs/MaskedInputs.d.ts.map +1 -0
- package/dist/inputs/MaskedInputs.js +161 -0
- package/dist/inputs/SgAutocomplete.d.ts +42 -0
- package/dist/inputs/SgAutocomplete.d.ts.map +1 -0
- package/dist/inputs/SgAutocomplete.js +241 -0
- package/dist/inputs/SgCurrencyEdit.d.ts +56 -0
- package/dist/inputs/SgCurrencyEdit.d.ts.map +1 -0
- package/dist/inputs/SgCurrencyEdit.js +496 -0
- package/dist/inputs/SgInputBirthDate.d.ts +13 -0
- package/dist/inputs/SgInputBirthDate.d.ts.map +1 -0
- package/dist/inputs/SgInputBirthDate.js +48 -0
- package/dist/inputs/SgInputCEP.d.ts +33 -0
- package/dist/inputs/SgInputCEP.d.ts.map +1 -0
- package/dist/inputs/SgInputCEP.js +117 -0
- package/dist/inputs/SgInputCNPJ.d.ts +20 -0
- package/dist/inputs/SgInputCNPJ.d.ts.map +1 -0
- package/dist/inputs/SgInputCNPJ.js +133 -0
- package/dist/inputs/SgInputCPF.d.ts +15 -0
- package/dist/inputs/SgInputCPF.d.ts.map +1 -0
- package/dist/inputs/SgInputCPF.js +70 -0
- package/dist/inputs/SgInputCPFCNPJ.d.ts +15 -0
- package/dist/inputs/SgInputCPFCNPJ.d.ts.map +1 -0
- package/dist/inputs/SgInputCPFCNPJ.js +92 -0
- package/dist/inputs/SgInputDate.d.ts +8 -0
- package/dist/inputs/SgInputDate.d.ts.map +1 -0
- package/dist/inputs/SgInputDate.js +120 -0
- package/dist/inputs/SgInputEmail.d.ts +16 -0
- package/dist/inputs/SgInputEmail.d.ts.map +1 -0
- package/dist/inputs/SgInputEmail.js +74 -0
- package/dist/inputs/SgInputFone.d.ts +15 -0
- package/dist/inputs/SgInputFone.d.ts.map +1 -0
- package/dist/inputs/SgInputFone.js +60 -0
- package/dist/inputs/SgInputMasked.d.ts +27 -0
- package/dist/inputs/SgInputMasked.d.ts.map +1 -0
- package/dist/inputs/SgInputMasked.js +161 -0
- package/dist/inputs/SgInputNumber.d.ts +49 -0
- package/dist/inputs/SgInputNumber.d.ts.map +1 -0
- package/dist/inputs/SgInputNumber.js +438 -0
- package/dist/inputs/SgInputPassword.d.ts +26 -0
- package/dist/inputs/SgInputPassword.d.ts.map +1 -0
- package/dist/inputs/SgInputPassword.js +278 -0
- package/dist/inputs/SgInputPhone.d.ts +15 -0
- package/dist/inputs/SgInputPhone.d.ts.map +1 -0
- package/dist/inputs/SgInputPhone.js +66 -0
- package/dist/inputs/SgInputPostalCode.d.ts +37 -0
- package/dist/inputs/SgInputPostalCode.d.ts.map +1 -0
- package/dist/inputs/SgInputPostalCode.js +193 -0
- package/dist/inputs/SgInputSelect.d.ts +16 -0
- package/dist/inputs/SgInputSelect.d.ts.map +1 -0
- package/dist/inputs/SgInputSelect.js +104 -0
- package/dist/inputs/SgInputText.d.ts +49 -0
- package/dist/inputs/SgInputText.d.ts.map +1 -0
- package/dist/inputs/SgInputText.js +336 -0
- package/dist/inputs/SgInputTextArea.d.ts +41 -0
- package/dist/inputs/SgInputTextArea.d.ts.map +1 -0
- package/dist/inputs/SgInputTextArea.js +216 -0
- package/dist/inputs/SgTextEditor.d.ts +27 -0
- package/dist/inputs/SgTextEditor.d.ts.map +1 -0
- package/dist/inputs/SgTextEditor.js +201 -0
- package/dist/integration/module.d.ts +39 -0
- package/dist/integration/module.d.ts.map +1 -0
- package/dist/integration/module.js +1 -0
- package/dist/layout/GroupBox.d.ts +10 -0
- package/dist/layout/GroupBox.d.ts.map +1 -0
- package/dist/layout/GroupBox.js +14 -0
- package/dist/layout/SgCard.d.ts +35 -0
- package/dist/layout/SgCard.d.ts.map +1 -0
- package/dist/layout/SgCard.js +106 -0
- package/dist/layout/SgDockLayout.d.ts +37 -0
- package/dist/layout/SgDockLayout.d.ts.map +1 -0
- package/dist/layout/SgDockLayout.js +101 -0
- package/dist/layout/SgDockZone.d.ts +12 -0
- package/dist/layout/SgDockZone.d.ts.map +1 -0
- package/dist/layout/SgDockZone.js +20 -0
- package/dist/layout/SgGrid.d.ts +18 -0
- package/dist/layout/SgGrid.d.ts.map +1 -0
- package/dist/layout/SgGrid.js +101 -0
- package/dist/layout/SgGroupBox.d.ts +10 -0
- package/dist/layout/SgGroupBox.d.ts.map +1 -0
- package/dist/layout/SgGroupBox.js +14 -0
- package/dist/layout/SgMainPanel.d.ts +11 -0
- package/dist/layout/SgMainPanel.d.ts.map +1 -0
- package/dist/layout/SgMainPanel.js +70 -0
- package/dist/layout/SgPanel.d.ts +22 -0
- package/dist/layout/SgPanel.d.ts.map +1 -0
- package/dist/layout/SgPanel.js +33 -0
- package/dist/layout/SgScreen.d.ts +11 -0
- package/dist/layout/SgScreen.d.ts.map +1 -0
- package/dist/layout/SgScreen.js +18 -0
- package/dist/layout/SgStack.d.ts +15 -0
- package/dist/layout/SgStack.d.ts.map +1 -0
- package/dist/layout/SgStack.js +32 -0
- package/dist/layout/SgToolBar.d.ts +46 -0
- package/dist/layout/SgToolBar.d.ts.map +1 -0
- package/dist/layout/SgToolBar.js +199 -0
- package/dist/layout/SgTreeView.d.ts +80 -0
- package/dist/layout/SgTreeView.d.ts.map +1 -0
- package/dist/layout/SgTreeView.js +338 -0
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +19 -0
- package/dist/masks.d.ts +14 -0
- package/dist/masks.d.ts.map +1 -0
- package/dist/masks.js +91 -0
- package/dist/overlay/SgDialog.d.ts +39 -0
- package/dist/overlay/SgDialog.d.ts.map +1 -0
- package/dist/overlay/SgDialog.js +177 -0
- package/dist/overlay/SgPopup.d.ts +42 -0
- package/dist/overlay/SgPopup.d.ts.map +1 -0
- package/dist/overlay/SgPopup.js +218 -0
- package/dist/rhf.d.ts +6 -0
- package/dist/rhf.d.ts.map +1 -0
- package/dist/rhf.js +1 -0
- package/dist/validators.d.ts +27 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +218 -0
- package/dist/wizard/SGWizard.d.ts +28 -0
- package/dist/wizard/SGWizard.d.ts.map +1 -0
- package/dist/wizard/SGWizard.js +124 -0
- package/package.json +53 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { SgInputText } from "./SgInputText";
|
|
5
|
+
import { isBlockedEmailDomain, isValidEmail } from "../validators";
|
|
6
|
+
import { t, useComponentsI18n } from "../i18n";
|
|
7
|
+
export function SgInputEmail(props) {
|
|
8
|
+
const i18n = useComponentsI18n();
|
|
9
|
+
const { required, requiredMessage, invalidMessage, blockFakeMail, blockedEmailDomains, validateOnBlur, onValidation, error, inputProps, iconButtons, validation, onClear, ...rest } = props;
|
|
10
|
+
const [internalError, setInternalError] = React.useState(null);
|
|
11
|
+
const [hasInteracted, setHasInteracted] = React.useState(false);
|
|
12
|
+
const runValidation = React.useCallback((value) => {
|
|
13
|
+
if (!value && !required) {
|
|
14
|
+
setInternalError(null);
|
|
15
|
+
onValidation?.(null);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!value && required) {
|
|
19
|
+
const message = requiredMessage ?? t(i18n, "components.inputs.required");
|
|
20
|
+
setInternalError(message);
|
|
21
|
+
onValidation?.(message);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const customMessage = validation?.(value) ?? null;
|
|
25
|
+
if (customMessage) {
|
|
26
|
+
setInternalError(customMessage);
|
|
27
|
+
onValidation?.(customMessage);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!isValidEmail(value)) {
|
|
31
|
+
const message = invalidMessage ?? t(i18n, "components.inputs.email.invalid");
|
|
32
|
+
setInternalError(message);
|
|
33
|
+
onValidation?.(message);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if ((blockFakeMail ?? true) && isBlockedEmailDomain(value, blockedEmailDomains)) {
|
|
37
|
+
const message = t(i18n, "components.inputs.email.tempInvalid");
|
|
38
|
+
setInternalError(message);
|
|
39
|
+
onValidation?.(message);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const message = null;
|
|
43
|
+
setInternalError(message);
|
|
44
|
+
onValidation?.(message);
|
|
45
|
+
}, [
|
|
46
|
+
blockedEmailDomains,
|
|
47
|
+
blockFakeMail,
|
|
48
|
+
i18n,
|
|
49
|
+
invalidMessage,
|
|
50
|
+
onValidation,
|
|
51
|
+
required,
|
|
52
|
+
requiredMessage,
|
|
53
|
+
validation
|
|
54
|
+
]);
|
|
55
|
+
const mergedInputProps = {
|
|
56
|
+
...inputProps,
|
|
57
|
+
onChange: (event) => {
|
|
58
|
+
setHasInteracted(true);
|
|
59
|
+
runValidation(event.currentTarget.value);
|
|
60
|
+
inputProps?.onChange?.(event);
|
|
61
|
+
},
|
|
62
|
+
onBlur: (event) => {
|
|
63
|
+
if ((validateOnBlur ?? true) || hasInteracted) {
|
|
64
|
+
runValidation(event.currentTarget.value);
|
|
65
|
+
}
|
|
66
|
+
inputProps?.onBlur?.(event);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return (_jsx(SgInputText, { ...rest, type: "email", textInputType: props.textInputType ?? "email", error: error ?? internalError ?? undefined, onClear: () => {
|
|
70
|
+
setInternalError(null);
|
|
71
|
+
onValidation?.(null);
|
|
72
|
+
onClear?.();
|
|
73
|
+
}, inputProps: mergedInputProps, iconButtons: iconButtons }));
|
|
74
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type SgInputTextProps } from "./SgInputText";
|
|
3
|
+
export type SgInputFoneProps = Omit<SgInputTextProps, "inputProps" | "error"> & {
|
|
4
|
+
inputProps: React.InputHTMLAttributes<HTMLInputElement>;
|
|
5
|
+
error?: string;
|
|
6
|
+
required?: boolean;
|
|
7
|
+
requiredMessage?: string;
|
|
8
|
+
lengthMessage?: string;
|
|
9
|
+
invalidMessage?: string;
|
|
10
|
+
validation?: (value: string) => string | null;
|
|
11
|
+
onValidation?: (message: string | null) => void;
|
|
12
|
+
validateOnBlur?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function SgInputFone(props: SgInputFoneProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=SgInputFone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SgInputFone.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputFone.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG;IAC9E,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAMF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA+DlD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { SgInputText } from "./SgInputText";
|
|
5
|
+
import { maskPhone } from "../masks";
|
|
6
|
+
function onlyDigits(value) {
|
|
7
|
+
return value.replace(/\D/g, "");
|
|
8
|
+
}
|
|
9
|
+
export function SgInputFone(props) {
|
|
10
|
+
const { required, requiredMessage, lengthMessage, invalidMessage, validateOnBlur, error, validation, ...rest } = props;
|
|
11
|
+
const [internalError, setInternalError] = React.useState(null);
|
|
12
|
+
const runValidation = React.useCallback((value) => {
|
|
13
|
+
const digits = onlyDigits(value);
|
|
14
|
+
if (!digits && !required) {
|
|
15
|
+
setInternalError(null);
|
|
16
|
+
props.onValidation?.(null);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!digits && required) {
|
|
20
|
+
const message = requiredMessage ?? "Campo obrigatório ";
|
|
21
|
+
setInternalError(message);
|
|
22
|
+
props.onValidation?.(message);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (validation) {
|
|
26
|
+
const message = validation(value);
|
|
27
|
+
if (message) {
|
|
28
|
+
setInternalError(message);
|
|
29
|
+
props.onValidation?.(message);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (digits.length !== 10 && digits.length !== 11) {
|
|
34
|
+
const message = lengthMessage ?? invalidMessage ?? "Telefone inválido.";
|
|
35
|
+
setInternalError(message);
|
|
36
|
+
props.onValidation?.(message);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setInternalError(null);
|
|
40
|
+
props.onValidation?.(null);
|
|
41
|
+
}, [required, requiredMessage, lengthMessage, invalidMessage, validation, props]);
|
|
42
|
+
const inputProps = {
|
|
43
|
+
...rest.inputProps,
|
|
44
|
+
inputMode: rest.inputProps.inputMode ?? "numeric",
|
|
45
|
+
onChange: (event) => {
|
|
46
|
+
event.target.value = maskPhone(event.target.value);
|
|
47
|
+
rest.inputProps.onChange?.(event);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const onBlur = inputProps.onBlur;
|
|
51
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
52
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
53
|
+
...inputProps,
|
|
54
|
+
onBlur: (event) => {
|
|
55
|
+
if (shouldValidateOnBlur)
|
|
56
|
+
runValidation(event.currentTarget.value);
|
|
57
|
+
onBlur?.(event);
|
|
58
|
+
}
|
|
59
|
+
} }));
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type SgInputTextProps } from "./SgInputText";
|
|
3
|
+
type MaskedInputProps = Omit<SgInputTextProps, "inputProps" | "error"> & {
|
|
4
|
+
inputProps: React.InputHTMLAttributes<HTMLInputElement>;
|
|
5
|
+
mask: (value: string) => string;
|
|
6
|
+
};
|
|
7
|
+
type ValidationProps = {
|
|
8
|
+
error?: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
requiredMessage?: string;
|
|
11
|
+
lengthMessage?: string;
|
|
12
|
+
invalidMessage?: string;
|
|
13
|
+
onValidation?: (message: string | null) => void;
|
|
14
|
+
validateOnBlur?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type SgInputCPFProps = Omit<MaskedInputProps, "mask"> & ValidationProps;
|
|
17
|
+
export declare function SgInputCPF(props: SgInputCPFProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export type SgInputCNPJProps = Omit<MaskedInputProps, "mask"> & ValidationProps;
|
|
19
|
+
export declare function SgInputCNPJ(props: SgInputCNPJProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export type SgInputCPFCNPJProps = Omit<MaskedInputProps, "mask"> & ValidationProps;
|
|
21
|
+
export declare function SgInputCPFCNPJ(props: SgInputCPFCNPJProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export type SgInputCEPProps = Omit<MaskedInputProps, "mask"> & ValidationProps;
|
|
23
|
+
export declare function SgInputCEP(props: SgInputCEPProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export type SgInputFoneProps = Omit<MaskedInputProps, "mask"> & ValidationProps;
|
|
25
|
+
export declare function SgInputFone(props: SgInputFoneProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=SgInputMasked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SgInputMasked.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputMasked.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAInE,KAAK,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG;IACvE,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAqCF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;AAE/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA4BhD;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;AAEhF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA4BlD;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;AAEnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA+BxD;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;AAE/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA2BhD;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;AAEhF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA6BlD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { SgInputText } from "./SgInputText";
|
|
5
|
+
import { maskCep, maskCnpj, maskCpf, maskCpfCnpj, maskPhone } from "../masks";
|
|
6
|
+
import { isValidCnpj, isValidCpf } from "../validators";
|
|
7
|
+
function onlyDigits(value) {
|
|
8
|
+
return value.replace(/\D/g, "");
|
|
9
|
+
}
|
|
10
|
+
function useValidationState(props, validateFn) {
|
|
11
|
+
const [internalError, setInternalError] = React.useState(null);
|
|
12
|
+
const runValidation = React.useCallback((value) => {
|
|
13
|
+
const message = validateFn(value);
|
|
14
|
+
setInternalError(message);
|
|
15
|
+
props.onValidation?.(message);
|
|
16
|
+
return message;
|
|
17
|
+
}, [props, validateFn]);
|
|
18
|
+
return { internalError, runValidation };
|
|
19
|
+
}
|
|
20
|
+
function applyMaskProps(props, inputMode) {
|
|
21
|
+
const { inputProps, mask } = props;
|
|
22
|
+
const onChange = inputProps.onChange;
|
|
23
|
+
return {
|
|
24
|
+
...inputProps,
|
|
25
|
+
inputMode: inputProps.inputMode ?? inputMode,
|
|
26
|
+
onChange: (event) => {
|
|
27
|
+
event.target.value = mask(event.target.value);
|
|
28
|
+
onChange?.(event);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function SgInputCPF(props) {
|
|
33
|
+
const { required, requiredMessage, lengthMessage, invalidMessage, validateOnBlur, error, ...rest } = props;
|
|
34
|
+
const { internalError, runValidation } = useValidationState(props, (value) => {
|
|
35
|
+
const digits = onlyDigits(value);
|
|
36
|
+
if (!digits && !required)
|
|
37
|
+
return null;
|
|
38
|
+
if (!digits && required)
|
|
39
|
+
return requiredMessage ?? "Informe o CPF.";
|
|
40
|
+
if (digits.length !== 11)
|
|
41
|
+
return lengthMessage ?? "CPF deve ter 11 dígitos.";
|
|
42
|
+
if (!isValidCpf(value))
|
|
43
|
+
return invalidMessage ?? "CPF inválido.";
|
|
44
|
+
return null;
|
|
45
|
+
});
|
|
46
|
+
const inputProps = applyMaskProps({ ...rest, mask: maskCpf }, "numeric");
|
|
47
|
+
const onBlur = inputProps.onBlur;
|
|
48
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
49
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
50
|
+
...inputProps,
|
|
51
|
+
onBlur: (event) => {
|
|
52
|
+
if (shouldValidateOnBlur)
|
|
53
|
+
runValidation(event.currentTarget.value);
|
|
54
|
+
onBlur?.(event);
|
|
55
|
+
}
|
|
56
|
+
} }));
|
|
57
|
+
}
|
|
58
|
+
export function SgInputCNPJ(props) {
|
|
59
|
+
const { required, requiredMessage, lengthMessage, invalidMessage, validateOnBlur, error, ...rest } = props;
|
|
60
|
+
const { internalError, runValidation } = useValidationState(props, (value) => {
|
|
61
|
+
const digits = onlyDigits(value);
|
|
62
|
+
if (!digits && !required)
|
|
63
|
+
return null;
|
|
64
|
+
if (!digits && required)
|
|
65
|
+
return requiredMessage ?? "Informe o CNPJ.";
|
|
66
|
+
if (digits.length !== 14)
|
|
67
|
+
return lengthMessage ?? "CNPJ deve ter 14 dígitos.";
|
|
68
|
+
if (!isValidCnpj(value))
|
|
69
|
+
return invalidMessage ?? "CNPJ inválido.";
|
|
70
|
+
return null;
|
|
71
|
+
});
|
|
72
|
+
const inputProps = applyMaskProps({ ...rest, mask: maskCnpj }, "numeric");
|
|
73
|
+
const onBlur = inputProps.onBlur;
|
|
74
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
75
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
76
|
+
...inputProps,
|
|
77
|
+
onBlur: (event) => {
|
|
78
|
+
if (shouldValidateOnBlur)
|
|
79
|
+
runValidation(event.currentTarget.value);
|
|
80
|
+
onBlur?.(event);
|
|
81
|
+
}
|
|
82
|
+
} }));
|
|
83
|
+
}
|
|
84
|
+
export function SgInputCPFCNPJ(props) {
|
|
85
|
+
const { required, requiredMessage, lengthMessage, invalidMessage, validateOnBlur, error, ...rest } = props;
|
|
86
|
+
const { internalError, runValidation } = useValidationState(props, (value) => {
|
|
87
|
+
const digits = onlyDigits(value);
|
|
88
|
+
if (!digits && !required)
|
|
89
|
+
return null;
|
|
90
|
+
if (!digits && required)
|
|
91
|
+
return requiredMessage ?? "Informe o documento.";
|
|
92
|
+
if (digits.length <= 11) {
|
|
93
|
+
if (digits.length !== 11)
|
|
94
|
+
return lengthMessage ?? "CPF deve ter 11 dígitos.";
|
|
95
|
+
return isValidCpf(value) ? null : (invalidMessage ?? "CPF inválido.");
|
|
96
|
+
}
|
|
97
|
+
if (digits.length !== 14)
|
|
98
|
+
return lengthMessage ?? "CNPJ deve ter 14 dígitos.";
|
|
99
|
+
return isValidCnpj(value) ? null : (invalidMessage ?? "CNPJ inválido.");
|
|
100
|
+
});
|
|
101
|
+
const inputProps = applyMaskProps({ ...rest, mask: maskCpfCnpj }, "numeric");
|
|
102
|
+
const onBlur = inputProps.onBlur;
|
|
103
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
104
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
105
|
+
...inputProps,
|
|
106
|
+
onBlur: (event) => {
|
|
107
|
+
if (shouldValidateOnBlur)
|
|
108
|
+
runValidation(event.currentTarget.value);
|
|
109
|
+
onBlur?.(event);
|
|
110
|
+
}
|
|
111
|
+
} }));
|
|
112
|
+
}
|
|
113
|
+
export function SgInputCEP(props) {
|
|
114
|
+
const { required, requiredMessage, lengthMessage, validateOnBlur, error, ...rest } = props;
|
|
115
|
+
const { internalError, runValidation } = useValidationState(props, (value) => {
|
|
116
|
+
const digits = onlyDigits(value);
|
|
117
|
+
if (!digits && !required)
|
|
118
|
+
return null;
|
|
119
|
+
if (!digits && required)
|
|
120
|
+
return requiredMessage ?? "Informe o CEP.";
|
|
121
|
+
if (digits.length !== 8)
|
|
122
|
+
return lengthMessage ?? "CEP deve ter 8 dígitos.";
|
|
123
|
+
return null;
|
|
124
|
+
});
|
|
125
|
+
const inputProps = applyMaskProps({ ...rest, mask: maskCep }, "numeric");
|
|
126
|
+
const onBlur = inputProps.onBlur;
|
|
127
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
128
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
129
|
+
...inputProps,
|
|
130
|
+
onBlur: (event) => {
|
|
131
|
+
if (shouldValidateOnBlur)
|
|
132
|
+
runValidation(event.currentTarget.value);
|
|
133
|
+
onBlur?.(event);
|
|
134
|
+
}
|
|
135
|
+
} }));
|
|
136
|
+
}
|
|
137
|
+
export function SgInputFone(props) {
|
|
138
|
+
const { required, requiredMessage, lengthMessage, invalidMessage, validateOnBlur, error, ...rest } = props;
|
|
139
|
+
const { internalError, runValidation } = useValidationState(props, (value) => {
|
|
140
|
+
const digits = onlyDigits(value);
|
|
141
|
+
if (!digits && !required)
|
|
142
|
+
return null;
|
|
143
|
+
if (!digits && required)
|
|
144
|
+
return requiredMessage ?? "Informe o telefone.";
|
|
145
|
+
if (digits.length !== 10 && digits.length !== 11) {
|
|
146
|
+
return lengthMessage ?? invalidMessage ?? "Telefone inválido.";
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
});
|
|
150
|
+
const inputProps = applyMaskProps({ ...rest, mask: maskPhone }, "numeric");
|
|
151
|
+
const onBlur = inputProps.onBlur;
|
|
152
|
+
const shouldValidateOnBlur = validateOnBlur ?? true;
|
|
153
|
+
return (_jsx(SgInputText, { ...rest, error: error ?? internalError ?? undefined, inputProps: {
|
|
154
|
+
...inputProps,
|
|
155
|
+
onBlur: (event) => {
|
|
156
|
+
if (shouldValidateOnBlur)
|
|
157
|
+
runValidation(event.currentTarget.value);
|
|
158
|
+
onBlur?.(event);
|
|
159
|
+
}
|
|
160
|
+
} }));
|
|
161
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { FieldValues, RegisterOptions, UseFormRegister } from "react-hook-form";
|
|
3
|
+
import type { RhfFieldProps } from "../rhf";
|
|
4
|
+
export type SgInputNumberProps = {
|
|
5
|
+
id: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
labelText?: string;
|
|
8
|
+
hintText?: string;
|
|
9
|
+
prefixText?: string;
|
|
10
|
+
suffixText?: string;
|
|
11
|
+
decimals?: number;
|
|
12
|
+
allowNegative?: boolean;
|
|
13
|
+
emptyValue?: "null" | "zero";
|
|
14
|
+
error?: string;
|
|
15
|
+
type?: React.HTMLInputTypeAttribute;
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
labelClassName?: string;
|
|
19
|
+
inputProps?: (React.InputHTMLAttributes<HTMLInputElement> & {
|
|
20
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
21
|
+
});
|
|
22
|
+
maxValue?: number;
|
|
23
|
+
minValue?: number;
|
|
24
|
+
minValueMessage?: string;
|
|
25
|
+
maxValueMessage?: string;
|
|
26
|
+
prefixIcon?: React.ReactNode;
|
|
27
|
+
width?: number | string;
|
|
28
|
+
clearButton?: boolean;
|
|
29
|
+
filled?: boolean;
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
textInputType?: React.InputHTMLAttributes<HTMLInputElement>["inputMode"];
|
|
32
|
+
onEnter?: () => void;
|
|
33
|
+
onExit?: () => void;
|
|
34
|
+
onChange?: (value: string) => void;
|
|
35
|
+
onClear?: () => void;
|
|
36
|
+
withBorder?: boolean;
|
|
37
|
+
borderRadius?: number | string;
|
|
38
|
+
required?: boolean;
|
|
39
|
+
requiredMessage?: string;
|
|
40
|
+
iconButtons?: React.ReactNode[];
|
|
41
|
+
readOnly?: boolean;
|
|
42
|
+
validation?: (value: string) => string | null;
|
|
43
|
+
validateOnBlur?: boolean;
|
|
44
|
+
onValidation?: (message: string | null) => void;
|
|
45
|
+
register?: UseFormRegister<FieldValues>;
|
|
46
|
+
rules?: RegisterOptions<FieldValues>;
|
|
47
|
+
} & RhfFieldProps;
|
|
48
|
+
export declare function SgInputNumber(props: SgInputNumberProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
//# sourceMappingURL=SgInputNumber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SgInputNumber.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputNumber.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAGV,WAAW,EACX,eAAe,EACf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG;QAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CACtC,GAAG,aAAa,CAAC;AA4gBlB,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAuDtD"}
|