@jirawatpyk/aura-react 5.36.0 → 5.37.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 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.37 — DxT Monitor requests 17–18
190
+
191
+ - **PageHeader `actionsFullWidthBelow`** (request 17): `'sm'`, `'md'` or `'lg'` — below 640px, 768px or 1024px the actions take the whole row under the text, 12px apart, and the buttons share each line in equal widths (unless a label needs more), so they reach the page's edge: three buttons on a phone fill two rows (two halves, then one across) when their labels don't fit on one, and a single button spans the row. A button inside a DropdownMenu, Tooltip or Popover fills its share too; an IconButton (bare, or as a menu's trigger) keeps its square size — so a line with only IconButtons on it doesn't reach the edge (one that wraps alone sits at the start); put them on the first line. Labels don't wrap: a label wider than the row overflows, as before — keep phone labels short, or give that one Button `fullWidth`. For a fixed arrangement, pass your own grid as the one child — it spans the row too. Wider than the breakpoint, the actions hug their content at the end, 8px apart, as before. A class on the root, so it works from `/server` too. Apps that stretched the actions with their own selector (e.g. `max-md:[&>:last-child]:w-full`) can drop it.
192
+ - **SegmentedControl `touchHeight`** (request 18): 44px options — `size="sm"` too, icon-only options 44px square — with `true` below 640px or on a coarse pointer (the same rule as Button's and TextField's `touchHeight`), or `'always'` at every width. A phone-sized viewport with a mouse (or an emulated phone in end-to-end tests) now gets the touch size too. Without it nothing changes: options are as tall as a field beside them with a mouse, and 44px on a coarse pointer. DxT asked for "below md"; it follows AURA's other `touchHeight` props (below 640px) so a form's fields, buttons and choices change size together — at 390px it is the same.
193
+
189
194
  ## 5.36 — DxT Monitor requests 15–16
190
195
 
191
196
  - **Focus rings in table cells** (request 15): a DataTable cell clips its text (ellipsis) but no longer the focus ring of a link or button in it. The clip has a 4px margin (`overflow: clip` + `overflow-clip-margin`), so content wider than its cell (a pill, a button) now shows up to 4px past its edge. In the first data column a focused link or button sits just above the row's sticky start gutter or pinned checkbox column (which painted over the ring's start side) — not while the table is scrolled sideways, and never above the sticky header, totals or pinned columns — and a plain `<a>` or `<button>` of yours in a cell gets AURA's ring instead of the browser's (zero specificity, so your own focus style wins). Safari has no `overflow-clip-margin`: there rings in cells are drawn just inside the control, whole. Apps that set `overflow: clip` on `.aura-table__td` themselves can drop it.
@@ -7663,9 +7663,18 @@ window.Aura = (() => {
7663
7663
  attrs2[k] = props[k];
7664
7664
  });
7665
7665
  const level = props.headingLevel || 1;
7666
+ const below2 = props.actionsFullWidthBelow;
7666
7667
  return h8(
7667
7668
  "div",
7668
- Object.assign(attrs2, { ref, className: cx("aura-page-header", props.className), style: props.style }),
7669
+ Object.assign(attrs2, {
7670
+ ref,
7671
+ className: cx(
7672
+ "aura-page-header",
7673
+ (below2 === "sm" || below2 === "md" || below2 === "lg") && "aura-page-header--actions-full-below-" + below2,
7674
+ props.className
7675
+ ),
7676
+ style: props.style
7677
+ }),
7669
7678
  h8(
7670
7679
  "div",
7671
7680
  { className: "aura-page-header__text" },
@@ -10239,6 +10248,7 @@ window.Aura = (() => {
10239
10248
  "aura-segmented",
10240
10249
  props.size === "sm" && "aura-segmented--sm",
10241
10250
  props.fullWidth && "is-full",
10251
+ touchClass(props.touchHeight),
10242
10252
  props.disabled && "is-disabled",
10243
10253
  props.className
10244
10254
  )
@@ -7645,9 +7645,18 @@ var PageHeader = React43.forwardRef(function PageHeader2(props, ref) {
7645
7645
  attrs2[k] = props[k];
7646
7646
  });
7647
7647
  const level = props.headingLevel || 1;
7648
+ const below2 = props.actionsFullWidthBelow;
7648
7649
  return h8(
7649
7650
  "div",
7650
- Object.assign(attrs2, { ref, className: cx("aura-page-header", props.className), style: props.style }),
7651
+ Object.assign(attrs2, {
7652
+ ref,
7653
+ className: cx(
7654
+ "aura-page-header",
7655
+ (below2 === "sm" || below2 === "md" || below2 === "lg") && "aura-page-header--actions-full-below-" + below2,
7656
+ props.className
7657
+ ),
7658
+ style: props.style
7659
+ }),
7651
7660
  h8(
7652
7661
  "div",
7653
7662
  { className: "aura-page-header__text" },
@@ -10221,6 +10230,7 @@ var SegmentedControl = React67.forwardRef(
10221
10230
  "aura-segmented",
10222
10231
  props.size === "sm" && "aura-segmented--sm",
10223
10232
  props.fullWidth && "is-full",
10233
+ touchClass(props.touchHeight),
10224
10234
  props.disabled && "is-disabled",
10225
10235
  props.className
10226
10236
  )
@@ -9,9 +9,18 @@ const PageHeader = React.forwardRef(function PageHeader2(props, ref) {
9
9
  attrs[k] = props[k];
10
10
  });
11
11
  const level = props.headingLevel || 1;
12
+ const below = props.actionsFullWidthBelow;
12
13
  return h(
13
14
  "div",
14
- Object.assign(attrs, { ref, className: cx("aura-page-header", props.className), style: props.style }),
15
+ Object.assign(attrs, {
16
+ ref,
17
+ className: cx(
18
+ "aura-page-header",
19
+ (below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
20
+ props.className
21
+ ),
22
+ style: props.style
23
+ }),
15
24
  h(
16
25
  "div",
17
26
  { className: "aura-page-header__text" },
@@ -2,6 +2,7 @@
2
2
  import * as React from "react";
3
3
  import { Icon } from "./Icon.js";
4
4
  import { cx, uid, useMaybeControlled } from "./internal.js";
5
+ import { touchClass } from "./classes.js";
5
6
  import { useAutoTip } from "./autoTip.js";
6
7
  function toOpt(o) {
7
8
  return typeof o === "object" ? o : { value: o, label: o };
@@ -65,6 +66,7 @@ const SegmentedControl = React.forwardRef(
65
66
  "aura-segmented",
66
67
  props.size === "sm" && "aura-segmented--sm",
67
68
  props.fullWidth && "is-full",
69
+ touchClass(props.touchHeight),
68
70
  props.disabled && "is-disabled",
69
71
  props.className
70
72
  )
package/dist/index.d.cts CHANGED
@@ -1036,6 +1036,10 @@ export interface SegmentedControlProps {
1036
1036
  size?: "sm" | "md" | undefined;
1037
1037
  /** Stretch across the container, segments equal width. */
1038
1038
  fullWidth?: boolean | undefined;
1039
+ /** 5.37 (DxT Monitor #18): 44px options (`sm` too; icon-only options 44px square). `true`: below 640px or on a
1040
+ * coarse pointer, as Button's and TextField's `touchHeight`; `'always'`: at every width. Without it, options are
1041
+ * 44px on a coarse pointer only. */
1042
+ touchHeight?: TouchHeight | undefined;
1039
1043
  disabled?: boolean | undefined;
1040
1044
  id?: string | undefined;
1041
1045
  className?: string | undefined;
@@ -1893,6 +1897,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
1893
1897
  meta?: React$1.ReactNode | undefined;
1894
1898
  /** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
1895
1899
  actions?: React$1.ReactNode | undefined;
1900
+ /** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
1901
+ * row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
1902
+ * Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
1903
+ * than that, the actions hug their content at the end as before. */
1904
+ actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
1896
1905
  /** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
1897
1906
  headingLevel?: 1 | 2 | 3 | undefined;
1898
1907
  /** The heading's id, for `aria-labelledby` on the page's region. */
package/dist/index.d.ts CHANGED
@@ -1036,6 +1036,10 @@ export interface SegmentedControlProps {
1036
1036
  size?: "sm" | "md" | undefined;
1037
1037
  /** Stretch across the container, segments equal width. */
1038
1038
  fullWidth?: boolean | undefined;
1039
+ /** 5.37 (DxT Monitor #18): 44px options (`sm` too; icon-only options 44px square). `true`: below 640px or on a
1040
+ * coarse pointer, as Button's and TextField's `touchHeight`; `'always'`: at every width. Without it, options are
1041
+ * 44px on a coarse pointer only. */
1042
+ touchHeight?: TouchHeight | undefined;
1039
1043
  disabled?: boolean | undefined;
1040
1044
  id?: string | undefined;
1041
1045
  className?: string | undefined;
@@ -1893,6 +1897,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
1893
1897
  meta?: React$1.ReactNode | undefined;
1894
1898
  /** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
1895
1899
  actions?: React$1.ReactNode | undefined;
1900
+ /** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
1901
+ * row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
1902
+ * Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
1903
+ * than that, the actions hug their content at the end as before. */
1904
+ actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
1896
1905
  /** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
1897
1906
  headingLevel?: 1 | 2 | 3 | undefined;
1898
1907
  /** The heading's id, for `aria-labelledby` on the page's region. */
@@ -1425,9 +1425,18 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1425
1425
  attrs2[k] = props[k];
1426
1426
  });
1427
1427
  const level = props.headingLevel || 1;
1428
+ const below = props.actionsFullWidthBelow;
1428
1429
  return h4(
1429
1430
  "div",
1430
- Object.assign(attrs2, { ref, className: cx("aura-page-header", props.className), style: props.style }),
1431
+ Object.assign(attrs2, {
1432
+ ref,
1433
+ className: cx(
1434
+ "aura-page-header",
1435
+ (below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
1436
+ props.className
1437
+ ),
1438
+ style: props.style
1439
+ }),
1431
1440
  h4(
1432
1441
  "div",
1433
1442
  { className: "aura-page-header__text" },
@@ -496,6 +496,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
496
496
  meta?: React$1.ReactNode | undefined;
497
497
  /** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
498
498
  actions?: React$1.ReactNode | undefined;
499
+ /** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
500
+ * row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
501
+ * Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
502
+ * than that, the actions hug their content at the end as before. */
503
+ actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
499
504
  /** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
500
505
  headingLevel?: 1 | 2 | 3 | undefined;
501
506
  /** The heading's id, for `aria-labelledby` on the page's region. */
@@ -496,6 +496,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
496
496
  meta?: React$1.ReactNode | undefined;
497
497
  /** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
498
498
  actions?: React$1.ReactNode | undefined;
499
+ /** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
500
+ * row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
501
+ * Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
502
+ * than that, the actions hug their content at the end as before. */
503
+ actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
499
504
  /** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
500
505
  headingLevel?: 1 | 2 | 3 | undefined;
501
506
  /** The heading's id, for `aria-labelledby` on the page's region. */
@@ -1361,9 +1361,18 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1361
1361
  attrs2[k] = props[k];
1362
1362
  });
1363
1363
  const level = props.headingLevel || 1;
1364
+ const below = props.actionsFullWidthBelow;
1364
1365
  return h4(
1365
1366
  "div",
1366
- Object.assign(attrs2, { ref, className: cx("aura-page-header", props.className), style: props.style }),
1367
+ Object.assign(attrs2, {
1368
+ ref,
1369
+ className: cx(
1370
+ "aura-page-header",
1371
+ (below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
1372
+ props.className
1373
+ ),
1374
+ style: props.style
1375
+ }),
1367
1376
  h4(
1368
1377
  "div",
1369
1378
  { className: "aura-page-header__text" },
package/dist/styles.css CHANGED
@@ -1138,6 +1138,30 @@ a.aura-tab { text-decoration: none; }
1138
1138
  .aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
1139
1139
  .aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1140
1140
  .aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
1141
+ /* 5.37 (DxT Monitor #17): actionsFullWidthBelow — the actions take the row under the text; their children share
1142
+ * each line equally (wrapping when a label won't fit), a trigger inside a DropdownMenu, Tooltip or Popover wrapper
1143
+ * fills it, and icon buttons keep their size. The :has rule is alone so older browsers drop only it. */
1144
+ @media (max-width: 639.98px) {
1145
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1146
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1147
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1148
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1149
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1150
+ }
1151
+ @media (max-width: 767.98px) {
1152
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1153
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1154
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1155
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1156
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1157
+ }
1158
+ @media (max-width: 1023.98px) {
1159
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1160
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1161
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1162
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1163
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1164
+ }
1141
1165
  @media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
1142
1166
  /* Thai marks need the room a 1.15 line takes away. */
1143
1167
  .aura-page-header__title:lang(th) { line-height: 1.4; letter-spacing: 0; }
@@ -1530,6 +1554,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1530
1554
  .aura-segmented--sm .aura-segmented__option { height: 24px; padding: 0 var(--aura-space-3); font-size: 12px; }
1531
1555
  .aura-segmented--sm .aura-segmented__option.is-icon { width: 28px; padding: 0; }
1532
1556
  .aura-segmented.is-disabled { opacity: var(--aura-disabled-opacity); }
1557
+ /* 5.37 (DxT Monitor #18): touchHeight — 44px options below 640px or on a coarse pointer (is-touch), or always. */
1558
+ .aura-segmented.is-touch-always .aura-segmented__option { height: var(--aura-touch-target); }
1559
+ .aura-segmented.is-touch-always .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
1560
+ @media (max-width: 639.98px), (pointer: coarse) {
1561
+ .aura-segmented.is-touch .aura-segmented__option { height: var(--aura-touch-target); }
1562
+ .aura-segmented.is-touch .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
1563
+ }
1533
1564
  /* 5.10 (Chamber-OS 72): Tabs variant="segmented" — the tablist wears SegmentedControl's track and pills. The focus
1534
1565
  * ring is drawn inside the pill, so neither the scrolling list (many tabs on a phone) nor the next pill can cover it;
1535
1566
  * full-width tabs share the track but never shrink below their label (the track scrolls instead). The phone rule's
@@ -1140,6 +1140,30 @@ a.aura-tab { text-decoration: none; }
1140
1140
  .aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
1141
1141
  .aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
1142
1142
  .aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
1143
+ /* 5.37 (DxT Monitor #17): actionsFullWidthBelow — the actions take the row under the text; their children share
1144
+ * each line equally (wrapping when a label won't fit), a trigger inside a DropdownMenu, Tooltip or Popover wrapper
1145
+ * fills it, and icon buttons keep their size. The :has rule is alone so older browsers drop only it. */
1146
+ @media (max-width: 639.98px) {
1147
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1148
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1149
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1150
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1151
+ .aura-page-header--actions-full-below-sm > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1152
+ }
1153
+ @media (max-width: 767.98px) {
1154
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1155
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1156
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1157
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1158
+ .aura-page-header--actions-full-below-md > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1159
+ }
1160
+ @media (max-width: 1023.98px) {
1161
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
1162
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
1163
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
1164
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-icon-btn { flex: none; }
1165
+ .aura-page-header--actions-full-below-lg > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
1166
+ }
1143
1167
  @media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
1144
1168
  /* Thai marks need the room a 1.15 line takes away. */
1145
1169
  .aura-page-header__title:lang(th) { line-height: 1.4; letter-spacing: 0; }
@@ -1532,6 +1556,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1532
1556
  .aura-segmented--sm .aura-segmented__option { height: 24px; padding: 0 var(--aura-space-3); font-size: 12px; }
1533
1557
  .aura-segmented--sm .aura-segmented__option.is-icon { width: 28px; padding: 0; }
1534
1558
  .aura-segmented.is-disabled { opacity: var(--aura-disabled-opacity); }
1559
+ /* 5.37 (DxT Monitor #18): touchHeight — 44px options below 640px or on a coarse pointer (is-touch), or always. */
1560
+ .aura-segmented.is-touch-always .aura-segmented__option { height: var(--aura-touch-target); }
1561
+ .aura-segmented.is-touch-always .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
1562
+ @media (max-width: 639.98px), (pointer: coarse) {
1563
+ .aura-segmented.is-touch .aura-segmented__option { height: var(--aura-touch-target); }
1564
+ .aura-segmented.is-touch .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
1565
+ }
1535
1566
  /* 5.10 (Chamber-OS 72): Tabs variant="segmented" — the tablist wears SegmentedControl's track and pills. The focus
1536
1567
  * ring is drawn inside the pill, so neither the scrolling list (many tabs on a phone) nor the next pill can cover it;
1537
1568
  * full-width tabs share the track but never shrink below their label (the track scrolls instead). The phone rule's
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.36.0",
3
+ "version": "5.37.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",