@texaryn/react 0.3.0 → 0.4.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/CHANGELOG.md +26 -0
- package/README.md +8 -0
- package/dist/components/FieldLabelContent.d.ts +22 -0
- package/dist/components/FieldLabelContent.d.ts.map +1 -0
- package/dist/components/FieldLabelContent.js +21 -0
- package/dist/components/FieldLabelContent.js.map +1 -0
- package/dist/hooks/use-array-actions.d.ts +15 -0
- package/dist/hooks/use-array-actions.d.ts.map +1 -0
- package/dist/hooks/use-array-actions.js +21 -0
- package/dist/hooks/use-array-actions.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/props/action-names.d.ts +19 -0
- package/dist/props/action-names.d.ts.map +1 -0
- package/dist/props/action-names.js +30 -0
- package/dist/props/action-names.js.map +1 -0
- package/dist/widgets/ArrayControl.d.ts.map +1 -1
- package/dist/widgets/ArrayControl.js +8 -2
- package/dist/widgets/ArrayControl.js.map +1 -1
- package/dist/widgets/Checkbox.d.ts.map +1 -1
- package/dist/widgets/Checkbox.js +2 -1
- package/dist/widgets/Checkbox.js.map +1 -1
- package/dist/widgets/NumberInput.d.ts.map +1 -1
- package/dist/widgets/NumberInput.js +2 -1
- package/dist/widgets/NumberInput.js.map +1 -1
- package/dist/widgets/Select.d.ts.map +1 -1
- package/dist/widgets/Select.js +2 -1
- package/dist/widgets/Select.js.map +1 -1
- package/dist/widgets/TextInput.d.ts.map +1 -1
- package/dist/widgets/TextInput.js +2 -1
- package/dist/widgets/TextInput.js.map +1 -1
- package/dist/widgets/Textarea.d.ts.map +1 -1
- package/dist/widgets/Textarea.js +2 -1
- package/dist/widgets/Textarea.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @texaryn/react
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 04270e8: Give every array action control an accessible name that says which row it acts on.
|
|
8
|
+
|
|
9
|
+
Five buttons all announced as "Remove" leave a screen reader user guessing. Each now carries the current 1-based position and whatever schema titles exist, so "Remove Contact 2 from Contacts", degrading to "Remove item 2" when nothing is titled. Reorder controls read "Move up Contact 2 in Contacts", and the per-array control reads "Add item to Contacts". The visible words stay "Remove", "Up" and "Add", with the longer string in `aria-label`, which contains the visible text so speech input still works.
|
|
10
|
+
|
|
11
|
+
The row's own value is deliberately not used: it is mutable, often blank, frequently duplicated, and sometimes sensitive. The position is recomputed on every render rather than captured when a row is created, because a row survives a move while its position does not.
|
|
12
|
+
|
|
13
|
+
The add control is named from the item template rather than from the first row, so an empty array still says "Add Tag" where naming it matters most. That needed the template's annotations, which the projection did not carry: `NodeProjection.itemAnnotations` is new and optional, so an adapter that cannot supply it stays valid, and `ArrayMeta.itemTitle` carries the result to renderers.
|
|
14
|
+
|
|
15
|
+
React exposes the decision as `useArrayActions` so its three widget sets cannot drift, and the name builders are exported for custom widgets. Reorder-control parity is unchanged: the three React sets still expose no reorder button.
|
|
16
|
+
- c9b930f: Show a required field's requirement to a sighted user, without announcing it twice.
|
|
17
|
+
|
|
18
|
+
Required was conveyed only through `aria-required`, so a sighted user had nothing to tell a required field from an optional one. Every required label now carries a visible `(required)`.
|
|
19
|
+
|
|
20
|
+
Three channels carry that one fact and are deliberately kept separate. The visible label reads "Full Name (required)". The accessible name stays exactly "Full Name", because the indicator is `aria-hidden` and `aria-required` already reports the state; putting it in the name as well makes some screen readers say it twice. WCAG's Label in Name allows exactly this omission when the state is surfaced programmatically.
|
|
21
|
+
|
|
22
|
+
The indicator is the word rather than an asterisk, so nothing has to be explained elsewhere on the form. `field.label` and `fieldLabel()` still return the raw schema title: the decoration lives in the label rendering, so a visual convention does not become the canonical field title a custom widget sees. React exposes `FieldLabelContent` so its three widget sets cannot drift, and each binding exports `REQUIRED_INDICATOR` so a custom widget can match the wording.
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Updated dependencies [04270e8]
|
|
27
|
+
- @texaryn/core@0.7.0
|
|
28
|
+
|
|
3
29
|
## 0.3.0
|
|
4
30
|
|
|
5
31
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -268,6 +268,11 @@ The schema adapter interprets data semantics. The core compiles and runs the for
|
|
|
268
268
|
- `UseFieldArrayReturn`
|
|
269
269
|
- `useFieldBinding`
|
|
270
270
|
- `useObjectGroup`
|
|
271
|
+
- `useArrayActions`
|
|
272
|
+
- `ArrayActions`
|
|
273
|
+
- `removeActionName`
|
|
274
|
+
- `moveUpActionName`
|
|
275
|
+
- `addActionName`
|
|
271
276
|
- `ObjectGroup`
|
|
272
277
|
- `FieldBinding`
|
|
273
278
|
- `DomValueInputProps`
|
|
@@ -292,6 +297,9 @@ The schema adapter interprets data semantics. The core compiles and runs the for
|
|
|
292
297
|
### Error display
|
|
293
298
|
|
|
294
299
|
- `FieldErrors`
|
|
300
|
+
- `FieldLabelContent`
|
|
301
|
+
- `FieldLabelContentProps`
|
|
302
|
+
- `REQUIRED_INDICATOR`
|
|
295
303
|
- `FieldErrorsProps`
|
|
296
304
|
- `ErrorSummary`
|
|
297
305
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/** The wording every binding uses, so a custom widget can match it. */
|
|
3
|
+
export declare const REQUIRED_INDICATOR = "(required)";
|
|
4
|
+
export interface FieldLabelContentProps {
|
|
5
|
+
label: string;
|
|
6
|
+
required: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Label content for a field: the schema's label, plus a visible required
|
|
10
|
+
* indicator that is kept out of the accessible name.
|
|
11
|
+
*
|
|
12
|
+
* Three separate channels carry one fact, and they must not be collapsed. The
|
|
13
|
+
* sighted user reads "(required)". The accessible name stays the label alone,
|
|
14
|
+
* because `aria-required` already reports the state and putting it in the name
|
|
15
|
+
* as well makes some screen readers say it twice. The indicator says the word
|
|
16
|
+
* rather than an asterisk, so nobody has to be told elsewhere what a marker
|
|
17
|
+
* means.
|
|
18
|
+
*
|
|
19
|
+
* Shared by the three React widget sets so they cannot drift on it.
|
|
20
|
+
*/
|
|
21
|
+
export declare function FieldLabelContent({ label, required }: FieldLabelContentProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=FieldLabelContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldLabelContent.d.ts","sourceRoot":"","sources":["../../src/components/FieldLabelContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,eAAe,CAAA;AAE9C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAO5E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
/** The wording every binding uses, so a custom widget can match it. */
|
|
4
|
+
export const REQUIRED_INDICATOR = '(required)';
|
|
5
|
+
/**
|
|
6
|
+
* Label content for a field: the schema's label, plus a visible required
|
|
7
|
+
* indicator that is kept out of the accessible name.
|
|
8
|
+
*
|
|
9
|
+
* Three separate channels carry one fact, and they must not be collapsed. The
|
|
10
|
+
* sighted user reads "(required)". The accessible name stays the label alone,
|
|
11
|
+
* because `aria-required` already reports the state and putting it in the name
|
|
12
|
+
* as well makes some screen readers say it twice. The indicator says the word
|
|
13
|
+
* rather than an asterisk, so nobody has to be told elsewhere what a marker
|
|
14
|
+
* means.
|
|
15
|
+
*
|
|
16
|
+
* Shared by the three React widget sets so they cannot drift on it.
|
|
17
|
+
*/
|
|
18
|
+
export function FieldLabelContent({ label, required }) {
|
|
19
|
+
return (_jsxs(_Fragment, { children: [label, required ? _jsxs("span", { "aria-hidden": "true", children: [" ", REQUIRED_INDICATOR] }) : null] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=FieldLabelContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldLabelContent.js","sourceRoot":"","sources":["../../src/components/FieldLabelContent.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAO9C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAA0B;IAC3E,OAAO,CACL,8BACG,KAAK,EACL,QAAQ,CAAC,CAAC,CAAC,+BAAkB,MAAM,kBAAG,kBAAkB,IAAQ,CAAC,CAAC,CAAC,IAAI,IACvE,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UINode } from '@texaryn/core';
|
|
2
|
+
export interface ArrayActions {
|
|
3
|
+
/** Accessible name for the control that removes the row at this position. */
|
|
4
|
+
removeName(position: number, item: UINode | undefined): string;
|
|
5
|
+
/** Accessible name for the control that appends a row. */
|
|
6
|
+
addName: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Shared by the three React widget sets so their action names cannot drift.
|
|
10
|
+
* The array title is read from the document rather than the node prop: these
|
|
11
|
+
* widgets are memoized on node id, so a conditional annotation added by a
|
|
12
|
+
* recompile would otherwise never reach the name.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useArrayActions(node: UINode): ArrayActions;
|
|
15
|
+
//# sourceMappingURL=use-array-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-array-actions.d.ts","sourceRoot":"","sources":["../../src/hooks/use-array-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAA;AAI1D,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IAC9D,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAW1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useRendererContext } from '../components/renderer-context.js';
|
|
2
|
+
import { addActionName, removeActionName } from '../props/action-names.js';
|
|
3
|
+
/**
|
|
4
|
+
* Shared by the three React widget sets so their action names cannot drift.
|
|
5
|
+
* The array title is read from the document rather than the node prop: these
|
|
6
|
+
* widgets are memoized on node id, so a conditional annotation added by a
|
|
7
|
+
* recompile would otherwise never reach the name.
|
|
8
|
+
*/
|
|
9
|
+
export function useArrayActions(node) {
|
|
10
|
+
const { document } = useRendererContext();
|
|
11
|
+
const current = (document.nodes[node.id] ?? node);
|
|
12
|
+
const arrayTitle = current.annotations.title;
|
|
13
|
+
return {
|
|
14
|
+
removeName: (position, item) => removeActionName(position, item?.annotations.title, arrayTitle),
|
|
15
|
+
// The item template's title, not the first row's. A row may not exist yet,
|
|
16
|
+
// which is exactly when naming the add control matters most, and a row's
|
|
17
|
+
// annotations can in principle depend on its data.
|
|
18
|
+
addName: addActionName(current.arrayMeta?.itemTitle, arrayTitle),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=use-array-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-array-actions.js","sourceRoot":"","sources":["../../src/hooks/use-array-actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAS1E;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACzC,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAkB,CAAA;IAClE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAA;IAC5C,OAAO;QACL,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;QAC/F,2EAA2E;QAC3E,yEAAyE;QACzE,mDAAmD;QACnD,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;KACjE,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export { useFieldArray } from './hooks/use-field-array.js';
|
|
|
7
7
|
export type { UseFieldArrayReturn } from './hooks/use-field-array.js';
|
|
8
8
|
export { useFieldBinding } from './hooks/use-field-binding.js';
|
|
9
9
|
export { useObjectGroup } from './hooks/use-object-group.js';
|
|
10
|
+
export { useArrayActions } from './hooks/use-array-actions.js';
|
|
11
|
+
export type { ArrayActions } from './hooks/use-array-actions.js';
|
|
12
|
+
export { removeActionName, moveUpActionName, addActionName } from './props/action-names.js';
|
|
10
13
|
export type { ObjectGroup } from './hooks/use-object-group.js';
|
|
11
14
|
export type { FieldBinding, DomValueInputProps, DomCheckedInputProps, DomInputBaseProps, } from './hooks/use-field-binding.js';
|
|
12
15
|
export { FormContext, FormProvider, useFormContext } from './context.js';
|
|
@@ -18,6 +21,8 @@ export { FormRoot } from './components/FormRoot.js';
|
|
|
18
21
|
export type { FormRootProps } from './components/FormRoot.js';
|
|
19
22
|
export { NodeRenderer } from './components/NodeRenderer.js';
|
|
20
23
|
export type { NodeRendererProps } from './components/NodeRenderer.js';
|
|
24
|
+
export { FieldLabelContent, REQUIRED_INDICATOR } from './components/FieldLabelContent.js';
|
|
25
|
+
export type { FieldLabelContentProps } from './components/FieldLabelContent.js';
|
|
21
26
|
export { FieldErrors } from './components/FieldErrors.js';
|
|
22
27
|
export type { FieldErrorsProps } from './components/FieldErrors.js';
|
|
23
28
|
export { ErrorSummary } from './components/ErrorSummary.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC3F,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACzF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,14 @@ export { useField } from './hooks/use-field.js';
|
|
|
4
4
|
export { useFieldArray } from './hooks/use-field-array.js';
|
|
5
5
|
export { useFieldBinding } from './hooks/use-field-binding.js';
|
|
6
6
|
export { useObjectGroup } from './hooks/use-object-group.js';
|
|
7
|
+
export { useArrayActions } from './hooks/use-array-actions.js';
|
|
8
|
+
export { removeActionName, moveUpActionName, addActionName } from './props/action-names.js';
|
|
7
9
|
export { FormContext, FormProvider, useFormContext } from './context.js';
|
|
8
10
|
export { useFormIdPrefix } from './id-prefix.js';
|
|
9
11
|
export { getInputProps, getLabelProps, getErrorProps, getDescriptionProps, hasNativeReadOnly, } from './props/index.js';
|
|
10
12
|
export { FormRoot } from './components/FormRoot.js';
|
|
11
13
|
export { NodeRenderer } from './components/NodeRenderer.js';
|
|
14
|
+
export { FieldLabelContent, REQUIRED_INDICATOR } from './components/FieldLabelContent.js';
|
|
12
15
|
export { FieldErrors } from './components/FieldErrors.js';
|
|
13
16
|
export { ErrorSummary } from './components/ErrorSummary.js';
|
|
14
17
|
export { useRendererContext } from './components/renderer-context.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAQ3F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAEzF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessible names for the controls an array renders.
|
|
3
|
+
*
|
|
4
|
+
* Five identical "Remove" buttons tell a screen reader user nothing about
|
|
5
|
+
* which row they act on. The name carries the current 1-based position, which
|
|
6
|
+
* is what a person means by "the second contact"; the stable item id is
|
|
7
|
+
* implementation identity and means nothing to them.
|
|
8
|
+
*
|
|
9
|
+
* The row's own value is deliberately not used. It is mutable, often blank,
|
|
10
|
+
* frequently duplicated, sometimes long, and sometimes sensitive.
|
|
11
|
+
*
|
|
12
|
+
* Titles come from the schema: the array's own title, and the item title,
|
|
13
|
+
* which repeats across rows and so cannot distinguish them on its own. Each
|
|
14
|
+
* name degrades cleanly as those go missing.
|
|
15
|
+
*/
|
|
16
|
+
export declare function removeActionName(position: number, itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
17
|
+
export declare function moveUpActionName(position: number, itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
18
|
+
export declare function addActionName(itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
19
|
+
//# sourceMappingURL=action-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-names.d.ts","sourceRoot":"","sources":["../../src/props/action-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,CAER;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,CAGR"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessible names for the controls an array renders.
|
|
3
|
+
*
|
|
4
|
+
* Five identical "Remove" buttons tell a screen reader user nothing about
|
|
5
|
+
* which row they act on. The name carries the current 1-based position, which
|
|
6
|
+
* is what a person means by "the second contact"; the stable item id is
|
|
7
|
+
* implementation identity and means nothing to them.
|
|
8
|
+
*
|
|
9
|
+
* The row's own value is deliberately not used. It is mutable, often blank,
|
|
10
|
+
* frequently duplicated, sometimes long, and sometimes sensitive.
|
|
11
|
+
*
|
|
12
|
+
* Titles come from the schema: the array's own title, and the item title,
|
|
13
|
+
* which repeats across rows and so cannot distinguish them on its own. Each
|
|
14
|
+
* name degrades cleanly as those go missing.
|
|
15
|
+
*/
|
|
16
|
+
export function removeActionName(position, itemTitle, arrayTitle) {
|
|
17
|
+
return withContainer(`Remove ${itemTitle ?? 'item'} ${position}`, 'from', arrayTitle);
|
|
18
|
+
}
|
|
19
|
+
export function moveUpActionName(position, itemTitle, arrayTitle) {
|
|
20
|
+
return withContainer(`Move up ${itemTitle ?? 'item'} ${position}`, 'in', arrayTitle);
|
|
21
|
+
}
|
|
22
|
+
export function addActionName(itemTitle, arrayTitle) {
|
|
23
|
+
if (arrayTitle !== undefined)
|
|
24
|
+
return `Add item to ${arrayTitle}`;
|
|
25
|
+
return itemTitle === undefined ? 'Add item' : `Add ${itemTitle}`;
|
|
26
|
+
}
|
|
27
|
+
function withContainer(name, preposition, arrayTitle) {
|
|
28
|
+
return arrayTitle === undefined ? name : `${name} ${preposition} ${arrayTitle}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=action-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-names.js","sourceRoot":"","sources":["../../src/props/action-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,SAA6B,EAC7B,UAA8B;IAE9B,OAAO,aAAa,CAAC,UAAU,SAAS,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;AACvF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,SAA6B,EAC7B,UAA8B;IAE9B,OAAO,aAAa,CAAC,WAAW,SAAS,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAA6B,EAC7B,UAA8B;IAE9B,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,eAAe,UAAU,EAAE,CAAA;IAChE,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAA;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,WAAmB,EAAE,UAA8B;IACtF,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,UAAU,EAAE,CAAA;AACjF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayControl.d.ts","sourceRoot":"","sources":["../../src/widgets/ArrayControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"ArrayControl.d.ts","sourceRoot":"","sources":["../../src/widgets/ArrayControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAA;AAM1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAqC9C;AAED,eAAO,MAAM,YAAY,oDAGxB,CAAA"}
|
|
@@ -3,14 +3,20 @@ import React from 'react';
|
|
|
3
3
|
import { useFieldArray } from '../hooks/use-field-array.js';
|
|
4
4
|
import { NodeRenderer } from '../components/NodeRenderer.js';
|
|
5
5
|
import { useRendererContext } from '../components/renderer-context.js';
|
|
6
|
+
import { useArrayActions } from '../hooks/use-array-actions.js';
|
|
6
7
|
function ArrayControlImpl({ node }) {
|
|
7
8
|
const containerNode = node;
|
|
8
9
|
const fieldArray = useFieldArray(containerNode.id);
|
|
9
10
|
const { document, registry } = useRendererContext();
|
|
11
|
+
const actions = useArrayActions(node);
|
|
10
12
|
return (_jsxs("div", { children: [fieldArray.items.map((item, index) => {
|
|
11
13
|
const childNode = item.nodeId ? document.nodes[item.nodeId] : undefined;
|
|
12
|
-
return (_jsxs("div", { children: [childNode ? (_jsx(NodeRenderer, { node: childNode, document: document, registry: registry })) : null, fieldArray.canRemove ? (
|
|
13
|
-
|
|
14
|
+
return (_jsxs("div", { children: [childNode ? (_jsx(NodeRenderer, { node: childNode, document: document, registry: registry })) : null, fieldArray.canRemove ? (
|
|
15
|
+
// The visible word stays short; the name that distinguishes the
|
|
16
|
+
// row goes in aria-label, which contains it so speech input
|
|
17
|
+
// still works.
|
|
18
|
+
_jsx("button", { type: "button", "aria-label": actions.removeName(index + 1, childNode), onClick: () => fieldArray.remove(index), children: "Remove" })) : null] }, item.id));
|
|
19
|
+
}), fieldArray.canAdd ? (_jsx("button", { type: "button", "aria-label": actions.addName, onClick: () => fieldArray.add(), children: "Add" })) : null] }));
|
|
14
20
|
}
|
|
15
21
|
export const ArrayControl = React.memo(ArrayControlImpl, (prev, next) => prev.node.id === next.node.id);
|
|
16
22
|
//# sourceMappingURL=ArrayControl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayControl.js","sourceRoot":"","sources":["../../src/widgets/ArrayControl.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"ArrayControl.js","sourceRoot":"","sources":["../../src/widgets/ArrayControl.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAM/D,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAe;IAC7C,MAAM,aAAa,GAAG,IAAqB,CAAA;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACnD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,CACL,0BACG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBACvE,OAAO,CACL,0BACG,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,YAAY,IAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAC1E,CAAC,CAAC,CAAC,IAAI,EACP,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;wBACtB,gEAAgE;wBAChE,4DAA4D;wBAC5D,eAAe;wBACf,iBACE,IAAI,EAAC,QAAQ,gBACD,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,EACpD,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,uBAGhC,CACV,CAAC,CAAC,CAAC,IAAI,KAfA,IAAI,CAAC,EAAE,CAgBX,CACP,CAAA;YACH,CAAC,CAAC,EACD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CACnB,iBAAQ,IAAI,EAAC,QAAQ,gBAAa,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,oBAEzE,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CACpC,gBAAgB,EAChB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/widgets/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/widgets/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;AAKtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAW1C;AAED,eAAO,MAAM,QAAQ,gDAGpB,CAAA"}
|
package/dist/widgets/Checkbox.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldBinding } from '../hooks/use-field-binding.js';
|
|
4
|
+
import { FieldLabelContent } from '../components/FieldLabelContent.js';
|
|
4
5
|
import { FieldErrors } from '../components/FieldErrors.js';
|
|
5
6
|
function CheckboxImpl({ node }) {
|
|
6
7
|
const field = useFieldBinding(node);
|
|
7
|
-
return (_jsxs("div", { children: [_jsx("input", { ...field.domCheckboxProps, type: "checkbox" }), _jsx("label", { ...field.labelProps, children: field.label }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
|
+
return (_jsxs("div", { children: [_jsx("input", { ...field.domCheckboxProps, type: "checkbox" }), _jsx("label", { ...field.labelProps, children: _jsx(FieldLabelContent, { label: field.label, required: field.required }) }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
9
|
}
|
|
9
10
|
export const Checkbox = React.memo(CheckboxImpl, (prev, next) => prev.node.id === next.node.id);
|
|
10
11
|
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/widgets/Checkbox.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,YAAY,CAAC,EAAE,IAAI,EAAe;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAC,UAAU,GAAG,EACrD,mBAAW,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/widgets/Checkbox.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,YAAY,CAAC,EAAE,IAAI,EAAe;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAC,UAAU,GAAG,EACrD,mBAAW,KAAK,CAAC,UAAU,YAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,GAAQ,EACvG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAS,KAAK,CAAC,gBAAgB,YAAG,KAAK,CAAC,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,GAAI,IAC9E,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAChC,YAAY,EACZ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/widgets/NumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/widgets/NumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;AAKtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAW7C;AAED,eAAO,MAAM,WAAW,mDAGvB,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldBinding } from '../hooks/use-field-binding.js';
|
|
4
|
+
import { FieldLabelContent } from '../components/FieldLabelContent.js';
|
|
4
5
|
import { FieldErrors } from '../components/FieldErrors.js';
|
|
5
6
|
function NumberInputImpl({ node }) {
|
|
6
7
|
const field = useFieldBinding(node);
|
|
7
|
-
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: field.label }), _jsx("input", { ...field.domInputProps, type: "number" }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
|
+
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: _jsx(FieldLabelContent, { label: field.label, required: field.required }) }), _jsx("input", { ...field.domInputProps, type: "number" }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
9
|
}
|
|
9
10
|
export const NumberInput = React.memo(NumberInputImpl, (prev, next) => prev.node.id === next.node.id);
|
|
10
11
|
//# sourceMappingURL=NumberInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.js","sourceRoot":"","sources":["../../src/widgets/NumberInput.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,eAAe,CAAC,EAAE,IAAI,EAAe;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"NumberInput.js","sourceRoot":"","sources":["../../src/widgets/NumberInput.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,eAAe,CAAC,EAAE,IAAI,EAAe;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,YAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,GAAQ,EACxG,mBAAW,KAAK,CAAC,aAAa,EAAE,IAAI,EAAC,QAAQ,GAAG,EAC/C,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAS,KAAK,CAAC,gBAAgB,YAAG,KAAK,CAAC,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,GAAI,IAC9E,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CACnC,eAAe,EACf,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/widgets/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/widgets/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;AAKtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAkBxC;AAED,eAAO,MAAM,MAAM,8CAGlB,CAAA"}
|
package/dist/widgets/Select.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldBinding } from '../hooks/use-field-binding.js';
|
|
4
|
+
import { FieldLabelContent } from '../components/FieldLabelContent.js';
|
|
4
5
|
import { FieldErrors } from '../components/FieldErrors.js';
|
|
5
6
|
function SelectImpl({ node }) {
|
|
6
7
|
const field = useFieldBinding(node);
|
|
7
8
|
const enumValues = field.node.enumValues ?? [];
|
|
8
|
-
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: field.label }), _jsx("select", { ...field.domInputProps, children: enumValues.map((option) => (_jsx("option", { value: String(option.value), children: option.title ?? String(option.value) }, String(option.value)))) }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
9
|
+
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: _jsx(FieldLabelContent, { label: field.label, required: field.required }) }), _jsx("select", { ...field.domInputProps, children: enumValues.map((option) => (_jsx("option", { value: String(option.value), children: option.title ?? String(option.value) }, String(option.value)))) }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
9
10
|
}
|
|
10
11
|
export const Select = React.memo(SelectImpl, (prev, next) => prev.node.id === next.node.id);
|
|
11
12
|
//# sourceMappingURL=Select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/widgets/Select.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,UAAU,CAAC,EAAE,IAAI,EAAe;IACvC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;IAE9C,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/widgets/Select.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,UAAU,CAAC,EAAE,IAAI,EAAe;IACvC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;IAE9C,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,YAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,GAAQ,EACxG,oBAAY,KAAK,CAAC,aAAa,YAC5B,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC1B,iBAAmC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAC3D,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAD1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAExB,CACV,CAAC,GACK,EACR,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAS,KAAK,CAAC,gBAAgB,YAAG,KAAK,CAAC,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,GAAI,IAC9E,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAC9B,UAAU,EACV,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/widgets/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/widgets/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;AAKtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAW3C;AAED,eAAO,MAAM,SAAS,iDAGrB,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldBinding } from '../hooks/use-field-binding.js';
|
|
4
|
+
import { FieldLabelContent } from '../components/FieldLabelContent.js';
|
|
4
5
|
import { FieldErrors } from '../components/FieldErrors.js';
|
|
5
6
|
function TextInputImpl({ node }) {
|
|
6
7
|
const field = useFieldBinding(node);
|
|
7
|
-
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: field.label }), _jsx("input", { ...field.domInputProps, type: "text" }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
|
+
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: _jsx(FieldLabelContent, { label: field.label, required: field.required }) }), _jsx("input", { ...field.domInputProps, type: "text" }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
9
|
}
|
|
9
10
|
export const TextInput = React.memo(TextInputImpl, (prev, next) => prev.node.id === next.node.id);
|
|
10
11
|
//# sourceMappingURL=TextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../src/widgets/TextInput.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,aAAa,CAAC,EAAE,IAAI,EAAe;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../src/widgets/TextInput.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,aAAa,CAAC,EAAE,IAAI,EAAe;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,YAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,GAAQ,EACxG,mBAAW,KAAK,CAAC,aAAa,EAAE,IAAI,EAAC,MAAM,GAAG,EAC7C,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAS,KAAK,CAAC,gBAAgB,YAAG,KAAK,CAAC,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,GAAI,IAC9E,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CACjC,aAAa,EACb,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/widgets/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/widgets/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,eAAe,CAAA;AAKtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iBAAS,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,qBAW1C;AAED,eAAO,MAAM,QAAQ,gDAGpB,CAAA"}
|
package/dist/widgets/Textarea.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldBinding } from '../hooks/use-field-binding.js';
|
|
4
|
+
import { FieldLabelContent } from '../components/FieldLabelContent.js';
|
|
4
5
|
import { FieldErrors } from '../components/FieldErrors.js';
|
|
5
6
|
function TextareaImpl({ node }) {
|
|
6
7
|
const field = useFieldBinding(node);
|
|
7
|
-
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: field.label }), _jsx("textarea", { ...field.domInputProps }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
|
+
return (_jsxs("div", { children: [_jsx("label", { ...field.labelProps, children: _jsx(FieldLabelContent, { label: field.label, required: field.required }) }), _jsx("textarea", { ...field.domInputProps }), field.description ? _jsx("div", { ...field.descriptionProps, children: field.description }) : null, _jsx(FieldErrors, { node: field.node, errors: field.errors, showErrors: field.invalid })] }));
|
|
8
9
|
}
|
|
9
10
|
export const Textarea = React.memo(TextareaImpl, (prev, next) => prev.node.id === next.node.id);
|
|
10
11
|
//# sourceMappingURL=Textarea.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../src/widgets/Textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,YAAY,CAAC,EAAE,IAAI,EAAe;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../src/widgets/Textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAM1D,SAAS,YAAY,CAAC,EAAE,IAAI,EAAe;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAiB,CAAC,CAAA;IAEhD,OAAO,CACL,0BACE,mBAAW,KAAK,CAAC,UAAU,YAAE,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,GAAQ,EACxG,sBAAc,KAAK,CAAC,aAAa,GAAI,EACpC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAS,KAAK,CAAC,gBAAgB,YAAG,KAAK,CAAC,WAAW,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,GAAI,IAC9E,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAChC,YAAY,EACZ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@texaryn/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "React bindings, hooks, prop getters, and default widgets for Texaryn",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"CHANGELOG.md"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@texaryn/core": "^0.
|
|
47
|
+
"@texaryn/core": "^0.7.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"react": ">=18.0.0"
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"jsdom": "^25.0.0",
|
|
57
57
|
"react": "^19.0.0",
|
|
58
58
|
"react-dom": "^19.0.0",
|
|
59
|
-
"@texaryn/schema-json": "0.
|
|
59
|
+
"@texaryn/schema-json": "0.3.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "tsc --build"
|