@pindoba/react-tanstack-form 0.0.0-alpha-20261008173743 → 0.0.0-alpha-20261110151933
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/src/FormCheckbox.d.ts +3 -4
- package/dist/src/FormCheckbox.d.ts.map +1 -1
- package/dist/src/FormField.d.ts +3 -4
- package/dist/src/FormField.d.ts.map +1 -1
- package/dist/src/FormInput.d.ts +3 -4
- package/dist/src/FormInput.d.ts.map +1 -1
- package/dist/src/FormSelect.d.ts +3 -4
- package/dist/src/FormSelect.d.ts.map +1 -1
- package/dist/src/FormSelect.js +4 -4
- package/dist/src/FormSelect.js.map +1 -1
- package/dist/src/FormSubmit.d.ts +6 -5
- package/dist/src/FormSubmit.d.ts.map +1 -1
- package/dist/src/FormSubmit.js +13 -6
- package/dist/src/FormSubmit.js.map +1 -1
- package/dist/src/FormTextarea.d.ts +3 -4
- package/dist/src/FormTextarea.d.ts.map +1 -1
- package/dist/src/field-errors.js +1 -2
- package/dist/src/types.d.ts +4 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/useFocusInvalidOnSubmit.d.ts +1 -2
- package/dist/src/useFocusInvalidOnSubmit.d.ts.map +1 -1
- package/dist/src/useFocusInvalidOnSubmit.js +4 -2
- package/dist/src/useFocusInvalidOnSubmit.js.map +1 -1
- package/package.json +20 -25
- package/dist/src/types.js +0 -1
|
@@ -7,8 +7,8 @@ import { FieldSize } from "@pindoba/core-field";
|
|
|
7
7
|
* `data-*`, …). Routed through `passThrough.input.props` so they land on the
|
|
8
8
|
* `<input>`, not the Checkbox's root `<label>`.
|
|
9
9
|
*/
|
|
10
|
-
type FormCheckboxAttributes = Omit<InputHTMLAttributes<HTMLInputElement>, Exclude<FormControlReservedAttribute, "value"> | "type">;
|
|
11
|
-
type FormCheckboxProps = Omit<FormFieldOwnProps, "size"> & FormCheckboxAttributes & {
|
|
10
|
+
export type FormCheckboxAttributes = Omit<InputHTMLAttributes<HTMLInputElement>, Exclude<FormControlReservedAttribute, "value"> | "type">;
|
|
11
|
+
export type FormCheckboxProps = Omit<FormFieldOwnProps, "size"> & FormCheckboxAttributes & {
|
|
12
12
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
13
13
|
form: AnyFormApi;
|
|
14
14
|
/**
|
|
@@ -28,7 +28,6 @@ type FormCheckboxProps = Omit<FormFieldOwnProps, "size"> & FormCheckboxAttribute
|
|
|
28
28
|
ref?: React.Ref<HTMLInputElement>;
|
|
29
29
|
};
|
|
30
30
|
/** FormCheckbox — a `<Checkbox>` bound to a boolean TanStack form field. */
|
|
31
|
-
declare const FormCheckbox: React.ForwardRefExoticComponent<Omit<FormCheckboxProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
31
|
+
export declare const FormCheckbox: React.ForwardRefExoticComponent<Omit<FormCheckboxProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
32
32
|
//#endregion
|
|
33
|
-
export { FormCheckbox, FormCheckboxAttributes, FormCheckboxProps };
|
|
34
33
|
//# sourceMappingURL=FormCheckbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormCheckbox.d.ts","names":[],"sources":["../../src/FormCheckbox.tsx"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FormCheckbox.d.ts","names":[],"sources":["../../src/FormCheckbox.tsx"],"mappings":";;;;;;;;;YAuBY,yBAAyB,KACnC,oBAAoB,mBAEpB,QAAQ;YAGE,oBAAoB,KAAK,6BACnC;;EAEE,MAAM;;;;;EAKN;;EAEA,WAAW;;EAEX,OAAO,QAAQ;;;;;;EAMf,MAAM,MAAM,IAAI;;;qBAIP,cAAY,MAAA,0BAAA,KAAA,4BAAA,MAAA,cAAA"}
|
package/dist/src/FormField.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AnyFieldApi, AnyFormApi, FormFieldOwnProps } from "./types.js";
|
|
|
2
2
|
import { JSX, ReactNode } from "react";
|
|
3
3
|
import { FieldControlProps } from "@pindoba/core-field";
|
|
4
4
|
//#region src/FormField.d.ts
|
|
5
|
-
type FormFieldProps = FormFieldOwnProps & {
|
|
5
|
+
export type FormFieldProps = FormFieldOwnProps & {
|
|
6
6
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
7
7
|
form: AnyFormApi;
|
|
8
8
|
/** Field name (a key of the form's data). */
|
|
@@ -20,10 +20,9 @@ type FormFieldProps = FormFieldOwnProps & {
|
|
|
20
20
|
* control via the `control` render-prop, which receives the Field's `controlProps`
|
|
21
21
|
* bag plus the raw `field` API.
|
|
22
22
|
*/
|
|
23
|
-
declare function FormField({ form, name, control, errorMode, ...fieldProps }: FormFieldProps): JSX.Element;
|
|
24
|
-
declare namespace FormField {
|
|
23
|
+
export declare function FormField({ form, name, control, errorMode, ...fieldProps }: FormFieldProps): JSX.Element;
|
|
24
|
+
export declare namespace FormField {
|
|
25
25
|
var displayName: string;
|
|
26
26
|
}
|
|
27
27
|
//#endregion
|
|
28
|
-
export { FormField, FormFieldProps };
|
|
29
28
|
//# sourceMappingURL=FormField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormField.d.ts","names":[],"sources":["../../src/FormField.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"FormField.d.ts","names":[],"sources":["../../src/FormField.tsx"],"mappings":";;;;YAOY,iBAAiB;;EAE3B,MAAM;;EAEN;;;;;EAKA,UAAU,cAAc,mBAAmB,OAAO,gBAAgB;;;;;;;;;wBAUpD,YACd,MACA,MACA,SACA,cACG,cACF,iBAAiB,IAAI;yBANR;MAAA"}
|
package/dist/src/FormInput.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import React from "react";
|
|
|
9
9
|
* The form owns the value and the Field owns the id/aria wiring, so those are
|
|
10
10
|
* reserved.
|
|
11
11
|
*/
|
|
12
|
-
type FormInputAttributes = Omit<InputProps, FormControlReservedAttribute | "type" | "placeholder" | "ref">;
|
|
13
|
-
type FormInputProps = FormFieldOwnProps & FormInputAttributes & {
|
|
12
|
+
export type FormInputAttributes = Omit<InputProps, FormControlReservedAttribute | "type" | "placeholder" | "ref">;
|
|
13
|
+
export type FormInputProps = FormFieldOwnProps & FormInputAttributes & {
|
|
14
14
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
15
15
|
form: AnyFormApi;
|
|
16
16
|
/**
|
|
@@ -34,7 +34,6 @@ type FormInputProps = FormFieldOwnProps & FormInputAttributes & {
|
|
|
34
34
|
* that isn't a Field prop (label, description, …) is forwarded to the
|
|
35
35
|
* `<input>`; consumer `onChange`/`onBlur` run after the form's own handlers.
|
|
36
36
|
*/
|
|
37
|
-
declare const FormInput: React.ForwardRefExoticComponent<Omit<FormInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
37
|
+
export declare const FormInput: React.ForwardRefExoticComponent<Omit<FormInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
38
38
|
//#endregion
|
|
39
|
-
export { FormInput, FormInputAttributes, FormInputProps };
|
|
40
39
|
//# sourceMappingURL=FormInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormInput.d.ts","names":[],"sources":["../../src/FormInput.tsx"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FormInput.d.ts","names":[],"sources":["../../src/FormInput.tsx"],"mappings":";;;;;;;;;;;YAiBY,sBAAsB,KAChC,YACA;YAGU,iBAAiB,oBAC3B;;EAEE,MAAM;;;;;EAKN;;EAEA,OAAO;;EAEP;;;;;;EAMA,MAAM,MAAM,IAAI;;;;;;;qBAQP,WAAS,MAAA,0BAAA,KAAA,yBAAA,MAAA,cAAA"}
|
package/dist/src/FormSelect.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import { ListBoxNodeInput } from "@pindoba/core-listbox";
|
|
|
9
9
|
* (`clearable`, `leading`, `listbox*`, `data-*`, `aria-*`, …). The form owns
|
|
10
10
|
* the (single) selection, so the value/selection-mode props are reserved.
|
|
11
11
|
*/
|
|
12
|
-
type FormSelectAttributes = Omit<SelectProps, FormControlReservedAttribute | "items" | "placeholder" | "selectionMode" | "onValueChange" | "ref">;
|
|
13
|
-
type FormSelectProps = Omit<FormFieldOwnProps, "size"> & FormSelectAttributes & {
|
|
12
|
+
export type FormSelectAttributes = Omit<SelectProps, FormControlReservedAttribute | "items" | "placeholder" | "selectionMode" | "onValueChange" | "ref">;
|
|
13
|
+
export type FormSelectProps = Omit<FormFieldOwnProps, "size"> & FormSelectAttributes & {
|
|
14
14
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
15
15
|
form: AnyFormApi;
|
|
16
16
|
/**
|
|
@@ -37,7 +37,6 @@ type FormSelectProps = Omit<FormFieldOwnProps, "size"> & FormSelectAttributes &
|
|
|
37
37
|
ref?: React.Ref<HTMLDivElement>;
|
|
38
38
|
};
|
|
39
39
|
/** FormSelect — a single-select `<Select>` bound to a TanStack form field. */
|
|
40
|
-
declare const FormSelect: React.ForwardRefExoticComponent<Omit<FormSelectProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
40
|
+
export declare const FormSelect: React.ForwardRefExoticComponent<Omit<FormSelectProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
41
41
|
//#endregion
|
|
42
|
-
export { FormSelect, FormSelectAttributes, FormSelectProps };
|
|
43
42
|
//# sourceMappingURL=FormSelect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSelect.d.ts","names":[],"sources":["../../src/FormSelect.tsx"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FormSelect.d.ts","names":[],"sources":["../../src/FormSelect.tsx"],"mappings":";;;;;;;;;;;YAsBY,uBAAuB,KACjC,aACE;YAQQ,kBAAkB,KAAK,6BACjC;;EAEE,MAAM;;;;;EAKN;;EAEA,OAAO;;EAEP;;EAEA,OAAO,QAAQ;;;;;EAKf;;;;;;EAMA,MAAM,MAAM,IAAI;;;qBAIP,YAAU,MAAA,0BAAA,KAAA,0BAAA,MAAA,cAAA"}
|
package/dist/src/FormSelect.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormField } from "./FormField.js";
|
|
2
|
-
import { splitFormFieldProps } from "@pindoba/core-tanstack-form";
|
|
2
|
+
import { fromSelectValue, markTouchedOnSelectClose, splitFormFieldProps, toSelectValue } from "@pindoba/core-tanstack-form";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import Select from "@pindoba/react-select";
|
|
@@ -21,10 +21,10 @@ const FormSelect = React.forwardRef(function FormSelect({ form, name, items, pla
|
|
|
21
21
|
items,
|
|
22
22
|
placeholder,
|
|
23
23
|
...autoComplete ? { passThrough: { hiddenSelect: { props: { autoComplete } } } } : {},
|
|
24
|
-
value:
|
|
25
|
-
onValueChange: (next) => field.handleChange(
|
|
24
|
+
value: toSelectValue(field.state.value),
|
|
25
|
+
onValueChange: (next) => field.handleChange(fromSelectValue(next)),
|
|
26
26
|
onOpenChange: (open) => {
|
|
27
|
-
|
|
27
|
+
markTouchedOnSelectClose(field, open);
|
|
28
28
|
onOpenChange?.(open);
|
|
29
29
|
}
|
|
30
30
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSelect.js","names":[],"sources":["../../src/FormSelect.tsx"],"sourcesContent":["import type { FieldSize } from \"@pindoba/core-field\";\nimport type { ListBoxNodeInput } from \"@pindoba/core-listbox\";\nimport {
|
|
1
|
+
{"version":3,"file":"FormSelect.js","names":[],"sources":["../../src/FormSelect.tsx"],"sourcesContent":["import type { FieldSize } from \"@pindoba/core-field\";\nimport type { ListBoxNodeInput } from \"@pindoba/core-listbox\";\nimport {\n fromSelectValue,\n markTouchedOnSelectClose,\n splitFormFieldProps,\n toSelectValue,\n} from \"@pindoba/core-tanstack-form\";\nimport Select, { type SelectProps } from \"@pindoba/react-select\";\nimport React, { type JSX } from \"react\";\nimport { FormField } from \"./FormField\";\nimport type {\n AnyFormApi,\n FormControlReservedAttribute,\n FormFieldOwnProps,\n} from \"./types\";\n\n/**\n * Select props and trigger attributes a consumer may pass through\n * (`clearable`, `leading`, `listbox*`, `data-*`, `aria-*`, …). The form owns\n * the (single) selection, so the value/selection-mode props are reserved.\n */\nexport type FormSelectAttributes = Omit<\n SelectProps,\n | FormControlReservedAttribute\n | \"items\"\n | \"placeholder\"\n | \"selectionMode\"\n | \"onValueChange\"\n | \"ref\"\n>;\n\nexport type FormSelectProps = Omit<FormFieldOwnProps, \"size\"> &\n FormSelectAttributes & {\n /** The TanStack form instance returned by `useForm(...)`. */\n form: AnyFormApi;\n /**\n * Field name (a key of the form's data holding the selected option key).\n * Also the `name` of the hidden native `<select>` mirror.\n */\n name: string;\n /** Options to choose from. */\n items: ListBoxNodeInput[];\n /** Placeholder shown when nothing is selected. */\n placeholder?: string;\n /** Size variant. Select supports `sm`/`md`/`lg` (no `xs`). */\n size?: Exclude<FieldSize, \"xs\">;\n /**\n * Autofill hint (e.g. `\"country\"`) set on the hidden native `<select>`\n * mirror, which the browser autofills and the Select syncs from.\n */\n autoComplete?: string;\n /**\n * Ref forwarded to the Select's focusable trigger (`role=\"combobox\"`) —\n * the focus target (`ref.current.focus()`).\n * @group Advanced\n */\n ref?: React.Ref<HTMLDivElement>;\n };\n\n/** FormSelect — a single-select `<Select>` bound to a TanStack form field. */\nexport const FormSelect = React.forwardRef<HTMLDivElement, FormSelectProps>(\n function FormSelect(\n { form, name, items, placeholder, autoComplete, ...rest },\n ref,\n ): JSX.Element {\n const { fieldProps, controlAttrs } = splitFormFieldProps(rest);\n const { onOpenChange, ...selectAttrs } = controlAttrs;\n return (\n <FormField\n form={form}\n name={name}\n {...fieldProps}\n control={(props, field) => (\n <Select\n {...selectAttrs}\n {...props}\n ref={ref}\n name={name}\n size={fieldProps.size}\n items={items}\n placeholder={placeholder}\n {...(autoComplete\n ? { passThrough: { hiddenSelect: { props: { autoComplete } } } }\n : {})}\n value={toSelectValue(field.state.value)}\n onValueChange={(next) => field.handleChange(fromSelectValue(next))}\n onOpenChange={(open) => {\n // Mark touched when the dropdown closes — so `errorMode=\"touched\"`\n // surfaces a required error after opening and dismissing without\n // picking.\n markTouchedOnSelectClose(field, open);\n onOpenChange?.(open);\n }}\n />\n )}\n />\n );\n },\n);\n\nFormSelect.displayName = \"FormSelect\";\n"],"mappings":";;;;;;;AA6DA,MAAa,aAAa,MAAM,WAC9B,SAAS,WACP,EAAE,MAAM,MAAM,OAAO,aAAa,cAAc,GAAG,QACnD,KACa;CACb,MAAM,EAAE,YAAY,iBAAiB,oBAAoB,IAAI;CAC7D,MAAM,EAAE,cAAc,GAAG,gBAAgB;CACzC,OACE,oBAAC,WAAD;EACQ;EACA;EACN,GAAI;EACJ,UAAU,OAAO,UACf,oBAAC,QAAD;GACE,GAAI;GACJ,GAAI;GACC;GACC;GACN,MAAM,WAAW;GACV;GACM;GACb,GAAK,eACD,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,IAC7D,CAAC;GACL,OAAO,cAAc,MAAM,MAAM,KAAK;GACtC,gBAAgB,SAAS,MAAM,aAAa,gBAAgB,IAAI,CAAC;GACjE,eAAe,SAAS;IAItB,yBAAyB,OAAO,IAAI;IACpC,eAAe,IAAI;GACrB;EACD,CAAA;CAEJ,CAAA;AAEL,CACF;AAEA,WAAW,cAAc"}
|
package/dist/src/FormSubmit.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AnyFormApi } from "./types.js";
|
|
|
2
2
|
import React, { ReactNode } from "react";
|
|
3
3
|
import { ButtonProps } from "@pindoba/react-button";
|
|
4
4
|
//#region src/FormSubmit.d.ts
|
|
5
|
-
type FormSubmitProps = {
|
|
5
|
+
export type FormSubmitProps = {
|
|
6
6
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
7
7
|
form: AnyFormApi;
|
|
8
8
|
/**
|
|
@@ -27,10 +27,11 @@ type FormSubmitProps = {
|
|
|
27
27
|
};
|
|
28
28
|
/**
|
|
29
29
|
* FormSubmit — a submit `<Button>` wired to the form's submit-readiness. While
|
|
30
|
-
* the `onSubmit` promise is in flight the
|
|
31
|
-
* (`Loading variant="busy"
|
|
30
|
+
* the `onSubmit` promise is in flight the button keeps its width and colour and
|
|
31
|
+
* its label is swapped for a spinner (`Loading variant="busy"
|
|
32
|
+
* indicator="inline"`); it's `aria-busy` and inert, not disabled — a disabled
|
|
33
|
+
* button would grey out as if the action weren't available.
|
|
32
34
|
*/
|
|
33
|
-
declare const FormSubmit: React.ForwardRefExoticComponent<Omit<FormSubmitProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
35
|
+
export declare const FormSubmit: React.ForwardRefExoticComponent<Omit<FormSubmitProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
34
36
|
//#endregion
|
|
35
|
-
export { FormSubmit, FormSubmitProps };
|
|
36
37
|
//# sourceMappingURL=FormSubmit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSubmit.d.ts","names":[],"sources":["../../src/FormSubmit.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"FormSubmit.d.ts","names":[],"sources":["../../src/FormSubmit.tsx"],"mappings":";;;;YAOY;;EAEV,MAAM;;;;;;;EAON;;EAEA,WAAW;;EAEX,OAAO;;EAEP,WAAW;;;;;;EAMX,MAAM,MAAM,IAAI;;;;;;;;;qBAUL,YAAU,MAAA,0BAAA,KAAA,0BAAA,MAAA,cAAA"}
|
package/dist/src/FormSubmit.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useStore } from "@tanstack/react-form";
|
|
2
|
+
import { getSubmitButtonState } from "@pindoba/core-tanstack-form";
|
|
2
3
|
import { jsx } from "react/jsx-runtime";
|
|
3
4
|
import React from "react";
|
|
4
5
|
import Button from "@pindoba/react-button";
|
|
@@ -6,25 +7,31 @@ import Loading from "@pindoba/react-loading";
|
|
|
6
7
|
//#region src/FormSubmit.tsx
|
|
7
8
|
/**
|
|
8
9
|
* FormSubmit — a submit `<Button>` wired to the form's submit-readiness. While
|
|
9
|
-
* the `onSubmit` promise is in flight the
|
|
10
|
-
* (`Loading variant="busy"
|
|
10
|
+
* the `onSubmit` promise is in flight the button keeps its width and colour and
|
|
11
|
+
* its label is swapped for a spinner (`Loading variant="busy"
|
|
12
|
+
* indicator="inline"`); it's `aria-busy` and inert, not disabled — a disabled
|
|
13
|
+
* button would grey out as if the action weren't available.
|
|
11
14
|
*/
|
|
12
15
|
const FormSubmit = React.forwardRef(function FormSubmit({ form, disableWhenInvalid = false, emphasis = "primary", size, children }, ref) {
|
|
13
16
|
const { canSubmit, isSubmitting } = useStore(form.store, (state) => ({
|
|
14
17
|
canSubmit: state.canSubmit,
|
|
15
18
|
isSubmitting: state.isSubmitting
|
|
16
19
|
}));
|
|
20
|
+
const button = getSubmitButtonState({
|
|
21
|
+
canSubmit,
|
|
22
|
+
isSubmitting
|
|
23
|
+
}, disableWhenInvalid);
|
|
17
24
|
return /* @__PURE__ */ jsx(Loading, {
|
|
18
|
-
loading:
|
|
25
|
+
loading: button.busy,
|
|
19
26
|
variant: "busy",
|
|
20
|
-
indicator:
|
|
27
|
+
indicator: "inline",
|
|
21
28
|
children: /* @__PURE__ */ jsx(Button, {
|
|
22
29
|
ref,
|
|
23
30
|
type: "submit",
|
|
24
31
|
emphasis,
|
|
25
32
|
size,
|
|
26
|
-
disabled:
|
|
27
|
-
"aria-busy":
|
|
33
|
+
disabled: button.disabled,
|
|
34
|
+
"aria-busy": button.ariaBusy,
|
|
28
35
|
children: children ?? "Submit"
|
|
29
36
|
})
|
|
30
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSubmit.js","names":[],"sources":["../../src/FormSubmit.tsx"],"sourcesContent":["import Button, { type ButtonProps } from \"@pindoba/react-button\";\nimport Loading from \"@pindoba/react-loading\";\nimport { useStore } from \"@tanstack/react-form\";\nimport React, { type JSX, type ReactNode } from \"react\";\nimport type { AnyFormApi } from \"./types\";\n\nexport type FormSubmitProps = {\n /** The TanStack form instance returned by `useForm(...)`. */\n form: AnyFormApi;\n /**\n * Also disable while the form is invalid (not just while submitting). Off by\n * default — the button stays clickable so submitting an invalid form surfaces\n * its errors instead of leaving the user stuck on a disabled control.\n * @default false\n */\n disableWhenInvalid?: boolean;\n /** Emphasis forwarded to the underlying `<Button>`. */\n emphasis?: ButtonProps[\"emphasis\"];\n /** Size forwarded to the underlying `<Button>`. */\n size?: ButtonProps[\"size\"];\n /** Button label content. Falls back to \"Submit\". */\n children?: ReactNode;\n /**\n * Ref forwarded to the native submit `<button>` (through the underlying\n * `<Button>`).\n * @group Advanced\n */\n ref?: React.Ref<HTMLButtonElement>;\n};\n\n/**\n * FormSubmit — a submit `<Button>` wired to the form's submit-readiness. While\n * the `onSubmit` promise is in flight the
|
|
1
|
+
{"version":3,"file":"FormSubmit.js","names":[],"sources":["../../src/FormSubmit.tsx"],"sourcesContent":["import { getSubmitButtonState } from \"@pindoba/core-tanstack-form\";\nimport Button, { type ButtonProps } from \"@pindoba/react-button\";\nimport Loading from \"@pindoba/react-loading\";\nimport { useStore } from \"@tanstack/react-form\";\nimport React, { type JSX, type ReactNode } from \"react\";\nimport type { AnyFormApi } from \"./types\";\n\nexport type FormSubmitProps = {\n /** The TanStack form instance returned by `useForm(...)`. */\n form: AnyFormApi;\n /**\n * Also disable while the form is invalid (not just while submitting). Off by\n * default — the button stays clickable so submitting an invalid form surfaces\n * its errors instead of leaving the user stuck on a disabled control.\n * @default false\n */\n disableWhenInvalid?: boolean;\n /** Emphasis forwarded to the underlying `<Button>`. */\n emphasis?: ButtonProps[\"emphasis\"];\n /** Size forwarded to the underlying `<Button>`. */\n size?: ButtonProps[\"size\"];\n /** Button label content. Falls back to \"Submit\". */\n children?: ReactNode;\n /**\n * Ref forwarded to the native submit `<button>` (through the underlying\n * `<Button>`).\n * @group Advanced\n */\n ref?: React.Ref<HTMLButtonElement>;\n};\n\n/**\n * FormSubmit — a submit `<Button>` wired to the form's submit-readiness. While\n * the `onSubmit` promise is in flight the button keeps its width and colour and\n * its label is swapped for a spinner (`Loading variant=\"busy\"\n * indicator=\"inline\"`); it's `aria-busy` and inert, not disabled — a disabled\n * button would grey out as if the action weren't available.\n */\nexport const FormSubmit = React.forwardRef<HTMLButtonElement, FormSubmitProps>(\n function FormSubmit(\n { form, disableWhenInvalid = false, emphasis = \"primary\", size, children },\n ref,\n ): JSX.Element {\n const { canSubmit, isSubmitting } = useStore(form.store, (state) => ({\n canSubmit: state.canSubmit,\n isSubmitting: state.isSubmitting,\n }));\n\n const button = getSubmitButtonState(\n { canSubmit, isSubmitting },\n disableWhenInvalid,\n );\n\n return (\n <Loading loading={button.busy} variant=\"busy\" indicator=\"inline\">\n <Button\n ref={ref}\n type=\"submit\"\n emphasis={emphasis}\n size={size}\n disabled={button.disabled}\n aria-busy={button.ariaBusy}\n >\n {children ?? \"Submit\"}\n </Button>\n </Loading>\n );\n },\n);\n\nFormSubmit.displayName = \"FormSubmit\";\n"],"mappings":";;;;;;;;;;;;;;AAsCA,MAAa,aAAa,MAAM,WAC9B,SAAS,WACP,EAAE,MAAM,qBAAqB,OAAO,WAAW,WAAW,MAAM,YAChE,KACa;CACb,MAAM,EAAE,WAAW,iBAAiB,SAAS,KAAK,QAAQ,WAAW;EACnE,WAAW,MAAM;EACjB,cAAc,MAAM;CACtB,EAAE;CAEF,MAAM,SAAS,qBACb;EAAE;EAAW;CAAa,GAC1B,kBACF;CAEA,OACE,oBAAC,SAAD;EAAS,SAAS,OAAO;EAAM,SAAQ;EAAO,WAAU;EACtD,UAAA,oBAAC,QAAD;GACO;GACL,MAAK;GACK;GACJ;GACN,UAAU,OAAO;GACjB,aAAW,OAAO;GAEjB,UAAA,YAAY;EACP,CAAA;CACD,CAAA;AAEb,CACF;AAEA,WAAW,cAAc"}
|
|
@@ -7,8 +7,8 @@ import { TextareaProps } from "@pindoba/react-textarea";
|
|
|
7
7
|
* `wrap`, `data-*`, …) plus the Textarea's own `rows`/`resize`/`autoResize`.
|
|
8
8
|
* The form owns the value and the Field owns the id/aria wiring.
|
|
9
9
|
*/
|
|
10
|
-
type FormTextareaAttributes = Omit<TextareaProps, FormControlReservedAttribute | "ref">;
|
|
11
|
-
type FormTextareaProps = FormFieldOwnProps & FormTextareaAttributes & {
|
|
10
|
+
export type FormTextareaAttributes = Omit<TextareaProps, FormControlReservedAttribute | "ref">;
|
|
11
|
+
export type FormTextareaProps = FormFieldOwnProps & FormTextareaAttributes & {
|
|
12
12
|
/** The TanStack form instance returned by `useForm(...)`. */
|
|
13
13
|
form: AnyFormApi;
|
|
14
14
|
/**
|
|
@@ -29,7 +29,6 @@ type FormTextareaProps = FormFieldOwnProps & FormTextareaAttributes & {
|
|
|
29
29
|
* `aria-describedby` / `aria-errormessage`, change + blur handlers. Consumer
|
|
30
30
|
* `onChange`/`onBlur` run after the form's own handlers.
|
|
31
31
|
*/
|
|
32
|
-
declare const FormTextarea: React.ForwardRefExoticComponent<Omit<FormTextareaProps, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
32
|
+
export declare const FormTextarea: React.ForwardRefExoticComponent<Omit<FormTextareaProps, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
33
33
|
//#endregion
|
|
34
|
-
export { FormTextarea, FormTextareaAttributes, FormTextareaProps };
|
|
35
34
|
//# sourceMappingURL=FormTextarea.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormTextarea.d.ts","names":[],"sources":["../../src/FormTextarea.tsx"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"FormTextarea.d.ts","names":[],"sources":["../../src/FormTextarea.tsx"],"mappings":";;;;;;;;;YAeY,yBAAyB,KACnC,eACA;YAGU,oBAAoB,oBAC9B;;EAEE,MAAM;;;;;EAKN;;;;;;EAMA,MAAM,MAAM,IAAI;;;;;;;;qBASP,cAAY,MAAA,0BAAA,KAAA,4BAAA,MAAA,cAAA"}
|
package/dist/src/field-errors.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { getVisibleErrors, normalizeErrors };
|
|
1
|
+
export { getVisibleErrors, normalizeErrors } from "@pindoba/core-tanstack-form";
|
package/dist/src/types.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { FieldPassThrough } from "@pindoba/core-field";
|
|
|
8
8
|
* wrapper (`<FormInput>`, `<FormTextarea>`, `<FormSelect>`, `<FormCheckbox>`). These mirror the
|
|
9
9
|
* presentational `<Field>` props; the adapter supplies `error` from TanStack.
|
|
10
10
|
*/
|
|
11
|
-
interface FormFieldOwnProps extends Omit<FormFieldBaseProps, "form" | "name" | "labelTooltip" | "passThrough"> {
|
|
11
|
+
export interface FormFieldOwnProps extends Omit<FormFieldBaseProps, "form" | "name" | "labelTooltip" | "passThrough"> {
|
|
12
12
|
/** Tooltip attached to an info trigger next to the label. */
|
|
13
13
|
labelTooltip?: ReactNode;
|
|
14
14
|
/** Per-slot escape hatch for styling and attributes. */
|
|
@@ -17,9 +17,9 @@ interface FormFieldOwnProps extends Omit<FormFieldBaseProps, "form" | "name" | "
|
|
|
17
17
|
/**
|
|
18
18
|
* Keys a convenience wrapper never forwards from its native-attribute bucket:
|
|
19
19
|
* the TanStack binding owns `form`/`name`/value, the Field owns `id` + the
|
|
20
|
-
* shared `size`/`
|
|
20
|
+
* shared `size`/`tone`/`disabled`/`required`/`passThrough` props.
|
|
21
21
|
*/
|
|
22
|
-
type FormControlReservedAttribute = "form" | "name" | "value" | "defaultValue" | "checked" | "defaultChecked" | "id" | "size" | "
|
|
22
|
+
export type FormControlReservedAttribute = "form" | "name" | "value" | "defaultValue" | "checked" | "defaultChecked" | "id" | "size" | "tone" | "disabled" | "required" | "passThrough" | "children";
|
|
23
23
|
//#endregion
|
|
24
|
-
export {
|
|
24
|
+
export type { AnyFieldApi, AnyFormApi, FormFieldErrorMode };
|
|
25
25
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/types.ts"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/types.ts"],"mappings":";;;;;;;;;;iBAciB,0BAA0B,KACzC;;EAIA,eAAe;;EAEf,cAAc;;;;;;;YAQJ"}
|
|
@@ -21,9 +21,8 @@ import { FocusInvalidOptions } from "@pindoba/core-tanstack-form";
|
|
|
21
21
|
* markers are in the DOM. TanStack Form does no DOM focus itself, so without
|
|
22
22
|
* this a keyboard user is stranded on the submit button (WCAG 3.3.1).
|
|
23
23
|
*/
|
|
24
|
-
declare function useFocusInvalidOnSubmit(form: AnyFormApi, options?: FocusInvalidOptions): {
|
|
24
|
+
export declare function useFocusInvalidOnSubmit(form: AnyFormApi, options?: FocusInvalidOptions): {
|
|
25
25
|
current: HTMLFormElement | null;
|
|
26
26
|
};
|
|
27
27
|
//#endregion
|
|
28
|
-
export { useFocusInvalidOnSubmit };
|
|
29
28
|
//# sourceMappingURL=useFocusInvalidOnSubmit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusInvalidOnSubmit.d.ts","names":[],"sources":["../../src/useFocusInvalidOnSubmit.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useFocusInvalidOnSubmit.d.ts","names":[],"sources":["../../src/useFocusInvalidOnSubmit.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;wBA6BgB,wBACd,MAAM,YACN,UAAU;EACP,SAAS"}
|
|
@@ -26,18 +26,20 @@ function useFocusInvalidOnSubmit(form, options) {
|
|
|
26
26
|
const formRef = useRef(null);
|
|
27
27
|
const submissionAttempts = useStore(form.store, (s) => s.submissionAttempts);
|
|
28
28
|
const isValidating = useStore(form.store, (s) => s.isValidating);
|
|
29
|
+
const isSubmitting = useStore(form.store, (s) => s.isSubmitting);
|
|
29
30
|
const isValid = useStore(form.store, (s) => s.isValid);
|
|
30
31
|
const trackerRef = useRef(null);
|
|
31
32
|
if (trackerRef.current === null) trackerRef.current = createSubmitFocusTracker(() => focusFirstInvalidControl(formRef.current, options), submissionAttempts);
|
|
33
|
+
const pipelineBusy = isValidating || isSubmitting;
|
|
32
34
|
useEffect(() => {
|
|
33
35
|
trackerRef.current?.({
|
|
34
36
|
submissionAttempts,
|
|
35
|
-
isValidating,
|
|
37
|
+
isValidating: pipelineBusy,
|
|
36
38
|
isValid
|
|
37
39
|
});
|
|
38
40
|
}, [
|
|
39
41
|
submissionAttempts,
|
|
40
|
-
|
|
42
|
+
pipelineBusy,
|
|
41
43
|
isValid
|
|
42
44
|
]);
|
|
43
45
|
return formRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusInvalidOnSubmit.js","names":[],"sources":["../../src/useFocusInvalidOnSubmit.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useStore } from \"@tanstack/react-form\";\nimport {\n createSubmitFocusTracker,\n focusFirstInvalidControl,\n type FocusInvalidOptions,\n} from \"@pindoba/core-tanstack-form\";\nimport type { AnyFormApi } from \"./types\";\n\n/**\n * Returns a ref to attach to your `<form>` that moves focus to the first\n * invalid control after a failed submit:\n *\n * ```tsx\n * const formRef = useFocusInvalidOnSubmit(form);\n * return (\n * <form ref={formRef} onSubmit={(e) => { e.preventDefault(); form.handleSubmit(); }}>\n * …\n * </form>\n * );\n * ```\n *\n * It reads the form's submit-attempt / validation state, and once an attempt\n * ends invalid (after async validators settle) focuses the first control marked\n * `aria-invalid=\"true\"` inside the form. The state is read via `useStore`, so\n * the focus effect runs after React has committed the error render and the\n * markers are in the DOM. TanStack Form does no DOM focus itself, so without\n * this a keyboard user is stranded on the submit button (WCAG 3.3.1).\n */\nexport function useFocusInvalidOnSubmit(\n form: AnyFormApi,\n options?: FocusInvalidOptions,\n): { current: HTMLFormElement | null } {\n // Returned as a structural `{ current }` box, not `React.RefObject`:\n // RefObject<T> means `current: T | null` on @types/react@18 but `current: T`\n // on 19, so no single RefObject spelling is a valid `<form ref>` on both.\n const formRef = useRef<HTMLFormElement | null>(null);\n\n const submissionAttempts = useStore(form.store, (s) => s.submissionAttempts);\n const isValidating = useStore(form.store, (s) => s.isValidating);\n const isValid = useStore(form.store, (s) => s.isValid);\n\n // The tracker is stateful (it remembers the last attempt count), so it must\n // survive re-renders. Seed it once with the current attempt count so a form\n // mounted mid-flight doesn't focus spuriously.\n const trackerRef = useRef<\n | ((s: {\n submissionAttempts: number;\n isValidating: boolean;\n isValid: boolean;\n }) => void)\n | null\n >(null);\n if (trackerRef.current === null) {\n trackerRef.current = createSubmitFocusTracker(\n () => focusFirstInvalidControl(formRef.current, options),\n submissionAttempts,\n );\n }\n\n // Runs after commit → aria-invalid markers are in the DOM.\n useEffect(() => {\n trackerRef.current?.({
|
|
1
|
+
{"version":3,"file":"useFocusInvalidOnSubmit.js","names":[],"sources":["../../src/useFocusInvalidOnSubmit.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useStore } from \"@tanstack/react-form\";\nimport {\n createSubmitFocusTracker,\n focusFirstInvalidControl,\n type FocusInvalidOptions,\n} from \"@pindoba/core-tanstack-form\";\nimport type { AnyFormApi } from \"./types\";\n\n/**\n * Returns a ref to attach to your `<form>` that moves focus to the first\n * invalid control after a failed submit:\n *\n * ```tsx\n * const formRef = useFocusInvalidOnSubmit(form);\n * return (\n * <form ref={formRef} onSubmit={(e) => { e.preventDefault(); form.handleSubmit(); }}>\n * …\n * </form>\n * );\n * ```\n *\n * It reads the form's submit-attempt / validation state, and once an attempt\n * ends invalid (after async validators settle) focuses the first control marked\n * `aria-invalid=\"true\"` inside the form. The state is read via `useStore`, so\n * the focus effect runs after React has committed the error render and the\n * markers are in the DOM. TanStack Form does no DOM focus itself, so without\n * this a keyboard user is stranded on the submit button (WCAG 3.3.1).\n */\nexport function useFocusInvalidOnSubmit(\n form: AnyFormApi,\n options?: FocusInvalidOptions,\n): { current: HTMLFormElement | null } {\n // Returned as a structural `{ current }` box, not `React.RefObject`:\n // RefObject<T> means `current: T | null` on @types/react@18 but `current: T`\n // on 19, so no single RefObject spelling is a valid `<form ref>` on both.\n const formRef = useRef<HTMLFormElement | null>(null);\n\n const submissionAttempts = useStore(form.store, (s) => s.submissionAttempts);\n const isValidating = useStore(form.store, (s) => s.isValidating);\n // TanStack's `handleSubmit` bumps `submissionAttempts` in a store write of\n // its own, then flags `isSubmitting`, and only then awaits the validators —\n // so a pristine form still reads `isValid: true` when the attempt lands.\n // The whole submit pipeline counts as \"still validating\"; the attempt is\n // judged once `isSubmitting` drops.\n const isSubmitting = useStore(form.store, (s) => s.isSubmitting);\n const isValid = useStore(form.store, (s) => s.isValid);\n\n // The tracker is stateful (it remembers the last attempt count), so it must\n // survive re-renders. Seed it once with the current attempt count so a form\n // mounted mid-flight doesn't focus spuriously.\n const trackerRef = useRef<\n | ((s: {\n submissionAttempts: number;\n isValidating: boolean;\n isValid: boolean;\n }) => void)\n | null\n >(null);\n if (trackerRef.current === null) {\n trackerRef.current = createSubmitFocusTracker(\n () => focusFirstInvalidControl(formRef.current, options),\n submissionAttempts,\n );\n }\n\n // Runs after commit → aria-invalid markers are in the DOM.\n const pipelineBusy = isValidating || isSubmitting;\n useEffect(() => {\n trackerRef.current?.({\n submissionAttempts,\n isValidating: pipelineBusy,\n isValid,\n });\n }, [submissionAttempts, pipelineBusy, isValid]);\n\n return formRef;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,wBACd,MACA,SACqC;CAIrC,MAAM,UAAU,OAA+B,IAAI;CAEnD,MAAM,qBAAqB,SAAS,KAAK,QAAQ,MAAM,EAAE,kBAAkB;CAC3E,MAAM,eAAe,SAAS,KAAK,QAAQ,MAAM,EAAE,YAAY;CAM/D,MAAM,eAAe,SAAS,KAAK,QAAQ,MAAM,EAAE,YAAY;CAC/D,MAAM,UAAU,SAAS,KAAK,QAAQ,MAAM,EAAE,OAAO;CAKrD,MAAM,aAAa,OAOjB,IAAI;CACN,IAAI,WAAW,YAAY,MACzB,WAAW,UAAU,+BACb,yBAAyB,QAAQ,SAAS,OAAO,GACvD,kBACF;CAIF,MAAM,eAAe,gBAAgB;CACrC,gBAAgB;EACd,WAAW,UAAU;GACnB;GACA,cAAc;GACd;EACF,CAAC;CACH,GAAG;EAAC;EAAoB;EAAc;CAAO,CAAC;CAE9C,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pindoba/react-tanstack-form",
|
|
3
|
-
"version": "0.0.0-alpha-
|
|
3
|
+
"version": "0.0.0-alpha-20261110151933",
|
|
4
4
|
"homepage": "https://github.com/EduardoLopes/pindoba/tree/main/packages/blocks/react/tanstack-form#README.md",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,39 +20,34 @@
|
|
|
20
20
|
".": {
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
22
|
"import": "./dist/index.js"
|
|
23
|
-
}
|
|
24
|
-
"./demos": "./src/demos/index.ts",
|
|
25
|
-
"./demos/basic": "./src/demos/basic.tsx",
|
|
26
|
-
"./demos/mixed-controls": "./src/demos/mixed-controls.tsx",
|
|
27
|
-
"./demos/generic-field": "./src/demos/generic-field.tsx",
|
|
28
|
-
"./demos/textarea": "./src/demos/textarea.tsx"
|
|
23
|
+
}
|
|
29
24
|
},
|
|
30
25
|
"devDependencies": {
|
|
26
|
+
"@pindoba/build-config": "0.0.0",
|
|
31
27
|
"@pindoba/typescript-config": "0.0.0-alpha-20260320034942",
|
|
32
|
-
"@types/react": "^19.
|
|
33
|
-
"@types/react-dom": "^19.
|
|
34
|
-
"react": "^19.
|
|
35
|
-
"react-dom": "^19.
|
|
36
|
-
"tsdown": "^0.
|
|
28
|
+
"@types/react": "^19.3.0",
|
|
29
|
+
"@types/react-dom": "^19.3.0",
|
|
30
|
+
"react": "^19.3.0",
|
|
31
|
+
"react-dom": "^19.3.0",
|
|
32
|
+
"tsdown": "^0.23.0",
|
|
37
33
|
"typescript": "^6.0.3",
|
|
38
|
-
"zod": "^4.5
|
|
34
|
+
"zod": "^4.6.5"
|
|
39
35
|
},
|
|
40
36
|
"peerDependencies": {
|
|
41
37
|
"react": "^18.3.1 || ^19.0.0"
|
|
42
38
|
},
|
|
43
39
|
"dependencies": {
|
|
44
|
-
"@pindoba/core-field": "0.0.0-alpha-
|
|
45
|
-
"@pindoba/core-listbox": "0.0.0-alpha-
|
|
46
|
-
"@pindoba/core-tanstack-form": "0.0.0-alpha-
|
|
47
|
-
"@pindoba/react-
|
|
48
|
-
"@pindoba/react-
|
|
49
|
-
"@pindoba/react-
|
|
50
|
-
"@pindoba/react-
|
|
51
|
-
"@pindoba/react-
|
|
52
|
-
"@pindoba/react-
|
|
53
|
-
"@pindoba/react-
|
|
54
|
-
"@pindoba/
|
|
55
|
-
"@pindoba/styled-system": "0.0.0-alpha-20261008173743",
|
|
40
|
+
"@pindoba/core-field": "0.0.0-alpha-20261110151933",
|
|
41
|
+
"@pindoba/core-listbox": "0.0.0-alpha-20261110151933",
|
|
42
|
+
"@pindoba/core-tanstack-form": "0.0.0-alpha-20261110151933",
|
|
43
|
+
"@pindoba/react-button": "0.0.0-alpha-20261110151933",
|
|
44
|
+
"@pindoba/react-checkbox": "0.0.0-alpha-20261110151933",
|
|
45
|
+
"@pindoba/react-field": "0.0.0-alpha-20261110151933",
|
|
46
|
+
"@pindoba/react-input": "0.0.0-alpha-20261110151933",
|
|
47
|
+
"@pindoba/react-loading": "0.0.0-alpha-20261110151933",
|
|
48
|
+
"@pindoba/react-select": "0.0.0-alpha-20261110151933",
|
|
49
|
+
"@pindoba/react-textarea": "0.0.0-alpha-20261110151933",
|
|
50
|
+
"@pindoba/styled-system": "0.0.0-alpha-20261110151933",
|
|
56
51
|
"@tanstack/react-form": "^1.33.5"
|
|
57
52
|
},
|
|
58
53
|
"publishConfig": {
|
package/dist/src/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|