@rak200/ui 0.3.0 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAyFjF;;;;;;GAMG;AACH,cAAM,SAAU,SAAQ,UAAU;IACrB,MAAM,IAAI,cAAc;CAGpC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,OAAQ,SAAQ,SAAS;IAClC,gBAAyB,MAAM,EAAE,SAAS,CAAW;CACxD;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACrC,gBAAyB,MAAM,EAAE,SAAS,EAAE,CAQ1C;CACL;AAWD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,UAAU,CAAC;KAC7B;CACJ"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AA8H1F;;;;;;;;;;;;;;GAcG;AACH,cAAM,WAAY,SAAQ,UAAU;;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,QAAQ;IAEtC;;;;;;OAMG;IACH,gBAAyB,iBAAiB;;;;;;;MAGxC;IAEF,gBAAyB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiBjC;IAEF;;;;;OAKG;IACH,KAAK,SAAM;IAEX,uFAAuF;IACvF,IAAI,SAAM;IAEV,gFAAgF;IAChF,KAAK,SAAM;IAEX;;;;;;OAMG;IACH,IAAI,SAAM;IAEV;;;;;;OAMG;IACH,KAAK,SAAM;IAEX,mFAAmF;IACnF,WAAW,SAAM;IAEjB,qFAAqF;IACrF,YAAY,SAAM;IAElB,+DAA+D;IAC/D,SAAS,SAAM;IAEf,4CAA4C;IAC5C,SAAS,SAAM;IAEf,4DAA4D;IAC5D,QAAQ,UAAS;IAEjB,oEAAoE;IACpE,QAAQ,UAAS;IAEjB,oEAAoE;IACpE,QAAQ,UAAS;IAkBjB;;;;;;;OAOG;IACM,OAAO,IAAI,IAAI;IAUxB;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,GAAI,OAAO,KAAK,KAAG,IAAI,CAE7C;IAEF,SAAS,CAAC,QAAQ,CAAC,OAAO,QAAO,IAAI,CAEnC;IAEF;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAIzB,sFAAsF;IACtF,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI7C,iFAAiF;IACjF,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpD,uEAAuE;IACvE,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,+DAA+D;IAC/D,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,gFAAgF;IAChF,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc;IAmBxD,wEAAwE;IACxE,SAAS,CAAC,SAAS,IAAI,MAAM,GAAG,OAAO,OAAO;IAQ9C,iFAAiF;IACjF,SAAS,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,OAAO;CAG/C;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,OAAQ,SAAQ,WAAW;IACpC,gBAAyB,MAAM,EAAE,SAAS,CAAS;IAEnD,gBAAyB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQjC;IAEF,+EAA+E;IAC/E,IAAI,SAAU;IAEd,iFAAiF;IACjF,SAAS,SAAM;IAEf,gFAAgF;IAChF,OAAO,SAAM;IAEb,2CAA2C;IAC3C,GAAG,SAAM;IAET,4CAA4C;IAC5C,GAAG,SAAM;IAET,wDAAwD;IACxD,IAAI,SAAM;IAED,MAAM,IAAI,cAAc;CA2BpC;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACvC,gBAAyB,MAAM,EAAE,SAAS,EAAE,CAQ1C;IAEF,gBAAyB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAGjC;IAEF,qFAAqF;IACrF,IAAI,SAAM;IAED,MAAM,IAAI,cAAc;CAsBpC;AAWD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,UAAU,CAAC;KAC7B;CACJ"}
package/dist/input.js CHANGED
@@ -1,4 +1,4 @@
1
- import { LitElement, css, html } from 'lit';
1
+ import { LitElement, css, html, nothing } from 'lit';
2
2
  import { reference } from './reference.js';
3
3
  /**
4
4
  * What a styled native control looks like, which both elements share.
@@ -6,24 +6,32 @@ import { reference } from './reference.js';
6
6
  * One stylesheet naming both `input` and `textarea` rather than one per element: the two
7
7
  * differ in what they accept and in one rule about resizing, and duplicating the whole
8
8
  * box to express that would be two copies of a contract with nothing comparing them.
9
+ *
10
+ * **Every rule reaches a control this element renders**, which RFC 0005 decided. The
11
+ * `::slotted()` these rules were written with was forced by the control having to sit in
12
+ * the host's tree, where the label could reach it — and what a relationship actually needs
13
+ * is for every end of it to share a tree scope, which a `<label for>` and its control in
14
+ * one shadow root satisfy. So the label, the help and the error came inside with it.
9
15
  */
10
- const control = css `
16
+ const field = css `
11
17
  :host {
12
18
  display: block;
19
+ font-family: ${reference('--ui-font')};
13
20
  }
14
21
 
15
- /* Everything below reaches a control the *host* wrote, through ::slotted. That is the
16
- whole shape of this component and it is forced rather than preferred — the control
17
- has to stay in the light DOM, where the label and the description ui-field writes
18
- can resolve against it. Measured, in this suite's own instrument: the same control
19
- rendered into a shadow root is an axe label violation at critical impact, and the
20
- aria-describedby pointing at it dangles.
22
+ /* The rhythm ui-field used to own, now owned by the control it was wrapping. */
23
+ .stack {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: calc(${reference('--ui-space')} / 2);
27
+ }
28
+
29
+ label {
30
+ color: ${reference('--ui-color-text')};
31
+ }
21
32
 
22
- ::slotted reaches a pseudo-element of a slotted node too, which is what makes the
23
- placeholder rule below possible — measured, because the selector looks like it
24
- should not work. */
25
- ::slotted(input),
26
- ::slotted(textarea) {
33
+ input,
34
+ textarea {
27
35
  box-sizing: border-box;
28
36
  inline-size: 100%;
29
37
  font: inherit;
@@ -40,8 +48,8 @@ const control = css `
40
48
  ${reference('--ui-easing-state')};
41
49
  }
42
50
 
43
- ::slotted(input)::placeholder,
44
- ::slotted(textarea)::placeholder {
51
+ input::placeholder,
52
+ textarea::placeholder {
45
53
  color: ${reference('--ui-color-text-muted')};
46
54
  /* Firefox lowers a placeholder's opacity by default, which would take the colour
47
55
  below the 4.5:1 it was chosen to clear — a contrast floor undone by a rule
@@ -56,98 +64,381 @@ const control = css `
56
64
  The guards are measured rather than assumed, the same way ui-button's are: a
57
65
  disabled control still matches :hover, and a readonly one accepts a pointer it will
58
66
  do nothing with. */
59
- ::slotted(input:hover:not(:disabled):not([readonly])),
60
- ::slotted(textarea:hover:not(:disabled):not([readonly])) {
67
+ input:hover:not(:disabled):not([readonly]),
68
+ textarea:hover:not(:disabled):not([readonly]) {
61
69
  border-color: ${reference('--ui-color-text')};
62
70
  }
63
71
 
64
72
  /* A visible focus ring is not decoration: removing it is the single most common way a
65
73
  component stops being usable by keyboard. */
66
- ::slotted(input:focus-visible),
67
- ::slotted(textarea:focus-visible) {
74
+ input:focus-visible,
75
+ textarea:focus-visible {
68
76
  outline: 2px solid ${reference('--ui-color-focus')};
69
77
  outline-offset: 2px;
70
78
  }
71
79
 
72
- ::slotted(input:disabled),
73
- ::slotted(textarea:disabled) {
80
+ input:disabled,
81
+ textarea:disabled {
74
82
  cursor: not-allowed;
75
83
  opacity: 0.5;
76
84
  }
77
85
 
78
- /* The error state is not this component's to decide, and it does not decide it:
79
- ui-field sets aria-invalid on the control as part of the wiring it already
80
- owns, and this rule reads it. So the message under the field and the box around it
81
- cannot disagree about whether there is an error — there is one source and it is the
82
- one a screen reader is already using. */
83
- ::slotted(input[aria-invalid='true']),
84
- ::slotted(textarea[aria-invalid='true']) {
86
+ :host([disabled]) label {
87
+ color: ${reference('--ui-color-text-muted')};
88
+ }
89
+
90
+ /* Read off the control's own aria-invalid rather than off a host attribute: it is the
91
+ same source a screen reader uses, and it is the rule this file already carried when
92
+ ui-field was the one writing it. Not :host([error]) — a reflected string property
93
+ whose default is empty puts an empty attribute on the host, and an
94
+ attribute-presence selector matches every element. Measured on ui-checkbox. */
95
+ input[aria-invalid='true'],
96
+ textarea[aria-invalid='true'] {
85
97
  border-color: ${reference('--ui-color-danger')};
86
98
  }
99
+
100
+ .help {
101
+ color: ${reference('--ui-color-text')};
102
+ font-size: ${reference('--ui-text-supporting')};
103
+ }
104
+
105
+ /* Colour is not the only cue — the message says what is wrong, and aria-invalid marks
106
+ the control whatever the styling does. */
107
+ .error {
108
+ color: ${reference('--ui-color-danger')};
109
+ font-size: ${reference('--ui-text-supporting')};
110
+ }
87
111
  `;
88
112
  /**
89
- * A styled native form control.
113
+ * Omitted rather than written blank, which is a rule and not a preference.
90
114
  *
91
- * The control is the host's own, slotted in rather than rendered here, and that is the
92
- * single decision this component is made of. {@link UiInput} and {@link UiTextarea} carry
93
- * the appearance; the element inside carries everything else.
115
+ * An empty attribute is not a neutral one: `pattern=""` is the empty expression and
116
+ * matches only the empty string, so a field carrying it is invalid for every value a
117
+ * person can type. Measured, as a control that reported `patternMismatch` with no pattern
118
+ * in sight. The same shape bit `<ui-checkbox>` from the other side, where `error=""`
119
+ * matched an attribute-presence selector on every element.
94
120
  */
95
- class UiControl extends LitElement {
96
- render() {
97
- return html `<slot></slot>`;
98
- }
121
+ function attribute(value) {
122
+ return value === '' ? nothing : value;
99
123
  }
100
124
  /**
101
- * A text input, styled by the token layer rather than replaced.
125
+ * A styled native form control, and the wiring that used to sit around it.
126
+ *
127
+ * **The control is this element's**, rendered into its shadow root together with its
128
+ * label, its help text and its message — so the IDREFs resolve in one tree scope and
129
+ * `<ui-field>` has nothing left to point at. What a host writes is the tag and its
130
+ * attributes.
102
131
  *
103
- * **The `<input>` is yours.** You write it, you set its attributes, and it stays in the
104
- * light DOM — so `type`, `required`, `readonly`, `name` and `value` are the platform's
105
- * business and there is no pass-through layer to fall out of step with them. It reaches a
106
- * form submit for the same reason: a native control inside a `<form>` participates
107
- * because it is a native control inside a `<form>`, with no `ElementInternals` and no
108
- * value mirroring. That was the open question on the issue, and the answer is that the
109
- * shape the accessibility rule forced happens to be the shape that answers it.
132
+ * **The element is the form control**, through `ElementInternals`: an `<input>` in a
133
+ * shadow root has no form owner, so the value reaches a submit because this element passes
134
+ * it on. **Constraint validation is not reimplemented** — the inner control still computes
135
+ * its own, `type="email"` and `min` and `pattern` included, and this element hands the
136
+ * whole `ValidityState` over with the message the engine wrote. Measured: a bad address
137
+ * reports `typeMismatch` with the browser's own wording.
138
+ */
139
+ class UiTextField extends LitElement {
140
+ constructor() {
141
+ super(...arguments);
142
+ /**
143
+ * The accessible name, and the text above the control.
144
+ *
145
+ * A plain field rather than the `accessor` keyword, for the reason `src/button.ts`
146
+ * gives beside its own — and so for every property below.
147
+ */
148
+ this.label = '';
149
+ /** Supporting text under the control, which survives an error rather than yielding. */
150
+ this.help = '';
151
+ /** The message, which paints the boundary and is announced with the control. */
152
+ this.error = '';
153
+ /**
154
+ * The name the value is submitted under.
155
+ *
156
+ * **Reflected, and that is a requirement rather than a convenience.** A form names a
157
+ * form-associated custom element's entry from the content attribute, so a host who set
158
+ * only the property would submit nothing at all — silently.
159
+ */
160
+ this.name = '';
161
+ /**
162
+ * What the control holds.
163
+ *
164
+ * **Not reflected**, the way a native control's `value` IDL attribute is not: the
165
+ * content attribute is the *default* a reset returns to, and one that followed every
166
+ * keystroke would make the default whatever was last typed.
167
+ */
168
+ this.value = '';
169
+ /** The hint inside an empty control, which is never a substitute for the label. */
170
+ this.placeholder = '';
171
+ /** What the browser may fill this with. Empty means the attribute is not written. */
172
+ this.autocomplete = '';
173
+ /** The shortest accepted value, as the attribute spells it. */
174
+ this.minlength = '';
175
+ /** The longest accepted value, likewise. */
176
+ this.maxlength = '';
177
+ /** Whether a form is invalid while the control is empty. */
178
+ this.required = false;
179
+ /** Whether the control refuses interaction, and submits nothing. */
180
+ this.disabled = false;
181
+ /** Whether the control shows a value it will not let you change. */
182
+ this.readonly = false;
183
+ this.#internals = this.attachInternals();
184
+ /**
185
+ * Mirrors what the person typed back into the property it came from.
186
+ *
187
+ * `input` is composed and leaves the shadow root on its own, retargeted to this
188
+ * element; `change` is not, so the one the control fires stops at the boundary and is
189
+ * re-dispatched. Measured on `<ui-checkbox>`, and the same both times.
190
+ */
191
+ this.typed = (event) => {
192
+ this.value = event.target.value;
193
+ };
194
+ this.changed = () => {
195
+ this.dispatchEvent(new Event('change', { bubbles: true }));
196
+ };
197
+ }
198
+ static { this.formAssociated = true; }
199
+ /**
200
+ * Focus is delegated, so `focus()` and `reportValidity()` reach the control.
201
+ *
202
+ * Neither is optional: the host is not a focusable element, and the second is what the
203
+ * browser calls itself when a form with an invalid control is submitted. Measured, on
204
+ * `<ui-checkbox>` first.
205
+ */
206
+ static { this.shadowRootOptions = {
207
+ ...LitElement.shadowRootOptions,
208
+ delegatesFocus: true,
209
+ }; }
210
+ static { this.properties = {
211
+ label: { type: String, reflect: true },
212
+ help: { type: String, reflect: true },
213
+ error: { type: String, reflect: true },
214
+ name: { type: String, reflect: true },
215
+ // Stryker disable next-line ObjectLiteral: `{}` is what Lit's default converter
216
+ // already does for a string — `type` only switches the converter for Boolean,
217
+ // Number, Object and Array — and `reflect` defaults to false either way. The
218
+ // declaration is written out to say which of the two `value` is, not to change it.
219
+ value: { type: String },
220
+ placeholder: { type: String, reflect: true },
221
+ autocomplete: { type: String, reflect: true },
222
+ minlength: { type: String, reflect: true },
223
+ maxlength: { type: String, reflect: true },
224
+ required: { type: Boolean, reflect: true },
225
+ disabled: { type: Boolean, reflect: true },
226
+ readonly: { type: Boolean, reflect: true },
227
+ }; }
228
+ #internals;
229
+ /** The validity, taken from the control that computed it. */
230
+ #publish(control) {
231
+ if (this.error !== '') {
232
+ this.#internals.setValidity({ customError: true }, this.error, control);
233
+ return;
234
+ }
235
+ // The whole ValidityState, handed over as the platform computed it — so `min`,
236
+ // `pattern`, `type="email"` and whatever the platform adds next are validated by
237
+ // the thing that already knows how, with the message it already wrote.
238
+ this.#internals.setValidity(control.validity, control.validationMessage, control);
239
+ }
240
+ /**
241
+ * The value and the validity, which move together here or disagree anywhere.
242
+ *
243
+ * **Iterated rather than asserted**, and there is exactly one control to iterate:
244
+ * `render()` puts it there unconditionally. Written as a query and a null check, the
245
+ * check would be a branch no test could reach — which is a coverage hole and an
246
+ * immortal mutant at once, rather than safety. A loop over what was rendered is total.
247
+ */
248
+ updated() {
249
+ this.#internals.setFormValue(this.value);
250
+ for (const control of this.renderRoot.querySelectorAll('input, textarea')) {
251
+ this.#publish(control);
252
+ }
253
+ }
254
+ /**
255
+ * A form reset, which returns to the content attribute — `defaultValue` exactly, and
256
+ * a usable default only because `value` is not reflected onto it.
257
+ */
258
+ formResetCallback() {
259
+ this.value = this.getAttribute('value') ?? '';
260
+ }
261
+ /** A `<fieldset disabled>` above this element, which reaches it and nothing below. */
262
+ formDisabledCallback(disabled) {
263
+ this.disabled = disabled;
264
+ }
265
+ /** Restoring after a back-navigation, where the browser hands the value back. */
266
+ formStateRestoreCallback(state) {
267
+ this.value = state ?? '';
268
+ }
269
+ /** The form this element participates in, for a host that needs it. */
270
+ get form() {
271
+ return this.#internals.form;
272
+ }
273
+ /** Whether the control currently satisfies its constraints. */
274
+ get validity() {
275
+ return this.#internals.validity;
276
+ }
277
+ /** The message a form would report for it, empty while the control is valid. */
278
+ get validationMessage() {
279
+ return this.#internals.validationMessage;
280
+ }
281
+ /**
282
+ * The label, the help and the message, with the control between them.
283
+ *
284
+ * The control is passed in rather than produced by an overridable hook, for the reason
285
+ * `src/checkbox.ts` gives at its own: a hook whose base implementation returns a
286
+ * default cannot be told from one that returns nothing, and the mutation floor is what
287
+ * reports the difference.
288
+ *
289
+ * **The error is described before the help**, and the help is not replaced by it: a
290
+ * screen reader announces descriptions in order, and help text is usually the format
291
+ * requirement — which is the very suggestion a reader needs in order to recover
292
+ * (WCAG 3.3.3). `<ui-field>` decided that and this carries it.
293
+ */
294
+ frame(control) {
295
+ return html `
296
+ <div class="stack" part="stack">
297
+ <label for="control" part="label">${this.label}</label>
298
+ ${control}
299
+ ${this.help === ''
300
+ ? nothing
301
+ : html `<span class="help" id="help" part="help">${this.help}</span>`}
302
+ ${this.error === ''
303
+ ? nothing
304
+ : html `<span class="error" id="error" part="error">${this.error}</span>`}
305
+ </div>
306
+ `;
307
+ }
308
+ /** The ids describing the control, in the order a reader needs them. */
309
+ described() {
310
+ return attribute([this.error === '' ? '' : 'error', this.help === '' ? '' : 'help']
311
+ .filter((id) => id !== '')
312
+ .join(' '));
313
+ }
314
+ /** Whether the control announces itself as invalid, which the boundary reads. */
315
+ invalid() {
316
+ return this.error === '' ? nothing : 'true';
317
+ }
318
+ }
319
+ /**
320
+ * A text input, drawn from the token layer rather than replaced.
110
321
  *
111
- * Composes with {@link UiField}, which finds the control through this wrapper and wires
112
- * the label, the help, the error and `aria-invalid` to it.
322
+ * **You write the tag, not a control.** RFC 0005 reversed the rule this element was built
323
+ * on: the `<input>`, its `<label>`, its help text and its message are rendered together in
324
+ * one shadow root, so the IDREFs resolve and there is nothing left for `<ui-field>` to
325
+ * wire. The attributes below are the platform's own, and the ones it computes with —
326
+ * `type`, `pattern`, `min`, `max`, `step` — are handed to a real `<input>` that validates
327
+ * them itself.
113
328
  *
114
329
  * @example
115
330
  * ```html
116
- * <ui-field>
117
- * <label slot="label">Amount</label>
118
- * <ui-input><input type="number" name="amount" /></ui-input>
119
- * <span slot="help">In BRL, two decimals.</span>
120
- * </ui-field>
331
+ * <ui-input label="Amount" help="In BRL, two decimals." type="number" name="amount"></ui-input>
121
332
  * ```
122
333
  */
123
- export class UiInput extends UiControl {
124
- static { this.styles = control; }
334
+ export class UiInput extends UiTextField {
335
+ constructor() {
336
+ super(...arguments);
337
+ /** Which control the platform draws, and which constraints it then applies. */
338
+ this.type = 'text';
339
+ /** Which keyboard a touch device offers, where `type` is not the right lever. */
340
+ this.inputmode = '';
341
+ /** The expression the value must match. Empty means no attribute is written. */
342
+ this.pattern = '';
343
+ /** The lowest accepted value, likewise. */
344
+ this.min = '';
345
+ /** The highest accepted value, likewise. */
346
+ this.max = '';
347
+ /** The granularity the value must fall on, likewise. */
348
+ this.step = '';
349
+ }
350
+ static { this.styles = field; }
351
+ static { this.properties = {
352
+ ...UiTextField.properties,
353
+ type: { type: String, reflect: true },
354
+ inputmode: { type: String, reflect: true },
355
+ pattern: { type: String, reflect: true },
356
+ min: { type: String, reflect: true },
357
+ max: { type: String, reflect: true },
358
+ step: { type: String, reflect: true },
359
+ }; }
360
+ render() {
361
+ return this.frame(html `
362
+ <input
363
+ id="control"
364
+ part="control"
365
+ type=${this.type}
366
+ .value=${this.value}
367
+ name=${attribute(this.name)}
368
+ placeholder=${attribute(this.placeholder)}
369
+ autocomplete=${attribute(this.autocomplete)}
370
+ inputmode=${attribute(this.inputmode)}
371
+ pattern=${attribute(this.pattern)}
372
+ minlength=${attribute(this.minlength)}
373
+ maxlength=${attribute(this.maxlength)}
374
+ min=${attribute(this.min)}
375
+ max=${attribute(this.max)}
376
+ step=${attribute(this.step)}
377
+ ?required=${this.required}
378
+ ?disabled=${this.disabled}
379
+ ?readonly=${this.readonly}
380
+ aria-invalid=${this.invalid()}
381
+ aria-describedby=${this.described()}
382
+ @input=${this.typed}
383
+ @change=${this.changed}
384
+ />
385
+ `);
386
+ }
125
387
  }
126
388
  /**
127
- * A multi-line text control, styled by the token layer rather than replaced.
389
+ * A multi-line text control, drawn from the token layer rather than replaced.
128
390
  *
129
- * Everything {@link UiInput} says applies. What differs is two rules: a height to start
130
- * at, and resizing left on the vertical axis — a control that cannot grow is one people
131
- * fight, and one that grows sideways breaks the layout around it.
391
+ * Everything {@link UiInput} says applies. What differs is two rules — a height to start
392
+ * at, and resizing left on the vertical axis, because a control that cannot grow is one
393
+ * people fight and one that grows sideways breaks the layout around it — and that a
394
+ * `<textarea>` has no `type` and no `pattern` to validate against.
132
395
  *
133
396
  * @example
134
397
  * ```html
135
- * <ui-field>
136
- * <label slot="label">Notes</label>
137
- * <ui-textarea><textarea name="notes" rows="4"></textarea></ui-textarea>
138
- * </ui-field>
398
+ * <ui-textarea label="Notes" name="notes" rows="4"></ui-textarea>
139
399
  * ```
140
400
  */
141
- export class UiTextarea extends UiControl {
401
+ export class UiTextarea extends UiTextField {
402
+ constructor() {
403
+ super(...arguments);
404
+ /** How many lines the control starts at. Empty leaves the platform's own default. */
405
+ this.rows = '';
406
+ }
142
407
  static { this.styles = [
143
- control,
408
+ field,
144
409
  css `
145
- ::slotted(textarea) {
410
+ textarea {
146
411
  min-block-size: calc(${reference('--ui-space')} * 10);
147
412
  resize: vertical;
148
413
  }
149
414
  `,
150
415
  ]; }
416
+ static { this.properties = {
417
+ ...UiTextField.properties,
418
+ rows: { type: String, reflect: true },
419
+ }; }
420
+ render() {
421
+ return this.frame(html `
422
+ <textarea
423
+ id="control"
424
+ part="control"
425
+ .value=${this.value}
426
+ name=${attribute(this.name)}
427
+ placeholder=${attribute(this.placeholder)}
428
+ autocomplete=${attribute(this.autocomplete)}
429
+ minlength=${attribute(this.minlength)}
430
+ maxlength=${attribute(this.maxlength)}
431
+ rows=${attribute(this.rows)}
432
+ ?required=${this.required}
433
+ ?disabled=${this.disabled}
434
+ ?readonly=${this.readonly}
435
+ aria-invalid=${this.invalid()}
436
+ aria-describedby=${this.described()}
437
+ @input=${this.typed}
438
+ @change=${this.changed}
439
+ ></textarea>
440
+ `);
441
+ }
151
442
  }
152
443
  // Stryker disable next-line StringLiteral: the registration runs once, at import, inside
153
444
  // the warm process Stryker switches mutants in — so by the time a mutant on this line is
package/dist/input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAuC,MAAM,KAAK,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;uBAoBI,SAAS,CAAC,WAAW,CAAC;iBAC5B,SAAS,CAAC,iBAAiB,CAAC;sBACvB,SAAS,CAAC,oBAAoB,CAAC;4BACzB,SAAS,CAAC,mBAAmB,CAAC;yBACjC,SAAS,CAAC,aAAa,CAAC;mBAC9B,SAAS,CAAC,YAAY,CAAC;;;;mCAIP,SAAS,CAAC,qBAAqB,CAAC;cACrD,SAAS,CAAC,mBAAmB,CAAC;;;;;iBAK3B,SAAS,CAAC,uBAAuB,CAAC;;;;;;;;;;;;;;;;wBAgB3B,SAAS,CAAC,iBAAiB,CAAC;;;;;;;6BAOvB,SAAS,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;wBAiBlC,SAAS,CAAC,mBAAmB,CAAC;;CAErD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,SAAU,SAAQ,UAAU;IACrB,MAAM;QACX,OAAO,IAAI,CAAA,eAAe,CAAC;IAC/B,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,OAAQ,SAAQ,SAAS;aACT,WAAM,GAAc,OAAO,CAAC;;AAGzD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAS;aACZ,WAAM,GAAgB;QAC3C,OAAO;QACP,GAAG,CAAA;;uCAE4B,SAAS,CAAC,YAAY,CAAC;;;SAGrD;KACJ,CAAC;;AAGN,yFAAyF;AACzF,yFAAyF;AACzF,yFAAyF;AACzF,oEAAoE;AACpE,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAE3C,0EAA0E;AAC1E,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
package/dist/menu.d.ts CHANGED
@@ -33,20 +33,9 @@ import { LitElement, type TemplateResult } from 'lit';
33
33
  * - **The single tab stop, and the keys inside it.** Every item is a real button, so
34
34
  * without a tabindex the menu is a row of tab stops rather than an APG menu.
35
35
  *
36
- * ## Why this did not bring Zag either
37
- *
38
- * RFC 0016 adopted Zag for behaviour, `ROADMAP.md` named this component as the nearest
39
- * candidate, and Zag ships a menu machine — so this is a refusal rather than an absence of
40
- * an option, and it is the fourth. `ARCHITECTURE.md` carries it; the short form is that the
41
- * test asks where the **accessible behaviour** is the expensive part, and the measurement
42
- * above splits it: the layer, the dismissal, Escape and the ordering against other open
43
- * layers are all the platform's. What is left is a roving tabindex and four keys, which the
44
- * `<ui-radio-group>` refusal already named as not the trigger.
45
- *
46
- * The second reason is the issue's own: Zag's menu positions through `@zag-js/popper`,
47
- * which is Floating UI. Adopting it would put a second placement in a package whose first
48
- * one is measured, documented and shared — and *two answers to one problem is one too
49
- * many* is the issue's sentence, not this file's.
36
+ * No state machine here either, and the measurement above is why: what a machine would
37
+ * have replaced is a roving tabindex and four keys. `ARCHITECTURE.md`, *Behaviour is
38
+ * delegated*, carries that decision for the whole package (#122).
50
39
  *
51
40
  * @example
52
41
  * ```html
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AA4DjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,qBAAa,MAAO,SAAQ,UAAU;;IAClC,gBAAyB,MAAM,0BAsJ7B;IAEF,gBAAyB,UAAU;;;;;MAEjC;IAEF;;;;;;;;;;OAUG;IACH,IAAI,UAAS;;IAsEJ,oBAAoB,IAAI,IAAI;IAS5B,OAAO,IAAI,IAAI;IA4Bf,MAAM,IAAI,cAAc;CAwNpC;AAQD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,SAAS,EAAE,MAAM,CAAC;KACrB;CACJ"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AA4DjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,MAAO,SAAQ,UAAU;;IAClC,gBAAyB,MAAM,0BAsJ7B;IAEF,gBAAyB,UAAU;;;;;MAEjC;IAEF;;;;;;;;;;OAUG;IACH,IAAI,UAAS;;IAsEJ,oBAAoB,IAAI,IAAI;IAS5B,OAAO,IAAI,IAAI;IA4Bf,MAAM,IAAI,cAAc;CAwNpC;AAQD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,SAAS,EAAE,MAAM,CAAC;KACrB;CACJ"}
package/dist/menu.js CHANGED
@@ -83,20 +83,9 @@ function caret() {
83
83
  * - **The single tab stop, and the keys inside it.** Every item is a real button, so
84
84
  * without a tabindex the menu is a row of tab stops rather than an APG menu.
85
85
  *
86
- * ## Why this did not bring Zag either
87
- *
88
- * RFC 0016 adopted Zag for behaviour, `ROADMAP.md` named this component as the nearest
89
- * candidate, and Zag ships a menu machine — so this is a refusal rather than an absence of
90
- * an option, and it is the fourth. `ARCHITECTURE.md` carries it; the short form is that the
91
- * test asks where the **accessible behaviour** is the expensive part, and the measurement
92
- * above splits it: the layer, the dismissal, Escape and the ordering against other open
93
- * layers are all the platform's. What is left is a roving tabindex and four keys, which the
94
- * `<ui-radio-group>` refusal already named as not the trigger.
95
- *
96
- * The second reason is the issue's own: Zag's menu positions through `@zag-js/popper`,
97
- * which is Floating UI. Adopting it would put a second placement in a package whose first
98
- * one is measured, documented and shared — and *two answers to one problem is one too
99
- * many* is the issue's sentence, not this file's.
86
+ * No state machine here either, and the measurement above is why: what a machine would
87
+ * have replaced is a roving tabindex and four keys. `ARCHITECTURE.md`, *Behaviour is
88
+ * delegated*, carries that decision for the whole package (#122).
100
89
  *
101
90
  * @example
102
91
  * ```html
package/dist/menu.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"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"}