@jirawatpyk/aura-react 5.67.0 → 5.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/aura.bundle.js +12 -3
- package/dist/cjs/index.cjs +12 -3
- package/dist/esm/CheckboxGroup.js +3 -4
- package/dist/esm/Field.js +9 -1
- package/dist/esm/RadioGroup.js +3 -4
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/styles.css +3 -0
- package/dist/styles.layer.css +3 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -186,6 +186,11 @@ DataTable with sort and page in the URL (4.17): `onStateChange={({ sort, page })
|
|
|
186
186
|
- **Time zone**: `timeZone` on AuraProvider, DatePicker, DateRangePicker and Calendar decides "today" (the marker, `min`/`max="today"`, the first month shown); or pass `today` as an ISO date. `todayIn('Asia/Bangkok')` is exported from the root and `/server`.
|
|
187
187
|
- **Toasts** queue past three instead of dropping: six in a row all show, in order, three at a time.
|
|
188
188
|
|
|
189
|
+
## 5.68 — Chamber-OS addendum 85 (#184)
|
|
190
|
+
|
|
191
|
+
- **A disabled group dims its legend:** `RadioGroup` and `CheckboxGroup` with `disabled` add `is-disabled` to the fieldset, so the legend takes the disabled colour (`fg-secondary`) a disabled `Field`'s label has — a form that disables its fields while submitting no longer shows group legends at full contrast over dimmed controls.
|
|
192
|
+
- **`errorLive` — an error line that announces:** on `CheckboxGroup`, `RadioGroup` and `Field`, `errorLive` gives the error line `aria-live="polite"` and keeps it in the page, empty and taking no room, while there is no error (the hint shows), so a message that appears as the user changes the field ("Choose at least one membership category" the moment the last box is unticked) is read once. Off by default: an error shown on submit, with focus moved to the field, is read already. Under a `Field`, your own control should still point at `{id}-error` in its `aria-describedby` while there is an error, so the message stays its description. Not on TextField and the other controls. Hand-written markup with an empty `.aura-field__error` placeholder is now hidden until it has content. Drop a hand-made `sr-only` `role="status"` beside the group.
|
|
193
|
+
|
|
189
194
|
## 5.67 — Chamber-OS addendum 84 (#183)
|
|
190
195
|
|
|
191
196
|
- **`CheckboxGroup` — RadioGroup's many-choice twin:** one `fieldset` named by its `legend`, with RadioGroup's props — `label`, `hint`, `error`, `required` (the same `*` marker), `disabled` (every box), `orientation`, `touchHeight` (44px rows), `options` (`{ value, label, description?, disabled? }` or strings), `name` — and a set of values: `value: string[]` / `defaultValue` / `onChange(values)`, always in option order whatever order they were ticked in. The group is described by the hint, or by the error line, which also marks every box `aria-invalid` and edges the empty ones. `required` shows the `*` and adds a hidden "(required)" to the group's name (localised), since a group can't take `aria-required` and a native `required` on each box would demand all of them; "at least one" is yours to check (pass `error`, which each box then also points at). Values not among the options (archived, still loading) are kept, after the others. `focus()` on the ref lands on the first ticked enabled box. Replaces a hand-made fieldset of Checkboxes.
|
package/dist/aura.bundle.js
CHANGED
|
@@ -2081,12 +2081,19 @@ window.Aura = (() => {
|
|
|
2081
2081
|
) : null,
|
|
2082
2082
|
hasAddon(props.labelAddon) ? /* @__PURE__ */ React13.createElement("div", { className: "aura-field__addon", id: props.id + "-addon" }, props.labelAddon) : null,
|
|
2083
2083
|
props.children,
|
|
2084
|
-
|
|
2084
|
+
fieldNote(props.id, props.error, props.hint, props.errorLive)
|
|
2085
2085
|
);
|
|
2086
2086
|
});
|
|
2087
2087
|
function describedBy(id, p) {
|
|
2088
2088
|
return p.error ? id + "-error" : p.hint ? id + "-hint" : void 0;
|
|
2089
2089
|
}
|
|
2090
|
+
function fieldNote(id, error, hint, live) {
|
|
2091
|
+
const err = error ? /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(Icon, { name: /* @__PURE__ */ React13.createElement(IconCircleAlert, null), size: 14 }), error) : null;
|
|
2092
|
+
const hintLine = hint ? /* @__PURE__ */ React13.createElement("p", { className: "aura-field__hint", id: id + "-hint" }, hint) : null;
|
|
2093
|
+
if (!live)
|
|
2094
|
+
return err ? /* @__PURE__ */ React13.createElement("p", { className: "aura-field__error", id: id + "-error" }, err) : hintLine;
|
|
2095
|
+
return /* @__PURE__ */ React13.createElement(React13.Fragment, null, err ? null : hintLine, /* @__PURE__ */ React13.createElement("p", { className: "aura-field__error", id: id == null ? void 0 : id + "-error", "aria-live": "polite" }, err));
|
|
2096
|
+
}
|
|
2090
2097
|
function hasAddon(n3) {
|
|
2091
2098
|
return n3 != null && typeof n3 !== "boolean" && n3 !== "";
|
|
2092
2099
|
}
|
|
@@ -3872,6 +3879,7 @@ window.Aura = (() => {
|
|
|
3872
3879
|
className: cx(
|
|
3873
3880
|
"aura-field aura-radio-group",
|
|
3874
3881
|
props.error && "is-invalid",
|
|
3882
|
+
props.disabled && "is-disabled",
|
|
3875
3883
|
touchClass(props.touchHeight),
|
|
3876
3884
|
props.className
|
|
3877
3885
|
),
|
|
@@ -3901,7 +3909,7 @@ window.Aura = (() => {
|
|
|
3901
3909
|
}
|
|
3902
3910
|
), /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__text" }, /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__label", id: oid ? oid + "-label" : void 0 }, v.label), v.description ? /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__desc", id: oid + "-desc" }, v.description) : null));
|
|
3903
3911
|
})),
|
|
3904
|
-
|
|
3912
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
3905
3913
|
);
|
|
3906
3914
|
});
|
|
3907
3915
|
|
|
@@ -3936,6 +3944,7 @@ window.Aura = (() => {
|
|
|
3936
3944
|
className: cx(
|
|
3937
3945
|
"aura-field aura-radio-group aura-checkbox-group",
|
|
3938
3946
|
props.error && "is-invalid",
|
|
3947
|
+
props.disabled && "is-disabled",
|
|
3939
3948
|
touchClass(props.touchHeight),
|
|
3940
3949
|
props.className
|
|
3941
3950
|
),
|
|
@@ -3973,7 +3982,7 @@ window.Aura = (() => {
|
|
|
3973
3982
|
v.label
|
|
3974
3983
|
);
|
|
3975
3984
|
})),
|
|
3976
|
-
|
|
3985
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
3977
3986
|
);
|
|
3978
3987
|
}
|
|
3979
3988
|
);
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -2063,12 +2063,19 @@ var Field = React13.forwardRef(function Field2(props, ref) {
|
|
|
2063
2063
|
) : null,
|
|
2064
2064
|
hasAddon(props.labelAddon) ? /* @__PURE__ */ React13.createElement("div", { className: "aura-field__addon", id: props.id + "-addon" }, props.labelAddon) : null,
|
|
2065
2065
|
props.children,
|
|
2066
|
-
|
|
2066
|
+
fieldNote(props.id, props.error, props.hint, props.errorLive)
|
|
2067
2067
|
);
|
|
2068
2068
|
});
|
|
2069
2069
|
function describedBy(id, p) {
|
|
2070
2070
|
return p.error ? id + "-error" : p.hint ? id + "-hint" : void 0;
|
|
2071
2071
|
}
|
|
2072
|
+
function fieldNote(id, error, hint, live) {
|
|
2073
|
+
const err = error ? /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(Icon, { name: /* @__PURE__ */ React13.createElement(IconCircleAlert, null), size: 14 }), error) : null;
|
|
2074
|
+
const hintLine = hint ? /* @__PURE__ */ React13.createElement("p", { className: "aura-field__hint", id: id + "-hint" }, hint) : null;
|
|
2075
|
+
if (!live)
|
|
2076
|
+
return err ? /* @__PURE__ */ React13.createElement("p", { className: "aura-field__error", id: id + "-error" }, err) : hintLine;
|
|
2077
|
+
return /* @__PURE__ */ React13.createElement(React13.Fragment, null, err ? null : hintLine, /* @__PURE__ */ React13.createElement("p", { className: "aura-field__error", id: id == null ? void 0 : id + "-error", "aria-live": "polite" }, err));
|
|
2078
|
+
}
|
|
2072
2079
|
function hasAddon(n3) {
|
|
2073
2080
|
return n3 != null && typeof n3 !== "boolean" && n3 !== "";
|
|
2074
2081
|
}
|
|
@@ -3854,6 +3861,7 @@ var RadioGroup = React20.forwardRef(function RadioGroup2(props, ref) {
|
|
|
3854
3861
|
className: cx(
|
|
3855
3862
|
"aura-field aura-radio-group",
|
|
3856
3863
|
props.error && "is-invalid",
|
|
3864
|
+
props.disabled && "is-disabled",
|
|
3857
3865
|
touchClass(props.touchHeight),
|
|
3858
3866
|
props.className
|
|
3859
3867
|
),
|
|
@@ -3883,7 +3891,7 @@ var RadioGroup = React20.forwardRef(function RadioGroup2(props, ref) {
|
|
|
3883
3891
|
}
|
|
3884
3892
|
), /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__text" }, /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__label", id: oid ? oid + "-label" : void 0 }, v.label), v.description ? /* @__PURE__ */ React20.createElement("span", { className: "aura-choice__desc", id: oid + "-desc" }, v.description) : null));
|
|
3885
3893
|
})),
|
|
3886
|
-
|
|
3894
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
3887
3895
|
);
|
|
3888
3896
|
});
|
|
3889
3897
|
|
|
@@ -3918,6 +3926,7 @@ var CheckboxGroup = React21.forwardRef(
|
|
|
3918
3926
|
className: cx(
|
|
3919
3927
|
"aura-field aura-radio-group aura-checkbox-group",
|
|
3920
3928
|
props.error && "is-invalid",
|
|
3929
|
+
props.disabled && "is-disabled",
|
|
3921
3930
|
touchClass(props.touchHeight),
|
|
3922
3931
|
props.className
|
|
3923
3932
|
),
|
|
@@ -3955,7 +3964,7 @@ var CheckboxGroup = React21.forwardRef(
|
|
|
3955
3964
|
v.label
|
|
3956
3965
|
);
|
|
3957
3966
|
})),
|
|
3958
|
-
|
|
3967
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
3959
3968
|
);
|
|
3960
3969
|
}
|
|
3961
3970
|
);
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Checkbox } from "./Checkbox.js";
|
|
4
|
-
import { describedBy } from "./Field.js";
|
|
5
|
-
import { Icon } from "./Icon.js";
|
|
4
|
+
import { describedBy, fieldNote } from "./Field.js";
|
|
6
5
|
import { cx, touchClass, uid, useMaybeControlled } from "./internal.js";
|
|
7
6
|
import { useStrings } from "./locale.js";
|
|
8
|
-
import { IconCircleAlert } from "./icons.js";
|
|
9
7
|
const CheckboxGroup = React.forwardRef(
|
|
10
8
|
function CheckboxGroup2(props, ref) {
|
|
11
9
|
const t = useStrings();
|
|
@@ -35,6 +33,7 @@ const CheckboxGroup = React.forwardRef(
|
|
|
35
33
|
className: cx(
|
|
36
34
|
"aura-field aura-radio-group aura-checkbox-group",
|
|
37
35
|
props.error && "is-invalid",
|
|
36
|
+
props.disabled && "is-disabled",
|
|
38
37
|
touchClass(props.touchHeight),
|
|
39
38
|
props.className
|
|
40
39
|
),
|
|
@@ -72,7 +71,7 @@ const CheckboxGroup = React.forwardRef(
|
|
|
72
71
|
v.label
|
|
73
72
|
);
|
|
74
73
|
})),
|
|
75
|
-
|
|
74
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
76
75
|
);
|
|
77
76
|
}
|
|
78
77
|
);
|
package/dist/esm/Field.js
CHANGED
|
@@ -27,12 +27,19 @@ const Field = React.forwardRef(function Field2(props, ref) {
|
|
|
27
27
|
) : null,
|
|
28
28
|
hasAddon(props.labelAddon) ? /* @__PURE__ */ React.createElement("div", { className: "aura-field__addon", id: props.id + "-addon" }, props.labelAddon) : null,
|
|
29
29
|
props.children,
|
|
30
|
-
|
|
30
|
+
fieldNote(props.id, props.error, props.hint, props.errorLive)
|
|
31
31
|
);
|
|
32
32
|
});
|
|
33
33
|
function describedBy(id, p) {
|
|
34
34
|
return p.error ? id + "-error" : p.hint ? id + "-hint" : void 0;
|
|
35
35
|
}
|
|
36
|
+
function fieldNote(id, error, hint, live) {
|
|
37
|
+
const err = error ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Icon, { name: /* @__PURE__ */ React.createElement(IconCircleAlert, null), size: 14 }), error) : null;
|
|
38
|
+
const hintLine = hint ? /* @__PURE__ */ React.createElement("p", { className: "aura-field__hint", id: id + "-hint" }, hint) : null;
|
|
39
|
+
if (!live)
|
|
40
|
+
return err ? /* @__PURE__ */ React.createElement("p", { className: "aura-field__error", id: id + "-error" }, err) : hintLine;
|
|
41
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, err ? null : hintLine, /* @__PURE__ */ React.createElement("p", { className: "aura-field__error", id: id == null ? void 0 : id + "-error", "aria-live": "polite" }, err));
|
|
42
|
+
}
|
|
36
43
|
function hasAddon(n) {
|
|
37
44
|
return n != null && typeof n !== "boolean" && n !== "";
|
|
38
45
|
}
|
|
@@ -68,6 +75,7 @@ export {
|
|
|
68
75
|
FIELD_KEYS,
|
|
69
76
|
Field,
|
|
70
77
|
describedBy,
|
|
78
|
+
fieldNote,
|
|
71
79
|
hasAddon,
|
|
72
80
|
joinDescribedBy
|
|
73
81
|
};
|
package/dist/esm/RadioGroup.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { describedBy } from "./Field.js";
|
|
4
|
-
import { Icon } from "./Icon.js";
|
|
3
|
+
import { describedBy, fieldNote } from "./Field.js";
|
|
5
4
|
import { cx, touchClass, uid, useMaybeControlled } from "./internal.js";
|
|
6
|
-
import { IconCircleAlert } from "./icons.js";
|
|
7
5
|
const RadioGroup = React.forwardRef(function RadioGroup2(props, ref) {
|
|
8
6
|
const auto = uid(), id = props.id || auto;
|
|
9
7
|
const st = useMaybeControlled(
|
|
@@ -31,6 +29,7 @@ const RadioGroup = React.forwardRef(function RadioGroup2(props, ref) {
|
|
|
31
29
|
className: cx(
|
|
32
30
|
"aura-field aura-radio-group",
|
|
33
31
|
props.error && "is-invalid",
|
|
32
|
+
props.disabled && "is-disabled",
|
|
34
33
|
touchClass(props.touchHeight),
|
|
35
34
|
props.className
|
|
36
35
|
),
|
|
@@ -60,7 +59,7 @@ const RadioGroup = React.forwardRef(function RadioGroup2(props, ref) {
|
|
|
60
59
|
}
|
|
61
60
|
), /* @__PURE__ */ React.createElement("span", { className: "aura-choice__text" }, /* @__PURE__ */ React.createElement("span", { className: "aura-choice__label", id: oid ? oid + "-label" : void 0 }, v.label), v.description ? /* @__PURE__ */ React.createElement("span", { className: "aura-choice__desc", id: oid + "-desc" }, v.description) : null));
|
|
62
61
|
})),
|
|
63
|
-
|
|
62
|
+
fieldNote(id, props.error, props.hint, props.errorLive)
|
|
64
63
|
);
|
|
65
64
|
});
|
|
66
65
|
export {
|
package/dist/index.d.cts
CHANGED
|
@@ -680,7 +680,12 @@ export interface RadioGroupProps extends FieldProps {
|
|
|
680
680
|
name?: string | undefined;
|
|
681
681
|
/** Default `vertical`. */
|
|
682
682
|
orientation?: "vertical" | "horizontal" | undefined;
|
|
683
|
+
/** Disables every option and (5.68) dims the legend, as Field does its label. */
|
|
683
684
|
disabled?: boolean | undefined;
|
|
685
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears (`aria-live="polite"`) — for an error shown as
|
|
686
|
+
* the user changes the group ("Choose at least one…" when the last box is unticked), not on submit. The error line
|
|
687
|
+
* stays in the page, empty, while there is none, so the first message is read too. Off by default. */
|
|
688
|
+
errorLive?: boolean | undefined;
|
|
684
689
|
id?: string | undefined;
|
|
685
690
|
className?: string | undefined;
|
|
686
691
|
/** 44px rows (5.30, Chamber-OS 135), the one-line label centred: `true` below 640px or on a coarse pointer (touch
|
|
@@ -700,7 +705,12 @@ export interface CheckboxGroupProps extends FieldProps {
|
|
|
700
705
|
name?: string | undefined;
|
|
701
706
|
/** Default `vertical`. */
|
|
702
707
|
orientation?: "vertical" | "horizontal" | undefined;
|
|
708
|
+
/** Disables every option and (5.68) dims the legend, as Field does its label. */
|
|
703
709
|
disabled?: boolean | undefined;
|
|
710
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears (`aria-live="polite"`) — for an error shown as
|
|
711
|
+
* the user changes the group ("Choose at least one…" when the last box is unticked), not on submit. The error line
|
|
712
|
+
* stays in the page, empty, while there is none, so the first message is read too. Off by default. */
|
|
713
|
+
errorLive?: boolean | undefined;
|
|
704
714
|
id?: string | undefined;
|
|
705
715
|
className?: string | undefined;
|
|
706
716
|
/** 44px rows, as RadioGroup: `true` below 640px or on a coarse pointer, `'always'` at every width. */
|
|
@@ -1927,6 +1937,12 @@ export interface FieldComponentProps extends Omit<FieldPropsPublic, "label"> {
|
|
|
1927
1937
|
/** The control's id: the label points at it, and the hint/error ids derive from it. */
|
|
1928
1938
|
id?: string | undefined;
|
|
1929
1939
|
children?: React$1.ReactNode | undefined;
|
|
1940
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears — for an error shown as the user types or ticks,
|
|
1941
|
+
* not on submit. The error `<p>` gets `aria-live="polite"` and stays in the page, empty, while there is no error, so
|
|
1942
|
+
* the first message is read too. Off by default: an error shown on submit, with focus moved to the field, is read
|
|
1943
|
+
* already, and a live line would read it twice. Your control should still point at `{id}-error` in its
|
|
1944
|
+
* `aria-describedby` while there is an error (TextField and the others do), so the message stays its description. */
|
|
1945
|
+
errorLive?: boolean | undefined;
|
|
1930
1946
|
/** 5.31 (Chamber-OS addendum 41): a node between the label and the control, in a `.aura-field__addon` box with the
|
|
1931
1947
|
* id `{id}-addon`. TextField and Textarea add that id to the input's `aria-describedby`; a custom control should too. */
|
|
1932
1948
|
labelAddon?: React$1.ReactNode | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -680,7 +680,12 @@ export interface RadioGroupProps extends FieldProps {
|
|
|
680
680
|
name?: string | undefined;
|
|
681
681
|
/** Default `vertical`. */
|
|
682
682
|
orientation?: "vertical" | "horizontal" | undefined;
|
|
683
|
+
/** Disables every option and (5.68) dims the legend, as Field does its label. */
|
|
683
684
|
disabled?: boolean | undefined;
|
|
685
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears (`aria-live="polite"`) — for an error shown as
|
|
686
|
+
* the user changes the group ("Choose at least one…" when the last box is unticked), not on submit. The error line
|
|
687
|
+
* stays in the page, empty, while there is none, so the first message is read too. Off by default. */
|
|
688
|
+
errorLive?: boolean | undefined;
|
|
684
689
|
id?: string | undefined;
|
|
685
690
|
className?: string | undefined;
|
|
686
691
|
/** 44px rows (5.30, Chamber-OS 135), the one-line label centred: `true` below 640px or on a coarse pointer (touch
|
|
@@ -700,7 +705,12 @@ export interface CheckboxGroupProps extends FieldProps {
|
|
|
700
705
|
name?: string | undefined;
|
|
701
706
|
/** Default `vertical`. */
|
|
702
707
|
orientation?: "vertical" | "horizontal" | undefined;
|
|
708
|
+
/** Disables every option and (5.68) dims the legend, as Field does its label. */
|
|
703
709
|
disabled?: boolean | undefined;
|
|
710
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears (`aria-live="polite"`) — for an error shown as
|
|
711
|
+
* the user changes the group ("Choose at least one…" when the last box is unticked), not on submit. The error line
|
|
712
|
+
* stays in the page, empty, while there is none, so the first message is read too. Off by default. */
|
|
713
|
+
errorLive?: boolean | undefined;
|
|
704
714
|
id?: string | undefined;
|
|
705
715
|
className?: string | undefined;
|
|
706
716
|
/** 44px rows, as RadioGroup: `true` below 640px or on a coarse pointer, `'always'` at every width. */
|
|
@@ -1927,6 +1937,12 @@ export interface FieldComponentProps extends Omit<FieldPropsPublic, "label"> {
|
|
|
1927
1937
|
/** The control's id: the label points at it, and the hint/error ids derive from it. */
|
|
1928
1938
|
id?: string | undefined;
|
|
1929
1939
|
children?: React$1.ReactNode | undefined;
|
|
1940
|
+
/** 5.68 (Chamber-OS 184): announce the error line when it appears — for an error shown as the user types or ticks,
|
|
1941
|
+
* not on submit. The error `<p>` gets `aria-live="polite"` and stays in the page, empty, while there is no error, so
|
|
1942
|
+
* the first message is read too. Off by default: an error shown on submit, with focus moved to the field, is read
|
|
1943
|
+
* already, and a live line would read it twice. Your control should still point at `{id}-error` in its
|
|
1944
|
+
* `aria-describedby` while there is an error (TextField and the others do), so the message stays its description. */
|
|
1945
|
+
errorLive?: boolean | undefined;
|
|
1930
1946
|
/** 5.31 (Chamber-OS addendum 41): a node between the label and the control, in a `.aura-field__addon` box with the
|
|
1931
1947
|
* id `{id}-addon`. TextField and Textarea add that id to the input's `aria-describedby`; a custom control should too. */
|
|
1932
1948
|
labelAddon?: React$1.ReactNode | undefined;
|
package/dist/styles.css
CHANGED
|
@@ -525,6 +525,9 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
525
525
|
.aura-field__hint, .aura-field__error { display: flex; align-items: flex-start; gap: var(--aura-space-1); margin: 0; font-size: max(12px, .75rem); line-height: 1.5; color: var(--aura-fg-secondary); }
|
|
526
526
|
.aura-field__error { color: var(--aura-fg-danger); }
|
|
527
527
|
.aura-field__error .aura-icon { margin-top: 2px; }
|
|
528
|
+
/* 5.68 (Chamber-OS 184): an `errorLive` error line waits in the page, empty, until there is an error. Out of the
|
|
529
|
+
* flow (an absolute child takes no gap) and clipped; the screen reader still has the live region. */
|
|
530
|
+
.aura-field__error:empty { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
528
531
|
/* 5.31 (Chamber-OS addendum 41): TextField/Textarea `labelAddon`, between the label and the box, in the field's gap. */
|
|
529
532
|
.aura-field__addon { min-width: 0; font-size: max(13px, .8125rem); line-height: 1.5; color: var(--aura-fg-primary); }
|
|
530
533
|
.aura-field.is-disabled .aura-field__label { color: var(--aura-fg-secondary); }
|
package/dist/styles.layer.css
CHANGED
|
@@ -527,6 +527,9 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
527
527
|
.aura-field__hint, .aura-field__error { display: flex; align-items: flex-start; gap: var(--aura-space-1); margin: 0; font-size: max(12px, .75rem); line-height: 1.5; color: var(--aura-fg-secondary); }
|
|
528
528
|
.aura-field__error { color: var(--aura-fg-danger); }
|
|
529
529
|
.aura-field__error .aura-icon { margin-top: 2px; }
|
|
530
|
+
/* 5.68 (Chamber-OS 184): an `errorLive` error line waits in the page, empty, until there is an error. Out of the
|
|
531
|
+
* flow (an absolute child takes no gap) and clipped; the screen reader still has the live region. */
|
|
532
|
+
.aura-field__error:empty { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
530
533
|
/* 5.31 (Chamber-OS addendum 41): TextField/Textarea `labelAddon`, between the label and the box, in the field's gap. */
|
|
531
534
|
.aura-field__addon { min-width: 0; font-size: max(13px, .8125rem); line-height: 1.5; color: var(--aura-fg-primary); }
|
|
532
535
|
.aura-field.is-disabled .aura-field__label { color: var(--aura-fg-secondary); }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jirawatpyk/aura-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.68.0",
|
|
4
4
|
"description": "AURA Design System — React components (Enterprise Standard, Human Creative). Thai-first: Buddhist-era dates, Thai collation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|