@igne-agency/react-web-ui 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/components/checkbox-field/tsf-checkbox-field.js +1 -1
- package/dist/components/checkbox-group-field/checkbox-group.d.ts +1 -1
- package/dist/components/checkbox-group-field/checkbox-group.js +1 -1
- package/dist/components/checkbox-group-field/tsf-checkbox-group-field.js +1 -1
- package/dist/components/combobox-field/tsf-combobox-field.js +2 -2
- package/dist/components/date-field/tsf-date-field.js +1 -1
- package/dist/components/date-range-field/tsf-date-range-field.js +1 -1
- package/dist/components/field/field-group-context.d.ts +21 -0
- package/dist/components/field/field-group-context.js +38 -0
- package/dist/components/field/field.css +27 -8
- package/dist/components/field/field.d.ts +6 -3
- package/dist/components/field/field.js +88 -45
- package/dist/components/field/field.module.js +12 -10
- package/dist/components/fieldset/field-group.d.ts +31 -0
- package/dist/components/fieldset/field-group.js +102 -0
- package/dist/components/fieldset/fieldset-root.d.ts +60 -0
- package/dist/components/fieldset/fieldset-root.js +285 -0
- package/dist/components/fieldset/fieldset.css +21 -0
- package/dist/components/fieldset/fieldset.d.ts +37 -0
- package/dist/components/fieldset/fieldset.js +127 -0
- package/dist/components/fieldset/fieldset.module.js +8 -0
- package/dist/components/fieldset/index.d.ts +4 -0
- package/dist/components/fieldset/index.js +4 -0
- package/dist/components/fieldset/tsf-field-group.d.ts +21 -0
- package/dist/components/fieldset/tsf-field-group.js +58 -0
- package/dist/components/file-field/tsf-file-field.js +1 -1
- package/dist/components/number-field/tsf-number-field.js +1 -1
- package/dist/components/otp-field/tsf-otp-field.js +1 -1
- package/dist/components/password-field/tsf-password-field.js +1 -1
- package/dist/components/photo-field/tsf-photo-field.js +1 -1
- package/dist/components/radio-group-field/radio-group.d.ts +1 -1
- package/dist/components/radio-group-field/radio-group.js +1 -1
- package/dist/components/radio-group-field/tsf-radio-group-field.js +1 -1
- package/dist/components/segmented-control-field/segmented-control.d.ts +1 -1
- package/dist/components/segmented-control-field/segmented-control.js +1 -1
- package/dist/components/segmented-control-field/tsf-segmented-control-field.js +1 -1
- package/dist/components/select-field/tsf-select-field.js +1 -1
- package/dist/components/switch-field/tsf-switch-field.js +1 -1
- package/dist/components/text-field/connect-text-preset.js +1 -1
- package/dist/components/text-field/text-field.css +28 -27
- package/dist/components/text-field/text-field.module.js +9 -9
- package/dist/components/text-field/tsf-text-field.js +1 -1
- package/dist/components/textarea-field/tsf-textarea-field.js +1 -1
- package/dist/components/time-field/tsf-time-field.js +1 -1
- package/dist/components/toggle-group-field/toggle-group.d.ts +1 -1
- package/dist/components/toggle-group-field/toggle-group.js +1 -1
- package/dist/components/toggle-group-field/tsf-toggle-group-field.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -2
- package/dist/lib/forms/create-app-form.d.ts +18 -9
- package/dist/lib/forms/create-app-form.js +17 -8
- package/dist/lib/forms/index.d.ts +1 -0
- package/dist/lib/forms/index.js +2 -1
- package/dist/lib/forms/use-connected-field.d.ts +10 -7
- package/dist/lib/forms/use-connected-field.js +54 -28
- package/package.json +5 -1
- package/dist/components/field/fieldset.d.ts +0 -22
- package/dist/components/field/fieldset.js +0 -130
|
@@ -1,48 +1,74 @@
|
|
|
1
|
+
import { FieldGroupContext } from "../../components/field/field-group-context.js";
|
|
1
2
|
import { useFieldContext } from "./context.js";
|
|
2
3
|
import { c } from "react/compiler-runtime";
|
|
4
|
+
import { useContext, useLayoutEffect } from "react";
|
|
3
5
|
// src/lib/forms/use-connected-field.ts
|
|
4
6
|
/**
|
|
5
|
-
* The field a
|
|
6
|
-
* its name, its errors as the validators returned them,
|
|
7
|
-
* `pending` while it validates, and the blur handler. The
|
|
8
|
-
* handler are the control's own.
|
|
7
|
+
* The TanStack Form field a control renders in, and the props every field
|
|
8
|
+
* takes from it: its name, its errors as the validators returned them,
|
|
9
|
+
* `dirty`, `touched`, `pending` while it validates, and the blur handler. The
|
|
10
|
+
* value and its change handler are the control's own. Given the field's
|
|
11
|
+
* label, it tells an enclosing field group, whose `formatError` receives it.
|
|
9
12
|
*
|
|
10
13
|
* @example
|
|
11
|
-
* const { field, props } = useConnectedField<string>();
|
|
12
|
-
* <
|
|
14
|
+
* const { field, props: { name, onBlur, ...state } } = useConnectedField<string>(label);
|
|
15
|
+
* <TextInput.Root {...state} value={field.state.value} onValueChange={field.handleChange} optionalLabel="optional">
|
|
16
|
+
* <TextInput.Input name={name} onBlur={onBlur} />
|
|
17
|
+
* </TextInput.Root>
|
|
13
18
|
*/
|
|
14
|
-
var useConnectedField = () => {
|
|
15
|
-
const $ = c(
|
|
19
|
+
var useConnectedField = (label) => {
|
|
20
|
+
const $ = c(15);
|
|
16
21
|
const field = useFieldContext();
|
|
22
|
+
const registerLabel = useContext(FieldGroupContext)?.registerLabel;
|
|
23
|
+
const { name } = field;
|
|
17
24
|
const { meta } = field.state;
|
|
18
25
|
let t0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
let t1;
|
|
27
|
+
if ($[0] !== label || $[1] !== name || $[2] !== registerLabel) {
|
|
28
|
+
t0 = () => registerLabel === void 0 || label === void 0 ? void 0 : registerLabel(name, label);
|
|
29
|
+
t1 = [
|
|
30
|
+
registerLabel,
|
|
31
|
+
name,
|
|
32
|
+
label
|
|
33
|
+
];
|
|
34
|
+
$[0] = label;
|
|
35
|
+
$[1] = name;
|
|
36
|
+
$[2] = registerLabel;
|
|
37
|
+
$[3] = t0;
|
|
38
|
+
$[4] = t1;
|
|
39
|
+
} else {
|
|
40
|
+
t0 = $[3];
|
|
41
|
+
t1 = $[4];
|
|
42
|
+
}
|
|
43
|
+
useLayoutEffect(t0, t1);
|
|
44
|
+
let t2;
|
|
45
|
+
if ($[5] !== field.handleBlur || $[6] !== meta.errors || $[7] !== meta.isDirty || $[8] !== meta.isTouched || $[9] !== meta.isValidating || $[10] !== name) {
|
|
46
|
+
t2 = {
|
|
47
|
+
name,
|
|
22
48
|
errors: meta.errors,
|
|
23
49
|
dirty: meta.isDirty,
|
|
24
50
|
touched: meta.isTouched,
|
|
25
51
|
pending: meta.isValidating,
|
|
26
52
|
onBlur: field.handleBlur
|
|
27
53
|
};
|
|
28
|
-
$[
|
|
29
|
-
$[
|
|
30
|
-
$[
|
|
31
|
-
$[
|
|
32
|
-
$[
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
35
|
-
} else
|
|
36
|
-
let
|
|
37
|
-
if ($[
|
|
38
|
-
|
|
54
|
+
$[5] = field.handleBlur;
|
|
55
|
+
$[6] = meta.errors;
|
|
56
|
+
$[7] = meta.isDirty;
|
|
57
|
+
$[8] = meta.isTouched;
|
|
58
|
+
$[9] = meta.isValidating;
|
|
59
|
+
$[10] = name;
|
|
60
|
+
$[11] = t2;
|
|
61
|
+
} else t2 = $[11];
|
|
62
|
+
let t3;
|
|
63
|
+
if ($[12] !== field || $[13] !== t2) {
|
|
64
|
+
t3 = {
|
|
39
65
|
field,
|
|
40
|
-
props:
|
|
66
|
+
props: t2
|
|
41
67
|
};
|
|
42
|
-
$[
|
|
43
|
-
$[
|
|
44
|
-
$[
|
|
45
|
-
} else
|
|
46
|
-
return
|
|
68
|
+
$[12] = field;
|
|
69
|
+
$[13] = t2;
|
|
70
|
+
$[14] = t3;
|
|
71
|
+
} else t3 = $[14];
|
|
72
|
+
return t3;
|
|
47
73
|
};
|
|
48
74
|
export { useConnectedField };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igne-agency/react-web-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "IGNE's React web component kit: primitives and the presets over them, form controls in three tiers with a TanStack Form bridge, and DTCG tokens themed per app.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -145,6 +145,10 @@
|
|
|
145
145
|
"types": "./dist/components/field-placeholder/index.d.ts",
|
|
146
146
|
"default": "./dist/components/field-placeholder/index.js"
|
|
147
147
|
},
|
|
148
|
+
"./fieldset": {
|
|
149
|
+
"types": "./dist/components/fieldset/index.d.ts",
|
|
150
|
+
"default": "./dist/components/fieldset/index.js"
|
|
151
|
+
},
|
|
148
152
|
"./file-field": {
|
|
149
153
|
"types": "./dist/components/file-field/index.d.ts",
|
|
150
154
|
"default": "./dist/components/file-field/index.js"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
import { type FieldLabelProps, type FieldProps, type FieldRootProps } from "./field.tsx";
|
|
3
|
-
/** What the fieldset root of a group of choices takes. */
|
|
4
|
-
export type FieldsetRootProps = FieldRootProps & Pick<FieldProps, "errors" | "requiredness" | "dirty" | "touched" | "pending"> & Readonly<{
|
|
5
|
-
/** A choice is made. */
|
|
6
|
-
filled?: boolean;
|
|
7
|
-
readOnly?: boolean;
|
|
8
|
-
}>;
|
|
9
|
-
/**
|
|
10
|
-
* A field rendered as a fieldset, for a group of choices named by its legend.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* <FieldsetRoot filled={kind !== null}>…</FieldsetRoot>
|
|
14
|
-
*/
|
|
15
|
-
export declare const FieldsetRoot: ({ errors, requiredness, dirty, touched, pending, filled, readOnly, disabled, ...props }: FieldsetRootProps) => ReactNode;
|
|
16
|
-
/**
|
|
17
|
-
* The legend that names a {@link FieldsetRoot}.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* <FieldsetLegend optionalLabel="optional">Kind</FieldsetLegend>
|
|
21
|
-
*/
|
|
22
|
-
export declare const FieldsetLegend: (props: FieldLabelProps) => ReactNode;
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { Field } from "./field.js";
|
|
2
|
-
import { fieldStateAttributes } from "./field-state.js";
|
|
3
|
-
import { useFieldState } from "./use-field-state.js";
|
|
4
|
-
import { c } from "react/compiler-runtime";
|
|
5
|
-
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import { Fieldset } from "@base-ui/react/fieldset";
|
|
7
|
-
// src/components/field/fieldset.tsx
|
|
8
|
-
/**
|
|
9
|
-
* A field rendered as a fieldset, for a group of choices named by its legend.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* <FieldsetRoot filled={kind !== null}>…</FieldsetRoot>
|
|
13
|
-
*/
|
|
14
|
-
var FieldsetRoot = (t0) => {
|
|
15
|
-
const $ = c(29);
|
|
16
|
-
let dirty;
|
|
17
|
-
let disabled;
|
|
18
|
-
let errors;
|
|
19
|
-
let filled;
|
|
20
|
-
let pending;
|
|
21
|
-
let props;
|
|
22
|
-
let readOnly;
|
|
23
|
-
let requiredness;
|
|
24
|
-
let touched;
|
|
25
|
-
if ($[0] !== t0) {
|
|
26
|
-
({errors, requiredness, dirty, touched, pending, filled, readOnly, disabled, ...props} = t0);
|
|
27
|
-
$[0] = t0;
|
|
28
|
-
$[1] = dirty;
|
|
29
|
-
$[2] = disabled;
|
|
30
|
-
$[3] = errors;
|
|
31
|
-
$[4] = filled;
|
|
32
|
-
$[5] = pending;
|
|
33
|
-
$[6] = props;
|
|
34
|
-
$[7] = readOnly;
|
|
35
|
-
$[8] = requiredness;
|
|
36
|
-
$[9] = touched;
|
|
37
|
-
} else {
|
|
38
|
-
dirty = $[1];
|
|
39
|
-
disabled = $[2];
|
|
40
|
-
errors = $[3];
|
|
41
|
-
filled = $[4];
|
|
42
|
-
pending = $[5];
|
|
43
|
-
props = $[6];
|
|
44
|
-
readOnly = $[7];
|
|
45
|
-
requiredness = $[8];
|
|
46
|
-
touched = $[9];
|
|
47
|
-
}
|
|
48
|
-
let t1;
|
|
49
|
-
if ($[10] !== dirty || $[11] !== disabled || $[12] !== errors || $[13] !== filled || $[14] !== pending || $[15] !== readOnly || $[16] !== requiredness || $[17] !== touched) {
|
|
50
|
-
t1 = {
|
|
51
|
-
errors,
|
|
52
|
-
requiredness,
|
|
53
|
-
dirty,
|
|
54
|
-
touched,
|
|
55
|
-
pending,
|
|
56
|
-
disabled,
|
|
57
|
-
readOnly,
|
|
58
|
-
filled
|
|
59
|
-
};
|
|
60
|
-
$[10] = dirty;
|
|
61
|
-
$[11] = disabled;
|
|
62
|
-
$[12] = errors;
|
|
63
|
-
$[13] = filled;
|
|
64
|
-
$[14] = pending;
|
|
65
|
-
$[15] = readOnly;
|
|
66
|
-
$[16] = requiredness;
|
|
67
|
-
$[17] = touched;
|
|
68
|
-
$[18] = t1;
|
|
69
|
-
} else t1 = $[18];
|
|
70
|
-
const field = useFieldState(t1);
|
|
71
|
-
let t2;
|
|
72
|
-
if ($[19] === Symbol.for("react.memo_cache_sentinel")) {
|
|
73
|
-
t2 = /* @__PURE__ */ jsx(Fieldset.Root, {});
|
|
74
|
-
$[19] = t2;
|
|
75
|
-
} else t2 = $[19];
|
|
76
|
-
const t3 = field.disabled;
|
|
77
|
-
const t4 = field.invalid;
|
|
78
|
-
let t5;
|
|
79
|
-
if ($[20] !== field.state) {
|
|
80
|
-
t5 = fieldStateAttributes(field.state);
|
|
81
|
-
$[20] = field.state;
|
|
82
|
-
$[21] = t5;
|
|
83
|
-
} else t5 = $[21];
|
|
84
|
-
let t6;
|
|
85
|
-
if ($[22] !== dirty || $[23] !== field.disabled || $[24] !== field.invalid || $[25] !== props || $[26] !== t5 || $[27] !== touched) {
|
|
86
|
-
t6 = /* @__PURE__ */ jsx(Field.Root, {
|
|
87
|
-
render: t2,
|
|
88
|
-
disabled: t3,
|
|
89
|
-
invalid: t4,
|
|
90
|
-
dirty,
|
|
91
|
-
touched,
|
|
92
|
-
...t5,
|
|
93
|
-
...props
|
|
94
|
-
});
|
|
95
|
-
$[22] = dirty;
|
|
96
|
-
$[23] = field.disabled;
|
|
97
|
-
$[24] = field.invalid;
|
|
98
|
-
$[25] = props;
|
|
99
|
-
$[26] = t5;
|
|
100
|
-
$[27] = touched;
|
|
101
|
-
$[28] = t6;
|
|
102
|
-
} else t6 = $[28];
|
|
103
|
-
return t6;
|
|
104
|
-
};
|
|
105
|
-
/**
|
|
106
|
-
* The legend that names a {@link FieldsetRoot}.
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* <FieldsetLegend optionalLabel="optional">Kind</FieldsetLegend>
|
|
110
|
-
*/
|
|
111
|
-
var FieldsetLegend = (props) => {
|
|
112
|
-
const $ = c(3);
|
|
113
|
-
let t0;
|
|
114
|
-
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
115
|
-
t0 = /* @__PURE__ */ jsx(Fieldset.Legend, {});
|
|
116
|
-
$[0] = t0;
|
|
117
|
-
} else t0 = $[0];
|
|
118
|
-
let t1;
|
|
119
|
-
if ($[1] !== props) {
|
|
120
|
-
t1 = /* @__PURE__ */ jsx(Field.Label, {
|
|
121
|
-
nativeLabel: false,
|
|
122
|
-
render: t0,
|
|
123
|
-
...props
|
|
124
|
-
});
|
|
125
|
-
$[1] = props;
|
|
126
|
-
$[2] = t1;
|
|
127
|
-
} else t1 = $[2];
|
|
128
|
-
return t1;
|
|
129
|
-
};
|
|
130
|
-
export { FieldsetLegend, FieldsetRoot };
|