@texaryn/web-components 0.3.3 → 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 +57 -0
- package/README.md +36 -4
- package/dist/containers.d.ts.map +1 -1
- package/dist/containers.js +20 -9
- package/dist/containers.js.map +1 -1
- package/dist/element.d.ts +7 -1
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +72 -2
- package/dist/element.js.map +1 -1
- package/dist/fields.d.ts +0 -3
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +10 -17
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mount.d.ts +14 -2
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +20 -1
- package/dist/mount.js.map +1 -1
- package/dist/summary.d.ts +13 -0
- package/dist/summary.d.ts.map +1 -0
- package/dist/summary.js +94 -0
- package/dist/summary.js.map +1 -0
- package/dist/widget.d.ts +3 -1
- package/dist/widget.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/action-names.d.ts +0 -17
- package/dist/action-names.d.ts.map +0 -1
- package/dist/action-names.js +0 -28
- package/dist/action-names.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# @texaryn/web-components
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3f19d2c: `mountErrorSummary(container, form)` renders a jump-linked list of the
|
|
8
|
+
runtime's visible errors over the `Mount` that `mountForm` returned, which now
|
|
9
|
+
carries `runtime` and `idPrefix`, so every link resolves inside the namespace
|
|
10
|
+
the form was mounted under. Both are required members of the exported `Mount`
|
|
11
|
+
interface, so a hand-written `Mount` or a test double supplies them.
|
|
12
|
+
`<texaryn-form error-summary>` and the `errorSummary` property mount it as the
|
|
13
|
+
first child of the element's form. It is not a live region: the fields already
|
|
14
|
+
announce their own errors.
|
|
15
|
+
- 191787c: `mountForm(container, runtime, { registry, idPrefix, messages })` replaces the
|
|
16
|
+
four positional parameters, and the returned `Mount` gains `setMessages`. The
|
|
17
|
+
element gains a `messages` property that switches a mounted form in place.
|
|
18
|
+
`RenderContext.messages` is what a custom widget reads.
|
|
19
|
+
|
|
20
|
+
The options object is a break for callers of `mountForm`. Migration:
|
|
21
|
+
|
|
22
|
+
before
|
|
23
|
+
|
|
24
|
+
mountForm(container, runtime, registry, idPrefix)
|
|
25
|
+
|
|
26
|
+
after
|
|
27
|
+
|
|
28
|
+
mountForm(container, runtime, { registry, idPrefix })
|
|
29
|
+
|
|
30
|
+
A locale change recompiles no document, so `setMessages` reconciles the mounted
|
|
31
|
+
tree itself rather than unmounting it; focus, selection and caret position
|
|
32
|
+
survive the switch.
|
|
33
|
+
- aa5dd6f: The error summary is a named group with an `h2` heading and takes focus once
|
|
34
|
+
a failed submit settles, once per attempt; a successful submit, a validation
|
|
35
|
+
exception and blur or change validation move nothing.
|
|
36
|
+
`mountErrorSummary(container, form, { focus: false })` keeps it passive, for
|
|
37
|
+
an application that renders one runtime twice and wants one focusing summary,
|
|
38
|
+
and `ErrorSummaryMount.setMessages` follows a locale switch in place. `Mount`
|
|
39
|
+
exposes `messages`, the set in force. On the element, `error-summary` is
|
|
40
|
+
enumerated: present with any value other than `no-focus` focuses,
|
|
41
|
+
`error-summary="no-focus"` does not, and `errorSummaryFocus` reflects it. The
|
|
42
|
+
heading and the text after each link come from `errorSummaryHeading` and
|
|
43
|
+
`errorSummaryDetail` in `FormMessages`.
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Updated dependencies [191787c]
|
|
48
|
+
- Updated dependencies [aa5dd6f]
|
|
49
|
+
- Updated dependencies [3f19d2c]
|
|
50
|
+
- @texaryn/core@0.12.0
|
|
51
|
+
|
|
52
|
+
## 0.3.4
|
|
53
|
+
|
|
54
|
+
### Patch Changes
|
|
55
|
+
|
|
56
|
+
- Updated dependencies [8f2a2cd]
|
|
57
|
+
- Updated dependencies [20d977f]
|
|
58
|
+
- @texaryn/core@0.11.0
|
|
59
|
+
|
|
3
60
|
## 0.3.3
|
|
4
61
|
|
|
5
62
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ const port = await createJsonSchemaAdapter({
|
|
|
33
33
|
|
|
34
34
|
const form = document.createElement('texaryn-form') as TexarynFormElement
|
|
35
35
|
form.registry = createDefaultRegistry()
|
|
36
|
+
form.errorSummary = true
|
|
36
37
|
form.options = { initialData: { name: '' }, onSubmit: (data) => console.log(data) }
|
|
37
38
|
form.port = port
|
|
38
39
|
document.body.append(form)
|
|
@@ -80,22 +81,53 @@ Every id is `<prefix>-<nodeId>-<suffix>`, where the prefix is the element's own
|
|
|
80
81
|
one page therefore share no ids, and every `for` and `aria-describedby`
|
|
81
82
|
resolves inside its own element.
|
|
82
83
|
|
|
84
|
+
## Messages
|
|
85
|
+
|
|
86
|
+
`messages` on the element, or in `mountForm`'s options, takes a whole
|
|
87
|
+
`FormMessages` set from `@texaryn/core` and replaces every word the built-in
|
|
88
|
+
widgets invent. Setting it on a mounted element switches the copy in place.
|
|
89
|
+
Custom widgets read `ctx.messages` on the render context.
|
|
90
|
+
|
|
91
|
+
## Error summary
|
|
92
|
+
|
|
93
|
+
`mountErrorSummary(container, form, { focus })` renders a named group, headed
|
|
94
|
+
by an `h2`, listing the runtime's visible errors as the first child of
|
|
95
|
+
`container`, and nothing while there are none. It takes the `Mount` that
|
|
96
|
+
`mountForm` returned, so its links share the namespace the form was mounted
|
|
97
|
+
under: `#<prefix>-<nodeId>-input`, the id the built-in widgets give their
|
|
98
|
+
control, which a custom widget that wants summary navigation gives its own.
|
|
99
|
+
It takes focus once a failed submit settles, once per attempt; `focus: false`
|
|
100
|
+
keeps it passive, for all but one summary when one runtime is rendered twice.
|
|
101
|
+
`setMessages` on the returned mount follows a locale switch in place, and
|
|
102
|
+
unmounting the summary leaves the form mounted. A caller composing the two
|
|
103
|
+
primitives calls `setMessages` on both mounts; the element does that for its
|
|
104
|
+
own.
|
|
105
|
+
|
|
106
|
+
On the element, `error-summary` present mounts the summary as the first child
|
|
107
|
+
of the element's `<form>` and `error-summary="no-focus"` mounts it passive;
|
|
108
|
+
`errorSummary` and `errorSummaryFocus` reflect the attribute and its value.
|
|
109
|
+
Toggling either applies live, and a value set while the element is detached
|
|
110
|
+
applies when it next mounts. The summary is not a live region: the fields
|
|
111
|
+
already announce their own errors, and the focus move is what speaks the
|
|
112
|
+
heading.
|
|
113
|
+
|
|
83
114
|
## Key exports
|
|
84
115
|
|
|
85
116
|
- `defineTexarynForm`
|
|
86
117
|
- `TexarynFormElement`
|
|
87
118
|
- `createDefaultRegistry`
|
|
88
|
-
- `mountForm`
|
|
119
|
+
- `mountForm(container, runtime, { registry, idPrefix, messages })`, returning a `Mount` carrying `runtime`, `idPrefix` and `setMessages`
|
|
120
|
+
- `mountErrorSummary(container, form, { focus })`, returning an `ErrorSummaryMount` with `setMessages`
|
|
89
121
|
- `makeId`
|
|
90
122
|
- `textInput`, `numberInput`, `checkbox`, `select`, `textarea`
|
|
91
123
|
- `objectLayout`, `arrayControl`
|
|
92
|
-
- types: `DomWidget`, `WidgetFactory`, `NodeBinding`, `RenderContext`, `Mount`
|
|
124
|
+
- types: `DomWidget`, `WidgetFactory`, `NodeBinding`, `RenderContext`, `Mount`, `ErrorSummaryOptions`, `ErrorSummaryMount`
|
|
93
125
|
|
|
94
126
|
## Not in this release
|
|
95
127
|
|
|
96
128
|
Shadow DOM, `formAssociated` and `ElementInternals`, nesting inside another
|
|
97
|
-
`<form>`, group and layout containers beyond objects and arrays, text and
|
|
98
|
-
action nodes
|
|
129
|
+
`<form>`, group and layout containers beyond objects and arrays, and text and
|
|
130
|
+
action nodes.
|
|
99
131
|
|
|
100
132
|
## Related packages
|
|
101
133
|
|
package/dist/containers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,MAAM,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAe,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,MAAM,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAe,aAAa,EAAE,MAAM,aAAa,CAAA;AA4ExE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,SAAS,CAqE3E;AAUD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,SAAS,CAiH3E"}
|
package/dist/containers.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { addActionName, moveUpActionName, removeActionName } from './action-names.js';
|
|
2
1
|
function currentNodes(ctx) {
|
|
3
2
|
return ctx.runtime.document.getSnapshot().nodes;
|
|
4
3
|
}
|
|
@@ -154,7 +153,7 @@ export function arrayControl(initial, ctx) {
|
|
|
154
153
|
const root = document.createElement('div');
|
|
155
154
|
root.className = 'texaryn-array';
|
|
156
155
|
const list = document.createElement('div');
|
|
157
|
-
const add = button('
|
|
156
|
+
const add = button('', () => {
|
|
158
157
|
ctx.runtime.dispatch({
|
|
159
158
|
type: 'InsertItem',
|
|
160
159
|
containerId: node.id,
|
|
@@ -171,13 +170,13 @@ export function arrayControl(initial, ctx) {
|
|
|
171
170
|
element.className = 'texaryn-array-item';
|
|
172
171
|
element.dataset.itemId = itemId;
|
|
173
172
|
const slot = document.createElement('div');
|
|
174
|
-
const up = button('
|
|
173
|
+
const up = button('', () => {
|
|
175
174
|
const index = indexOf(itemId);
|
|
176
175
|
if (index > 0) {
|
|
177
176
|
ctx.runtime.dispatch({ type: 'MoveItem', containerId: node.id, from: index, to: index - 1 });
|
|
178
177
|
}
|
|
179
178
|
});
|
|
180
|
-
const remove = button('
|
|
179
|
+
const remove = button('', () => {
|
|
181
180
|
const index = indexOf(itemId);
|
|
182
181
|
if (index >= 0)
|
|
183
182
|
ctx.runtime.dispatch({ type: 'RemoveItem', containerId: node.id, index });
|
|
@@ -219,10 +218,17 @@ export function arrayControl(initial, ctx) {
|
|
|
219
218
|
// Named here rather than in createRow: a row survives a move, so the
|
|
220
219
|
// position in its name is only correct if it is rewritten every pass,
|
|
221
220
|
// the same reason the click handlers resolve their index at click time.
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
const context = {
|
|
222
|
+
position: index + 1,
|
|
223
|
+
itemTitle: child?.annotations.title,
|
|
224
|
+
containerTitle: node.annotations.title,
|
|
225
|
+
};
|
|
226
|
+
const remove = ctx.messages.removeItem(context);
|
|
227
|
+
row.remove.textContent = remove.label;
|
|
228
|
+
row.remove.setAttribute('aria-label', remove.accessibleName);
|
|
229
|
+
const up = ctx.messages.moveItemUp(context);
|
|
230
|
+
row.up.textContent = up.label;
|
|
231
|
+
row.up.setAttribute('aria-label', up.accessibleName);
|
|
226
232
|
elements.push(row.element);
|
|
227
233
|
});
|
|
228
234
|
for (const [itemId, row] of rows) {
|
|
@@ -236,7 +242,12 @@ export function arrayControl(initial, ctx) {
|
|
|
236
242
|
add.hidden = !(meta?.canAdd ?? false);
|
|
237
243
|
// The item template's title, not the first row's: a row may not exist yet,
|
|
238
244
|
// which is when naming this matters most.
|
|
239
|
-
|
|
245
|
+
const addMessage = ctx.messages.addItem({
|
|
246
|
+
itemTemplateTitle: meta?.itemTitle,
|
|
247
|
+
containerTitle: node.annotations.title,
|
|
248
|
+
});
|
|
249
|
+
add.textContent = addMessage.label;
|
|
250
|
+
add.setAttribute('aria-label', addMessage.accessibleName);
|
|
240
251
|
}
|
|
241
252
|
reconcile(node);
|
|
242
253
|
return {
|
package/dist/containers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}
|
package/dist/element.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FormRuntime, FormRuntimeOptions, RendererRegistry, SchemaEvaluationPort } from '@texaryn/core';
|
|
1
|
+
import type { FormMessages, FormRuntime, FormRuntimeOptions, RendererRegistry, SchemaEvaluationPort } from '@texaryn/core';
|
|
2
2
|
import type { WidgetFactory } from './widget.js';
|
|
3
3
|
/**
|
|
4
4
|
* `runtime` is the primitive input: an external runtime the element renders
|
|
@@ -14,7 +14,13 @@ export interface TexarynFormElement extends HTMLElement {
|
|
|
14
14
|
/** Read when the managed runtime is created, so set it before `port`. */
|
|
15
15
|
options: FormRuntimeOptions;
|
|
16
16
|
registry: RendererRegistry<WidgetFactory> | null;
|
|
17
|
+
/** The whole set, or English. Setting it on a mounted element switches the copy in place. */
|
|
18
|
+
messages: FormMessages;
|
|
17
19
|
readonly idPrefix: string;
|
|
20
|
+
/** Reflected to the `error-summary` attribute. While true, the summary is the first child of the element's form. */
|
|
21
|
+
errorSummary: boolean;
|
|
22
|
+
/** Reflected as the `error-summary` value `no-focus`. Off for all but one summary when one runtime is rendered twice. */
|
|
23
|
+
errorSummaryFocus: boolean;
|
|
18
24
|
}
|
|
19
25
|
/**
|
|
20
26
|
* Builds the class on first use rather than at module load. It extends
|
package/dist/element.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,eAAe,CAAA;AAMtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,qFAAqF;IACrF,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,kFAAkF;IAClF,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACjC,yEAAyE;IACzE,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;IAChD,6FAA6F;IAC7F,QAAQ,EAAE,YAAY,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,oHAAoH;IACpH,YAAY,EAAE,OAAO,CAAA;IACrB,yHAAyH;IACzH,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAID;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,wBAAwB,CAkNlE"}
|
package/dist/element.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createFormRuntime } from '@texaryn/core';
|
|
1
|
+
import { createFormRuntime, englishMessages } from '@texaryn/core';
|
|
2
2
|
import { nextInstancePrefix } from './ids.js';
|
|
3
3
|
import { mountForm } from './mount.js';
|
|
4
|
+
import { mountErrorSummary } from './summary.js';
|
|
4
5
|
let elementClass = null;
|
|
5
6
|
/**
|
|
6
7
|
* Builds the class on first use rather than at module load. It extends
|
|
@@ -12,17 +13,24 @@ export function texarynFormElementClass() {
|
|
|
12
13
|
if (elementClass)
|
|
13
14
|
return elementClass;
|
|
14
15
|
class TexarynForm extends HTMLElement {
|
|
16
|
+
static get observedAttributes() {
|
|
17
|
+
return ['error-summary'];
|
|
18
|
+
}
|
|
15
19
|
#external = null;
|
|
16
20
|
#owned = null;
|
|
17
21
|
#port = null;
|
|
18
22
|
#options = {};
|
|
19
23
|
#registry = null;
|
|
24
|
+
#messages = englishMessages;
|
|
20
25
|
#form = null;
|
|
21
26
|
#mount = null;
|
|
22
27
|
#mountedRuntime = null;
|
|
23
28
|
#mountedRegistry = null;
|
|
24
29
|
#unsubscribe = [];
|
|
25
30
|
#prefix = null;
|
|
31
|
+
#errorSummary = false;
|
|
32
|
+
#summary = null;
|
|
33
|
+
#errorSummaryFocus = true;
|
|
26
34
|
/** The element's own id when it has one on first use, else an allocated `texaryn-<n>`; fixed for the element's lifetime. */
|
|
27
35
|
get idPrefix() {
|
|
28
36
|
this.#prefix ??= this.id || nextInstancePrefix();
|
|
@@ -67,6 +75,51 @@ export function texarynFormElementClass() {
|
|
|
67
75
|
this.#registry = registry;
|
|
68
76
|
this.#render();
|
|
69
77
|
}
|
|
78
|
+
get messages() {
|
|
79
|
+
return this.#messages;
|
|
80
|
+
}
|
|
81
|
+
set messages(messages) {
|
|
82
|
+
this.#messages = messages ?? englishMessages;
|
|
83
|
+
this.#mount?.setMessages(this.#messages);
|
|
84
|
+
this.#summary?.setMessages(this.#messages);
|
|
85
|
+
}
|
|
86
|
+
get errorSummary() {
|
|
87
|
+
return this.#errorSummary;
|
|
88
|
+
}
|
|
89
|
+
set errorSummary(on) {
|
|
90
|
+
const next = Boolean(on);
|
|
91
|
+
if (next === this.#errorSummary)
|
|
92
|
+
return;
|
|
93
|
+
this.#errorSummary = next;
|
|
94
|
+
if (next)
|
|
95
|
+
this.setAttribute('error-summary', this.#errorSummaryFocus ? '' : 'no-focus');
|
|
96
|
+
else
|
|
97
|
+
this.removeAttribute('error-summary');
|
|
98
|
+
this.#reconcileSummary();
|
|
99
|
+
}
|
|
100
|
+
get errorSummaryFocus() {
|
|
101
|
+
return this.#errorSummaryFocus;
|
|
102
|
+
}
|
|
103
|
+
set errorSummaryFocus(on) {
|
|
104
|
+
const next = Boolean(on);
|
|
105
|
+
if (next === this.#errorSummaryFocus)
|
|
106
|
+
return;
|
|
107
|
+
this.#errorSummaryFocus = next;
|
|
108
|
+
if (this.#errorSummary)
|
|
109
|
+
this.setAttribute('error-summary', next ? '' : 'no-focus');
|
|
110
|
+
if (this.#summary) {
|
|
111
|
+
this.#summary.unmount();
|
|
112
|
+
this.#summary = null;
|
|
113
|
+
this.#reconcileSummary();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
attributeChangedCallback(name, _old, value) {
|
|
117
|
+
if (name !== 'error-summary')
|
|
118
|
+
return;
|
|
119
|
+
if (value !== null)
|
|
120
|
+
this.errorSummaryFocus = value !== 'no-focus';
|
|
121
|
+
this.errorSummary = value !== null;
|
|
122
|
+
}
|
|
70
123
|
connectedCallback() {
|
|
71
124
|
this.#render();
|
|
72
125
|
}
|
|
@@ -92,9 +145,14 @@ export function texarynFormElementClass() {
|
|
|
92
145
|
}
|
|
93
146
|
this.#unmount();
|
|
94
147
|
const form = this.#ensureForm();
|
|
95
|
-
this.#mount = mountForm(form, runtime,
|
|
148
|
+
this.#mount = mountForm(form, runtime, {
|
|
149
|
+
registry: this.#registry,
|
|
150
|
+
idPrefix: this.idPrefix,
|
|
151
|
+
messages: this.#messages,
|
|
152
|
+
});
|
|
96
153
|
this.#mountedRuntime = runtime;
|
|
97
154
|
this.#mountedRegistry = this.#registry;
|
|
155
|
+
this.#reconcileSummary();
|
|
98
156
|
this.#unsubscribe.push(runtime.data.subscribe(() => {
|
|
99
157
|
this.dispatchEvent(new CustomEvent('texaryn-data-change', { detail: runtime.data.getSnapshot(), bubbles: true }));
|
|
100
158
|
}), runtime.submission.subscribe(() => {
|
|
@@ -121,11 +179,23 @@ export function texarynFormElementClass() {
|
|
|
121
179
|
for (const off of this.#unsubscribe)
|
|
122
180
|
off();
|
|
123
181
|
this.#unsubscribe = [];
|
|
182
|
+
this.#summary?.unmount();
|
|
183
|
+
this.#summary = null;
|
|
124
184
|
this.#mount?.unmount();
|
|
125
185
|
this.#mount = null;
|
|
126
186
|
this.#mountedRuntime = null;
|
|
127
187
|
this.#mountedRegistry = null;
|
|
128
188
|
}
|
|
189
|
+
#reconcileSummary() {
|
|
190
|
+
const wanted = this.#errorSummary && this.#mount !== null && this.#form !== null;
|
|
191
|
+
if (wanted && !this.#summary) {
|
|
192
|
+
this.#summary = mountErrorSummary(this.#form, this.#mount, { focus: this.#errorSummaryFocus });
|
|
193
|
+
}
|
|
194
|
+
if (!wanted && this.#summary) {
|
|
195
|
+
this.#summary.unmount();
|
|
196
|
+
this.#summary = null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
129
199
|
#dispose() {
|
|
130
200
|
this.#unmount();
|
|
131
201
|
if (this.#owned) {
|
package/dist/element.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}
|
package/dist/fields.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { UINode } from '@texaryn/core';
|
|
2
2
|
import type { DomWidget, RenderContext } from './widget.js';
|
|
3
|
-
/** HTML honours `readonly` on text-like controls only; the rest need ARIA. */
|
|
4
|
-
/** The wording every binding uses, so a custom widget can match it. */
|
|
5
|
-
export declare const REQUIRED_INDICATOR = "(required)";
|
|
6
3
|
export declare const textInput: (node: UINode, ctx: RenderContext) => DomWidget;
|
|
7
4
|
export declare const numberInput: (node: UINode, ctx: RenderContext) => DomWidget;
|
|
8
5
|
export declare const checkbox: (node: UINode, ctx: RenderContext) => DomWidget;
|
package/dist/fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,MAAM,EAAE,MAAM,eAAe,CAAA;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AA2L3D,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,KAAK,aAAa,KAAG,SAA6C,CAAA;AAC1G,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,KAAK,aAAa,KAAG,SAA6C,CAAA;AAC5G,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,KAAK,aAAa,KAAG,SAA8C,CAAA;AAC1G,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,KAAK,aAAa,KAAG,SAA2C,CAAA;AACrG,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,KAAK,aAAa,KAAG,SAA+C,CAAA"}
|
package/dist/fields.js
CHANGED
|
@@ -13,29 +13,22 @@ function coerce(kind, node, raw) {
|
|
|
13
13
|
function display(value) {
|
|
14
14
|
return value == null ? '' : String(value);
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
export const REQUIRED_INDICATOR = '(required)';
|
|
19
|
-
/**
|
|
20
|
-
* Three separate channels carry one fact and must not be collapsed. The
|
|
21
|
-
* sighted user reads "(required)"; the accessible name stays the label alone,
|
|
22
|
-
* because aria-required already reports the state and naming it too makes some
|
|
23
|
-
* screen readers say it twice; and the indicator says the word rather than an
|
|
24
|
-
* asterisk, so nobody has to be told elsewhere what a marker means.
|
|
25
|
-
*
|
|
26
|
-
* Rebuilt on every render because a conditional schema can make a field
|
|
27
|
-
* required or optional at any recompile.
|
|
28
|
-
*/
|
|
29
|
-
function writeLabel(label, text, required) {
|
|
16
|
+
/** The marker stays out of the accessible name: aria-required already reports the state, and some screen readers would say it twice. */
|
|
17
|
+
function writeLabel(label, text, required, messages) {
|
|
30
18
|
const children = [document.createTextNode(text)];
|
|
31
19
|
if (required) {
|
|
20
|
+
const indicator = messages.requiredIndicator();
|
|
32
21
|
const marker = document.createElement('span');
|
|
33
22
|
marker.setAttribute('aria-hidden', 'true');
|
|
34
|
-
marker.textContent = ` ${
|
|
35
|
-
|
|
23
|
+
marker.textContent = indicator.placement === 'after' ? ` ${indicator.text}` : `${indicator.text} `;
|
|
24
|
+
if (indicator.placement === 'after')
|
|
25
|
+
children.push(marker);
|
|
26
|
+
else
|
|
27
|
+
children.unshift(marker);
|
|
36
28
|
}
|
|
37
29
|
label.replaceChildren(...children);
|
|
38
30
|
}
|
|
31
|
+
/** HTML honours `readonly` on text-like controls only; the rest need ARIA. */
|
|
39
32
|
function hasNativeReadOnly(kind) {
|
|
40
33
|
return kind === 'string' || kind === 'number' || kind === 'textarea';
|
|
41
34
|
}
|
|
@@ -112,7 +105,7 @@ function fieldWidget(kind, initial, ctx) {
|
|
|
112
105
|
}));
|
|
113
106
|
}
|
|
114
107
|
function render() {
|
|
115
|
-
writeLabel(label, node.annotations.title ?? node.dataPointer ?? node.id, node.constraints.required === true);
|
|
108
|
+
writeLabel(label, node.annotations.title ?? node.dataPointer ?? node.id, node.constraints.required === true, ctx.messages);
|
|
116
109
|
renderOptions();
|
|
117
110
|
const value = state.value;
|
|
118
111
|
if (control instanceof HTMLInputElement && kind === 'boolean') {
|
package/dist/fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAMjC,sGAAsG;AACtG,SAAS,MAAM,CAAC,IAAU,EAAE,IAAe,EAAE,GAAW;IACtD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;QAC3E,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;IACpC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export type { TexarynFormElement } from './element.js';
|
|
2
2
|
export { defineTexarynForm } from './define.js';
|
|
3
3
|
export { mountForm } from './mount.js';
|
|
4
|
-
export type { Mount } from './mount.js';
|
|
4
|
+
export type { Mount, MountOptions } from './mount.js';
|
|
5
|
+
export { mountErrorSummary } from './summary.js';
|
|
6
|
+
export type { ErrorSummaryMount, ErrorSummaryOptions } from './summary.js';
|
|
5
7
|
export { createDefaultRegistry } from './registry.js';
|
|
6
8
|
export { textInput, numberInput, checkbox, select, textarea } from './fields.js';
|
|
7
9
|
export { objectLayout, arrayControl } from './containers.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,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { defineTexarynForm } from './define.js';
|
|
2
2
|
export { mountForm } from './mount.js';
|
|
3
|
+
export { mountErrorSummary } from './summary.js';
|
|
3
4
|
export { createDefaultRegistry } from './registry.js';
|
|
4
5
|
export { textInput, numberInput, checkbox, select, textarea } from './fields.js';
|
|
5
6
|
export { objectLayout, arrayControl } from './containers.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/mount.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
import type { FormRuntime, RendererRegistry } from '@texaryn/core';
|
|
1
|
+
import type { FormMessages, FormRuntime, RendererRegistry } from '@texaryn/core';
|
|
2
2
|
import type { WidgetFactory } from './widget.js';
|
|
3
|
+
export interface MountOptions {
|
|
4
|
+
registry: RendererRegistry<WidgetFactory>;
|
|
5
|
+
idPrefix: string;
|
|
6
|
+
/** The whole set, or English. */
|
|
7
|
+
messages?: FormMessages;
|
|
8
|
+
}
|
|
3
9
|
export interface Mount {
|
|
10
|
+
readonly runtime: FormRuntime;
|
|
11
|
+
readonly idPrefix: string;
|
|
12
|
+
/** The set in force, after any setMessages. */
|
|
13
|
+
readonly messages: FormMessages;
|
|
14
|
+
/** A locale change recompiles no document, so this reconciles in place; unmounting would drop focus and caret. */
|
|
15
|
+
setMessages(messages: FormMessages): void;
|
|
4
16
|
unmount(): void;
|
|
5
17
|
}
|
|
6
18
|
/**
|
|
@@ -8,5 +20,5 @@ export interface Mount {
|
|
|
8
20
|
* by updating the root binding in place. The runtime is borrowed: unmounting
|
|
9
21
|
* releases subscriptions and DOM, never the runtime.
|
|
10
22
|
*/
|
|
11
|
-
export declare function mountForm(container: HTMLElement, runtime: FormRuntime,
|
|
23
|
+
export declare function mountForm(container: HTMLElement, runtime: FormRuntime, options: MountOptions): Mount;
|
|
12
24
|
//# sourceMappingURL=mount.d.ts.map
|
package/dist/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhF,OAAO,KAAK,EAA8B,aAAa,EAAE,MAAM,aAAa,CAAA;AAE5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAC/B,kHAAkH;IAClH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IACzC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAgDpG"}
|
package/dist/mount.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
+
import { englishMessages } from '@texaryn/core';
|
|
1
2
|
import { createNodeBinding } from './binding.js';
|
|
2
3
|
/**
|
|
3
4
|
* Renders a runtime's document into a container and follows every recompile
|
|
4
5
|
* by updating the root binding in place. The runtime is borrowed: unmounting
|
|
5
6
|
* releases subscriptions and DOM, never the runtime.
|
|
6
7
|
*/
|
|
7
|
-
export function mountForm(container, runtime,
|
|
8
|
+
export function mountForm(container, runtime, options) {
|
|
9
|
+
const { registry, idPrefix, messages = englishMessages } = options;
|
|
8
10
|
const ctx = {
|
|
9
11
|
runtime,
|
|
10
12
|
registry,
|
|
11
13
|
idPrefix,
|
|
14
|
+
messages,
|
|
12
15
|
mountChild: (node) => createNodeBinding(node, ctx),
|
|
13
16
|
};
|
|
14
17
|
let doc = runtime.document.getSnapshot();
|
|
15
18
|
let root = createNodeBinding(doc.nodes[doc.rootId], ctx);
|
|
16
19
|
container.append(root.element);
|
|
20
|
+
let live = true;
|
|
17
21
|
const unsubscribe = runtime.document.subscribe(() => {
|
|
18
22
|
const next = runtime.document.getSnapshot();
|
|
19
23
|
const rootNode = next.nodes[next.rootId];
|
|
@@ -29,7 +33,22 @@ export function mountForm(container, runtime, registry, idPrefix) {
|
|
|
29
33
|
doc = next;
|
|
30
34
|
});
|
|
31
35
|
return {
|
|
36
|
+
runtime,
|
|
37
|
+
idPrefix,
|
|
38
|
+
get messages() {
|
|
39
|
+
return ctx.messages;
|
|
40
|
+
},
|
|
41
|
+
setMessages(next) {
|
|
42
|
+
if (!live)
|
|
43
|
+
return;
|
|
44
|
+
if (next === ctx.messages)
|
|
45
|
+
return;
|
|
46
|
+
ctx.messages = next;
|
|
47
|
+
const snapshot = runtime.document.getSnapshot();
|
|
48
|
+
root.update(snapshot.nodes[snapshot.rootId]);
|
|
49
|
+
},
|
|
32
50
|
unmount() {
|
|
51
|
+
live = false;
|
|
33
52
|
unsubscribe();
|
|
34
53
|
root.destroy();
|
|
35
54
|
root.element.remove();
|
package/dist/mount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAoBhD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,SAAsB,EAAE,OAAoB,EAAE,OAAqB;IAC3F,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,EAAE,GAAG,OAAO,CAAA;IAClE,MAAM,GAAG,GAAkB;QACzB,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC;KACnD,CAAA;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;IACxC,IAAI,IAAI,GAAgB,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IACrE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,IAAI,IAAI,GAAG,IAAI,CAAA;IAEf,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACpD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;QACD,GAAG,GAAG,IAAI,CAAA;IACZ,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,OAAO;QACP,QAAQ;QACR,IAAI,QAAQ;YACV,OAAO,GAAG,CAAC,QAAQ,CAAA;QACrB,CAAC;QACD,WAAW,CAAC,IAAI;YACd,IAAI,CAAC,IAAI;gBAAE,OAAM;YACjB,IAAI,IAAI,KAAK,GAAG,CAAC,QAAQ;gBAAE,OAAM;YACjC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA;YACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO;YACL,IAAI,GAAG,KAAK,CAAA;YACZ,WAAW,EAAE,CAAA;YACb,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QACvB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FormMessages } from '@texaryn/core';
|
|
2
|
+
import type { Mount } from './mount.js';
|
|
3
|
+
export interface ErrorSummaryOptions {
|
|
4
|
+
/** Off for all but one summary when one runtime is rendered twice. */
|
|
5
|
+
focus?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ErrorSummaryMount {
|
|
8
|
+
setMessages(messages: FormMessages): void;
|
|
9
|
+
unmount(): void;
|
|
10
|
+
}
|
|
11
|
+
/** Takes the Mount, not a runtime and a prefix, so the links cannot name a namespace the form was not mounted under. */
|
|
12
|
+
export declare function mountErrorSummary(container: HTMLElement, form: Mount, options?: ErrorSummaryOptions): ErrorSummaryMount;
|
|
13
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAA;AAEvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IACzC,OAAO,IAAI,IAAI,CAAA;CAChB;AAgBD,wHAAwH;AACxH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,mBAAwB,GAChC,iBAAiB,CAyEnB"}
|
package/dist/summary.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createFailedSubmitTracker, visibleErrorLabel, visibleErrorMessages } from '@texaryn/core';
|
|
2
|
+
import { makeId } from './ids.js';
|
|
3
|
+
function updateItem(li, entry, idPrefix, messages) {
|
|
4
|
+
const link = li.firstChild;
|
|
5
|
+
link.href = `#${makeId(idPrefix, entry.nodeId, 'input')}`;
|
|
6
|
+
link.textContent = visibleErrorLabel(entry);
|
|
7
|
+
li.lastChild.textContent = messages.errorSummaryDetail({ messages: visibleErrorMessages(entry) });
|
|
8
|
+
}
|
|
9
|
+
function item(entry, idPrefix, messages) {
|
|
10
|
+
const li = document.createElement('li');
|
|
11
|
+
li.append(document.createElement('a'), document.createTextNode(''));
|
|
12
|
+
updateItem(li, entry, idPrefix, messages);
|
|
13
|
+
return li;
|
|
14
|
+
}
|
|
15
|
+
/** Takes the Mount, not a runtime and a prefix, so the links cannot name a namespace the form was not mounted under. */
|
|
16
|
+
export function mountErrorSummary(container, form, options = {}) {
|
|
17
|
+
const { runtime, idPrefix } = form;
|
|
18
|
+
const { focus = true } = options;
|
|
19
|
+
let messages = form.messages;
|
|
20
|
+
const root = document.createElement('div');
|
|
21
|
+
root.setAttribute('role', 'group');
|
|
22
|
+
root.tabIndex = -1;
|
|
23
|
+
const heading = document.createElement('h2');
|
|
24
|
+
heading.id = makeId(idPrefix, 'error-summary', 'heading');
|
|
25
|
+
root.setAttribute('aria-labelledby', heading.id);
|
|
26
|
+
const list = document.createElement('ul');
|
|
27
|
+
root.append(heading, list);
|
|
28
|
+
const items = new Map();
|
|
29
|
+
const tracker = createFailedSubmitTracker(runtime.submission.getSnapshot());
|
|
30
|
+
let live = true;
|
|
31
|
+
const render = (errors) => {
|
|
32
|
+
if (errors.length === 0) {
|
|
33
|
+
root.remove();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
heading.textContent = messages.errorSummaryHeading({ count: errors.length });
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const ordered = errors.map((entry) => {
|
|
39
|
+
seen.add(entry.nodeId);
|
|
40
|
+
const existing = items.get(entry.nodeId);
|
|
41
|
+
if (existing) {
|
|
42
|
+
updateItem(existing, entry, idPrefix, messages);
|
|
43
|
+
return existing;
|
|
44
|
+
}
|
|
45
|
+
const li = item(entry, idPrefix, messages);
|
|
46
|
+
items.set(entry.nodeId, li);
|
|
47
|
+
return li;
|
|
48
|
+
});
|
|
49
|
+
for (const [nodeId, li] of items) {
|
|
50
|
+
if (seen.has(nodeId))
|
|
51
|
+
continue;
|
|
52
|
+
li.remove();
|
|
53
|
+
items.delete(nodeId);
|
|
54
|
+
}
|
|
55
|
+
let anchor = list.firstChild;
|
|
56
|
+
for (const li of ordered) {
|
|
57
|
+
if (li === anchor) {
|
|
58
|
+
anchor = anchor.nextSibling;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
list.insertBefore(li, anchor);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (root.parentNode !== container)
|
|
65
|
+
container.prepend(root);
|
|
66
|
+
};
|
|
67
|
+
const reconcile = () => {
|
|
68
|
+
const errors = runtime.visibleErrors.getSnapshot();
|
|
69
|
+
render(errors);
|
|
70
|
+
if (!tracker.settle(runtime.submission.getSnapshot(), errors))
|
|
71
|
+
return;
|
|
72
|
+
if (focus && root.isConnected)
|
|
73
|
+
root.focus();
|
|
74
|
+
};
|
|
75
|
+
reconcile();
|
|
76
|
+
const unsubscribe = [runtime.visibleErrors.subscribe(reconcile), runtime.submission.subscribe(reconcile)];
|
|
77
|
+
return {
|
|
78
|
+
setMessages(next) {
|
|
79
|
+
if (!live)
|
|
80
|
+
return;
|
|
81
|
+
if (next === messages)
|
|
82
|
+
return;
|
|
83
|
+
messages = next;
|
|
84
|
+
render(runtime.visibleErrors.getSnapshot());
|
|
85
|
+
},
|
|
86
|
+
unmount() {
|
|
87
|
+
live = false;
|
|
88
|
+
for (const off of unsubscribe)
|
|
89
|
+
off();
|
|
90
|
+
root.remove();
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"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"}
|
package/dist/widget.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FormRuntime, RendererRegistry, UINode } from '@texaryn/core';
|
|
1
|
+
import type { FormMessages, FormRuntime, RendererRegistry, UINode } from '@texaryn/core';
|
|
2
2
|
/**
|
|
3
3
|
* A widget owns one DOM subtree for one node. `update` may hand it a
|
|
4
4
|
* different node than it mounted with: after an array move the row keeps
|
|
@@ -19,6 +19,8 @@ export interface RenderContext {
|
|
|
19
19
|
runtime: FormRuntime;
|
|
20
20
|
registry: RendererRegistry<WidgetFactory>;
|
|
21
21
|
idPrefix: string;
|
|
22
|
+
/** Replaced whole by `Mount.setMessages`; widgets read it on every render rather than capturing it. */
|
|
23
|
+
messages: FormMessages;
|
|
22
24
|
mountChild(node: UINode): NodeBinding;
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=widget.d.ts.map
|
package/dist/widget.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAExF;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,SAAS,CAAA;AAE3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,uGAAuG;IACvG,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;CACtC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@texaryn/web-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A <texaryn-form> custom element over the Texaryn runtime, with native default widgets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"CHANGELOG.md"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@texaryn/core": "^0.
|
|
46
|
+
"@texaryn/core": "^0.12.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"jsdom": "^25.0.0",
|
|
50
|
-
"@texaryn/schema-json": "0.
|
|
50
|
+
"@texaryn/schema-json": "0.6.1"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "tsc --build"
|
package/dist/action-names.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Accessible names for the controls an array renders.
|
|
3
|
-
*
|
|
4
|
-
* A deliberate reimplementation rather than an import: this package depends on
|
|
5
|
-
* no other binding. Nothing here is renderer specific, and it is now the third
|
|
6
|
-
* copy, so a framework-neutral home is overdue; that move belongs in its own
|
|
7
|
-
* change rather than riding along with an accessibility fix.
|
|
8
|
-
*
|
|
9
|
-
* The name carries the current 1-based position, because that is what a person
|
|
10
|
-
* means by "the second contact"; the stable item id is implementation identity.
|
|
11
|
-
* The row's own value is deliberately unused: mutable, often blank, frequently
|
|
12
|
-
* duplicated, sometimes sensitive.
|
|
13
|
-
*/
|
|
14
|
-
export declare function removeActionName(position: number, itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
15
|
-
export declare function moveUpActionName(position: number, itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
16
|
-
export declare function addActionName(itemTitle: string | undefined, arrayTitle: string | undefined): string;
|
|
17
|
-
//# sourceMappingURL=action-names.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-names.d.ts","sourceRoot":"","sources":["../src/action-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;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"}
|
package/dist/action-names.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Accessible names for the controls an array renders.
|
|
3
|
-
*
|
|
4
|
-
* A deliberate reimplementation rather than an import: this package depends on
|
|
5
|
-
* no other binding. Nothing here is renderer specific, and it is now the third
|
|
6
|
-
* copy, so a framework-neutral home is overdue; that move belongs in its own
|
|
7
|
-
* change rather than riding along with an accessibility fix.
|
|
8
|
-
*
|
|
9
|
-
* The name carries the current 1-based position, because that is what a person
|
|
10
|
-
* means by "the second contact"; the stable item id is implementation identity.
|
|
11
|
-
* The row's own value is deliberately unused: mutable, often blank, frequently
|
|
12
|
-
* duplicated, sometimes sensitive.
|
|
13
|
-
*/
|
|
14
|
-
export function removeActionName(position, itemTitle, arrayTitle) {
|
|
15
|
-
return withContainer(`Remove ${itemTitle ?? 'item'} ${position}`, 'from', arrayTitle);
|
|
16
|
-
}
|
|
17
|
-
export function moveUpActionName(position, itemTitle, arrayTitle) {
|
|
18
|
-
return withContainer(`Move up ${itemTitle ?? 'item'} ${position}`, 'in', arrayTitle);
|
|
19
|
-
}
|
|
20
|
-
export function addActionName(itemTitle, arrayTitle) {
|
|
21
|
-
if (arrayTitle !== undefined)
|
|
22
|
-
return `Add item to ${arrayTitle}`;
|
|
23
|
-
return itemTitle === undefined ? 'Add item' : `Add ${itemTitle}`;
|
|
24
|
-
}
|
|
25
|
-
function withContainer(name, preposition, arrayTitle) {
|
|
26
|
-
return arrayTitle === undefined ? name : `${name} ${preposition} ${arrayTitle}`;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=action-names.js.map
|
package/dist/action-names.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-names.js","sourceRoot":"","sources":["../src/action-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;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"}
|