@rak200/ui 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/field.d.ts +4 -0
- package/dist/field.d.ts.map +1 -1
- package/dist/field.js +21 -1
- package/dist/field.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +63 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +159 -0
- package/dist/input.js.map +1 -0
- package/dist/tokens.d.ts +1 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +18 -0
- package/dist/tokens.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ npm install @rak200/ui
|
|
|
30
30
|
|
|
31
31
|
<ui-field>
|
|
32
32
|
<label slot="label">Amount</label>
|
|
33
|
-
<input type="number"
|
|
33
|
+
<ui-input><input type="number" name="amount" /></ui-input>
|
|
34
34
|
<span slot="help">In BRL, two decimals.</span>
|
|
35
35
|
</ui-field>
|
|
36
36
|
|
|
@@ -71,8 +71,8 @@ components; `docs/` is what describes them.
|
|
|
71
71
|
|
|
72
72
|
## Status
|
|
73
73
|
|
|
74
|
-
**v0.**
|
|
75
|
-
them, built to the ecosystem's full quality bar rather than sketched: type-checked at the strictest available
|
|
74
|
+
**v0.** Five components — `<ui-button>`, `<ui-field>`, `<ui-dialog>`, `<ui-input>` and
|
|
75
|
+
`<ui-textarea>` — and the token layer under them, built to the ecosystem's full quality bar rather than sketched: type-checked at the strictest available
|
|
76
76
|
setting, formatted, tested in a real browser and **asserted against axe** for WCAG A/AA, 100%
|
|
77
77
|
coverage and **100% mutation score**, scanned, and every public symbol documented. The v0 surface in
|
|
78
78
|
RFC 0016 grows from here — see [ROADMAP.md](ROADMAP.md).
|
package/dist/field.d.ts
CHANGED
|
@@ -13,6 +13,10 @@ import { LitElement, type TemplateResult } from 'lit';
|
|
|
13
13
|
* where the association is the platform's job — and this element only generates the ids
|
|
14
14
|
* and points them at each other.
|
|
15
15
|
*
|
|
16
|
+
* **The control may sit below a wrapper**, and the same constraint is why: `<ui-input>` is
|
|
17
|
+
* a box around a control that had to stay in the light DOM, so this element looks through
|
|
18
|
+
* it. See {@link UiField.#control}.
|
|
19
|
+
*
|
|
16
20
|
* @example
|
|
17
21
|
* ```html
|
|
18
22
|
* <ui-field>
|
package/dist/field.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAMjE
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,OAAQ,SAAQ,UAAU;;IACnC,gBAAyB,MAAM,0BAuB7B;IAeO,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAK5B,YAAY,IAAI,IAAI;IAIpB,MAAM,IAAI,cAAc;CA2GpC;AAQD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,UAAU,EAAE,OAAO,CAAC;KACvB;CACJ"}
|
package/dist/field.js
CHANGED
|
@@ -16,6 +16,10 @@ let sequence = 0;
|
|
|
16
16
|
* where the association is the platform's job — and this element only generates the ids
|
|
17
17
|
* and points them at each other.
|
|
18
18
|
*
|
|
19
|
+
* **The control may sit below a wrapper**, and the same constraint is why: `<ui-input>` is
|
|
20
|
+
* a box around a control that had to stay in the light DOM, so this element looks through
|
|
21
|
+
* it. See {@link UiField.#control}.
|
|
22
|
+
*
|
|
19
23
|
* @example
|
|
20
24
|
* ```html
|
|
21
25
|
* <ui-field>
|
|
@@ -92,6 +96,22 @@ export class UiField extends LitElement {
|
|
|
92
96
|
const found = this.querySelector(selector);
|
|
93
97
|
return found instanceof HTMLElement ? found : undefined;
|
|
94
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* The control this field is about, which a wrapper may stand in front of.
|
|
101
|
+
*
|
|
102
|
+
* `<ui-input>` is such a wrapper, and it is one because the control has to stay in the
|
|
103
|
+
* light DOM for the IDREFs below to resolve at all — so the box that styles it can
|
|
104
|
+
* only ever sit around it, never instead of it. The label points at the control and
|
|
105
|
+
* never at the box: `<label for>` aimed at a custom element labels nothing, which axe
|
|
106
|
+
* reports at critical impact.
|
|
107
|
+
*
|
|
108
|
+
* A control written as a direct child, which is every call site that predates the
|
|
109
|
+
* wrapper, matches nothing to descend into and is returned as it is.
|
|
110
|
+
*/
|
|
111
|
+
#control() {
|
|
112
|
+
const slotted = this.#slotted(null);
|
|
113
|
+
return slotted?.querySelector('input, textarea, select') ?? slotted;
|
|
114
|
+
}
|
|
95
115
|
/**
|
|
96
116
|
* Points the label, the help and the error at the control.
|
|
97
117
|
*
|
|
@@ -99,7 +119,7 @@ export class UiField extends LitElement {
|
|
|
99
119
|
* this element cannot see.
|
|
100
120
|
*/
|
|
101
121
|
#associate() {
|
|
102
|
-
const control = this.#
|
|
122
|
+
const control = this.#control();
|
|
103
123
|
if (control === undefined) {
|
|
104
124
|
return;
|
|
105
125
|
}
|
package/dist/field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAuB,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,8DAA8D;AAC9D,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { UiButton, type ButtonVariant } from './button.js';
|
|
2
2
|
export { UiDialog } from './dialog.js';
|
|
3
3
|
export { UiField } from './field.js';
|
|
4
|
+
export { UiInput, UiTextarea } from './input.js';
|
|
4
5
|
export { tokens, derivedTokens, defaults, formulas, darkScheme, tokenStyleSheet, type Token, type DerivedToken, } from './tokens.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
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,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACH,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,KAAK,KAAK,EACV,KAAK,YAAY,GACpB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACH,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,KAAK,KAAK,EACV,KAAK,YAAY,GACpB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { UiButton } from './button.js';
|
|
2
2
|
export { UiDialog } from './dialog.js';
|
|
3
3
|
export { UiField } from './field.js';
|
|
4
|
+
export { UiInput, UiTextarea } from './input.js';
|
|
4
5
|
export { tokens, derivedTokens, defaults, formulas, darkScheme, tokenStyleSheet, } from './tokens.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
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,EAAsB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACH,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,GAGlB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACH,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,GAGlB,MAAM,aAAa,CAAC"}
|
package/dist/input.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { LitElement, type CSSResult, type TemplateResult } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* A styled native form control.
|
|
4
|
+
*
|
|
5
|
+
* The control is the host's own, slotted in rather than rendered here, and that is the
|
|
6
|
+
* single decision this component is made of. {@link UiInput} and {@link UiTextarea} carry
|
|
7
|
+
* the appearance; the element inside carries everything else.
|
|
8
|
+
*/
|
|
9
|
+
declare class UiControl extends LitElement {
|
|
10
|
+
render(): TemplateResult;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A text input, styled by the token layer rather than replaced.
|
|
14
|
+
*
|
|
15
|
+
* **The `<input>` is yours.** You write it, you set its attributes, and it stays in the
|
|
16
|
+
* light DOM — so `type`, `required`, `readonly`, `name` and `value` are the platform's
|
|
17
|
+
* business and there is no pass-through layer to fall out of step with them. It reaches a
|
|
18
|
+
* form submit for the same reason: a native control inside a `<form>` participates
|
|
19
|
+
* because it is a native control inside a `<form>`, with no `ElementInternals` and no
|
|
20
|
+
* value mirroring. That was the open question on the issue, and the answer is that the
|
|
21
|
+
* shape the accessibility rule forced happens to be the shape that answers it.
|
|
22
|
+
*
|
|
23
|
+
* Composes with {@link UiField}, which finds the control through this wrapper and wires
|
|
24
|
+
* the label, the help, the error and `aria-invalid` to it.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```html
|
|
28
|
+
* <ui-field>
|
|
29
|
+
* <label slot="label">Amount</label>
|
|
30
|
+
* <ui-input><input type="number" name="amount" /></ui-input>
|
|
31
|
+
* <span slot="help">In BRL, two decimals.</span>
|
|
32
|
+
* </ui-field>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class UiInput extends UiControl {
|
|
36
|
+
static readonly styles: CSSResult;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A multi-line text control, styled by the token layer rather than replaced.
|
|
40
|
+
*
|
|
41
|
+
* Everything {@link UiInput} says applies. What differs is two rules: a height to start
|
|
42
|
+
* at, and resizing left on the vertical axis — a control that cannot grow is one people
|
|
43
|
+
* fight, and one that grows sideways breaks the layout around it.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```html
|
|
47
|
+
* <ui-field>
|
|
48
|
+
* <label slot="label">Notes</label>
|
|
49
|
+
* <ui-textarea><textarea name="notes" rows="4"></textarea></ui-textarea>
|
|
50
|
+
* </ui-field>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare class UiTextarea extends UiControl {
|
|
54
|
+
static readonly styles: CSSResult[];
|
|
55
|
+
}
|
|
56
|
+
declare global {
|
|
57
|
+
interface HTMLElementTagNameMap {
|
|
58
|
+
'ui-input': UiInput;
|
|
59
|
+
'ui-textarea': UiTextarea;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/input.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { LitElement, css, html } from 'lit';
|
|
2
|
+
import { reference } from './reference.js';
|
|
3
|
+
/**
|
|
4
|
+
* What a styled native control looks like, which both elements share.
|
|
5
|
+
*
|
|
6
|
+
* One stylesheet naming both `input` and `textarea` rather than one per element: the two
|
|
7
|
+
* differ in what they accept and in one rule about resizing, and duplicating the whole
|
|
8
|
+
* box to express that would be two copies of a contract with nothing comparing them.
|
|
9
|
+
*/
|
|
10
|
+
const control = css `
|
|
11
|
+
:host {
|
|
12
|
+
display: block;
|
|
13
|
+
}
|
|
14
|
+
|
|
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.
|
|
21
|
+
|
|
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) {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
inline-size: 100%;
|
|
29
|
+
font: inherit;
|
|
30
|
+
font-family: ${reference('--ui-font')};
|
|
31
|
+
color: ${reference('--ui-color-text')};
|
|
32
|
+
background: ${reference('--ui-color-surface')};
|
|
33
|
+
border: 1px solid ${reference('--ui-color-border')};
|
|
34
|
+
border-radius: ${reference('--ui-radius')};
|
|
35
|
+
padding: ${reference('--ui-space')};
|
|
36
|
+
/* Only the boundary moves. The focus ring is deliberately not in this list, for
|
|
37
|
+
the reason src/button.ts gives beside its own: delaying the affordance that
|
|
38
|
+
says *this is where you are* is the opposite of what it exists to do. */
|
|
39
|
+
transition: border-color ${reference('--ui-duration-state')}
|
|
40
|
+
${reference('--ui-easing-state')};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
::slotted(input)::placeholder,
|
|
44
|
+
::slotted(textarea)::placeholder {
|
|
45
|
+
color: ${reference('--ui-color-text-muted')};
|
|
46
|
+
/* Firefox lowers a placeholder's opacity by default, which would take the colour
|
|
47
|
+
below the 4.5:1 it was chosen to clear — a contrast floor undone by a rule
|
|
48
|
+
nobody wrote. */
|
|
49
|
+
opacity: 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* The boundary completes the mix it already started: the resting border is the
|
|
53
|
+
surface half way to the text, and hovering finishes the trip. A hover colour of its
|
|
54
|
+
own would be a fourth name for a point on a line the token layer already draws.
|
|
55
|
+
|
|
56
|
+
The guards are measured rather than assumed, the same way ui-button's are: a
|
|
57
|
+
disabled control still matches :hover, and a readonly one accepts a pointer it will
|
|
58
|
+
do nothing with. */
|
|
59
|
+
::slotted(input:hover:not(:disabled):not([readonly])),
|
|
60
|
+
::slotted(textarea:hover:not(:disabled):not([readonly])) {
|
|
61
|
+
border-color: ${reference('--ui-color-text')};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* A visible focus ring is not decoration: removing it is the single most common way a
|
|
65
|
+
component stops being usable by keyboard. */
|
|
66
|
+
::slotted(input:focus-visible),
|
|
67
|
+
::slotted(textarea:focus-visible) {
|
|
68
|
+
outline: 2px solid ${reference('--ui-color-focus')};
|
|
69
|
+
outline-offset: 2px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
::slotted(input:disabled),
|
|
73
|
+
::slotted(textarea:disabled) {
|
|
74
|
+
cursor: not-allowed;
|
|
75
|
+
opacity: 0.5;
|
|
76
|
+
}
|
|
77
|
+
|
|
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']) {
|
|
85
|
+
border-color: ${reference('--ui-color-danger')};
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
/**
|
|
89
|
+
* A styled native form control.
|
|
90
|
+
*
|
|
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.
|
|
94
|
+
*/
|
|
95
|
+
class UiControl extends LitElement {
|
|
96
|
+
render() {
|
|
97
|
+
return html `<slot></slot>`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A text input, styled by the token layer rather than replaced.
|
|
102
|
+
*
|
|
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.
|
|
110
|
+
*
|
|
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.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```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>
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export class UiInput extends UiControl {
|
|
124
|
+
static { this.styles = control; }
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A multi-line text control, styled by the token layer rather than replaced.
|
|
128
|
+
*
|
|
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.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```html
|
|
135
|
+
* <ui-field>
|
|
136
|
+
* <label slot="label">Notes</label>
|
|
137
|
+
* <ui-textarea><textarea name="notes" rows="4"></textarea></ui-textarea>
|
|
138
|
+
* </ui-field>
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export class UiTextarea extends UiControl {
|
|
142
|
+
static { this.styles = [
|
|
143
|
+
control,
|
|
144
|
+
css `
|
|
145
|
+
::slotted(textarea) {
|
|
146
|
+
min-block-size: calc(${reference('--ui-space')} * 10);
|
|
147
|
+
resize: vertical;
|
|
148
|
+
}
|
|
149
|
+
`,
|
|
150
|
+
]; }
|
|
151
|
+
}
|
|
152
|
+
// Stryker disable next-line StringLiteral: the registration runs once, at import, inside
|
|
153
|
+
// the warm process Stryker switches mutants in — so by the time a mutant on this line is
|
|
154
|
+
// active the element is already defined under the original name, and no test can observe
|
|
155
|
+
// the change. Outside the runner's reach, not an equivalent mutant.
|
|
156
|
+
customElements.define('ui-input', UiInput);
|
|
157
|
+
// Stryker disable next-line StringLiteral: the same, for the same reason.
|
|
158
|
+
customElements.define('ui-textarea', UiTextarea);
|
|
159
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +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"}
|
package/dist/tokens.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type Token = (typeof tokens)[number];
|
|
|
44
44
|
* what it buys is an override surface a host can hold in their head: change the accent and
|
|
45
45
|
* the hover and pressed colours follow, rather than being one more name each.
|
|
46
46
|
*/
|
|
47
|
-
export declare const derivedTokens: readonly ["--ui-duration-state", "--ui-color-hover", "--ui-color-pressed", "--ui-color-accent-hover", "--ui-color-accent-pressed"];
|
|
47
|
+
export declare const derivedTokens: readonly ["--ui-duration-state", "--ui-color-border", "--ui-color-text-muted", "--ui-color-hover", "--ui-color-pressed", "--ui-color-accent-hover", "--ui-color-accent-pressed"];
|
|
48
48
|
/** A CSS custom property this package computes rather than declares. */
|
|
49
49
|
export type DerivedToken = (typeof derivedTokens)[number];
|
|
50
50
|
/**
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,MAAM,iSA6CT,CAAC;AAEX,sEAAsE;AACtE,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,MAAM,iSA6CT,CAAC;AAEX,sEAAsE;AACtE,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5C;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,kLAmBhB,CAAC;AAEX,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAuCpD,CAAC;AAqBF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAoB3D,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAW/D,CAAC;AAKF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAsBxC"}
|
package/dist/tokens.js
CHANGED
|
@@ -89,6 +89,16 @@ export const tokens = [
|
|
|
89
89
|
*/
|
|
90
90
|
export const derivedTokens = [
|
|
91
91
|
'--ui-duration-state',
|
|
92
|
+
// The boundary of a control, and the text inside one that is not a value yet. Both
|
|
93
|
+
// arrive with `ui-input`, and both are the same mix at different strengths — which is
|
|
94
|
+
// what makes them one category rather than two: a border and a placeholder are the
|
|
95
|
+
// surface travelling toward the text, stopped at the contrast each one owes.
|
|
96
|
+
//
|
|
97
|
+
// The percentages are read off a measurement rather than chosen. A control's boundary
|
|
98
|
+
// is what identifies the component, so WCAG 1.4.11 asks 3:1 against the surface, and
|
|
99
|
+
// a placeholder is text, so 1.4.3 asks 4.5:1. `tests/tokens.test.ts` holds both.
|
|
100
|
+
'--ui-color-border',
|
|
101
|
+
'--ui-color-text-muted',
|
|
92
102
|
// `hover` matches the pseudo-class it answers to; `pressed` deliberately does not —
|
|
93
103
|
// `--ui-color-active` would read as *the active item* as readily as *the pressed
|
|
94
104
|
// control*, and the role this implements was named `accent hover / pressed`.
|
|
@@ -198,6 +208,14 @@ export const formulas = {
|
|
|
198
208
|
'--ui-color-pressed': mix('--ui-color-text', 14, '--ui-color-surface'),
|
|
199
209
|
'--ui-color-accent-hover': mix('--ui-color-text', 12, '--ui-color-accent'),
|
|
200
210
|
'--ui-color-accent-pressed': mix('--ui-color-text', 22, '--ui-color-accent'),
|
|
211
|
+
// 3.39:1 on the light surface and 3.96:1 on the dark one, against a floor of 3. The
|
|
212
|
+
// step below clears neither — 45% is 2.94 in light, which is what a value chosen by
|
|
213
|
+
// eye would have shipped.
|
|
214
|
+
'--ui-color-border': mix('--ui-color-text', 50, '--ui-color-surface'),
|
|
215
|
+
// 5.24:1 and 6.07:1, against a floor of 4.5. Not the 60% that first cleared it: that
|
|
216
|
+
// is 4.52 in light, a rounding error from failing, and a default nobody could then
|
|
217
|
+
// retune without breaking a floor they were not thinking about.
|
|
218
|
+
'--ui-color-text-muted': mix('--ui-color-text', 65, '--ui-color-surface'),
|
|
201
219
|
};
|
|
202
220
|
/**
|
|
203
221
|
* The grounds whose value differs when the page is rendered dark.
|
package/dist/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
|