@jirawatpyk/aura-react 5.58.0 → 5.59.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 +4 -0
- package/dist/aura.bundle.js +10 -0
- package/dist/cjs/index.cjs +10 -0
- package/dist/esm/display.js +10 -0
- package/dist/esm/index.js +2 -1
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/server/index.cjs +10 -0
- package/dist/server/index.d.cts +12 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.js +10 -0
- package/dist/styles.css +40 -1
- package/dist/styles.layer.css +40 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -186,6 +186,10 @@ 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.59 — Chamber-OS addendum 73 (#172)
|
|
190
|
+
|
|
191
|
+
- **`linkClass()` — a text link with the touch rule:** the class list for a link that reads as text, not a button, from the root and `/server` (as `buttonClass`): `<Link href={url} className={linkClass({ touchHeight: true })}>INV-2041</Link>`. `tone`: `accent` (default, the link colour) or `inherit`; `underline`: `always` (default) or `hover`; `className` is appended. With `touchHeight` the link is at least 44×44 below 640px or on a coarse pointer (`'always'`: at every width) — `inline-flex`, the label centred — with no fill, border or padding, so it looks the same; with a mouse from 640px its size and line height don't change. It works on a `<button>` too (an action that opens a modal rather than navigating): the button's chrome is reset — no fill, border or padding, the surrounding font and line height, a pointer — so a button and an `<a>` with the class look the same at rest, on hover (the underline thickens, or appears with `underline: 'hover'`) and on keyboard focus (Button's focus ring). The button form is for an action on its own line: a `<button>` never wraps mid-sentence the way an `<a>` does. In a DataTable's grid cells (any `rowHeight`) the row is the tap target and the cell truncates with an ellipsis, so there the link stays inline whatever `touchHeight` says (and a utility class can't override it); in its stacked cards (`stackBelow`) the 44px target applies again. Use it on a link that stands on its own line (a row title, a "View all"); in the middle of a sentence a 44px box would open up the line, so leave `touchHeight` off there. Drop hand-written `inline-flex items-center max-sm:min-h-11 pointer-coarse:min-h-11`.
|
|
192
|
+
|
|
189
193
|
## 5.58 — Chamber-OS addendum 72 (#171)
|
|
190
194
|
|
|
191
195
|
- **A short touchHeight tab is a 44×44 target:** with `touchHeight`, below 640px or on a coarse pointer (or always, with `'always'`) each tab is now at least 44px wide as well as 44px tall, its label centred, so a one-word tab such as "Tax" is 44×44. Tabs with longer labels keep their width and the gap between tabs is unchanged; a short tab's underline spans its 44px. With a mouse from 640px nothing changes. Inside its breakpoint a `fullWidth` row sizes its own tabs (equal shares, 12px either side of the label), so it is unchanged there; a one-letter tab in a full-width row that overflows and scrolls can stay under 44px wide.
|
package/dist/aura.bundle.js
CHANGED
|
@@ -134,6 +134,7 @@ window.Aura = (() => {
|
|
|
134
134
|
formatBytes: () => formatBytes,
|
|
135
135
|
formatDate: () => formatDate,
|
|
136
136
|
iconNames: () => iconNames,
|
|
137
|
+
linkClass: () => linkClass,
|
|
137
138
|
parseDate: () => parseDate,
|
|
138
139
|
parseTime: () => parseTime,
|
|
139
140
|
registerIcons: () => registerIcons,
|
|
@@ -883,6 +884,15 @@ window.Aura = (() => {
|
|
|
883
884
|
opts.className
|
|
884
885
|
);
|
|
885
886
|
}
|
|
887
|
+
function linkClass(opts = {}) {
|
|
888
|
+
return cx(
|
|
889
|
+
"aura-link",
|
|
890
|
+
opts.tone === "inherit" && "aura-link--inherit",
|
|
891
|
+
opts.underline === "hover" && "aura-link--hover-underline",
|
|
892
|
+
opts.touchHeight === "always" ? "aura-link--touch-always" : opts.touchHeight && "aura-link--touch",
|
|
893
|
+
opts.className
|
|
894
|
+
);
|
|
895
|
+
}
|
|
886
896
|
|
|
887
897
|
// src/locale.tsx
|
|
888
898
|
var React5 = __toESM(require_react(), 1);
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -115,6 +115,7 @@ __export(index_exports, {
|
|
|
115
115
|
formatBytes: () => formatBytes,
|
|
116
116
|
formatDate: () => formatDate,
|
|
117
117
|
iconNames: () => iconNames,
|
|
118
|
+
linkClass: () => linkClass,
|
|
118
119
|
parseDate: () => parseDate,
|
|
119
120
|
parseTime: () => parseTime,
|
|
120
121
|
registerIcons: () => registerIcons,
|
|
@@ -865,6 +866,15 @@ function buttonClass(opts = {}) {
|
|
|
865
866
|
opts.className
|
|
866
867
|
);
|
|
867
868
|
}
|
|
869
|
+
function linkClass(opts = {}) {
|
|
870
|
+
return cx(
|
|
871
|
+
"aura-link",
|
|
872
|
+
opts.tone === "inherit" && "aura-link--inherit",
|
|
873
|
+
opts.underline === "hover" && "aura-link--hover-underline",
|
|
874
|
+
opts.touchHeight === "always" ? "aura-link--touch-always" : opts.touchHeight && "aura-link--touch",
|
|
875
|
+
opts.className
|
|
876
|
+
);
|
|
877
|
+
}
|
|
868
878
|
|
|
869
879
|
// src/locale.tsx
|
|
870
880
|
var React5 = __toESM(require("react"), 1);
|
package/dist/esm/display.js
CHANGED
|
@@ -255,6 +255,15 @@ function buttonClass(opts = {}) {
|
|
|
255
255
|
opts.className
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
+
function linkClass(opts = {}) {
|
|
259
|
+
return cx(
|
|
260
|
+
"aura-link",
|
|
261
|
+
opts.tone === "inherit" && "aura-link--inherit",
|
|
262
|
+
opts.underline === "hover" && "aura-link--hover-underline",
|
|
263
|
+
opts.touchHeight === "always" ? "aura-link--touch-always" : opts.touchHeight && "aura-link--touch",
|
|
264
|
+
opts.className
|
|
265
|
+
);
|
|
266
|
+
}
|
|
258
267
|
function ServerAlert(props) {
|
|
259
268
|
return alertElement(props, void 0, null);
|
|
260
269
|
}
|
|
@@ -291,6 +300,7 @@ export {
|
|
|
291
300
|
buttonClass,
|
|
292
301
|
cardElement,
|
|
293
302
|
emptyStateElement,
|
|
303
|
+
linkClass,
|
|
294
304
|
statElement,
|
|
295
305
|
statusPillElement
|
|
296
306
|
};
|
package/dist/esm/index.js
CHANGED
|
@@ -27,7 +27,7 @@ import { Tooltip } from "./Tooltip.js";
|
|
|
27
27
|
import { Dialog, Drawer, useDialogClose } from "./Dialog.js";
|
|
28
28
|
import { DataTable } from "./DataTable.js";
|
|
29
29
|
import { Card } from "./Card.js";
|
|
30
|
-
import { buttonClass } from "./display.js";
|
|
30
|
+
import { buttonClass, linkClass } from "./display.js";
|
|
31
31
|
import { Tabs } from "./Tabs.js";
|
|
32
32
|
import { SideNav } from "./SideNav.js";
|
|
33
33
|
import { Breadcrumb } from "./Breadcrumb.js";
|
|
@@ -149,6 +149,7 @@ export {
|
|
|
149
149
|
formatBytes,
|
|
150
150
|
formatDate,
|
|
151
151
|
iconNames,
|
|
152
|
+
linkClass,
|
|
152
153
|
parseDate,
|
|
153
154
|
parseTime,
|
|
154
155
|
registerIcons,
|
package/dist/index.d.cts
CHANGED
|
@@ -1946,6 +1946,18 @@ export declare function buttonClass(opts?: {
|
|
|
1946
1946
|
touchHeight?: boolean | undefined;
|
|
1947
1947
|
className?: string | undefined;
|
|
1948
1948
|
}): string;
|
|
1949
|
+
/** The class list of a text link (5.59, Chamber-OS 172) — a link that reads as text, not a button. Put it on your own
|
|
1950
|
+
* `<a>` or `<Link>`, also in a Server Component: `<Link href={url} className={linkClass({ touchHeight: true })}>`.
|
|
1951
|
+
* `tone`: `accent` (default) or `inherit` (the surrounding colour). `underline`: `always` (default) or `hover`.
|
|
1952
|
+
* `touchHeight`: at least 44×44 below 640px or on a coarse pointer (`true`) or at every width (`'always'`), the label
|
|
1953
|
+
* centred and its look unchanged — for a link on its own line, not mid-sentence. On a `<button>` (an action that
|
|
1954
|
+
* opens something) the button's chrome is reset, so it looks like the link; hover and Button's focus ring included. */
|
|
1955
|
+
export declare function linkClass(opts?: {
|
|
1956
|
+
tone?: "accent" | "inherit" | undefined;
|
|
1957
|
+
underline?: "always" | "hover" | undefined;
|
|
1958
|
+
touchHeight?: boolean | "always" | undefined;
|
|
1959
|
+
className?: string | undefined;
|
|
1960
|
+
}): string;
|
|
1949
1961
|
export declare const Alert: React$1.ForwardRefExoticComponent<AlertProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1950
1962
|
/** Show a toast; returns its id. Needs `<Toaster />` mounted once. */
|
|
1951
1963
|
export declare function toast(opts: ToastOptions | string): string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1946,6 +1946,18 @@ export declare function buttonClass(opts?: {
|
|
|
1946
1946
|
touchHeight?: boolean | undefined;
|
|
1947
1947
|
className?: string | undefined;
|
|
1948
1948
|
}): string;
|
|
1949
|
+
/** The class list of a text link (5.59, Chamber-OS 172) — a link that reads as text, not a button. Put it on your own
|
|
1950
|
+
* `<a>` or `<Link>`, also in a Server Component: `<Link href={url} className={linkClass({ touchHeight: true })}>`.
|
|
1951
|
+
* `tone`: `accent` (default) or `inherit` (the surrounding colour). `underline`: `always` (default) or `hover`.
|
|
1952
|
+
* `touchHeight`: at least 44×44 below 640px or on a coarse pointer (`true`) or at every width (`'always'`), the label
|
|
1953
|
+
* centred and its look unchanged — for a link on its own line, not mid-sentence. On a `<button>` (an action that
|
|
1954
|
+
* opens something) the button's chrome is reset, so it looks like the link; hover and Button's focus ring included. */
|
|
1955
|
+
export declare function linkClass(opts?: {
|
|
1956
|
+
tone?: "accent" | "inherit" | undefined;
|
|
1957
|
+
underline?: "always" | "hover" | undefined;
|
|
1958
|
+
touchHeight?: boolean | "always" | undefined;
|
|
1959
|
+
className?: string | undefined;
|
|
1960
|
+
}): string;
|
|
1949
1961
|
export declare const Alert: React$1.ForwardRefExoticComponent<AlertProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
1950
1962
|
/** Show a toast; returns its id. Needs `<Toaster />` mounted once. */
|
|
1951
1963
|
export declare function toast(opts: ToastOptions | string): string;
|
package/dist/server/index.cjs
CHANGED
|
@@ -54,6 +54,7 @@ __export(server_exports, {
|
|
|
54
54
|
formatBytes: () => formatBytes,
|
|
55
55
|
formatDate: () => formatDate,
|
|
56
56
|
fromISO: () => fromISO,
|
|
57
|
+
linkClass: () => linkClass,
|
|
57
58
|
parseDate: () => parseDate,
|
|
58
59
|
parseTime: () => parseTime,
|
|
59
60
|
registerIcons: () => registerIcons,
|
|
@@ -1411,6 +1412,15 @@ function buttonClass(opts = {}) {
|
|
|
1411
1412
|
opts.className
|
|
1412
1413
|
);
|
|
1413
1414
|
}
|
|
1415
|
+
function linkClass(opts = {}) {
|
|
1416
|
+
return cx(
|
|
1417
|
+
"aura-link",
|
|
1418
|
+
opts.tone === "inherit" && "aura-link--inherit",
|
|
1419
|
+
opts.underline === "hover" && "aura-link--hover-underline",
|
|
1420
|
+
opts.touchHeight === "always" ? "aura-link--touch-always" : opts.touchHeight && "aura-link--touch",
|
|
1421
|
+
opts.className
|
|
1422
|
+
);
|
|
1423
|
+
}
|
|
1414
1424
|
function ServerAlert(props) {
|
|
1415
1425
|
return alertElement(props, void 0, null);
|
|
1416
1426
|
}
|
package/dist/server/index.d.cts
CHANGED
|
@@ -496,6 +496,18 @@ export declare function buttonClass(opts?: {
|
|
|
496
496
|
touchHeight?: boolean | undefined;
|
|
497
497
|
className?: string | undefined;
|
|
498
498
|
}): string;
|
|
499
|
+
/** The class list of a text link (5.59, Chamber-OS 172) — a link that reads as text, not a button. Put it on your own
|
|
500
|
+
* `<a>` or `<Link>`, also in a Server Component: `<Link href={url} className={linkClass({ touchHeight: true })}>`.
|
|
501
|
+
* `tone`: `accent` (default) or `inherit` (the surrounding colour). `underline`: `always` (default) or `hover`.
|
|
502
|
+
* `touchHeight`: at least 44×44 below 640px or on a coarse pointer (`true`) or at every width (`'always'`), the label
|
|
503
|
+
* centred and its look unchanged — for a link on its own line, not mid-sentence. On a `<button>` (an action that
|
|
504
|
+
* opens something) the button's chrome is reset, so it looks like the link; hover and Button's focus ring included. */
|
|
505
|
+
export declare function linkClass(opts?: {
|
|
506
|
+
tone?: "accent" | "inherit" | undefined;
|
|
507
|
+
underline?: "always" | "hover" | undefined;
|
|
508
|
+
touchHeight?: boolean | "always" | undefined;
|
|
509
|
+
className?: string | undefined;
|
|
510
|
+
}): string;
|
|
499
511
|
declare function ServerAlert(props: Omit<AlertProps, "onDismiss">): React$1.ReactElement;
|
|
500
512
|
declare function ServerCard(props: CardProps): React$1.ReactElement;
|
|
501
513
|
declare function ServerStatusPill(props: StatusPillProps): React$1.ReactElement;
|
package/dist/server/index.d.ts
CHANGED
|
@@ -496,6 +496,18 @@ export declare function buttonClass(opts?: {
|
|
|
496
496
|
touchHeight?: boolean | undefined;
|
|
497
497
|
className?: string | undefined;
|
|
498
498
|
}): string;
|
|
499
|
+
/** The class list of a text link (5.59, Chamber-OS 172) — a link that reads as text, not a button. Put it on your own
|
|
500
|
+
* `<a>` or `<Link>`, also in a Server Component: `<Link href={url} className={linkClass({ touchHeight: true })}>`.
|
|
501
|
+
* `tone`: `accent` (default) or `inherit` (the surrounding colour). `underline`: `always` (default) or `hover`.
|
|
502
|
+
* `touchHeight`: at least 44×44 below 640px or on a coarse pointer (`true`) or at every width (`'always'`), the label
|
|
503
|
+
* centred and its look unchanged — for a link on its own line, not mid-sentence. On a `<button>` (an action that
|
|
504
|
+
* opens something) the button's chrome is reset, so it looks like the link; hover and Button's focus ring included. */
|
|
505
|
+
export declare function linkClass(opts?: {
|
|
506
|
+
tone?: "accent" | "inherit" | undefined;
|
|
507
|
+
underline?: "always" | "hover" | undefined;
|
|
508
|
+
touchHeight?: boolean | "always" | undefined;
|
|
509
|
+
className?: string | undefined;
|
|
510
|
+
}): string;
|
|
499
511
|
declare function ServerAlert(props: Omit<AlertProps, "onDismiss">): React$1.ReactElement;
|
|
500
512
|
declare function ServerCard(props: CardProps): React$1.ReactElement;
|
|
501
513
|
declare function ServerStatusPill(props: StatusPillProps): React$1.ReactElement;
|
package/dist/server/index.js
CHANGED
|
@@ -1346,6 +1346,15 @@ function buttonClass(opts = {}) {
|
|
|
1346
1346
|
opts.className
|
|
1347
1347
|
);
|
|
1348
1348
|
}
|
|
1349
|
+
function linkClass(opts = {}) {
|
|
1350
|
+
return cx(
|
|
1351
|
+
"aura-link",
|
|
1352
|
+
opts.tone === "inherit" && "aura-link--inherit",
|
|
1353
|
+
opts.underline === "hover" && "aura-link--hover-underline",
|
|
1354
|
+
opts.touchHeight === "always" ? "aura-link--touch-always" : opts.touchHeight && "aura-link--touch",
|
|
1355
|
+
opts.className
|
|
1356
|
+
);
|
|
1357
|
+
}
|
|
1349
1358
|
function ServerAlert(props) {
|
|
1350
1359
|
return alertElement(props, void 0, null);
|
|
1351
1360
|
}
|
|
@@ -1858,6 +1867,7 @@ export {
|
|
|
1858
1867
|
formatBytes,
|
|
1859
1868
|
formatDate,
|
|
1860
1869
|
fromISO,
|
|
1870
|
+
linkClass,
|
|
1861
1871
|
parseDate,
|
|
1862
1872
|
parseTime,
|
|
1863
1873
|
registerIcons,
|
package/dist/styles.css
CHANGED
|
@@ -184,7 +184,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
|
|
|
184
184
|
.aura-table__td { overflow: clip; overflow-clip-margin: var(--aura-space-1); }
|
|
185
185
|
}
|
|
186
186
|
@supports not (overflow-clip-margin: 1px) {
|
|
187
|
-
.aura-table__td :focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
|
|
187
|
+
.aura-table__td :focus-visible, .aura-table__td .aura-link:focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
|
|
188
188
|
}
|
|
189
189
|
/* 5.11 rowHeight="auto" (never virtualized): a row grows to fit what wraps in it; each cell centres its content.
|
|
190
190
|
* The padding only shows once content is taller than the row: a small Button or IconButton (32px), a pill or one line
|
|
@@ -1101,6 +1101,45 @@ a.aura-tab { text-decoration: none; }
|
|
|
1101
1101
|
.aura-actionbar__start > .aura-icon-btn, .aura-actionbar__start > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
1102
1102
|
}
|
|
1103
1103
|
|
|
1104
|
+
/* ---------- Text link (5.59, Chamber-OS 172) ---------- */
|
|
1105
|
+
/* linkClass(): a link that reads as text — on an <a> or a <button> alike (a button's chrome is reset: no fill, border
|
|
1106
|
+
* or padding, the surrounding font and line height, a pointer). accent (default) or inherit colour; underlined, or
|
|
1107
|
+
* only on hover; hover thickens an underline that is always there. Focus is Button's ring. With touchHeight it is at
|
|
1108
|
+
* least 44×44 below 640px or on a coarse pointer (or always), the text unchanged — the box grows around the label,
|
|
1109
|
+
* centred. For a link on its own line (a row title, "+ Create new event"), not mid-sentence. */
|
|
1110
|
+
.aura-link {
|
|
1111
|
+
-webkit-appearance: none; appearance: none; margin: 0; padding: 0; border: 0; background: none;
|
|
1112
|
+
font: inherit; line-height: inherit; letter-spacing: inherit; word-spacing: inherit; text-align: inherit;
|
|
1113
|
+
text-transform: inherit; text-indent: inherit; text-shadow: inherit; cursor: pointer;
|
|
1114
|
+
color: var(--aura-fg-accent); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px;
|
|
1115
|
+
border-radius: var(--aura-radius-xs);
|
|
1116
|
+
}
|
|
1117
|
+
.aura-link:hover { text-decoration-thickness: 2px; }
|
|
1118
|
+
.aura-link--inherit { color: inherit; }
|
|
1119
|
+
.aura-link--hover-underline { text-decoration: none; }
|
|
1120
|
+
.aura-link--hover-underline:hover { text-decoration: underline; text-decoration-thickness: 1px; }
|
|
1121
|
+
.aura-link:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
|
|
1122
|
+
.aura-link:disabled, .aura-link[aria-disabled="true"] { opacity: var(--aura-disabled-opacity); cursor: not-allowed; text-decoration-thickness: 1px; }
|
|
1123
|
+
.aura-link--hover-underline:is(:disabled, [aria-disabled="true"]):hover { text-decoration: none; }
|
|
1124
|
+
/* Forced colours: a <button> would take ButtonText; both forms read as a link. */
|
|
1125
|
+
@media (forced-colors: active) {
|
|
1126
|
+
.aura-link { color: LinkText; }
|
|
1127
|
+
.aura-link:is(:disabled, [aria-disabled="true"]) { color: GrayText; }
|
|
1128
|
+
}
|
|
1129
|
+
.aura-link.aura-link--touch-always { display: inline-flex; align-items: center; justify-content: center; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1130
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1131
|
+
.aura-link.aura-link--touch { display: inline-flex; align-items: center; justify-content: center; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1132
|
+
}
|
|
1133
|
+
/* In a DataTable grid cell the row is the target and the cell clips with an ellipsis: the link stays inline there.
|
|
1134
|
+
* In DataTable's stacked cards nothing clips, so the 44px target comes back (container query: right before hydration). */
|
|
1135
|
+
.aura-table__td .aura-link.aura-link:is(.aura-link--touch, .aura-link--touch-always) { display: inline; min-height: 0; min-width: 0; }
|
|
1136
|
+
@container aura-stack (width < 9999.5px) {
|
|
1137
|
+
.aura-table__td .aura-link.aura-link.aura-link--touch-always { display: inline-flex; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1138
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1139
|
+
.aura-table__td .aura-link.aura-link.aura-link--touch { display: inline-flex; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1104
1143
|
/* ---------- Dropdown ---------- */
|
|
1105
1144
|
.aura-dropdown { display: inline-flex; }
|
|
1106
1145
|
|
package/dist/styles.layer.css
CHANGED
|
@@ -186,7 +186,7 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
|
|
|
186
186
|
.aura-table__td { overflow: clip; overflow-clip-margin: var(--aura-space-1); }
|
|
187
187
|
}
|
|
188
188
|
@supports not (overflow-clip-margin: 1px) {
|
|
189
|
-
.aura-table__td :focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
|
|
189
|
+
.aura-table__td :focus-visible, .aura-table__td .aura-link:focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
|
|
190
190
|
}
|
|
191
191
|
/* 5.11 rowHeight="auto" (never virtualized): a row grows to fit what wraps in it; each cell centres its content.
|
|
192
192
|
* The padding only shows once content is taller than the row: a small Button or IconButton (32px), a pill or one line
|
|
@@ -1103,6 +1103,45 @@ a.aura-tab { text-decoration: none; }
|
|
|
1103
1103
|
.aura-actionbar__start > .aura-icon-btn, .aura-actionbar__start > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
1104
1104
|
}
|
|
1105
1105
|
|
|
1106
|
+
/* ---------- Text link (5.59, Chamber-OS 172) ---------- */
|
|
1107
|
+
/* linkClass(): a link that reads as text — on an <a> or a <button> alike (a button's chrome is reset: no fill, border
|
|
1108
|
+
* or padding, the surrounding font and line height, a pointer). accent (default) or inherit colour; underlined, or
|
|
1109
|
+
* only on hover; hover thickens an underline that is always there. Focus is Button's ring. With touchHeight it is at
|
|
1110
|
+
* least 44×44 below 640px or on a coarse pointer (or always), the text unchanged — the box grows around the label,
|
|
1111
|
+
* centred. For a link on its own line (a row title, "+ Create new event"), not mid-sentence. */
|
|
1112
|
+
.aura-link {
|
|
1113
|
+
-webkit-appearance: none; appearance: none; margin: 0; padding: 0; border: 0; background: none;
|
|
1114
|
+
font: inherit; line-height: inherit; letter-spacing: inherit; word-spacing: inherit; text-align: inherit;
|
|
1115
|
+
text-transform: inherit; text-indent: inherit; text-shadow: inherit; cursor: pointer;
|
|
1116
|
+
color: var(--aura-fg-accent); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px;
|
|
1117
|
+
border-radius: var(--aura-radius-xs);
|
|
1118
|
+
}
|
|
1119
|
+
.aura-link:hover { text-decoration-thickness: 2px; }
|
|
1120
|
+
.aura-link--inherit { color: inherit; }
|
|
1121
|
+
.aura-link--hover-underline { text-decoration: none; }
|
|
1122
|
+
.aura-link--hover-underline:hover { text-decoration: underline; text-decoration-thickness: 1px; }
|
|
1123
|
+
.aura-link:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
|
|
1124
|
+
.aura-link:disabled, .aura-link[aria-disabled="true"] { opacity: var(--aura-disabled-opacity); cursor: not-allowed; text-decoration-thickness: 1px; }
|
|
1125
|
+
.aura-link--hover-underline:is(:disabled, [aria-disabled="true"]):hover { text-decoration: none; }
|
|
1126
|
+
/* Forced colours: a <button> would take ButtonText; both forms read as a link. */
|
|
1127
|
+
@media (forced-colors: active) {
|
|
1128
|
+
.aura-link { color: LinkText; }
|
|
1129
|
+
.aura-link:is(:disabled, [aria-disabled="true"]) { color: GrayText; }
|
|
1130
|
+
}
|
|
1131
|
+
.aura-link.aura-link--touch-always { display: inline-flex; align-items: center; justify-content: center; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1132
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1133
|
+
.aura-link.aura-link--touch { display: inline-flex; align-items: center; justify-content: center; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1134
|
+
}
|
|
1135
|
+
/* In a DataTable grid cell the row is the target and the cell clips with an ellipsis: the link stays inline there.
|
|
1136
|
+
* In DataTable's stacked cards nothing clips, so the 44px target comes back (container query: right before hydration). */
|
|
1137
|
+
.aura-table__td .aura-link.aura-link:is(.aura-link--touch, .aura-link--touch-always) { display: inline; min-height: 0; min-width: 0; }
|
|
1138
|
+
@container aura-stack (width < 9999.5px) {
|
|
1139
|
+
.aura-table__td .aura-link.aura-link.aura-link--touch-always { display: inline-flex; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1140
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1141
|
+
.aura-table__td .aura-link.aura-link.aura-link--touch { display: inline-flex; min-height: var(--aura-touch-target); min-width: var(--aura-touch-target); }
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1106
1145
|
/* ---------- Dropdown ---------- */
|
|
1107
1146
|
.aura-dropdown { display: inline-flex; }
|
|
1108
1147
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jirawatpyk/aura-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.59.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",
|