@a-type/ui 6.1.42 → 6.1.44
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/components/forms/CheckboxField.js +1 -1
- package/dist/components/forms/CheckboxField.js.map +1 -1
- package/dist/components/forms/EmojiField.js +1 -1
- package/dist/components/forms/EmojiField.js.map +1 -1
- package/dist/components/forms/Field.d.ts +3 -0
- package/dist/components/forms/Field.js +30 -0
- package/dist/components/forms/Field.js.map +1 -1
- package/dist/components/forms/Field.module.css +10 -3
- package/dist/components/forms/FormError.d.ts +17 -0
- package/dist/components/forms/FormError.js +79 -0
- package/dist/components/forms/FormError.js.map +1 -0
- package/dist/components/forms/FormikForm.d.ts +2 -0
- package/dist/components/forms/FormikForm.js +2 -0
- package/dist/components/forms/FormikForm.js.map +1 -1
- package/dist/components/forms/FormikForm.stories.d.ts +1 -0
- package/dist/components/forms/FormikForm.stories.js +5 -1
- package/dist/components/forms/FormikForm.stories.js.map +1 -1
- package/dist/components/forms/NumberStepperField.js +1 -1
- package/dist/components/forms/NumberStepperField.js.map +1 -1
- package/dist/components/forms/SwitchField.js +1 -1
- package/dist/components/forms/SwitchField.js.map +1 -1
- package/dist/components/forms/TextField.js +5 -4
- package/dist/components/forms/TextField.js.map +1 -1
- package/dist/components/forms/ToggleGroupField.js +1 -1
- package/dist/components/forms/ToggleGroupField.js.map +1 -1
- package/dist/components/input/Input.module.css +10 -0
- package/dist/hooks/useTitleBarColor.js +0 -1
- package/dist/hooks/useTitleBarColor.js.map +1 -1
- package/package.json +1 -1
- package/src/components/forms/CheckboxField.tsx +1 -0
- package/src/components/forms/EmojiField.tsx +1 -0
- package/src/components/forms/Field.module.css +10 -3
- package/src/components/forms/Field.tsx +42 -0
- package/src/components/forms/FormError.tsx +127 -0
- package/src/components/forms/FormikForm.stories.tsx +6 -0
- package/src/components/forms/FormikForm.tsx +3 -0
- package/src/components/forms/NumberStepperField.tsx +1 -0
- package/src/components/forms/SwitchField.tsx +1 -0
- package/src/components/forms/TextField.tsx +21 -4
- package/src/components/forms/ToggleGroupField.tsx +1 -0
- package/src/components/input/Input.module.css +10 -0
- package/src/hooks/useTitleBarColor.ts +0 -1
|
@@ -20,6 +20,6 @@ export function CheckboxField(_a) {
|
|
|
20
20
|
const id = useIdOrGenerated(providedId);
|
|
21
21
|
return (_jsxs(Field, { horizontal: true, className: className, style: style, id: id, children: [_jsx(Field.Control, { render: _jsx(Checkbox, Object.assign({}, props, { checked: props.checked, onCheckedChange: (v) => {
|
|
22
22
|
tools.setValue(!!v);
|
|
23
|
-
} }, rest)) }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description })] }));
|
|
23
|
+
} }, rest)) }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=CheckboxField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxField.js","sourceRoot":"","sources":["../../../src/components/forms/CheckboxField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAYnC,MAAM,UAAU,aAAa,CAAC,EAST;QATS,EAC7B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,OAES,EADjB,IAAI,cARsB,wEAS7B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC3D,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,QAAQ,oBACJ,KAAK,IACT,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;wBACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC,IACG,IAAI,EACP,GAEF,EACD,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,
|
|
1
|
+
{"version":3,"file":"CheckboxField.js","sourceRoot":"","sources":["../../../src/components/forms/CheckboxField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAYnC,MAAM,UAAU,aAAa,CAAC,EAST;QATS,EAC7B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,OAES,EADjB,IAAI,cARsB,wEAS7B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC3D,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,QAAQ,oBACJ,KAAK,IACT,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;wBACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC,IACG,IAAI,EACP,GAEF,EACD,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,EACpE,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;AACH,CAAC"}
|
|
@@ -32,6 +32,6 @@ export function EmojiField(_a) {
|
|
|
32
32
|
: () => {
|
|
33
33
|
tools.setValue('');
|
|
34
34
|
setOpen(false);
|
|
35
|
-
}, id: id }) })] }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description })] }));
|
|
35
|
+
}, id: id }) })] }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=EmojiField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiField.js","sourceRoot":"","sources":["../../../src/components/forms/EmojiField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,MAAM,UAAU,UAAU,CAAC,EAST;QATS,EAC1B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,EACX,KAAK,OAEY,EADd,IAAI,cARmB,wEAS1B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC3D,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACzC,KAAC,KAAK,CAAC,OAAO,IAAC,MAAM,EAAE,8BAAO,IAAI,EAAC,QAAQ,IAAK,KAAK,EAAI,GAAI,EAC7D,KAAC,OAAO,CAAC,OAAO,IACf,MAAM,EACL,KAAC,MAAM,kBACN,EAAE,EAAE,GAAG,EAAE,UAAU,gBACR,cAAc,EACzB,IAAI,EAAC,SAAS,EACd,QAAQ,EAAC,OAAO,IACZ,IAAI,cAER,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,GAAG,CAAC,WAAW,YACrC,KAAK,CAAC,KAAK,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACxB,IACN,GAET,EACF,KAAC,OAAO,CAAC,OAAO,cACf,KAAC,WAAW,IACX,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;gCACpB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gCAClB,OAAO,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC,EACD,OAAO,EACN,QAAQ;gCACP,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,GAAG,EAAE;oCACL,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oCACnB,OAAO,CAAC,KAAK,CAAC,CAAC;gCACf,CAAC,EAEL,EAAE,EAAE,EAAE,GACL,GACe,IACT,EACT,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,
|
|
1
|
+
{"version":3,"file":"EmojiField.js","sourceRoot":"","sources":["../../../src/components/forms/EmojiField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,MAAM,UAAU,UAAU,CAAC,EAST;QATS,EAC1B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,EACX,KAAK,OAEY,EADd,IAAI,cARmB,wEAS1B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC3D,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACzC,KAAC,KAAK,CAAC,OAAO,IAAC,MAAM,EAAE,8BAAO,IAAI,EAAC,QAAQ,IAAK,KAAK,EAAI,GAAI,EAC7D,KAAC,OAAO,CAAC,OAAO,IACf,MAAM,EACL,KAAC,MAAM,kBACN,EAAE,EAAE,GAAG,EAAE,UAAU,gBACR,cAAc,EACzB,IAAI,EAAC,SAAS,EACd,QAAQ,EAAC,OAAO,IACZ,IAAI,cAER,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,GAAG,CAAC,WAAW,YACrC,KAAK,CAAC,KAAK,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACxB,IACN,GAET,EACF,KAAC,OAAO,CAAC,OAAO,cACf,KAAC,WAAW,IACX,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;gCACpB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gCAClB,OAAO,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC,EACD,OAAO,EACN,QAAQ;gCACP,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,GAAG,EAAE;oCACL,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oCACnB,OAAO,CAAC,KAAK,CAAC,CAAC;gCACf,CAAC,EAEL,EAAE,EAAE,EAAE,GACL,GACe,IACT,EACT,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,EACpE,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { UseRenderComponentProps } from '@base-ui/react';
|
|
2
2
|
import { ComponentProps } from 'react';
|
|
3
3
|
import { SlotDiv, SlotDivProps } from '../utility/SlotDiv.js';
|
|
4
|
+
import { FormErrorProps } from './FormError.js';
|
|
4
5
|
export interface FieldRootProps extends SlotDivProps {
|
|
5
6
|
horizontal?: boolean;
|
|
6
7
|
stretch?: boolean;
|
|
@@ -14,9 +15,11 @@ declare function FieldRoot({ className, horizontal, stretch, reverse, id, ...pro
|
|
|
14
15
|
declare function FieldControl({ className, ref, ...props }: ComponentProps<typeof SlotDiv>): import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
declare function FieldLabel({ className, ref, render, ...props }: UseRenderComponentProps<'label'>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
16
17
|
declare function FieldDescription({ className, render, ref, ...props }: UseRenderComponentProps<'div'>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
18
|
+
declare function FieldError({ className, ...props }: FormErrorProps): import("react/jsx-runtime").JSX.Element;
|
|
17
19
|
export declare const Field: typeof FieldRoot & {
|
|
18
20
|
Label: typeof FieldLabel;
|
|
19
21
|
Description: typeof FieldDescription;
|
|
20
22
|
Control: typeof FieldControl;
|
|
23
|
+
Error: typeof FieldError;
|
|
21
24
|
};
|
|
22
25
|
export {};
|
|
@@ -16,6 +16,7 @@ import { createContext, useContext, useEffect, useRef, useState, } from 'react';
|
|
|
16
16
|
import useMergedRef from '../../hooks/useMergedRef.js';
|
|
17
17
|
import { SlotDiv } from '../utility/SlotDiv.js';
|
|
18
18
|
import cls from './Field.module.css';
|
|
19
|
+
import { FormError } from './FormError.js';
|
|
19
20
|
const FieldContext = createContext({
|
|
20
21
|
events: new EventTarget(),
|
|
21
22
|
});
|
|
@@ -46,6 +47,23 @@ function FieldControl(_a) {
|
|
|
46
47
|
events.removeEventListener('description-visible', onDescriptionVisible);
|
|
47
48
|
};
|
|
48
49
|
}, [events, id]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (!id)
|
|
52
|
+
return;
|
|
53
|
+
function onErrorVisible(event) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
if (event.detail === true) {
|
|
56
|
+
(_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-errormessage', `${id}-error`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
(_b = innerRef.current) === null || _b === void 0 ? void 0 : _b.removeAttribute('aria-errormessage');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
events.addEventListener('error-visible', onErrorVisible);
|
|
63
|
+
return () => {
|
|
64
|
+
events.removeEventListener('error-visible', onErrorVisible);
|
|
65
|
+
};
|
|
66
|
+
}, [events, id]);
|
|
49
67
|
return (_jsx(SlotDiv, Object.assign({ className: clsx(cls.control, className), id: id, ref: finalRef }, props)));
|
|
50
68
|
}
|
|
51
69
|
function FieldLabel(_a) {
|
|
@@ -74,9 +92,21 @@ function FieldDescription(_a) {
|
|
|
74
92
|
ref,
|
|
75
93
|
});
|
|
76
94
|
}
|
|
95
|
+
function FieldError(_a) {
|
|
96
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
97
|
+
const { id, events } = useContext(FieldContext);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
events.dispatchEvent(new CustomEvent('error-visible', { detail: true }));
|
|
100
|
+
return () => {
|
|
101
|
+
events.dispatchEvent(new CustomEvent('error-visible', { detail: false }));
|
|
102
|
+
};
|
|
103
|
+
}, [events]);
|
|
104
|
+
return (_jsx(FormError, Object.assign({ className: clsx(cls.error, className), id: id ? `${id}-error` : undefined, inputId: id }, props)));
|
|
105
|
+
}
|
|
77
106
|
export const Field = Object.assign(FieldRoot, {
|
|
78
107
|
Label: FieldLabel,
|
|
79
108
|
Description: FieldDescription,
|
|
80
109
|
Control: FieldControl,
|
|
110
|
+
Error: FieldError,
|
|
81
111
|
});
|
|
82
112
|
//# sourceMappingURL=Field.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/forms/Field.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAA2B,MAAM,gBAAgB,CAAC;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAEN,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAC;AACf,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAgB,MAAM,uBAAuB,CAAC;AAC9D,OAAO,GAAG,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/forms/Field.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@layer components {.root {
|
|
2
2
|
display: grid;
|
|
3
|
-
grid-template-areas: 'label' 'control' 'description';
|
|
3
|
+
grid-template-areas: 'label' 'control' 'description' 'error';
|
|
4
4
|
justify-content: start;
|
|
5
5
|
border: none;
|
|
6
6
|
padding: 0;
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
&[data-horizontal] {
|
|
10
10
|
flex-direction: row;
|
|
11
11
|
align-items: center;
|
|
12
|
-
grid-template-areas: 'control label' 'description description';
|
|
12
|
+
grid-template-areas: 'control label' 'description description' 'error error';
|
|
13
13
|
grid-template-columns: auto 1fr;
|
|
14
14
|
&[data-reverse] {
|
|
15
|
-
grid-template-areas: 'label control' 'description description';
|
|
15
|
+
grid-template-areas: 'label control' 'description description' 'error error';
|
|
16
16
|
grid-template-columns: auto 1fr;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -61,4 +61,11 @@
|
|
|
61
61
|
margin-top: var(--m-sp-sm);
|
|
62
62
|
margin-left: calc(var(--m-global-shape-roundness) * var(--m-sp-md));
|
|
63
63
|
}
|
|
64
|
+
|
|
65
|
+
.error {
|
|
66
|
+
grid-area: error;
|
|
67
|
+
font-style: italic;
|
|
68
|
+
margin-top: var(--m-sp-sm);
|
|
69
|
+
margin-left: calc(var(--m-global-shape-roundness) * var(--m-sp-md));
|
|
70
|
+
}
|
|
64
71
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TypographyProps } from '../typography/typography.js';
|
|
2
|
+
export interface FormErrorProps extends TypographyProps {
|
|
3
|
+
/**
|
|
4
|
+
* Filter to a single field
|
|
5
|
+
*/
|
|
6
|
+
fieldName?: string;
|
|
7
|
+
/**
|
|
8
|
+
* When to show an error, paired with fieldName.
|
|
9
|
+
*/
|
|
10
|
+
condition?: 'touched' | 'always' | 'dirty';
|
|
11
|
+
/**
|
|
12
|
+
* Connect to an HTML input to also display native
|
|
13
|
+
* HTML validation errors.
|
|
14
|
+
*/
|
|
15
|
+
inputId?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function FormError({ fieldName, condition, inputId, ...rest }: FormErrorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useFormikContext } from 'formik';
|
|
14
|
+
import { useEffect, useState } from 'react';
|
|
15
|
+
import { Text } from '../typography/typography.js';
|
|
16
|
+
export function FormError(_a) {
|
|
17
|
+
var { fieldName, condition = 'touched', inputId } = _a, rest = __rest(_a, ["fieldName", "condition", "inputId"]);
|
|
18
|
+
const { errors, touched, dirty } = useFormikContext();
|
|
19
|
+
const nativeError = useNativeError(inputId);
|
|
20
|
+
if (condition === 'dirty' && !dirty) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (fieldName) {
|
|
24
|
+
const error = nativeError || errors[fieldName];
|
|
25
|
+
if (error) {
|
|
26
|
+
if (condition === 'touched' && !touched[fieldName]) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return (_jsx(Text, Object.assign({ emphasis: "ambient", color: "attention" }, rest, { children: _jsx(FormErrorFormatted, { error: error }) })));
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const errorMessages = Object.values(errors)
|
|
34
|
+
.flat()
|
|
35
|
+
.filter((e) => !!e)
|
|
36
|
+
.concat(nativeError ? [nativeError] : []);
|
|
37
|
+
if (errorMessages.length === 0) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return (_jsx(Text, Object.assign({ emphasis: "ambient", color: "attention" }, rest, { children: _jsx(FormErrorFormatted, { error: errorMessages }) })));
|
|
41
|
+
}
|
|
42
|
+
function FormErrorFormatted({ error, }) {
|
|
43
|
+
if (typeof error === 'string') {
|
|
44
|
+
return _jsx("span", { children: error });
|
|
45
|
+
}
|
|
46
|
+
else if (Array.isArray(error)) {
|
|
47
|
+
return (_jsx("span", { children: error.map((err, index) => (_jsx(FormErrorFormatted, { error: err }, index))) }));
|
|
48
|
+
}
|
|
49
|
+
else if (typeof error === 'object' && error !== null) {
|
|
50
|
+
return (_jsx("span", { children: Object.entries(error).map(([, err], index) => (_jsxs("span", { children: [_jsx(FormErrorFormatted, { error: err }), index < Object.entries(error).length - 1 ? ', ' : ''] }, index))) }));
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
function useNativeError(inputId) {
|
|
55
|
+
const [nativeError, setNativeError] = useState(null);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!inputId)
|
|
58
|
+
return;
|
|
59
|
+
const input = document.getElementById(inputId);
|
|
60
|
+
if (!input) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
function handleInput() {
|
|
64
|
+
var _a;
|
|
65
|
+
if (input === null || input === void 0 ? void 0 : input.validity.valid) {
|
|
66
|
+
setNativeError(null);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
setNativeError((_a = input === null || input === void 0 ? void 0 : input.validationMessage) !== null && _a !== void 0 ? _a : 'Validation error');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
input.addEventListener('input', handleInput);
|
|
73
|
+
return () => {
|
|
74
|
+
input.removeEventListener('input', handleInput);
|
|
75
|
+
};
|
|
76
|
+
}, [inputId]);
|
|
77
|
+
return nativeError;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=FormError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormError.js","sourceRoot":"","sources":["../../../src/components/forms/FormError.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FormikConfig, FormikValues } from 'formik';
|
|
2
2
|
import { CheckboxField } from './CheckboxField.js';
|
|
3
3
|
import { EmojiField } from './EmojiField.js';
|
|
4
|
+
import { FormError } from './FormError.js';
|
|
4
5
|
import { NumberStepperField } from './NumberStepperField.js';
|
|
5
6
|
import { SubmitButton } from './SubmitButton.js';
|
|
6
7
|
import { SwitchField } from './SwitchField.js';
|
|
@@ -22,4 +23,5 @@ export declare const FormikForm: typeof FormikFormRoot & {
|
|
|
22
23
|
Item: import("react").FunctionComponent<import("@base-ui/react").Toggle.Props<string> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
23
24
|
};
|
|
24
25
|
EmojiField: typeof EmojiField;
|
|
26
|
+
Error: typeof FormError;
|
|
25
27
|
};
|
|
@@ -15,6 +15,7 @@ import { useCallback } from 'react';
|
|
|
15
15
|
import { CheckboxField } from './CheckboxField.js';
|
|
16
16
|
import { EmojiField } from './EmojiField.js';
|
|
17
17
|
import { Form } from './Form.js';
|
|
18
|
+
import { FormError } from './FormError.js';
|
|
18
19
|
import { NumberStepperField } from './NumberStepperField.js';
|
|
19
20
|
import { SubmitButton } from './SubmitButton.js';
|
|
20
21
|
import { SwitchField } from './SwitchField.js';
|
|
@@ -46,5 +47,6 @@ export const FormikForm = Object.assign(FormikFormRoot, {
|
|
|
46
47
|
SwitchField,
|
|
47
48
|
ToggleGroupField,
|
|
48
49
|
EmojiField,
|
|
50
|
+
Error: FormError,
|
|
49
51
|
});
|
|
50
52
|
//# sourceMappingURL=FormikForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormikForm.js","sourceRoot":"","sources":["../../../src/components/forms/FormikForm.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAA6C,MAAM,QAAQ,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,UAAU,cAAc,CAA8B,EAMlC;QANkC,EAC3D,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,OAEiB,EADtB,KAAK,cALmD,8CAM3D,CADQ;IAER,MAAM,eAAe,GAAG,WAAW,CAClC,KAAK,EAAE,MAAc,EAAE,GAA0B,EAAE,EAAE;QACpD,IAAI,CAAC;YACJ,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAM,EAAE,GAAG,CAAC,CAAA,CAAC;QACtC,CAAC;gBAAS,CAAC;YACV,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC,EACD,CAAC,QAAQ,CAAC,CACV,CAAC;IAEF,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,CACN,KAAC,MAAM,kBAAS,QAAQ,EAAE,eAAe,IAAM,KAAK,cAClD,CAAC,MAAM,EAAE,EAAE,CAAC,CACZ,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACtC,QAAQ,CAAC,MAAM,CAAC,GACX,CACP,IACO,CACT,CAAC;IACH,CAAC;IAED,OAAO,CACN,KAAC,MAAM,kBAAS,QAAQ,EAAE,eAAe,IAAM,KAAK,cACnD,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACtC,QAAQ,GACH,IACC,CACT,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;IACvD,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,UAAU;
|
|
1
|
+
{"version":3,"file":"FormikForm.js","sourceRoot":"","sources":["../../../src/components/forms/FormikForm.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAA6C,MAAM,QAAQ,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,UAAU,cAAc,CAA8B,EAMlC;QANkC,EAC3D,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,OAEiB,EADtB,KAAK,cALmD,8CAM3D,CADQ;IAER,MAAM,eAAe,GAAG,WAAW,CAClC,KAAK,EAAE,MAAc,EAAE,GAA0B,EAAE,EAAE;QACpD,IAAI,CAAC;YACJ,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAM,EAAE,GAAG,CAAC,CAAA,CAAC;QACtC,CAAC;gBAAS,CAAC;YACV,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC,EACD,CAAC,QAAQ,CAAC,CACV,CAAC;IAEF,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,CACN,KAAC,MAAM,kBAAS,QAAQ,EAAE,eAAe,IAAM,KAAK,cAClD,CAAC,MAAM,EAAE,EAAE,CAAC,CACZ,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACtC,QAAQ,CAAC,MAAM,CAAC,GACX,CACP,IACO,CACT,CAAC;IACH,CAAC;IAED,OAAO,CACN,KAAC,MAAM,kBAAS,QAAQ,EAAE,eAAe,IAAM,KAAK,cACnD,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACtC,QAAQ,GACH,IACC,CACT,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;IACvD,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,UAAU;IAEV,KAAK,EAAE,SAAS;CAChB,CAAC,CAAC"}
|
|
@@ -18,6 +18,7 @@ declare const meta: {
|
|
|
18
18
|
Item: import("react").FunctionComponent<import("@base-ui/react").Toggle.Props<string> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
19
19
|
};
|
|
20
20
|
EmojiField: typeof EmojiField;
|
|
21
|
+
Error: typeof import("./FormError.js").FormError;
|
|
21
22
|
};
|
|
22
23
|
argTypes: {};
|
|
23
24
|
parameters: {
|
|
@@ -43,7 +43,11 @@ export const Default = {
|
|
|
43
43
|
newsletter: false,
|
|
44
44
|
plan: 'basic',
|
|
45
45
|
emoji: '',
|
|
46
|
-
}
|
|
46
|
+
}, validate: (values) => {
|
|
47
|
+
if (!values.email.endsWith('.com')) {
|
|
48
|
+
return { email: 'Email must end with .com' };
|
|
49
|
+
}
|
|
50
|
+
} }, args, { children: [_jsx(TextField, { name: "email", type: "email", label: "Email", placeholder: "you@example.com" }), _jsx(TextField, { name: "password", type: "password", label: "Password", minLength: 8, description: "Make it a good one" }), _jsx(NumberStepperField, { name: "age", label: "Age", min: 13, max: 100, description: "You can mail your government ID to us, don't worry, we're the good guys" }), _jsx(CheckboxField, { name: "tos", label: "I agree", description: "To what? Not telling." }), _jsx(SwitchField, { name: "newsletter", label: "Subscribe to newsletter", description: "Don't worry, we don't bother you much" }), _jsxs(ToggleGroupField, { type: "single", name: "plan", label: "Select your plan", required: true, description: "Please do the expensive one!!!", children: [_jsx(ToggleGroupField.Item, { value: "basic", children: "Basic" }), _jsx(ToggleGroupField.Item, { value: "pro", children: "Pro" }), _jsx(ToggleGroupField.Item, { value: "enterprise", className: "@mode-accent", children: "Enterprise" })] }), _jsx(EmojiField, { name: "emoji", label: "Favorite Emoji" }), _jsx(SubmitButton, { children: "Sign up" })] })));
|
|
47
51
|
},
|
|
48
52
|
};
|
|
49
53
|
//# sourceMappingURL=FormikForm.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormikForm.stories.js","sourceRoot":"","sources":["../../../src/components/forms/FormikForm.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,IAAI,GAAG;IACZ,KAAK,EAAE,iBAAiB;IACxB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE;QACX,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC5B;CACiC,CAAC;AAEpC,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC7B,IAAI,EAAE;QACL,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;KACD;IACD,MAAM,CAAC,EAA6B;YAA7B,EAAE,aAAa,EAAE,CAAC,OAAW,EAAN,IAAI,cAA3B,iBAA6B,CAAF;QACjC,OAAO,CACN,MAAC,UAAU,kBACV,aAAa,EAAE;gBACd,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,GAAG,EAAE,EAAE;gBACP,GAAG,EAAE,KAAK;gBACV,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE;aACT,IACG,IAAI,eAER,KAAC,SAAS,IACT,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,iBAAiB,GAC5B,EACF,KAAC,SAAS,IACT,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,UAAU,EAChB,WAAW,EAAC,oBAAoB,GAC/B,EACF,KAAC,kBAAkB,IAClB,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,KAAK,EACX,GAAG,EAAE,EAAE,EACP,GAAG,EAAE,GAAG,EACR,WAAW,EAAC,yEAAyE,GACpF,EACF,KAAC,aAAa,IACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,SAAS,EACf,WAAW,EAAC,uBAAuB,GAClC,EACF,KAAC,WAAW,IACX,IAAI,EAAC,YAAY,EACjB,KAAK,EAAC,yBAAyB,EAC/B,WAAW,EAAC,uCAAuC,GAClD,EACF,MAAC,gBAAgB,IAChB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,kBAAkB,EACxB,QAAQ,QACR,WAAW,EAAC,gCAAgC,aAE5C,KAAC,gBAAgB,CAAC,IAAI,IAAC,KAAK,EAAC,OAAO,sBAA8B,EAClE,KAAC,gBAAgB,CAAC,IAAI,IAAC,KAAK,EAAC,KAAK,oBAA4B,EAC9D,KAAC,gBAAgB,CAAC,IAAI,IAAC,KAAK,EAAC,YAAY,EAAC,SAAS,EAAC,cAAc,2BAE1C,IACN,EACnB,KAAC,UAAU,IAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,gBAAgB,GAAG,EAClD,KAAC,YAAY,0BAAuB,KACxB,CACb,CAAC;IACH,CAAC;CACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"FormikForm.stories.js","sourceRoot":"","sources":["../../../src/components/forms/FormikForm.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,6 @@ export function NumberStepperField(_a) {
|
|
|
21
21
|
return (_jsxs(Field, { className: className, style: style, id: id, children: [label && _jsx(Field.Label, { children: label }), _jsx(Field.Control, { render: (composed) => (_jsxs(_Fragment, { children: [_jsx("input", Object.assign({ type: "hidden" }, props, composed)), _jsx(NumberStepper, Object.assign({ value: field.value, onChange: (v) => {
|
|
22
22
|
tools.setValue(v);
|
|
23
23
|
onChange === null || onChange === void 0 ? void 0 : onChange(v);
|
|
24
|
-
} }, rest))] })) }), description && _jsx(Field.Description, { children: description })] }));
|
|
24
|
+
} }, rest))] })) }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=NumberStepperField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberStepperField.js","sourceRoot":"","sources":["../../../src/components/forms/NumberStepperField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EACN,aAAa,GAEb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBnC,MAAM,UAAU,kBAAkB,CAAC,EAST;QATS,EAClC,IAAI,EACJ,KAAK,EACL,SAAS,EACT,KAAK,EACL,EAAE,EAAE,UAAU,EACd,QAAQ,EACR,WAAW,OAEc,EADtB,IAAI,cAR2B,wEASlC,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC/C,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC5C,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrB,8BACC,8BAAO,IAAI,EAAC,QAAQ,IAAK,KAAK,EAAM,QAAQ,EAAI,EAChD,KAAC,aAAa,kBACb,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACf,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gCAClB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,CAAC,CAAC;4BACf,CAAC,IACG,IAAI,EACP,IACA,CACH,GACA,EACD,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,
|
|
1
|
+
{"version":3,"file":"NumberStepperField.js","sourceRoot":"","sources":["../../../src/components/forms/NumberStepperField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EACN,aAAa,GAEb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBnC,MAAM,UAAU,kBAAkB,CAAC,EAST;QATS,EAClC,IAAI,EACJ,KAAK,EACL,SAAS,EACT,KAAK,EACL,EAAE,EAAE,UAAU,EACd,QAAQ,EACR,WAAW,OAEc,EADtB,IAAI,cAR2B,wEASlC,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAC/C,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC5C,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrB,8BACC,8BAAO,IAAI,EAAC,QAAQ,IAAK,KAAK,EAAM,QAAQ,EAAI,EAChD,KAAC,aAAa,kBACb,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACf,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gCAClB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,CAAC,CAAC;4BACf,CAAC,IACG,IAAI,EACP,IACA,CACH,GACA,EACD,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,EACpE,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;AACH,CAAC"}
|
|
@@ -20,6 +20,6 @@ export function SwitchField(_a) {
|
|
|
20
20
|
const id = useIdOrGenerated(providedId);
|
|
21
21
|
return (_jsxs(Field, { horizontal: true, className: className, id: id, children: [_jsx(Field.Control, { render: _jsx(Switch, Object.assign({}, props, { checked: props.checked, onCheckedChange: (v) => {
|
|
22
22
|
tools.setValue(!!v);
|
|
23
|
-
} }, rest)) }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description })] }));
|
|
23
|
+
} }, rest)) }), label && _jsx(Field.Label, { children: label }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=SwitchField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchField.js","sourceRoot":"","sources":["../../../src/components/forms/SwitchField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,MAAM,UAAU,WAAW,CAAC,EAQT;QARS,EAC3B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,OAEO,EADf,IAAI,cAPoB,+DAQ3B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,aAC7C,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,MAAM,oBACF,KAAK,IACT,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;wBACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC,IACG,IAAI,EACP,GAEF,EACD,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,
|
|
1
|
+
{"version":3,"file":"SwitchField.js","sourceRoot":"","sources":["../../../src/components/forms/SwitchField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,MAAM,UAAU,WAAW,CAAC,EAQT;QARS,EAC3B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,EAAE,EAAE,UAAU,EACd,WAAW,OAEO,EADf,IAAI,cAPoB,+DAQ3B,CADO;IAEP,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CACN,MAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,aAC7C,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,MAAM,oBACF,KAAK,IACT,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;wBACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC,IACG,IAAI,EACP,GAEF,EACD,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,cAAE,KAAK,GAAe,EAC3C,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,EACpE,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;AACH,CAAC"}
|
|
@@ -22,7 +22,7 @@ import cls from './TextField.module.css';
|
|
|
22
22
|
const emptyRef = (() => { });
|
|
23
23
|
export const TextField = function TextField(_a) {
|
|
24
24
|
var { ref, name, label, className, style, autoFocusDelay, autoFocus, inputRef, onChange, onFocus, onBlur, id: providedId, inputClassName, description } = _a, rest = __rest(_a, ["ref", "name", "label", "className", "style", "autoFocusDelay", "autoFocus", "inputRef", "onChange", "onFocus", "onBlur", "id", "inputClassName", "description"]);
|
|
25
|
-
const [props] = useField({
|
|
25
|
+
const [props, meta] = useField({
|
|
26
26
|
name,
|
|
27
27
|
onChange,
|
|
28
28
|
onFocus,
|
|
@@ -38,11 +38,12 @@ export const TextField = function TextField(_a) {
|
|
|
38
38
|
}, autoFocusDelay);
|
|
39
39
|
}
|
|
40
40
|
}, [autoFocusDelay]);
|
|
41
|
-
|
|
41
|
+
const showError = meta.touched && !!meta.error && meta.error.length > 0;
|
|
42
|
+
return (_jsxs(Field, { className: clsx(showError && '@mode-attention', className), style: style, stretch: true, ref: ref, id: id, children: [label && _jsx(Field.Label, { children: label }), _jsx(Field.Control, { render: _jsx(Input, Object.assign({}, props, rest, { autoFocus: autoFocus, className: clsx(cls.input, inputClassName), ref: useMergedRef(innerInputRef, inputRef || emptyRef), "aria-invalid": showError })) }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
42
43
|
};
|
|
43
44
|
export function TextAreaField(_a) {
|
|
44
45
|
var { name, label, className, style, inputRef, onKeyDown, submitOnEnter, id: providedId, textAreaClassName, description, ref } = _a, rest = __rest(_a, ["name", "label", "className", "style", "inputRef", "onKeyDown", "submitOnEnter", "id", "textAreaClassName", "description", "ref"]);
|
|
45
|
-
const [props] = useField(name);
|
|
46
|
+
const [props, meta] = useField(name);
|
|
46
47
|
const { submitForm } = useFormikContext();
|
|
47
48
|
const onKeyDownInner = useCallback((e) => {
|
|
48
49
|
if (submitOnEnter && e.key === 'Enter' && !e.shiftKey) {
|
|
@@ -52,6 +53,6 @@ export function TextAreaField(_a) {
|
|
|
52
53
|
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
53
54
|
}, [submitOnEnter, onKeyDown, submitForm]);
|
|
54
55
|
const id = useIdOrGenerated(providedId);
|
|
55
|
-
return (_jsxs(Field, { stretch: true, className: className, style: style, ref: ref, id: id, children: [label && _jsx(Field.Label, { children: label }), _jsx(Field.Control, { render: _jsx(TextArea, Object.assign({ ref: inputRef }, props, rest, { className: clsx(cls.input, textAreaClassName), onKeyDown: onKeyDownInner })) }), description && _jsx(Field.Description, { children: description })] }));
|
|
56
|
+
return (_jsxs(Field, { stretch: true, className: clsx(meta.error && '@mode-attention', className), style: style, ref: ref, id: id, children: [label && _jsx(Field.Label, { children: label }), _jsx(Field.Control, { render: _jsx(TextArea, Object.assign({ ref: inputRef }, props, rest, { className: clsx(cls.input, textAreaClassName), onKeyDown: onKeyDownInner })) }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
56
57
|
}
|
|
57
58
|
//# sourceMappingURL=TextField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.js","sourceRoot":"","sources":["../../../src/components/forms/TextField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAKN,WAAW,EACX,SAAS,EACT,MAAM,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAiB,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,GAAG,MAAM,wBAAwB,CAAC;AAazC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAQ,CAAC;AAEnC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,SAAS,CAAC,EAgB3B;QAhB2B,EAC3C,GAAG,EACH,IAAI,EACJ,KAAK,EACL,SAAS,EACT,KAAK,EACL,cAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,EAAE,EAAE,UAAU,EACd,cAAc,EACd,WAAW,OAEK,EADb,IAAI,cAfoC,iKAgB3C,CADO;IAEP,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"TextField.js","sourceRoot":"","sources":["../../../src/components/forms/TextField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ function ToggleGroupFieldDefault(_a) {
|
|
|
25
25
|
else {
|
|
26
26
|
tools.setValue(v[0]);
|
|
27
27
|
}
|
|
28
|
-
}, multiple: multiple || type === 'multiple' }, props)) }), description && _jsx(Field.Description, { children: description })] }));
|
|
28
|
+
}, multiple: multiple || type === 'multiple' }, props)) }), description && _jsx(Field.Description, { children: description }), _jsx(Field.Error, { fieldName: name })] }));
|
|
29
29
|
}
|
|
30
30
|
export const ToggleGroupField = Object.assign(ToggleGroupFieldDefault, {
|
|
31
31
|
Item: ToggleGroup.Item,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleGroupField.js","sourceRoot":"","sources":["../../../src/components/forms/ToggleGroupField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAoB,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBnC,SAAS,uBAAuB,CAAC,EAWD;QAXC,EAChC,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,EACL,IAAI,GAAG,QAAQ,EACf,QAAQ,EACR,WAAW,EACX,EAAE,EAAE,UAAU,OAEiB,EAD5B,KAAK,cAVwB,4FAWhC,CADQ;IAER,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,iBAAG,IAAI,EAAE,QAAQ,IAAK,KAAK,EAAG,CAAC;IAEtE,OAAO,CACN,MAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAY,aACrE,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,IAAC,MAAM,EAAE,kBAAU,YAAG,KAAK,GAAe,EAChE,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,WAAW,oBACP,UAAU,IACd,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;wBACpB,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;4BACrC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACnB,CAAC;6BAAM,CAAC;4BACP,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtB,CAAC;oBACF,CAAC,EACD,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,UAAU,IACrC,KAAK,EACR,GAEF,EACD,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,
|
|
1
|
+
{"version":3,"file":"ToggleGroupField.js","sourceRoot":"","sources":["../../../src/components/forms/ToggleGroupField.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAoB,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAgBnC,SAAS,uBAAuB,CAAC,EAWD;QAXC,EAChC,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,EACL,IAAI,GAAG,QAAQ,EACf,QAAQ,EACR,WAAW,EACX,EAAE,EAAE,UAAU,OAEiB,EAD5B,KAAK,cAVwB,4FAWhC,CADQ;IAER,MAAM,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,iBAAG,IAAI,EAAE,QAAQ,IAAK,KAAK,EAAG,CAAC;IAEtE,OAAO,CACN,MAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAY,aACrE,KAAK,IAAI,KAAC,KAAK,CAAC,KAAK,IAAC,MAAM,EAAE,kBAAU,YAAG,KAAK,GAAe,EAChE,KAAC,KAAK,CAAC,OAAO,IACb,MAAM,EACL,KAAC,WAAW,oBACP,UAAU,IACd,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;wBACpB,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;4BACrC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACnB,CAAC;6BAAM,CAAC;4BACP,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtB,CAAC;oBACF,CAAC,EACD,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,UAAU,IACrC,KAAK,EACR,GAEF,EACD,WAAW,IAAI,KAAC,KAAK,CAAC,WAAW,cAAE,WAAW,GAAqB,EACpE,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE;IACtE,IAAI,EAAE,WAAW,CAAC,IAAI;CACtB,CAAC,CAAC"}
|
|
@@ -57,6 +57,16 @@
|
|
|
57
57
|
line-height: var(--m-prose-secondary-lineHeight);
|
|
58
58
|
font-weight: var(--m-prose-secondary-weight);
|
|
59
59
|
|
|
60
|
+
&:has(input:invalid:not(:focus)),
|
|
61
|
+
&:has(textarea:invalid:not(:focus)),
|
|
62
|
+
&:has([contenteditable]:invalid:not(:focus)),
|
|
63
|
+
&:has(input[aria-invalid='true']:not(:focus)),
|
|
64
|
+
&:has(textarea[aria-invalid='true']:not(:focus)),
|
|
65
|
+
&:has([contenteditable][aria-invalid='true']:not(:focus)) {
|
|
66
|
+
@apply --mx-borderColor(var(--m-color-attention-heavy));
|
|
67
|
+
@apply --mx-bg(var(--m-color-attention-wash));
|
|
68
|
+
}
|
|
69
|
+
|
|
60
70
|
&:has(input:disabled),
|
|
61
71
|
&:has(textarea:disabled),
|
|
62
72
|
&:has([contenteditable]:disabled) {
|
|
@@ -27,7 +27,6 @@ function changeThemeColor(color) {
|
|
|
27
27
|
document.head.appendChild(metaThemeColor);
|
|
28
28
|
}
|
|
29
29
|
metaThemeColor === null || metaThemeColor === void 0 ? void 0 : metaThemeColor.setAttribute('content', color);
|
|
30
|
-
console.log('set title bar color', color);
|
|
31
30
|
}
|
|
32
31
|
export function useTitleBarColor(color) {
|
|
33
32
|
const colorMode = useResolvedColorMode();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTitleBarColor.js","sourceRoot":"","sources":["../../src/hooks/useTitleBarColor.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,IAAI,YAAY,GAAG,SAAS,CAAC;AAC7B,SAAS,eAAe;;IACvB,OAAO,MAAA,QAAQ;SACb,aAAa,CAAC,wBAAwB,CAAC,0CACtC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AACD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;IACrC,YAAY,GAAG,MAAA,eAAe,EAAE,mCAAI,YAAY,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACtC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO;IACR,CAAC;IACD,gCAAgC;IAChC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACtE,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IACD,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useTitleBarColor.js","sourceRoot":"","sources":["../../src/hooks/useTitleBarColor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.root {
|
|
2
2
|
display: grid;
|
|
3
|
-
grid-template-areas: 'label' 'control' 'description';
|
|
3
|
+
grid-template-areas: 'label' 'control' 'description' 'error';
|
|
4
4
|
justify-content: start;
|
|
5
5
|
border: none;
|
|
6
6
|
padding: 0;
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
&[data-horizontal] {
|
|
10
10
|
flex-direction: row;
|
|
11
11
|
align-items: center;
|
|
12
|
-
grid-template-areas: 'control label' 'description description';
|
|
12
|
+
grid-template-areas: 'control label' 'description description' 'error error';
|
|
13
13
|
grid-template-columns: auto 1fr;
|
|
14
14
|
&[data-reverse] {
|
|
15
|
-
grid-template-areas: 'label control' 'description description';
|
|
15
|
+
grid-template-areas: 'label control' 'description description' 'error error';
|
|
16
16
|
grid-template-columns: auto 1fr;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -61,3 +61,10 @@
|
|
|
61
61
|
margin-top: var(--m-sp-sm);
|
|
62
62
|
margin-left: calc(var(--m-global-shape-roundness) * var(--m-sp-md));
|
|
63
63
|
}
|
|
64
|
+
|
|
65
|
+
.error {
|
|
66
|
+
grid-area: error;
|
|
67
|
+
font-style: italic;
|
|
68
|
+
margin-top: var(--m-sp-sm);
|
|
69
|
+
margin-left: calc(var(--m-global-shape-roundness) * var(--m-sp-md));
|
|
70
|
+
}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import useMergedRef from '../../hooks/useMergedRef.js';
|
|
12
12
|
import { SlotDiv, SlotDivProps } from '../utility/SlotDiv.js';
|
|
13
13
|
import cls from './Field.module.css';
|
|
14
|
+
import { FormError, FormErrorProps } from './FormError.js';
|
|
14
15
|
|
|
15
16
|
export interface FieldRootProps extends SlotDivProps {
|
|
16
17
|
horizontal?: boolean;
|
|
@@ -80,6 +81,26 @@ function FieldControl({
|
|
|
80
81
|
};
|
|
81
82
|
}, [events, id]);
|
|
82
83
|
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (!id) return;
|
|
86
|
+
|
|
87
|
+
function onErrorVisible(event: CustomEvent) {
|
|
88
|
+
if (event.detail === true) {
|
|
89
|
+
innerRef.current?.setAttribute('aria-errormessage', `${id}-error`);
|
|
90
|
+
} else {
|
|
91
|
+
innerRef.current?.removeAttribute('aria-errormessage');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
events.addEventListener('error-visible', onErrorVisible as EventListener);
|
|
96
|
+
return () => {
|
|
97
|
+
events.removeEventListener(
|
|
98
|
+
'error-visible',
|
|
99
|
+
onErrorVisible as EventListener,
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
}, [events, id]);
|
|
103
|
+
|
|
83
104
|
return (
|
|
84
105
|
<SlotDiv
|
|
85
106
|
className={clsx(cls.control, className)}
|
|
@@ -140,8 +161,29 @@ function FieldDescription({
|
|
|
140
161
|
});
|
|
141
162
|
}
|
|
142
163
|
|
|
164
|
+
function FieldError({ className, ...props }: FormErrorProps) {
|
|
165
|
+
const { id, events } = useContext(FieldContext);
|
|
166
|
+
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
events.dispatchEvent(new CustomEvent('error-visible', { detail: true }));
|
|
169
|
+
return () => {
|
|
170
|
+
events.dispatchEvent(new CustomEvent('error-visible', { detail: false }));
|
|
171
|
+
};
|
|
172
|
+
}, [events]);
|
|
173
|
+
|
|
174
|
+
return (
|
|
175
|
+
<FormError
|
|
176
|
+
className={clsx(cls.error, className)}
|
|
177
|
+
id={id ? `${id}-error` : undefined}
|
|
178
|
+
inputId={id}
|
|
179
|
+
{...props}
|
|
180
|
+
/>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
143
184
|
export const Field = Object.assign(FieldRoot, {
|
|
144
185
|
Label: FieldLabel,
|
|
145
186
|
Description: FieldDescription,
|
|
146
187
|
Control: FieldControl,
|
|
188
|
+
Error: FieldError,
|
|
147
189
|
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { FormikErrors, useFormikContext } from 'formik';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Text, TypographyProps } from '../typography/typography.js';
|
|
4
|
+
|
|
5
|
+
export interface FormErrorProps extends TypographyProps {
|
|
6
|
+
/**
|
|
7
|
+
* Filter to a single field
|
|
8
|
+
*/
|
|
9
|
+
fieldName?: string;
|
|
10
|
+
/**
|
|
11
|
+
* When to show an error, paired with fieldName.
|
|
12
|
+
*/
|
|
13
|
+
condition?: 'touched' | 'always' | 'dirty';
|
|
14
|
+
/**
|
|
15
|
+
* Connect to an HTML input to also display native
|
|
16
|
+
* HTML validation errors.
|
|
17
|
+
*/
|
|
18
|
+
inputId?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function FormError({
|
|
22
|
+
fieldName,
|
|
23
|
+
condition = 'touched',
|
|
24
|
+
inputId,
|
|
25
|
+
...rest
|
|
26
|
+
}: FormErrorProps) {
|
|
27
|
+
const { errors, touched, dirty } = useFormikContext<any>();
|
|
28
|
+
const nativeError = useNativeError(inputId);
|
|
29
|
+
|
|
30
|
+
if (condition === 'dirty' && !dirty) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (fieldName) {
|
|
35
|
+
const error = nativeError || errors[fieldName];
|
|
36
|
+
if (error) {
|
|
37
|
+
if (condition === 'touched' && !touched[fieldName]) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return (
|
|
41
|
+
<Text emphasis="ambient" color="attention" {...rest}>
|
|
42
|
+
<FormErrorFormatted error={error} />
|
|
43
|
+
</Text>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const errorMessages = Object.values(errors)
|
|
50
|
+
.flat()
|
|
51
|
+
.filter((e): e is string | FormikErrors<any> => !!e)
|
|
52
|
+
.concat(nativeError ? [nativeError] : []);
|
|
53
|
+
|
|
54
|
+
if (errorMessages.length === 0) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<Text emphasis="ambient" color="attention" {...rest}>
|
|
60
|
+
<FormErrorFormatted error={errorMessages} />
|
|
61
|
+
</Text>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function FormErrorFormatted({
|
|
66
|
+
error,
|
|
67
|
+
}: {
|
|
68
|
+
error?:
|
|
69
|
+
| string
|
|
70
|
+
| FormikErrors<any>
|
|
71
|
+
| string[]
|
|
72
|
+
| FormikErrors<any>[]
|
|
73
|
+
| (string | FormikErrors<any>)[];
|
|
74
|
+
}) {
|
|
75
|
+
if (typeof error === 'string') {
|
|
76
|
+
return <span>{error}</span>;
|
|
77
|
+
} else if (Array.isArray(error)) {
|
|
78
|
+
return (
|
|
79
|
+
<span>
|
|
80
|
+
{error.map((err, index) => (
|
|
81
|
+
<FormErrorFormatted key={index} error={err} />
|
|
82
|
+
))}
|
|
83
|
+
</span>
|
|
84
|
+
);
|
|
85
|
+
} else if (typeof error === 'object' && error !== null) {
|
|
86
|
+
return (
|
|
87
|
+
<span>
|
|
88
|
+
{Object.entries(error).map(([, err], index) => (
|
|
89
|
+
<span key={index}>
|
|
90
|
+
<FormErrorFormatted error={err} />
|
|
91
|
+
{index < Object.entries(error).length - 1 ? ', ' : ''}
|
|
92
|
+
</span>
|
|
93
|
+
))}
|
|
94
|
+
</span>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function useNativeError(inputId?: string) {
|
|
101
|
+
const [nativeError, setNativeError] = useState<string | null>(null);
|
|
102
|
+
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
if (!inputId) return;
|
|
105
|
+
|
|
106
|
+
const input = document.getElementById(inputId) as HTMLInputElement | null;
|
|
107
|
+
if (!input) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function handleInput() {
|
|
112
|
+
if (input?.validity.valid) {
|
|
113
|
+
setNativeError(null);
|
|
114
|
+
} else {
|
|
115
|
+
setNativeError(input?.validationMessage ?? 'Validation error');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
input.addEventListener('input', handleInput);
|
|
120
|
+
|
|
121
|
+
return () => {
|
|
122
|
+
input.removeEventListener('input', handleInput);
|
|
123
|
+
};
|
|
124
|
+
}, [inputId]);
|
|
125
|
+
|
|
126
|
+
return nativeError;
|
|
127
|
+
}
|
|
@@ -39,6 +39,11 @@ export const Default: Story = {
|
|
|
39
39
|
plan: 'basic',
|
|
40
40
|
emoji: '',
|
|
41
41
|
}}
|
|
42
|
+
validate={(values) => {
|
|
43
|
+
if (!values.email.endsWith('.com')) {
|
|
44
|
+
return { email: 'Email must end with .com' };
|
|
45
|
+
}
|
|
46
|
+
}}
|
|
42
47
|
{...args}
|
|
43
48
|
>
|
|
44
49
|
<TextField
|
|
@@ -51,6 +56,7 @@ export const Default: Story = {
|
|
|
51
56
|
name="password"
|
|
52
57
|
type="password"
|
|
53
58
|
label="Password"
|
|
59
|
+
minLength={8}
|
|
54
60
|
description="Make it a good one"
|
|
55
61
|
/>
|
|
56
62
|
<NumberStepperField
|
|
@@ -3,6 +3,7 @@ import { useCallback } from 'react';
|
|
|
3
3
|
import { CheckboxField } from './CheckboxField.js';
|
|
4
4
|
import { EmojiField } from './EmojiField.js';
|
|
5
5
|
import { Form } from './Form.js';
|
|
6
|
+
import { FormError } from './FormError.js';
|
|
6
7
|
import { NumberStepperField } from './NumberStepperField.js';
|
|
7
8
|
import { SubmitButton } from './SubmitButton.js';
|
|
8
9
|
import { SwitchField } from './SwitchField.js';
|
|
@@ -66,4 +67,6 @@ export const FormikForm = Object.assign(FormikFormRoot, {
|
|
|
66
67
|
SwitchField,
|
|
67
68
|
ToggleGroupField,
|
|
68
69
|
EmojiField,
|
|
70
|
+
|
|
71
|
+
Error: FormError,
|
|
69
72
|
});
|
|
@@ -46,7 +46,7 @@ export const TextField = function TextField({
|
|
|
46
46
|
description,
|
|
47
47
|
...rest
|
|
48
48
|
}: TextFieldProps) {
|
|
49
|
-
const [props] = useField({
|
|
49
|
+
const [props, meta] = useField({
|
|
50
50
|
name,
|
|
51
51
|
onChange,
|
|
52
52
|
onFocus,
|
|
@@ -63,8 +63,16 @@ export const TextField = function TextField({
|
|
|
63
63
|
}
|
|
64
64
|
}, [autoFocusDelay]);
|
|
65
65
|
|
|
66
|
+
const showError = meta.touched && !!meta.error && meta.error.length > 0;
|
|
67
|
+
|
|
66
68
|
return (
|
|
67
|
-
<Field
|
|
69
|
+
<Field
|
|
70
|
+
className={clsx(showError && '@mode-attention', className)}
|
|
71
|
+
style={style}
|
|
72
|
+
stretch
|
|
73
|
+
ref={ref}
|
|
74
|
+
id={id}
|
|
75
|
+
>
|
|
68
76
|
{label && <Field.Label>{label}</Field.Label>}
|
|
69
77
|
<Field.Control
|
|
70
78
|
render={
|
|
@@ -74,10 +82,12 @@ export const TextField = function TextField({
|
|
|
74
82
|
autoFocus={autoFocus}
|
|
75
83
|
className={clsx(cls.input, inputClassName)}
|
|
76
84
|
ref={useMergedRef(innerInputRef, inputRef || emptyRef)}
|
|
85
|
+
aria-invalid={showError}
|
|
77
86
|
/>
|
|
78
87
|
}
|
|
79
88
|
/>
|
|
80
89
|
{description && <Field.Description>{description}</Field.Description>}
|
|
90
|
+
<Field.Error fieldName={name} />
|
|
81
91
|
</Field>
|
|
82
92
|
);
|
|
83
93
|
};
|
|
@@ -110,7 +120,7 @@ export function TextAreaField({
|
|
|
110
120
|
ref,
|
|
111
121
|
...rest
|
|
112
122
|
}: TextAreaFieldProps) {
|
|
113
|
-
const [props] = useField(name);
|
|
123
|
+
const [props, meta] = useField(name);
|
|
114
124
|
const { submitForm } = useFormikContext();
|
|
115
125
|
const onKeyDownInner = useCallback(
|
|
116
126
|
(e: KeyboardEvent<HTMLInputElement>) => {
|
|
@@ -125,7 +135,13 @@ export function TextAreaField({
|
|
|
125
135
|
const id = useIdOrGenerated(providedId);
|
|
126
136
|
|
|
127
137
|
return (
|
|
128
|
-
<Field
|
|
138
|
+
<Field
|
|
139
|
+
stretch
|
|
140
|
+
className={clsx(meta.error && '@mode-attention', className)}
|
|
141
|
+
style={style}
|
|
142
|
+
ref={ref}
|
|
143
|
+
id={id}
|
|
144
|
+
>
|
|
129
145
|
{label && <Field.Label>{label}</Field.Label>}
|
|
130
146
|
<Field.Control
|
|
131
147
|
render={
|
|
@@ -139,6 +155,7 @@ export function TextAreaField({
|
|
|
139
155
|
}
|
|
140
156
|
/>
|
|
141
157
|
{description && <Field.Description>{description}</Field.Description>}
|
|
158
|
+
<Field.Error fieldName={name} />
|
|
142
159
|
</Field>
|
|
143
160
|
);
|
|
144
161
|
}
|
|
@@ -57,6 +57,16 @@
|
|
|
57
57
|
line-height: var(--m-prose-secondary-lineHeight);
|
|
58
58
|
font-weight: var(--m-prose-secondary-weight);
|
|
59
59
|
|
|
60
|
+
&:has(input:invalid:not(:focus)),
|
|
61
|
+
&:has(textarea:invalid:not(:focus)),
|
|
62
|
+
&:has([contenteditable]:invalid:not(:focus)),
|
|
63
|
+
&:has(input[aria-invalid='true']:not(:focus)),
|
|
64
|
+
&:has(textarea[aria-invalid='true']:not(:focus)),
|
|
65
|
+
&:has([contenteditable][aria-invalid='true']:not(:focus)) {
|
|
66
|
+
@apply --mx-borderColor(var(--m-color-attention-heavy));
|
|
67
|
+
@apply --mx-bg(var(--m-color-attention-wash));
|
|
68
|
+
}
|
|
69
|
+
|
|
60
70
|
&:has(input:disabled),
|
|
61
71
|
&:has(textarea:disabled),
|
|
62
72
|
&:has([contenteditable]:disabled) {
|