@uni-design-system/uni-mcp 11.8.0 → 11.10.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/CHANGELOG.md +4 -0
- package/dist/{chunk-R4RLYWUY.js → chunk-G27EXV3Z.js} +719 -235
- package/dist/chunk-G27EXV3Z.js.map +1 -0
- package/dist/http.js +1 -1
- package/dist/server.js +1 -1
- package/dist/stdio.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-R4RLYWUY.js.map +0 -1
|
@@ -7,17 +7,17 @@ import { z } from "zod";
|
|
|
7
7
|
// src/data/uni-index.json
|
|
8
8
|
var uni_index_default = {
|
|
9
9
|
meta: {
|
|
10
|
-
version: "11.
|
|
11
|
-
builtAt: "2026-10-
|
|
10
|
+
version: "11.10.0",
|
|
11
|
+
builtAt: "2026-10-22T16:40:50.352Z",
|
|
12
12
|
frameworks: [
|
|
13
13
|
"angular"
|
|
14
14
|
],
|
|
15
15
|
counts: {
|
|
16
|
-
components:
|
|
17
|
-
tokens:
|
|
16
|
+
components: 90,
|
|
17
|
+
tokens: 518,
|
|
18
18
|
themes: 2,
|
|
19
|
-
examples:
|
|
20
|
-
utilities:
|
|
19
|
+
examples: 265,
|
|
20
|
+
utilities: 124
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
components: [
|
|
@@ -28,7 +28,7 @@ var uni_index_default = {
|
|
|
28
28
|
summary: "",
|
|
29
29
|
description: "",
|
|
30
30
|
category: "feedback",
|
|
31
|
-
version: "11.
|
|
31
|
+
version: "11.10.0",
|
|
32
32
|
bindings: {
|
|
33
33
|
angular: {
|
|
34
34
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -118,7 +118,7 @@ var uni_index_default = {
|
|
|
118
118
|
summary: "Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content.",
|
|
119
119
|
description: "Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content. Surface, divider, height, typography and spacing all resolve from `appBar` tokens. Place it inside your page's `<header>` landmark.",
|
|
120
120
|
category: "components",
|
|
121
|
-
version: "11.
|
|
121
|
+
version: "11.10.0",
|
|
122
122
|
bindings: {
|
|
123
123
|
angular: {
|
|
124
124
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -191,7 +191,7 @@ var uni_index_default = {
|
|
|
191
191
|
summary: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol.",
|
|
192
192
|
description: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol. Coloring, radius, typeface and sizes all resolve from `avatar` theme tokens; `variant` picks the container palette.",
|
|
193
193
|
category: "components",
|
|
194
|
-
version: "11.
|
|
194
|
+
version: "11.10.0",
|
|
195
195
|
bindings: {
|
|
196
196
|
angular: {
|
|
197
197
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -286,7 +286,7 @@ var uni_index_default = {
|
|
|
286
286
|
summary: "Overlapping stack of avatars.",
|
|
287
287
|
description: "Overlapping stack of avatars. `max` collapses the overflow into a themed \u201C+N\u201D chip (itself a `uni-avatar`). Overlap and separator ring resolve from `avatarGroup` theme tokens.",
|
|
288
288
|
category: "components",
|
|
289
|
-
version: "11.
|
|
289
|
+
version: "11.10.0",
|
|
290
290
|
bindings: {
|
|
291
291
|
angular: {
|
|
292
292
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -335,7 +335,7 @@ var uni_index_default = {
|
|
|
335
335
|
summary: "",
|
|
336
336
|
description: "",
|
|
337
337
|
category: "primitives",
|
|
338
|
-
version: "11.
|
|
338
|
+
version: "11.10.0",
|
|
339
339
|
bindings: {
|
|
340
340
|
angular: {
|
|
341
341
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -416,7 +416,7 @@ var uni_index_default = {
|
|
|
416
416
|
summary: "",
|
|
417
417
|
description: "",
|
|
418
418
|
category: "feedback",
|
|
419
|
-
version: "11.
|
|
419
|
+
version: "11.10.0",
|
|
420
420
|
bindings: {
|
|
421
421
|
angular: {
|
|
422
422
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -513,7 +513,7 @@ var uni_index_default = {
|
|
|
513
513
|
summary: "",
|
|
514
514
|
description: "",
|
|
515
515
|
category: "directives",
|
|
516
|
-
version: "11.
|
|
516
|
+
version: "11.10.0",
|
|
517
517
|
bindings: {
|
|
518
518
|
angular: {
|
|
519
519
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -537,7 +537,7 @@ var uni_index_default = {
|
|
|
537
537
|
summary: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`.',
|
|
538
538
|
description: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`. It is a directive, so it composes freely \u2014 with another layout attribute (`<div stack-layout uni-text="body-1-long">`) and with a component\'s own host element (`<uni-card box-layout padding="lg">`); Angular merges the host `class` bindings rather than letting one win. Sizing convention (height/width/min/max/inset): a **number is px and needs a binding** \u2014 `[height]="420"`; a **plain attribute is a CSS length string** \u2014 `height="420px"`. Spacing/radius/color inputs take theme tokens.',
|
|
539
539
|
category: "layout",
|
|
540
|
-
version: "11.
|
|
540
|
+
version: "11.10.0",
|
|
541
541
|
bindings: {
|
|
542
542
|
angular: {
|
|
543
543
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -945,7 +945,7 @@ var uni_index_default = {
|
|
|
945
945
|
summary: 'WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current="page"`), separators are decorative.',
|
|
946
946
|
description: 'WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current="page"`), separators are decorative. Items with `href` render as real links; without one they render as link-styled buttons emitting `itemClicked` \u2014 wire that to your router.',
|
|
947
947
|
category: "components",
|
|
948
|
-
version: "11.
|
|
948
|
+
version: "11.10.0",
|
|
949
949
|
bindings: {
|
|
950
950
|
angular: {
|
|
951
951
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1030,7 +1030,7 @@ var uni_index_default = {
|
|
|
1030
1030
|
summary: "",
|
|
1031
1031
|
description: "",
|
|
1032
1032
|
category: "primitives",
|
|
1033
|
-
version: "11.
|
|
1033
|
+
version: "11.10.0",
|
|
1034
1034
|
bindings: {
|
|
1035
1035
|
angular: {
|
|
1036
1036
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1198,7 +1198,7 @@ var uni_index_default = {
|
|
|
1198
1198
|
summary: "",
|
|
1199
1199
|
description: "",
|
|
1200
1200
|
category: "primitives",
|
|
1201
|
-
version: "11.
|
|
1201
|
+
version: "11.10.0",
|
|
1202
1202
|
bindings: {
|
|
1203
1203
|
angular: {
|
|
1204
1204
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1230,7 +1230,7 @@ var uni_index_default = {
|
|
|
1230
1230
|
summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
|
|
1231
1231
|
description: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates. One tab stop with a roving-tabindex `role=\"grid\"`; every day is a real button named with its full date. Values are plain ISO strings (`'YYYY-MM-DD'`), never `Date` objects, so bindings are timezone-free and serializable. Selection and today colours come from the theme's `primary` role pair; geometry and glyphs come from the `calendar` theme entry.",
|
|
1232
1232
|
category: "forms",
|
|
1233
|
-
version: "11.
|
|
1233
|
+
version: "11.10.0",
|
|
1234
1234
|
bindings: {
|
|
1235
1235
|
angular: {
|
|
1236
1236
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1471,7 +1471,7 @@ var uni_index_default = {
|
|
|
1471
1471
|
summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
|
|
1472
1472
|
description: 'Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target. Both the scrim and the panel are `popover="manual"` elements shown in order, so they stack deterministically in the top layer above every app z-index, and every scrim piece is CSS-anchor-positioned to the target \u2014 the hole tracks scroll/resize/layout with zero listeners. The panel is a non-modal `role="dialog"` (deliberately no `aria-modal`): focus moves into it on open, Tab runs a "duet loop" over the panel\'s focusables plus the spotlit target while it stays interactive, and on close focus returns to the pre-open element \u2014 unless the user moved into the target, where it stays. Storage-free by rule: `key` and the `dismissed` output are the "don\'t show again" hooks; persistence is the app\'s business (e.g. cdk local-storage).',
|
|
1473
1473
|
category: "components",
|
|
1474
|
-
version: "11.
|
|
1474
|
+
version: "11.10.0",
|
|
1475
1475
|
bindings: {
|
|
1476
1476
|
angular: {
|
|
1477
1477
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1688,15 +1688,53 @@ var uni_index_default = {
|
|
|
1688
1688
|
id: "card",
|
|
1689
1689
|
name: "Card",
|
|
1690
1690
|
status: "stable",
|
|
1691
|
-
summary: "",
|
|
1692
|
-
description: "",
|
|
1691
|
+
summary: "Content container with a themed frame \u2014 and, when asked, a state.",
|
|
1692
|
+
description: "Content container with a themed frame \u2014 and, when asked, a state. `selected` and `interactive` add the `card-selected` and `card-interactive` classes to the frame, which the theme paints (the same contract `uni-tag` has had since 11.1): `selectedBorder`, `selectedColor`, `selectedElevation` and `hoverColor` cover the common case, and a variant's `&.card-selected` rule reaches it for anything else. Inside a `uni-card-group`, a card with a `value` is one of the group's options: a `role=\"radio\"` whose selection and tab stop the group drives. The frame is an Emotion class, not an inline style, because an inline style outranks every class and so no theme rule could ever express a state.",
|
|
1693
1693
|
category: "layout",
|
|
1694
|
-
version: "11.
|
|
1694
|
+
version: "11.10.0",
|
|
1695
1695
|
bindings: {
|
|
1696
1696
|
angular: {
|
|
1697
1697
|
importPath: "@uni-design-system/uni-angular",
|
|
1698
1698
|
selectorOrTag: "uni-card",
|
|
1699
1699
|
api: [
|
|
1700
|
+
{
|
|
1701
|
+
name: "selected",
|
|
1702
|
+
kind: "input",
|
|
1703
|
+
type: "boolean | undefined",
|
|
1704
|
+
required: false,
|
|
1705
|
+
default: "undefined",
|
|
1706
|
+
description: "Paint the selected state. Inside a group it is derived from the group's value and this input is ignored."
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
name: "interactive",
|
|
1710
|
+
kind: "input",
|
|
1711
|
+
type: "unknown",
|
|
1712
|
+
required: false,
|
|
1713
|
+
default: "false, { transform: booleanAttribute }",
|
|
1714
|
+
description: "A card the user acts on: a pointer cursor, the theme's hover wash, and `activated` on click, Space or Enter. Always on for an option in a group."
|
|
1715
|
+
},
|
|
1716
|
+
{
|
|
1717
|
+
name: "value",
|
|
1718
|
+
kind: "input",
|
|
1719
|
+
type: "T",
|
|
1720
|
+
required: false,
|
|
1721
|
+
description: "What this card stands for inside a `uni-card-group`."
|
|
1722
|
+
},
|
|
1723
|
+
{
|
|
1724
|
+
name: "disabled",
|
|
1725
|
+
kind: "input",
|
|
1726
|
+
type: "unknown",
|
|
1727
|
+
required: false,
|
|
1728
|
+
default: "false, { transform: booleanAttribute }",
|
|
1729
|
+
description: ""
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
name: "activated",
|
|
1733
|
+
kind: "output",
|
|
1734
|
+
type: "void",
|
|
1735
|
+
required: false,
|
|
1736
|
+
description: "An interactive card was clicked or activated from the keyboard."
|
|
1737
|
+
},
|
|
1700
1738
|
{
|
|
1701
1739
|
name: "variant",
|
|
1702
1740
|
kind: "input",
|
|
@@ -1734,16 +1772,46 @@ var uni_index_default = {
|
|
|
1734
1772
|
ngContent: 'Card content.',
|
|
1735
1773
|
}
|
|
1736
1774
|
-->`
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
title: "States",
|
|
1778
|
+
framework: "angular",
|
|
1779
|
+
code: '<!-- Storybook story: States -->\n<div stack-layout gap="md" [maxWidth]="320">\n<uni-card [interactive]="true" [selected]="picked" (activated)="picked = !picked">\n <uni-card-content>\n <span uni-text="title-small" display="block">Click to pick</span>\n <span uni-text="body-2-long">Selected: {{ picked }}</span>\n </uni-card-content>\n</uni-card>\n<uni-card [selected]="true">\n <uni-card-content><span uni-text="title-small">Always selected</span></uni-card-content>\n</uni-card>\n</div>'
|
|
1780
|
+
},
|
|
1781
|
+
{
|
|
1782
|
+
title: "Pick One",
|
|
1783
|
+
framework: "angular",
|
|
1784
|
+
code: `<!-- Storybook story: Pick One -->
|
|
1785
|
+
<h3 id="kind-heading" uni-text="title-small">Kind of work</h3>
|
|
1786
|
+
<uni-card-group ariaLabelledBy="kind-heading" [(value)]="kind">
|
|
1787
|
+
@for (option of kinds; track option.value) {
|
|
1788
|
+
<uni-card [value]="option.value" [disabled]="option.disabled ?? false">
|
|
1789
|
+
<div box-layout padding="md">
|
|
1790
|
+
<span uni-text="title-small" display="block">{{ option.title }}</span>
|
|
1791
|
+
<span uni-text="body-2-long" color="on-surface-variant">{{ option.blurb }}</span>
|
|
1792
|
+
</div>
|
|
1793
|
+
</uni-card>
|
|
1794
|
+
}
|
|
1795
|
+
</uni-card-group>
|
|
1796
|
+
<p uni-text="body-2">Value: {{ kind ?? 'none' }}</p>`
|
|
1737
1797
|
}
|
|
1738
1798
|
],
|
|
1739
1799
|
guidelines: {
|
|
1740
1800
|
whenToUse: "Content container with a themed frame: the border resolves from the **border\nprimitive named by its variant** (`borders.primary` \u2026 `borders.success`), the corner\nradius from the `card` theme options, and an optional elevation shadow. Compose with\nCard Header and Card Content for the standard anatomy \u2014 or point `options.border` at\na custom primitive to restyle every card in the theme at once.",
|
|
1741
1801
|
dos: [],
|
|
1742
1802
|
donts: [],
|
|
1743
|
-
accessibility: [
|
|
1803
|
+
accessibility: [
|
|
1804
|
+
"A plain card is content: no role, no tab stop.",
|
|
1805
|
+
'An option in a group is `role="radio"` with `aria-checked`; the group is `role="radiogroup"`, named by `ariaLabel` or `ariaLabelledBy`, with `aria-required` and an `aria-invalid` gated on touched or dirty.',
|
|
1806
|
+
"One tab stop for the group; the arrow keys both move and select (the APG radio group), so a selection is never a two-step.",
|
|
1807
|
+
"A disabled card is `aria-disabled`, skipped by the arrows and never selected.",
|
|
1808
|
+
"The group is touched once focus leaves it, not while it moves within."
|
|
1809
|
+
]
|
|
1744
1810
|
},
|
|
1745
1811
|
relatedTokens: [
|
|
1746
|
-
"card.behavior.borderRadius"
|
|
1812
|
+
"card.behavior.borderRadius",
|
|
1813
|
+
"card.behavior.selectedBorder",
|
|
1814
|
+
"card.behavior.selectedColor"
|
|
1747
1815
|
]
|
|
1748
1816
|
},
|
|
1749
1817
|
{
|
|
@@ -1753,7 +1821,7 @@ var uni_index_default = {
|
|
|
1753
1821
|
summary: "",
|
|
1754
1822
|
description: "",
|
|
1755
1823
|
category: "layout",
|
|
1756
|
-
version: "11.
|
|
1824
|
+
version: "11.10.0",
|
|
1757
1825
|
bindings: {
|
|
1758
1826
|
angular: {
|
|
1759
1827
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1787,6 +1855,144 @@ var uni_index_default = {
|
|
|
1787
1855
|
},
|
|
1788
1856
|
relatedTokens: []
|
|
1789
1857
|
},
|
|
1858
|
+
{
|
|
1859
|
+
id: "card-group",
|
|
1860
|
+
name: "CardGroup",
|
|
1861
|
+
status: "stable",
|
|
1862
|
+
summary: "Pick-one group of cards: a grid of `uni-card`s with radio semantics.",
|
|
1863
|
+
description: "Pick-one group of cards: a grid of `uni-card`s with radio semantics. The cards are projected, not rendered: a card's content is the point of a card, and a group that rendered its own would need a slot for every line. Each projected `uni-card` with a `value` registers as an option; the group owns which one is selected and which one holds the tab stop, and the card draws both. Keyboard model is the APG radio group: one tab stop for the group, the arrow keys move focus *and* select (wrapping at the ends), Home and End go to the first and last enabled card, Space or Enter selects the focused one. `FormValueControl<T | null>`, so `[formField]` binds it like every other control; `touched` is set when focus leaves the group.",
|
|
1864
|
+
category: "layout",
|
|
1865
|
+
version: "11.10.0",
|
|
1866
|
+
bindings: {
|
|
1867
|
+
angular: {
|
|
1868
|
+
importPath: "@uni-design-system/uni-angular",
|
|
1869
|
+
selectorOrTag: "uni-card-group",
|
|
1870
|
+
api: [
|
|
1871
|
+
{
|
|
1872
|
+
name: "value",
|
|
1873
|
+
kind: "model",
|
|
1874
|
+
type: "T | null",
|
|
1875
|
+
required: false,
|
|
1876
|
+
default: "null",
|
|
1877
|
+
description: ""
|
|
1878
|
+
},
|
|
1879
|
+
{
|
|
1880
|
+
name: "disabled",
|
|
1881
|
+
kind: "input",
|
|
1882
|
+
type: "boolean",
|
|
1883
|
+
required: false,
|
|
1884
|
+
default: "false",
|
|
1885
|
+
description: ""
|
|
1886
|
+
},
|
|
1887
|
+
{
|
|
1888
|
+
name: "touched",
|
|
1889
|
+
kind: "model",
|
|
1890
|
+
type: "boolean",
|
|
1891
|
+
required: false,
|
|
1892
|
+
default: "false",
|
|
1893
|
+
description: ""
|
|
1894
|
+
},
|
|
1895
|
+
{
|
|
1896
|
+
name: "touch",
|
|
1897
|
+
kind: "output",
|
|
1898
|
+
type: "void",
|
|
1899
|
+
required: false,
|
|
1900
|
+
description: "Angular 22 marks the bound field touched through this output."
|
|
1901
|
+
},
|
|
1902
|
+
{
|
|
1903
|
+
name: "invalid",
|
|
1904
|
+
kind: "input",
|
|
1905
|
+
type: "boolean",
|
|
1906
|
+
required: false,
|
|
1907
|
+
default: "false",
|
|
1908
|
+
description: ""
|
|
1909
|
+
},
|
|
1910
|
+
{
|
|
1911
|
+
name: "dirty",
|
|
1912
|
+
kind: "input",
|
|
1913
|
+
type: "boolean",
|
|
1914
|
+
required: false,
|
|
1915
|
+
default: "false",
|
|
1916
|
+
description: ""
|
|
1917
|
+
},
|
|
1918
|
+
{
|
|
1919
|
+
name: "required",
|
|
1920
|
+
kind: "input",
|
|
1921
|
+
type: "boolean",
|
|
1922
|
+
required: false,
|
|
1923
|
+
default: "false",
|
|
1924
|
+
description: ""
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
name: "ariaDescribedBy",
|
|
1928
|
+
kind: "input",
|
|
1929
|
+
type: "string",
|
|
1930
|
+
required: false,
|
|
1931
|
+
description: ""
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
name: "ariaLabel",
|
|
1935
|
+
kind: "input",
|
|
1936
|
+
type: "string",
|
|
1937
|
+
required: false,
|
|
1938
|
+
description: 'Accessible name of the group, e.g. "Kind of work".'
|
|
1939
|
+
},
|
|
1940
|
+
{
|
|
1941
|
+
name: "ariaLabelledBy",
|
|
1942
|
+
kind: "input",
|
|
1943
|
+
type: "string",
|
|
1944
|
+
required: false,
|
|
1945
|
+
description: "Id of the element naming the group, when a visible heading does."
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
name: "templateColumns",
|
|
1949
|
+
kind: "input",
|
|
1950
|
+
type: "string",
|
|
1951
|
+
required: false,
|
|
1952
|
+
description: "`grid-template-columns`, overriding the theme option per instance."
|
|
1953
|
+
},
|
|
1954
|
+
{
|
|
1955
|
+
name: "gap",
|
|
1956
|
+
kind: "input",
|
|
1957
|
+
type: "NullableSize",
|
|
1958
|
+
required: false,
|
|
1959
|
+
description: "Space between cards, overriding the theme option per instance."
|
|
1960
|
+
},
|
|
1961
|
+
{
|
|
1962
|
+
name: "activated",
|
|
1963
|
+
kind: "output",
|
|
1964
|
+
type: "T",
|
|
1965
|
+
required: false,
|
|
1966
|
+
description: "The card the user just picked."
|
|
1967
|
+
},
|
|
1968
|
+
{
|
|
1969
|
+
name: "variant",
|
|
1970
|
+
kind: "input",
|
|
1971
|
+
type: "Variant",
|
|
1972
|
+
required: false,
|
|
1973
|
+
default: "'primary'",
|
|
1974
|
+
description: "Style archetype from the theme. Inherited from BaseComponent."
|
|
1975
|
+
},
|
|
1976
|
+
{
|
|
1977
|
+
name: "size",
|
|
1978
|
+
kind: "input",
|
|
1979
|
+
type: "Size",
|
|
1980
|
+
required: false,
|
|
1981
|
+
default: "'lg'",
|
|
1982
|
+
description: "Size token from the theme. Inherited from BaseComponent. Only has an effect where the component theme defines a `sizes` block."
|
|
1983
|
+
}
|
|
1984
|
+
]
|
|
1985
|
+
}
|
|
1986
|
+
},
|
|
1987
|
+
examples: [],
|
|
1988
|
+
guidelines: {
|
|
1989
|
+
whenToUse: "",
|
|
1990
|
+
dos: [],
|
|
1991
|
+
donts: [],
|
|
1992
|
+
accessibility: []
|
|
1993
|
+
},
|
|
1994
|
+
relatedTokens: []
|
|
1995
|
+
},
|
|
1790
1996
|
{
|
|
1791
1997
|
id: "card-header",
|
|
1792
1998
|
name: "CardHeader",
|
|
@@ -1794,7 +2000,7 @@ var uni_index_default = {
|
|
|
1794
2000
|
summary: "",
|
|
1795
2001
|
description: "",
|
|
1796
2002
|
category: "layout",
|
|
1797
|
-
version: "11.
|
|
2003
|
+
version: "11.10.0",
|
|
1798
2004
|
bindings: {
|
|
1799
2005
|
angular: {
|
|
1800
2006
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1851,7 +2057,7 @@ var uni_index_default = {
|
|
|
1851
2057
|
summary: "",
|
|
1852
2058
|
description: "",
|
|
1853
2059
|
category: "layout",
|
|
1854
|
-
version: "11.
|
|
2060
|
+
version: "11.10.0",
|
|
1855
2061
|
bindings: {
|
|
1856
2062
|
angular: {
|
|
1857
2063
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1906,7 +2112,7 @@ var uni_index_default = {
|
|
|
1906
2112
|
summary: "",
|
|
1907
2113
|
description: "",
|
|
1908
2114
|
category: "forms",
|
|
1909
|
-
version: "11.
|
|
2115
|
+
version: "11.10.0",
|
|
1910
2116
|
bindings: {
|
|
1911
2117
|
angular: {
|
|
1912
2118
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2128,7 +2334,7 @@ var uni_index_default = {
|
|
|
2128
2334
|
summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
|
|
2129
2335
|
description: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select. Typing produces a draft \u2014 a filter, never a value; the value changes only when an option commits, `clear()` runs, or the model is written from outside. Select semantics, not search: a real label, a chevron, no magnifier, nothing submits. For short lists with no need to type, prefer `uni-select` \u2014 the value contract is identical, so swapping is a template-only change.",
|
|
2130
2336
|
category: "forms",
|
|
2131
|
-
version: "11.
|
|
2337
|
+
version: "11.10.0",
|
|
2132
2338
|
bindings: {
|
|
2133
2339
|
angular: {
|
|
2134
2340
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2430,7 +2636,7 @@ emptyText="No countries found"
|
|
|
2430
2636
|
summary: "",
|
|
2431
2637
|
description: "",
|
|
2432
2638
|
category: "feedback",
|
|
2433
|
-
version: "11.
|
|
2639
|
+
version: "11.10.0",
|
|
2434
2640
|
bindings: {
|
|
2435
2641
|
angular: {
|
|
2436
2642
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2477,7 +2683,7 @@ emptyText="No countries found"
|
|
|
2477
2683
|
summary: "Recipient field for picking people: removable chips, a text input, and a list of known contacts that opens on focus and narrows as the user types \u2014 each row drawn as a person (avatar, name, address, a trailing note).",
|
|
2478
2684
|
description: "Recipient field for picking people: removable chips, a text input, and a list of known contacts that opens on focus and narrows as the user types \u2014 each row drawn as a person (avatar, name, address, a trailing note). A thin composition of `uni-tag-input` with a mail client's manners baked in: ArrowDown walks the matches and Enter picks the active one, Backspace in an empty field removes the last person, and text that is neither a known contact nor a valid address stays in the field to be fixed (`rejected` says why). Reach for `uni-tag-input` itself when the tokens are not people.",
|
|
2479
2685
|
category: "forms",
|
|
2480
|
-
version: "11.
|
|
2686
|
+
version: "11.10.0",
|
|
2481
2687
|
bindings: {
|
|
2482
2688
|
angular: {
|
|
2483
2689
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2762,7 +2968,7 @@ emptyText="No countries found"
|
|
|
2762
2968
|
summary: "",
|
|
2763
2969
|
description: "",
|
|
2764
2970
|
category: "forms",
|
|
2765
|
-
version: "11.
|
|
2971
|
+
version: "11.10.0",
|
|
2766
2972
|
bindings: {
|
|
2767
2973
|
angular: {
|
|
2768
2974
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2858,10 +3064,10 @@ emptyText="No countries found"
|
|
|
2858
3064
|
id: "data-table",
|
|
2859
3065
|
name: "DataTable",
|
|
2860
3066
|
status: "stable",
|
|
2861
|
-
summary: "",
|
|
2862
|
-
description: "",
|
|
3067
|
+
summary: "Data grid over a `UniDatasource`: sortable headers, a leading selection column, and an expandable detail row per record.",
|
|
3068
|
+
description: "Data grid over a `UniDatasource`: sortable headers, a leading selection column, and an expandable detail row per record. Rows are addressed by the datasource's `rowId` where it has one \u2014 so a selection survives a re-fetch that rebuilds the records, and the expanded row follows its record through a sort \u2014 and by reference (selection) or page index (expansion) where it has none.",
|
|
2863
3069
|
category: "data",
|
|
2864
|
-
version: "11.
|
|
3070
|
+
version: "11.10.0",
|
|
2865
3071
|
bindings: {
|
|
2866
3072
|
angular: {
|
|
2867
3073
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2881,13 +3087,36 @@ emptyText="No countries found"
|
|
|
2881
3087
|
required: true,
|
|
2882
3088
|
description: ""
|
|
2883
3089
|
},
|
|
3090
|
+
{
|
|
3091
|
+
name: "expanded",
|
|
3092
|
+
kind: "model",
|
|
3093
|
+
type: "RowKey | null",
|
|
3094
|
+
required: false,
|
|
3095
|
+
default: "null",
|
|
3096
|
+
description: "The expanded row, two-way: its `rowId` when the datasource has one, else its index on the page. `null` collapses every row. Keyed by id, a deep link can open a row before the records arrive, and a sort or a realtime reorder keeps the same record open."
|
|
3097
|
+
},
|
|
2884
3098
|
{
|
|
2885
3099
|
name: "useMultiSelect",
|
|
2886
3100
|
kind: "input",
|
|
2887
3101
|
type: "boolean",
|
|
2888
3102
|
required: false,
|
|
2889
3103
|
default: "false",
|
|
2890
|
-
description: ""
|
|
3104
|
+
description: "Draw a leading checkbox column over the datasource's `selections`: a header box that selects or clears every selectable row on the page (`indeterminate` while only some are), and a box per row."
|
|
3105
|
+
},
|
|
3106
|
+
{
|
|
3107
|
+
name: "selectAllLabel",
|
|
3108
|
+
kind: "input",
|
|
3109
|
+
type: "string",
|
|
3110
|
+
required: false,
|
|
3111
|
+
default: "'Select all rows'",
|
|
3112
|
+
description: "Accessible name of the header checkbox."
|
|
3113
|
+
},
|
|
3114
|
+
{
|
|
3115
|
+
name: "selectionChange",
|
|
3116
|
+
kind: "output",
|
|
3117
|
+
type: "T[]",
|
|
3118
|
+
required: false,
|
|
3119
|
+
description: "The datasource's selection after a checkbox changed it \u2014 the same array `selections()` holds."
|
|
2891
3120
|
},
|
|
2892
3121
|
{
|
|
2893
3122
|
name: "useRowClick",
|
|
@@ -3097,6 +3326,44 @@ emptyText="No countries found"
|
|
|
3097
3326
|
base[1]
|
|
3098
3327
|
]"
|
|
3099
3328
|
/>`
|
|
3329
|
+
},
|
|
3330
|
+
{
|
|
3331
|
+
title: "Selection",
|
|
3332
|
+
framework: "angular",
|
|
3333
|
+
code: `<!-- Storybook story: Selection -->
|
|
3334
|
+
<uni-data-table
|
|
3335
|
+
[datasource]="datasource"
|
|
3336
|
+
[columns]="columns"
|
|
3337
|
+
[useMultiSelect]="true"
|
|
3338
|
+
[selectableWhen]="selectable"
|
|
3339
|
+
[useRowClick]="false"
|
|
3340
|
+
[selectLabel]="selectLabelOf"
|
|
3341
|
+
(selectionChange)="selected = $event"
|
|
3342
|
+
/>
|
|
3343
|
+
<p uni-text="body-2">Selected: {{ selected.length ? (selected | json) : 'nothing' }}</p>`
|
|
3344
|
+
},
|
|
3345
|
+
{
|
|
3346
|
+
title: "Expanded Row",
|
|
3347
|
+
framework: "angular",
|
|
3348
|
+
code: `<!-- Storybook story: Expanded Row -->
|
|
3349
|
+
<div row-layout gap="sm" alignItems="center" paddingBottom="sm">
|
|
3350
|
+
<button text-button size="sm" variant="secondary" (click)="expanded = 'po-104'">Open po-104</button>
|
|
3351
|
+
<button text-button size="sm" variant="ghost" (click)="expanded = null">Collapse</button>
|
|
3352
|
+
<span uni-text="body-2">Expanded: {{ expanded ?? 'none' }}</span>
|
|
3353
|
+
</div>
|
|
3354
|
+
<uni-data-table
|
|
3355
|
+
[datasource]="datasource"
|
|
3356
|
+
[columns]="columns"
|
|
3357
|
+
[detailRowTemplate]="detail"
|
|
3358
|
+
[(expanded)]="expanded"
|
|
3359
|
+
[expandableWhen]="expandable"
|
|
3360
|
+
[rowClass]="dim"
|
|
3361
|
+
/>
|
|
3362
|
+
<ng-template #detail let-row>
|
|
3363
|
+
<div box-layout padding="md" uni-text="body-2-long">
|
|
3364
|
+
{{ row.item }} from {{ row.vendor }} \u2014 tracking and notes would go here.
|
|
3365
|
+
</div>
|
|
3366
|
+
</ng-template>`
|
|
3100
3367
|
}
|
|
3101
3368
|
],
|
|
3102
3369
|
guidelines: {
|
|
@@ -3106,7 +3373,8 @@ emptyText="No countries found"
|
|
|
3106
3373
|
accessibility: [
|
|
3107
3374
|
'Column headers use `scope="col"`; sortable headers are real buttons with `aria-sort` on the `<th>`. A `sortable: false` column is a plain heading with neither.',
|
|
3108
3375
|
'The loading overlay is a `role="status"` region and the table is `aria-busy` while loading.',
|
|
3109
|
-
"Collapsed detail rows are `inert`, out of the accessibility tree until expanded
|
|
3376
|
+
"Collapsed detail rows are `inert`, out of the accessibility tree until expanded; a row with a detail carries `aria-expanded`.",
|
|
3377
|
+
'Selection boxes are real `uni-checkbox`es named without drawing \u2014 "Select row" and "Select all rows" by default, or per row through `selectLabel` \u2014 and a box is its own control: a click or Space on it is never the row\'s click.'
|
|
3110
3378
|
]
|
|
3111
3379
|
},
|
|
3112
3380
|
relatedTokens: []
|
|
@@ -3118,7 +3386,7 @@ emptyText="No countries found"
|
|
|
3118
3386
|
summary: "Date field with free-typed parsing and a popup calendar.",
|
|
3119
3387
|
description: "Date field with free-typed parsing and a popup calendar. Type `aug 20`, `8/20/2026` or `2026-08-20`, or pick from the grid \u2014 the form gets the same canonical `'YYYY-MM-DD'` string either way. Parsing is `Intl`-driven (locale digit order and month names, never hardcoded); unreadable text stays in the field, flagged, with a `rejected` event. The popup is a native popover hosting the same `uni-calendar` an app could render inline.",
|
|
3120
3388
|
category: "forms",
|
|
3121
|
-
version: "11.
|
|
3389
|
+
version: "11.10.0",
|
|
3122
3390
|
bindings: {
|
|
3123
3391
|
angular: {
|
|
3124
3392
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3349,7 +3617,7 @@ emptyText="No countries found"
|
|
|
3349
3617
|
summary: "One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value.",
|
|
3350
3618
|
description: "One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value. The value emits only when both parts are set \u2014 a time without a day is not an answer \u2014 and clearing the date clears it. With `slotsFor`, the time part stays disabled until a day is chosen and offers exactly that day's slots: the scheduling flow in one attribute. Two honest tab stops (it is two questions); apps needing a different arrangement compose the primitives directly.",
|
|
3351
3619
|
category: "forms",
|
|
3352
|
-
version: "11.
|
|
3620
|
+
version: "11.10.0",
|
|
3353
3621
|
bindings: {
|
|
3354
3622
|
angular: {
|
|
3355
3623
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3542,7 +3810,7 @@ emptyText="No countries found"
|
|
|
3542
3810
|
summary: "Text input that emits `change` only after the user pauses typing.",
|
|
3543
3811
|
description: "Text input that emits `change` only after the user pauses typing. Wears the shared input chrome (themed color, border, typeface, focus ring) via `uni-input-box`; project adornments with the `pre-input` / `post-input` slots, matching `uni-input`'s convention. The ARIA passthrough inputs let a wrapping composite (e.g. SearchInput's combobox) annotate the real input element.",
|
|
3544
3812
|
category: "forms",
|
|
3545
|
-
version: "11.
|
|
3813
|
+
version: "11.10.0",
|
|
3546
3814
|
bindings: {
|
|
3547
3815
|
angular: {
|
|
3548
3816
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3690,7 +3958,7 @@ emptyText="No countries found"
|
|
|
3690
3958
|
summary: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`.",
|
|
3691
3959
|
description: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`. **The surface is never the scroll container.** It is a flex column that is `overflow: clip` on both axes; the header and buttons pin while only the body row scrolls. Unlike the drawer, which is deliberately viewport-tall, the dialog stays content-sized: it has no `height`, and grows until it hits `calc(100dvh - 2 x inset)` \u2014 the point at which the body starts to scroll. The theme's `padding` insets all three rows (which is what makes the default header read as a pill floating inside the surface); `bodyPadding` pads the scrolling row alone.",
|
|
3692
3960
|
category: "feedback",
|
|
3693
|
-
version: "11.
|
|
3961
|
+
version: "11.10.0",
|
|
3694
3962
|
bindings: {
|
|
3695
3963
|
angular: {
|
|
3696
3964
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3860,7 +4128,7 @@ uni-dialog
|
|
|
3860
4128
|
summary: "The dialog's pinned footer action row.",
|
|
3861
4129
|
description: "The dialog's pinned footer action row. Empty, it renders a Confirm/Cancel pair wired to the dialog. Project your own buttons and they replace the pair while keeping the row's chrome \u2014 padding, gap, justification, divider, `stretch` and `reverseOrder`. A `[dialog-footnote]` projects on the leading edge, pushing the actions to the trailing one.",
|
|
3862
4130
|
category: "feedback",
|
|
3863
|
-
version: "11.
|
|
4131
|
+
version: "11.10.0",
|
|
3864
4132
|
bindings: {
|
|
3865
4133
|
angular: {
|
|
3866
4134
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3978,9 +4246,9 @@ uni-dialog
|
|
|
3978
4246
|
name: "DialogHeader",
|
|
3979
4247
|
status: "stable",
|
|
3980
4248
|
summary: "The dialog's pinned header row, in one of two shapes: - **Title bar** (default): one line of text, set in the theme's `textRole` and aligned by `textAlign`, beside a close button.",
|
|
3981
|
-
description: "The dialog's pinned header row, in one of two shapes: - **Title bar** (default): one line of text, set in the theme's `textRole` and aligned by `textAlign`, beside a close button. - **Rich** (`rich`): the projection is rendered as a block \u2014 an eyebrow, a headline, a blurb \u2014 beside the close button, in its own `richColor` and `richPadding`. Mark the headline `[dialog-title]` so it alone names the dialog.",
|
|
4249
|
+
description: "The dialog's pinned header row, in one of two shapes: - **Title bar** (default): one line of text, set in the theme's `textRole` and aligned by `textAlign`, beside a close button. - **Rich** (`rich`): the projection is rendered as a block \u2014 an eyebrow, a headline, a blurb \u2014 beside the close button, in its own `richColor` and `richPadding`. Mark the headline `[dialog-title]` so it alone names the dialog. The close button follows the dialog's `defaultCloseButton`: a sheet that closes from its footer says `[defaultCloseButton]=\"false\"` once and gets no X here either.",
|
|
3982
4250
|
category: "feedback",
|
|
3983
|
-
version: "11.
|
|
4251
|
+
version: "11.10.0",
|
|
3984
4252
|
bindings: {
|
|
3985
4253
|
angular: {
|
|
3986
4254
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4027,9 +4295,9 @@ uni-dialog
|
|
|
4027
4295
|
name: "DialogTitle",
|
|
4028
4296
|
status: "stable",
|
|
4029
4297
|
summary: "Marks the element that names the dialog inside a rich `[dialog-header]`.",
|
|
4030
|
-
description: "Marks the element that names the dialog inside a rich `[dialog-header]`. A rich head projects an eyebrow, a headline and a blurb; the dialog should be labelled by the headline alone, not read all three as its name. Put this on the headline and
|
|
4298
|
+
description: "Marks the element that names the dialog inside a rich `[dialog-header]`. A rich head projects an eyebrow, a headline and a blurb; the dialog should be labelled by the headline alone, not read all three as its name. Put this on the headline and the dialog's `aria-labelledby` points at it \u2014 through the id it already has, or the dialog's title id when it has none. Projected through a wrapper component the directive cannot reach the dialog; the header then finds the marked element in the DOM instead.",
|
|
4031
4299
|
category: "feedback",
|
|
4032
|
-
version: "11.
|
|
4300
|
+
version: "11.10.0",
|
|
4033
4301
|
bindings: {
|
|
4034
4302
|
angular: {
|
|
4035
4303
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4053,7 +4321,7 @@ uni-dialog
|
|
|
4053
4321
|
summary: "",
|
|
4054
4322
|
description: "",
|
|
4055
4323
|
category: "layout",
|
|
4056
|
-
version: "11.
|
|
4324
|
+
version: "11.10.0",
|
|
4057
4325
|
bindings: {
|
|
4058
4326
|
angular: {
|
|
4059
4327
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4109,7 +4377,7 @@ uni-dialog
|
|
|
4109
4377
|
summary: "",
|
|
4110
4378
|
description: "",
|
|
4111
4379
|
category: "directives",
|
|
4112
|
-
version: "11.
|
|
4380
|
+
version: "11.10.0",
|
|
4113
4381
|
bindings: {
|
|
4114
4382
|
angular: {
|
|
4115
4383
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4141,7 +4409,7 @@ uni-dialog
|
|
|
4141
4409
|
summary: "Drawer with two modes sharing one three-row layout: - `side` \u2014 an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page.",
|
|
4142
4410
|
description: 'Drawer with two modes sharing one three-row layout: - `side` \u2014 an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page. - `over` \u2014 a native `<dialog>` in the top layer: focus trap, Escape and scrim backdrop come from the platform (same machinery as `uni-dialog`), sliding in from its edge. With `modal` off it is shown as a `popover="manual"` instead: still the top layer, but no focus trap, no inert page and no backdrop \u2014 a workbench beside a live document. **The panel is never the scroll container.** It is a flex column of three rows \u2014 an optional `[uni-drawer-header]`, the projected body, an optional `[uni-drawer-buttons]` \u2014 and only the body scrolls. The panel itself is `overflow: clip` on both axes. That is what lets a header and a save bar pin while a long form scrolls between them, and it is why the theme\'s `padding` option lands on the body row rather than the panel: padding on a scrolling box scrolls away with its content. Surface, width, divider, elevation, padding, backdrop, scrim and background all resolve from `drawer` theme tokens.',
|
|
4143
4411
|
category: "components",
|
|
4144
|
-
version: "11.
|
|
4412
|
+
version: "11.10.0",
|
|
4145
4413
|
bindings: {
|
|
4146
4414
|
angular: {
|
|
4147
4415
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4371,7 +4639,7 @@ initialFocus="input"
|
|
|
4371
4639
|
summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
|
|
4372
4640
|
description: "The drawer's pinned footer action row \u2014 the save bar of an editor panel. Sits outside the scrolling body, so the actions stay reachable however long the form is. Mirrors `[dialog-buttons]`; the difference is posture, which lives in the `drawerButtons` theme options rather than here. Empty, it renders a Cancel/Save pair wired to the drawer. Project your own buttons and they replace the pair while keeping the row's chrome; a `[drawer-footnote]` projects on the leading edge.",
|
|
4373
4641
|
category: "primitives",
|
|
4374
|
-
version: "11.
|
|
4642
|
+
version: "11.10.0",
|
|
4375
4643
|
bindings: {
|
|
4376
4644
|
angular: {
|
|
4377
4645
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4476,7 +4744,7 @@ initialFocus="input"
|
|
|
4476
4744
|
summary: "The drawer's pinned header row: a title, and optionally a close button.",
|
|
4477
4745
|
description: "The drawer's pinned header row: a title, and optionally a close button. Sits outside the scrolling body, so it stays put while the form beneath it moves. Reached either by projecting it \u2014 `<div uni-drawer-header>` \u2014 or implicitly, by giving `uni-drawer` a `headline`, in which case the drawer renders one of these itself.",
|
|
4478
4746
|
category: "components",
|
|
4479
|
-
version: "11.
|
|
4747
|
+
version: "11.10.0",
|
|
4480
4748
|
bindings: {
|
|
4481
4749
|
angular: {
|
|
4482
4750
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4524,7 +4792,7 @@ initialFocus="input"
|
|
|
4524
4792
|
summary: "",
|
|
4525
4793
|
description: "",
|
|
4526
4794
|
category: "components",
|
|
4527
|
-
version: "11.
|
|
4795
|
+
version: "11.10.0",
|
|
4528
4796
|
bindings: {
|
|
4529
4797
|
angular: {
|
|
4530
4798
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4658,7 +4926,7 @@ initialFocus="input"
|
|
|
4658
4926
|
summary: "",
|
|
4659
4927
|
description: "",
|
|
4660
4928
|
category: "layout",
|
|
4661
|
-
version: "11.
|
|
4929
|
+
version: "11.10.0",
|
|
4662
4930
|
bindings: {
|
|
4663
4931
|
angular: {
|
|
4664
4932
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4765,7 +5033,7 @@ initialFocus="input"
|
|
|
4765
5033
|
summary: "",
|
|
4766
5034
|
description: "",
|
|
4767
5035
|
category: "layout",
|
|
4768
|
-
version: "11.
|
|
5036
|
+
version: "11.10.0",
|
|
4769
5037
|
bindings: {
|
|
4770
5038
|
angular: {
|
|
4771
5039
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4836,7 +5104,7 @@ initialFocus="input"
|
|
|
4836
5104
|
summary: "Trigger for a {@link UniExpandComponent} region.",
|
|
4837
5105
|
description: "Trigger for a {@link UniExpandComponent} region. Two shapes, chosen by whether `label` is set: - **Icon only** (default) \u2014 the bare chevron, sized for a Card Header. - **Labelled** \u2014 chevron plus a label and optional muted sublabel, as a single full-width button. Most real disclosures need a name for the section, and building that row by hand is the thing this saves; it also makes the label the button's accessible name rather than adjacent text.",
|
|
4838
5106
|
category: "layout",
|
|
4839
|
-
version: "11.
|
|
5107
|
+
version: "11.10.0",
|
|
4840
5108
|
bindings: {
|
|
4841
5109
|
angular: {
|
|
4842
5110
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4921,7 +5189,7 @@ initialFocus="input"
|
|
|
4921
5189
|
summary: "",
|
|
4922
5190
|
description: "",
|
|
4923
5191
|
category: "forms",
|
|
4924
|
-
version: "11.
|
|
5192
|
+
version: "11.10.0",
|
|
4925
5193
|
bindings: {
|
|
4926
5194
|
angular: {
|
|
4927
5195
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5079,7 +5347,7 @@ initialFocus="input"
|
|
|
5079
5347
|
summary: "",
|
|
5080
5348
|
description: "",
|
|
5081
5349
|
category: "layout",
|
|
5082
|
-
version: "11.
|
|
5350
|
+
version: "11.10.0",
|
|
5083
5351
|
bindings: {
|
|
5084
5352
|
angular: {
|
|
5085
5353
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5176,7 +5444,7 @@ initialFocus="input"
|
|
|
5176
5444
|
summary: "",
|
|
5177
5445
|
description: "",
|
|
5178
5446
|
category: "layout",
|
|
5179
|
-
version: "11.
|
|
5447
|
+
version: "11.10.0",
|
|
5180
5448
|
bindings: {
|
|
5181
5449
|
angular: {
|
|
5182
5450
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5208,7 +5476,7 @@ initialFocus="input"
|
|
|
5208
5476
|
summary: "",
|
|
5209
5477
|
description: "",
|
|
5210
5478
|
category: "primitives",
|
|
5211
|
-
version: "11.
|
|
5479
|
+
version: "11.10.0",
|
|
5212
5480
|
bindings: {
|
|
5213
5481
|
angular: {
|
|
5214
5482
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5268,7 +5536,7 @@ initialFocus="input"
|
|
|
5268
5536
|
summary: "",
|
|
5269
5537
|
description: "",
|
|
5270
5538
|
category: "primitives",
|
|
5271
|
-
version: "11.
|
|
5539
|
+
version: "11.10.0",
|
|
5272
5540
|
bindings: {
|
|
5273
5541
|
angular: {
|
|
5274
5542
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5381,7 +5649,7 @@ initialFocus="input"
|
|
|
5381
5649
|
summary: "A button that lives inside a sentence.",
|
|
5382
5650
|
description: "A button that lives inside a sentence. Every other button in the library owns a box. Even `ghost` is a flex box with a hit area, horizontal padding and a type scale of its own, so dropping one into a sentence takes it out of the run of text entirely. This one inherits that type \u2014 family, size, weight, line height and colour \u2014 and adds no padding, so a paragraph reads as one continuous run with an action in the middle of it. It is always a real `<button>`: it can *look* like a link (`underline`, `link`) without claiming to be navigation, so Enter and Space activate it and assistive tech announces a button rather than an unfollowable link. A glyph may sit alongside the label without disturbing that: it is sized in `em`, so it scales with the type it lands in rather than pinning a px size into someone else's paragraph. One limit comes from the element itself. Browsers blockify a `<button>` to `inline-block` whatever `display` it asks for, so the control is an atomic inline box: its own label wraps inside it, but the run cannot split across a line break the way the words around it do. `display: contents` would buy that at the cost of the button being focusable at all, which is not a trade worth making \u2014 keep labels to a few words, which is what an inline action wants anyway.",
|
|
5383
5651
|
category: "primitives",
|
|
5384
|
-
version: "11.
|
|
5652
|
+
version: "11.10.0",
|
|
5385
5653
|
bindings: {
|
|
5386
5654
|
angular: {
|
|
5387
5655
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5496,7 +5764,7 @@ initialFocus="input"
|
|
|
5496
5764
|
summary: "",
|
|
5497
5765
|
description: "",
|
|
5498
5766
|
category: "forms",
|
|
5499
|
-
version: "11.
|
|
5767
|
+
version: "11.10.0",
|
|
5500
5768
|
bindings: {
|
|
5501
5769
|
angular: {
|
|
5502
5770
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5796,7 +6064,7 @@ initialFocus="input"
|
|
|
5796
6064
|
summary: "",
|
|
5797
6065
|
description: "",
|
|
5798
6066
|
category: "forms",
|
|
5799
|
-
version: "11.
|
|
6067
|
+
version: "11.10.0",
|
|
5800
6068
|
bindings: {
|
|
5801
6069
|
angular: {
|
|
5802
6070
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5925,7 +6193,7 @@ initialFocus="input"
|
|
|
5925
6193
|
summary: "",
|
|
5926
6194
|
description: "",
|
|
5927
6195
|
category: "components",
|
|
5928
|
-
version: "11.
|
|
6196
|
+
version: "11.10.0",
|
|
5929
6197
|
bindings: {
|
|
5930
6198
|
angular: {
|
|
5931
6199
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5995,7 +6263,7 @@ initialFocus="input"
|
|
|
5995
6263
|
summary: "",
|
|
5996
6264
|
description: "",
|
|
5997
6265
|
category: "layout",
|
|
5998
|
-
version: "11.
|
|
6266
|
+
version: "11.10.0",
|
|
5999
6267
|
bindings: {
|
|
6000
6268
|
angular: {
|
|
6001
6269
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6099,7 +6367,7 @@ initialFocus="input"
|
|
|
6099
6367
|
summary: "",
|
|
6100
6368
|
description: "",
|
|
6101
6369
|
category: "layout",
|
|
6102
|
-
version: "11.
|
|
6370
|
+
version: "11.10.0",
|
|
6103
6371
|
bindings: {
|
|
6104
6372
|
angular: {
|
|
6105
6373
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6181,7 +6449,7 @@ initialFocus="input"
|
|
|
6181
6449
|
summary: "",
|
|
6182
6450
|
description: "",
|
|
6183
6451
|
category: "forms",
|
|
6184
|
-
version: "11.
|
|
6452
|
+
version: "11.10.0",
|
|
6185
6453
|
bindings: {
|
|
6186
6454
|
angular: {
|
|
6187
6455
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6275,7 +6543,7 @@ initialFocus="input"
|
|
|
6275
6543
|
summary: "",
|
|
6276
6544
|
description: "",
|
|
6277
6545
|
category: "forms",
|
|
6278
|
-
version: "11.
|
|
6546
|
+
version: "11.10.0",
|
|
6279
6547
|
bindings: {
|
|
6280
6548
|
angular: {
|
|
6281
6549
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6454,7 +6722,7 @@ initialFocus="input"
|
|
|
6454
6722
|
summary: "",
|
|
6455
6723
|
description: "",
|
|
6456
6724
|
category: "feedback",
|
|
6457
|
-
version: "11.
|
|
6725
|
+
version: "11.10.0",
|
|
6458
6726
|
bindings: {
|
|
6459
6727
|
angular: {
|
|
6460
6728
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6714,7 +6982,7 @@ initialFocus="input"
|
|
|
6714
6982
|
summary: "",
|
|
6715
6983
|
description: "",
|
|
6716
6984
|
category: "feedback",
|
|
6717
|
-
version: "11.
|
|
6985
|
+
version: "11.10.0",
|
|
6718
6986
|
bindings: {
|
|
6719
6987
|
angular: {
|
|
6720
6988
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6738,7 +7006,7 @@ initialFocus="input"
|
|
|
6738
7006
|
summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
|
|
6739
7007
|
description: 'Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat. Not `<input type="number">`, and the first reason is a data-loss bug: per the HTML value sanitization algorithm, a number input whose text is not a valid floating-point number reports `value === \'\'`. Type `12,50` as most of Europe does, or paste `1,234.56` from a spreadsheet, and the app reads an empty field. This is `type="text"` with `role="spinbutton"`, which is the only way to keep the user\'s malformed text on screen and tell them about it. Chrome comes from `uni-input-box`, so error, disabled and focus states match every other field. All arithmetic runs on the cdk\'s exact decimal helpers.',
|
|
6740
7008
|
category: "forms",
|
|
6741
|
-
version: "11.
|
|
7009
|
+
version: "11.10.0",
|
|
6742
7010
|
bindings: {
|
|
6743
7011
|
angular: {
|
|
6744
7012
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7172,7 +7440,7 @@ initialFocus="input"
|
|
|
7172
7440
|
summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
|
|
7173
7441
|
description: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances. `start`/`end` deliberately match `UniDateRange`, so the library has one range vocabulary, and they avoid colliding with the `min`/`max` **inputs**, which mean the fence rather than the value. It owns its commit path rather than nesting two `uni-number-input`s, because the two behaviours the spec asks for need *different* bounds: a stepper must be fenced at the other end, while a typed commit must reach the parent un-clamped so a backwards range can be swapped instead of destroyed. A child field applies one bound pair to both. The arithmetic, parsing and formatting are still the cdk's, shared with every other numeric control.",
|
|
7174
7442
|
category: "forms",
|
|
7175
|
-
version: "11.
|
|
7443
|
+
version: "11.10.0",
|
|
7176
7444
|
bindings: {
|
|
7177
7445
|
angular: {
|
|
7178
7446
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7463,7 +7731,7 @@ initialFocus="input"
|
|
|
7463
7731
|
summary: "",
|
|
7464
7732
|
description: "",
|
|
7465
7733
|
category: "data",
|
|
7466
|
-
version: "11.
|
|
7734
|
+
version: "11.10.0",
|
|
7467
7735
|
bindings: {
|
|
7468
7736
|
angular: {
|
|
7469
7737
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7564,7 +7832,7 @@ initialFocus="input"
|
|
|
7564
7832
|
summary: "Anchored, top-layer panel on the native `popover` element \u2014 the browser owns positioning (CSS anchor positioning), stacking, and, in rich mode, light dismissal.",
|
|
7565
7833
|
description: 'Anchored, top-layer panel on the native `popover` element \u2014 the browser owns positioning (CSS anchor positioning), stacking, and, in rich mode, light dismissal. Two modes share one implementation: - `rich` (default): a click-toggled disclosure. The projected `[trigger]` carries `aria-expanded`/`aria-controls`; with no trigger content the app drives `open` and no element claims controller ARIA. Focus stays on the trigger (APG disclosure) unless the panel marks an `[autofocus]` field, and returns to the trigger on close. - `tooltip`: hover/focus-triggered, `role="tooltip"` + `aria-describedby`, WCAG 1.4.13 dismissable/hoverable/persistent. Content must not contain focusable elements. Anchoring and control are separate: `anchor` re-anchors the panel to any element (or id) while the trigger keeps the disclosure semantics.',
|
|
7566
7834
|
category: "layout",
|
|
7567
|
-
version: "11.
|
|
7835
|
+
version: "11.10.0",
|
|
7568
7836
|
bindings: {
|
|
7569
7837
|
angular: {
|
|
7570
7838
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7756,7 +8024,7 @@ initialFocus="input"
|
|
|
7756
8024
|
summary: "",
|
|
7757
8025
|
description: "",
|
|
7758
8026
|
category: "feedback",
|
|
7759
|
-
version: "11.
|
|
8027
|
+
version: "11.10.0",
|
|
7760
8028
|
bindings: {
|
|
7761
8029
|
angular: {
|
|
7762
8030
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7820,7 +8088,7 @@ initialFocus="input"
|
|
|
7820
8088
|
summary: "",
|
|
7821
8089
|
description: "",
|
|
7822
8090
|
category: "feedback",
|
|
7823
|
-
version: "11.
|
|
8091
|
+
version: "11.10.0",
|
|
7824
8092
|
bindings: {
|
|
7825
8093
|
angular: {
|
|
7826
8094
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7892,7 +8160,7 @@ initialFocus="input"
|
|
|
7892
8160
|
summary: "`\u2212 3 +` for cart lines, table cells and seat counts: the numeric core with no field chrome, no label and no room for either.",
|
|
7893
8161
|
description: '`\u2212 3 +` for cart lines, table cells and seat counts: the numeric core with no field chrome, no label and no room for either. A separate component rather than a `chrome="bare"` flag on `uni-number-input`, because this control is defined by what it does *not* have \u2014 presets, affixes, expressions, four stepper layouts \u2014 and eight inputs are easier to write correctly than forty with a list of which ones to leave alone. The arithmetic, parsing and hold-to-repeat are the cdk\'s, shared with the field, so `1,200` and the keyboard map behave identically in both. The middle stays a real input by default: typing `12` beats tapping `+` eleven times. `editable=false` is for read-mostly tables.',
|
|
7894
8162
|
category: "forms",
|
|
7895
|
-
version: "11.
|
|
8163
|
+
version: "11.10.0",
|
|
7896
8164
|
bindings: {
|
|
7897
8165
|
angular: {
|
|
7898
8166
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8095,7 +8363,7 @@ initialFocus="input"
|
|
|
8095
8363
|
summary: "",
|
|
8096
8364
|
description: "",
|
|
8097
8365
|
category: "forms",
|
|
8098
|
-
version: "11.
|
|
8366
|
+
version: "11.10.0",
|
|
8099
8367
|
bindings: {
|
|
8100
8368
|
angular: {
|
|
8101
8369
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8324,7 +8592,7 @@ initialFocus="input"
|
|
|
8324
8592
|
summary: "Content for each of a radio group's options, in place of the plain label string.",
|
|
8325
8593
|
description: 'Content for each of a radio group\'s options, in place of the plain label string. A group renders N labels from an `options` array, so it cannot take `<ng-content />` the way `uni-checkbox` and `uni-toggle` do \u2014 there is no single slot to project into. A template is the shape that survives the repetition: it is instantiated once per option and handed that option, so a row can carry a description, a price or a badge and still be part of the `<label>` that drives the input. ```html <uni-radio [options]="plans"> <ng-template uniRadioOption let-option> <span uni-text="body-2-long">{{ option.label }}</span> </ng-template> </uni-radio> ```',
|
|
8326
8594
|
category: "forms",
|
|
8327
|
-
version: "11.
|
|
8595
|
+
version: "11.10.0",
|
|
8328
8596
|
bindings: {
|
|
8329
8597
|
angular: {
|
|
8330
8598
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8348,7 +8616,7 @@ initialFocus="input"
|
|
|
8348
8616
|
summary: "",
|
|
8349
8617
|
description: "",
|
|
8350
8618
|
category: "directives",
|
|
8351
|
-
version: "11.
|
|
8619
|
+
version: "11.10.0",
|
|
8352
8620
|
bindings: {
|
|
8353
8621
|
angular: {
|
|
8354
8622
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8372,7 +8640,7 @@ initialFocus="input"
|
|
|
8372
8640
|
summary: "",
|
|
8373
8641
|
description: "",
|
|
8374
8642
|
category: "layout",
|
|
8375
|
-
version: "11.
|
|
8643
|
+
version: "11.10.0",
|
|
8376
8644
|
bindings: {
|
|
8377
8645
|
angular: {
|
|
8378
8646
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8427,7 +8695,7 @@ initialFocus="input"
|
|
|
8427
8695
|
summary: "Native scroll area with theme-driven scrollbar styling.",
|
|
8428
8696
|
description: "Native scroll area with theme-driven scrollbar styling. Scrollbars are styled entirely through Emotion-generated CSS: `::-webkit-scrollbar` rules cover Chromium/Safari, with a `scrollbar-width`/`scrollbar-color` fallback for Firefox.",
|
|
8429
8697
|
category: "layout",
|
|
8430
|
-
version: "11.
|
|
8698
|
+
version: "11.10.0",
|
|
8431
8699
|
bindings: {
|
|
8432
8700
|
angular: {
|
|
8433
8701
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8594,7 +8862,7 @@ initialFocus="input"
|
|
|
8594
8862
|
summary: "Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead \u2014 pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox.",
|
|
8595
8863
|
description: "Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead \u2014 pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox. Escape closes the list first, then clears the query.",
|
|
8596
8864
|
category: "forms",
|
|
8597
|
-
version: "11.
|
|
8865
|
+
version: "11.10.0",
|
|
8598
8866
|
bindings: {
|
|
8599
8867
|
angular: {
|
|
8600
8868
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8729,7 +8997,7 @@ initialFocus="input"
|
|
|
8729
8997
|
summary: "",
|
|
8730
8998
|
description: "",
|
|
8731
8999
|
category: "forms",
|
|
8732
|
-
version: "11.
|
|
9000
|
+
version: "11.10.0",
|
|
8733
9001
|
bindings: {
|
|
8734
9002
|
angular: {
|
|
8735
9003
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8901,7 +9169,7 @@ initialFocus="input"
|
|
|
8901
9169
|
summary: "Loading placeholder painted with surface tokens.",
|
|
8902
9170
|
description: "Loading placeholder painted with surface tokens. `text` renders one or more lines (the last line shortened, as real text would be), `rect` and `circle` render fixed shapes. The shimmer only animates when the user allows motion; it degrades to static blocks under `prefers-reduced-motion`. Color and radius are theme options with per-instance overrides, because one app routinely needs several: skeletons on a card and on the page background want different tints, and a pill placeholder wants a different corner than the text bars beside it.",
|
|
8903
9171
|
category: "components",
|
|
8904
|
-
version: "11.
|
|
9172
|
+
version: "11.10.0",
|
|
8905
9173
|
bindings: {
|
|
8906
9174
|
angular: {
|
|
8907
9175
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9052,7 +9320,7 @@ initialFocus="input"
|
|
|
9052
9320
|
summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
|
|
9053
9321
|
description: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters. Custom thumbs rather than `<input type=\"range\">`, which the previous version used: one native range input cannot carry two thumbs, marks or a tooltip, and a second component for the range case would mean two keyboard maps to keep in step. The step model and the keyboard map are the cdk's, shared with the numeric fields, so nothing new is learned moving between them. All arithmetic on values runs through the cdk's exact decimal helpers \u2014 stepping `0.1` never yields `0.30000000000000004`. Only pointer *positions* use floats, and they are snapped to the grid before becoming a value.",
|
|
9054
9322
|
category: "forms",
|
|
9055
|
-
version: "11.
|
|
9323
|
+
version: "11.10.0",
|
|
9056
9324
|
bindings: {
|
|
9057
9325
|
angular: {
|
|
9058
9326
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9329,7 +9597,7 @@ initialFocus="input"
|
|
|
9329
9597
|
summary: "",
|
|
9330
9598
|
description: "",
|
|
9331
9599
|
category: "feedback",
|
|
9332
|
-
version: "11.
|
|
9600
|
+
version: "11.10.0",
|
|
9333
9601
|
bindings: {
|
|
9334
9602
|
angular: {
|
|
9335
9603
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9441,7 +9709,7 @@ initialFocus="input"
|
|
|
9441
9709
|
summary: "",
|
|
9442
9710
|
description: "",
|
|
9443
9711
|
category: "data",
|
|
9444
|
-
version: "11.
|
|
9712
|
+
version: "11.10.0",
|
|
9445
9713
|
bindings: {
|
|
9446
9714
|
angular: {
|
|
9447
9715
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9515,7 +9783,7 @@ initialFocus="input"
|
|
|
9515
9783
|
summary: "",
|
|
9516
9784
|
description: "",
|
|
9517
9785
|
category: "layout",
|
|
9518
|
-
version: "11.
|
|
9786
|
+
version: "11.10.0",
|
|
9519
9787
|
bindings: {
|
|
9520
9788
|
angular: {
|
|
9521
9789
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9570,7 +9838,7 @@ initialFocus="input"
|
|
|
9570
9838
|
summary: 'KPI stat tile: muted label, large value (numbers auto-compact: 48234 \u2192 "48.2K"), an optional delta whose ink is decided by *direction \xD7 whether up is good* (never direction alone \u2014 churn going down is good news), and an optional decorative sparkline.',
|
|
9571
9839
|
description: 'KPI stat tile: muted label, large value (numbers auto-compact: 48234 \u2192 "48.2K"), an optional delta whose ink is decided by *direction \xD7 whether up is good* (never direction alone \u2014 churn going down is good news), and an optional decorative sparkline. Frame, typography and inks are all `stat` theme tokens.',
|
|
9572
9840
|
category: "components",
|
|
9573
|
-
version: "11.
|
|
9841
|
+
version: "11.10.0",
|
|
9574
9842
|
bindings: {
|
|
9575
9843
|
angular: {
|
|
9576
9844
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9688,7 +9956,7 @@ initialFocus="input"
|
|
|
9688
9956
|
summary: "",
|
|
9689
9957
|
description: "",
|
|
9690
9958
|
category: "primitives",
|
|
9691
|
-
version: "11.
|
|
9959
|
+
version: "11.10.0",
|
|
9692
9960
|
bindings: {
|
|
9693
9961
|
angular: {
|
|
9694
9962
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9777,7 +10045,7 @@ initialFocus="input"
|
|
|
9777
10045
|
summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
|
|
9778
10046
|
description: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content. Content is captured in a template and only instantiated while the tab is selected, so inactive panels cost nothing.",
|
|
9779
10047
|
category: "components",
|
|
9780
|
-
version: "11.
|
|
10048
|
+
version: "11.10.0",
|
|
9781
10049
|
bindings: {
|
|
9782
10050
|
angular: {
|
|
9783
10051
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9817,7 +10085,7 @@ initialFocus="input"
|
|
|
9817
10085
|
summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
|
|
9818
10086
|
description: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped. Only the selected panel is instantiated. All styling resolves from `tabs` theme option tokens. A tab switch is softened by the `panelMotion` option: the incoming content fades in while the panel animates from the outgoing content's height to its own. The new content is live from the first frame \u2014 nothing waits on the animation.",
|
|
9819
10087
|
category: "components",
|
|
9820
|
-
version: "11.
|
|
10088
|
+
version: "11.10.0",
|
|
9821
10089
|
bindings: {
|
|
9822
10090
|
angular: {
|
|
9823
10091
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9905,7 +10173,7 @@ initialFocus="input"
|
|
|
9905
10173
|
summary: "Compact chip for categories, states, filters and tokens.",
|
|
9906
10174
|
description: "Compact chip for categories, states, filters and tokens. Two orthogonal style axes: `variant` picks the colour role and `tone` picks the archetype (soft / solid / outline). Both live in the theme's `tag` entry, so a theme restyles every chip in the app without touching markup. Two state classes ride alongside the tone class for the same reason: `tag-selected` and `tag-interactive` let the theme paint selection and hover beside the colours they belong to, instead of an app swapping `tone` by hand on every chip. Structurally a chip is **body + trailing action as siblings**, never nested buttons: an interactive chip whose body is a `<button>` cannot contain the remove `<button>` (invalid HTML, and the inner control becomes unreachable for keyboard users). Both stay independently operable.",
|
|
9907
10175
|
category: "data",
|
|
9908
|
-
version: "11.
|
|
10176
|
+
version: "11.10.0",
|
|
9909
10177
|
bindings: {
|
|
9910
10178
|
angular: {
|
|
9911
10179
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10283,7 +10551,7 @@ initialFocus="input"
|
|
|
10283
10551
|
summary: "A row of chips the user picks from: filters, facets, a set of labels.",
|
|
10284
10552
|
description: "A row of chips the user picks from: filters, facets, a set of labels. The group **renders its own chips** from `items` rather than projecting them. That is what lets it own the things an app was otherwise wiring per chip \u2014 which one is selected, which one holds the tab stop \u2014 since a parent cannot write a projected child's inputs. `uni-tag` is unchanged by this component; `controlTabIndex` was already its hook for a composite that manages focus. Keyboard model is the toolbar pattern: one tab stop for the whole group, and the arrow keys move within it. Twelve filter chips should cost one Tab to pass, not twelve.",
|
|
10285
10553
|
category: "data",
|
|
10286
|
-
version: "11.
|
|
10554
|
+
version: "11.10.0",
|
|
10287
10555
|
bindings: {
|
|
10288
10556
|
angular: {
|
|
10289
10557
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10481,7 +10749,7 @@ initialFocus="input"
|
|
|
10481
10749
|
summary: "",
|
|
10482
10750
|
description: "",
|
|
10483
10751
|
category: "forms",
|
|
10484
|
-
version: "11.
|
|
10752
|
+
version: "11.10.0",
|
|
10485
10753
|
bindings: {
|
|
10486
10754
|
angular: {
|
|
10487
10755
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10932,7 +11200,7 @@ placeholder="Name or address\u2026"
|
|
|
10932
11200
|
summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
|
|
10933
11201
|
description: 'The typography primitive, applied as an attribute to any element so semantics stay yours. The attribute value is the typeface: `<h1 uni-text="display-small">`, `<span uni-text="caption">`, dynamic via `[uni-text]="role()"`. With no value, the typeface is inferred from the host element (h1 \u2192 headline-large, p \u2192 body-1-long, \u2026), falling back to `title-small`; the `typeface` input remains as an explicit override. It is a directive, so it stacks with anything else on the element \u2014 a layout attribute (`<div stack-layout uni-text="title-small">`) or a component\'s own host \u2014 rather than colliding with it.',
|
|
10934
11202
|
category: "primitives",
|
|
10935
|
-
version: "11.
|
|
11203
|
+
version: "11.10.0",
|
|
10936
11204
|
bindings: {
|
|
10937
11205
|
angular: {
|
|
10938
11206
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11042,7 +11310,7 @@ placeholder="Name or address\u2026"
|
|
|
11042
11310
|
summary: "",
|
|
11043
11311
|
description: "",
|
|
11044
11312
|
category: "forms",
|
|
11045
|
-
version: "11.
|
|
11313
|
+
version: "11.10.0",
|
|
11046
11314
|
bindings: {
|
|
11047
11315
|
angular: {
|
|
11048
11316
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11257,7 +11525,7 @@ placeholder="Name or address\u2026"
|
|
|
11257
11525
|
summary: "",
|
|
11258
11526
|
description: "",
|
|
11259
11527
|
category: "primitives",
|
|
11260
|
-
version: "11.
|
|
11528
|
+
version: "11.10.0",
|
|
11261
11529
|
bindings: {
|
|
11262
11530
|
angular: {
|
|
11263
11531
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11287,7 +11555,7 @@ placeholder="Name or address\u2026"
|
|
|
11287
11555
|
summary: "Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).",
|
|
11288
11556
|
description: "Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).",
|
|
11289
11557
|
category: "components",
|
|
11290
|
-
version: "11.
|
|
11558
|
+
version: "11.10.0",
|
|
11291
11559
|
bindings: {
|
|
11292
11560
|
angular: {
|
|
11293
11561
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11345,7 +11613,7 @@ placeholder="Name or address\u2026"
|
|
|
11345
11613
|
summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
|
|
11346
11614
|
description: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input. Type `3p`, `930` or `15:00`, or pick `3:00 PM` from the list; the form always gets 24-hour `'HH:mm'` (`hour12` affects display only). The list is assistive, not exhaustive: any parseable time commits, unless `slots` pins the choices (a slot picker) \u2014 then a typed time must match one. Unreadable or unavailable text stays in the field, flagged, with a `rejected` event.",
|
|
11347
11615
|
category: "forms",
|
|
11348
|
-
version: "11.
|
|
11616
|
+
version: "11.10.0",
|
|
11349
11617
|
bindings: {
|
|
11350
11618
|
angular: {
|
|
11351
11619
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11560,7 +11828,7 @@ placeholder="Name or address\u2026"
|
|
|
11560
11828
|
summary: "",
|
|
11561
11829
|
description: "",
|
|
11562
11830
|
category: "forms",
|
|
11563
|
-
version: "11.
|
|
11831
|
+
version: "11.10.0",
|
|
11564
11832
|
bindings: {
|
|
11565
11833
|
angular: {
|
|
11566
11834
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11822,7 +12090,7 @@ placeholder="Name or address\u2026"
|
|
|
11822
12090
|
summary: "",
|
|
11823
12091
|
description: "",
|
|
11824
12092
|
category: "feedback",
|
|
11825
|
-
version: "11.
|
|
12093
|
+
version: "11.10.0",
|
|
11826
12094
|
bindings: {
|
|
11827
12095
|
angular: {
|
|
11828
12096
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11910,7 +12178,7 @@ placeholder="Name or address\u2026"
|
|
|
11910
12178
|
summary: 'A thin sequencer over one `uni-callout`: steps spotlight their targets, a footer walks Next/Back with dots-or-fraction progress, and `advanceOn` gates a step behind an interaction with its target (auto-advancing for clicks, unlocking Next otherwise \u2014 announced through one `role="status"` region).',
|
|
11911
12179
|
description: 'A thin sequencer over one `uni-callout`: steps spotlight their targets, a footer walks Next/Back with dots-or-fraction progress, and `advanceOn` gates a step behind an interaction with its target (auto-advancing for clicks, unlocking Next otherwise \u2014 announced through one `role="status"` region). Escape or the close button skips the tour and reports the step. `active` is a two-way model, so a tour is deep-linkable and inspectable; steps whose declared target cannot be resolved are skipped (with a dev warning) in the direction of travel rather than erroring.',
|
|
11912
12180
|
category: "components",
|
|
11913
|
-
version: "11.
|
|
12181
|
+
version: "11.10.0",
|
|
11914
12182
|
bindings: {
|
|
11915
12183
|
angular: {
|
|
11916
12184
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -12044,7 +12312,7 @@ placeholder="Name or address\u2026"
|
|
|
12044
12312
|
summary: "",
|
|
12045
12313
|
description: "",
|
|
12046
12314
|
category: "layout",
|
|
12047
|
-
version: "11.
|
|
12315
|
+
version: "11.10.0",
|
|
12048
12316
|
bindings: {
|
|
12049
12317
|
angular: {
|
|
12050
12318
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -16806,6 +17074,54 @@ placeholder="Name or address\u2026"
|
|
|
16806
17074
|
DarkTheme: "xs"
|
|
16807
17075
|
}
|
|
16808
17076
|
},
|
|
17077
|
+
{
|
|
17078
|
+
id: "card.behavior.selectedBorder",
|
|
17079
|
+
value: "primary",
|
|
17080
|
+
type: "string",
|
|
17081
|
+
kind: "behavioral",
|
|
17082
|
+
target: "component-prop",
|
|
17083
|
+
appliesTo: "card",
|
|
17084
|
+
themeValues: {
|
|
17085
|
+
LightTheme: "primary",
|
|
17086
|
+
DarkTheme: "primary"
|
|
17087
|
+
}
|
|
17088
|
+
},
|
|
17089
|
+
{
|
|
17090
|
+
id: "card.behavior.selectedColor",
|
|
17091
|
+
value: "primary-container",
|
|
17092
|
+
type: "string",
|
|
17093
|
+
kind: "behavioral",
|
|
17094
|
+
target: "component-prop",
|
|
17095
|
+
appliesTo: "card",
|
|
17096
|
+
themeValues: {
|
|
17097
|
+
LightTheme: "primary-container",
|
|
17098
|
+
DarkTheme: "primary-container"
|
|
17099
|
+
}
|
|
17100
|
+
},
|
|
17101
|
+
{
|
|
17102
|
+
id: "cardGroup.behavior.gap",
|
|
17103
|
+
value: "md",
|
|
17104
|
+
type: "string",
|
|
17105
|
+
kind: "behavioral",
|
|
17106
|
+
target: "component-prop",
|
|
17107
|
+
appliesTo: "cardGroup",
|
|
17108
|
+
themeValues: {
|
|
17109
|
+
LightTheme: "md",
|
|
17110
|
+
DarkTheme: "md"
|
|
17111
|
+
}
|
|
17112
|
+
},
|
|
17113
|
+
{
|
|
17114
|
+
id: "cardGroup.behavior.templateColumns",
|
|
17115
|
+
value: "repeat(auto-fit, minmax(160px, 1fr))",
|
|
17116
|
+
type: "string",
|
|
17117
|
+
kind: "behavioral",
|
|
17118
|
+
target: "component-prop",
|
|
17119
|
+
appliesTo: "cardGroup",
|
|
17120
|
+
themeValues: {
|
|
17121
|
+
LightTheme: "repeat(auto-fit, minmax(160px, 1fr))",
|
|
17122
|
+
DarkTheme: "repeat(auto-fit, minmax(160px, 1fr))"
|
|
17123
|
+
}
|
|
17124
|
+
},
|
|
16809
17125
|
{
|
|
16810
17126
|
id: "dataSearch.behavior.border",
|
|
16811
17127
|
value: "light",
|
|
@@ -17118,6 +17434,30 @@ placeholder="Name or address\u2026"
|
|
|
17118
17434
|
DarkTheme: 40
|
|
17119
17435
|
}
|
|
17120
17436
|
},
|
|
17437
|
+
{
|
|
17438
|
+
id: "dataTable.behavior.selectionColumnWidth",
|
|
17439
|
+
value: 40,
|
|
17440
|
+
type: "number",
|
|
17441
|
+
kind: "behavioral",
|
|
17442
|
+
target: "component-prop",
|
|
17443
|
+
appliesTo: "dataTable",
|
|
17444
|
+
themeValues: {
|
|
17445
|
+
LightTheme: 40,
|
|
17446
|
+
DarkTheme: 40
|
|
17447
|
+
}
|
|
17448
|
+
},
|
|
17449
|
+
{
|
|
17450
|
+
id: "dataTable.behavior.selectionCheckboxSize",
|
|
17451
|
+
value: "sm",
|
|
17452
|
+
type: "string",
|
|
17453
|
+
kind: "behavioral",
|
|
17454
|
+
target: "component-prop",
|
|
17455
|
+
appliesTo: "dataTable",
|
|
17456
|
+
themeValues: {
|
|
17457
|
+
LightTheme: "sm",
|
|
17458
|
+
DarkTheme: "sm"
|
|
17459
|
+
}
|
|
17460
|
+
},
|
|
17121
17461
|
{
|
|
17122
17462
|
id: "notificationBadge.behavior.borderRadius",
|
|
17123
17463
|
value: "sm",
|
|
@@ -18588,7 +18928,13 @@ placeholder="Name or address\u2026"
|
|
|
18588
18928
|
gap: "xxs"
|
|
18589
18929
|
},
|
|
18590
18930
|
card: {
|
|
18591
|
-
borderRadius: "xs"
|
|
18931
|
+
borderRadius: "xs",
|
|
18932
|
+
selectedBorder: "primary",
|
|
18933
|
+
selectedColor: "primary-container"
|
|
18934
|
+
},
|
|
18935
|
+
cardGroup: {
|
|
18936
|
+
gap: "md",
|
|
18937
|
+
templateColumns: "repeat(auto-fit, minmax(160px, 1fr))"
|
|
18592
18938
|
},
|
|
18593
18939
|
dataSearch: {
|
|
18594
18940
|
border: "light",
|
|
@@ -18618,7 +18964,9 @@ placeholder="Name or address\u2026"
|
|
|
18618
18964
|
rowHoverColor: "primary-container",
|
|
18619
18965
|
loadingOverlayColor: "scrim",
|
|
18620
18966
|
loadingSpinnerColor: "primary",
|
|
18621
|
-
loadingSpinnerSize: 40
|
|
18967
|
+
loadingSpinnerSize: 40,
|
|
18968
|
+
selectionColumnWidth: 40,
|
|
18969
|
+
selectionCheckboxSize: "sm"
|
|
18622
18970
|
},
|
|
18623
18971
|
notificationBadge: {
|
|
18624
18972
|
borderRadius: "sm",
|
|
@@ -19222,7 +19570,13 @@ placeholder="Name or address\u2026"
|
|
|
19222
19570
|
gap: "xxs"
|
|
19223
19571
|
},
|
|
19224
19572
|
card: {
|
|
19225
|
-
borderRadius: "xs"
|
|
19573
|
+
borderRadius: "xs",
|
|
19574
|
+
selectedBorder: "primary",
|
|
19575
|
+
selectedColor: "primary-container"
|
|
19576
|
+
},
|
|
19577
|
+
cardGroup: {
|
|
19578
|
+
gap: "md",
|
|
19579
|
+
templateColumns: "repeat(auto-fit, minmax(160px, 1fr))"
|
|
19226
19580
|
},
|
|
19227
19581
|
dataSearch: {
|
|
19228
19582
|
border: "light",
|
|
@@ -19252,7 +19606,9 @@ placeholder="Name or address\u2026"
|
|
|
19252
19606
|
rowHoverColor: "primary-container",
|
|
19253
19607
|
loadingOverlayColor: "scrim",
|
|
19254
19608
|
loadingSpinnerColor: "primary",
|
|
19255
|
-
loadingSpinnerSize: 40
|
|
19609
|
+
loadingSpinnerSize: 40,
|
|
19610
|
+
selectionColumnWidth: 40,
|
|
19611
|
+
selectionCheckboxSize: "sm"
|
|
19256
19612
|
},
|
|
19257
19613
|
notificationBadge: {
|
|
19258
19614
|
borderRadius: "sm",
|
|
@@ -19365,6 +19721,30 @@ placeholder="Name or address\u2026"
|
|
|
19365
19721
|
{
|
|
19366
19722
|
package: "@uni-design-system/uni-angular",
|
|
19367
19723
|
releases: [
|
|
19724
|
+
{
|
|
19725
|
+
version: "11.10.0",
|
|
19726
|
+
entries: [
|
|
19727
|
+
{
|
|
19728
|
+
bump: "minor",
|
|
19729
|
+
title: "`uni-card` gains states a theme can paint, and `uni-card-group` makes a pick-one grid of them.",
|
|
19730
|
+
body: "- **The frame is an Emotion class**, no longer an inline `[style]`. An inline style outranks every class, so no theme rule could express a state. One thing to know: a consumer stylesheet that was silently losing to the card's inline frame will start winning. Nothing in the base or storybook themes moves.\n- **`selected`** and **`interactive`** inputs add `card-selected` and `card-interactive` to the frame \u2014 the contract `uni-tag` has had since 11.1 \u2014 and the `card` theme entry gains `selectedBorder` (`primary` by default), `selectedColor` (`primary-container` by default \u2014 every card already wears the primary frame under the base theme, so the fill is what makes a pick visible), `selectedElevation`, `hoverColor` and `focusRingColor` for the common case; a variant's own `&.card-selected` rule reaches it for anything else. An interactive card emits `activated` on click, Space or Enter, and leaves clicks on its own content's controls alone. `disabled` is read.\n- **`[dialog-header]` follow-ups** (`dialog-rich-head-followups-2026-10-22.md`): a `rich` head finds its `[dialog-title]` in the DOM, so a title projected _through_ a wrapper component's template \u2014 invisible to a content query, and unable to inject the dialog \u2014 still names the dialog alone; and with no marked title it defers to the dialog's own `ariaLabel` rather than naming a wrapped sheet by its whole head. The header's close button, in both shapes, follows the dialog's `defaultCloseButton`, as the drawer header's follows the drawer's \u2014 a sheet that closes from its footer says `[defaultCloseButton]=\"false\"` once. **`[dialog-buttons]`, `[drawer-buttons]`**: an `alignItems` theme option, default `center`, so a one-line footnote sits on the buttons' centre line instead of stretched to the row's top edge; the pair renders as before.\n- **`uni-card-group`** (new): a `role=\"radiogroup\"` over the `uni-card`s projected into it. Each card with a `value` becomes a `role=\"radio\"` whose selection and tab stop the group drives; a card without one is plain content. `FormValueControl<T | null>` (`value`, `disabled`, `touched`/`touch`, `invalid`, `dirty`, `required`, `ariaDescribedBy`), named by `ariaLabel` or `ariaLabelledBy`, `activated` on a pick. APG radio keyboard model: one tab stop, arrows move and select (wrapping), Home/End, Space or Enter. Laid out as a grid from `templateColumns` and `gap`, with defaults in the new `cardGroup` theme entry. Single-select; `multiple` is deliberately not here until a case asks for it.",
|
|
19731
|
+
commit: "c5ba475"
|
|
19732
|
+
}
|
|
19733
|
+
],
|
|
19734
|
+
dependencyBumps: []
|
|
19735
|
+
},
|
|
19736
|
+
{
|
|
19737
|
+
version: "11.9.0",
|
|
19738
|
+
entries: [
|
|
19739
|
+
{
|
|
19740
|
+
bump: "minor",
|
|
19741
|
+
title: "`uni-data-table` gains a real selection column and an id-keyed, bindable detail row; the datasources gain a row identity.",
|
|
19742
|
+
body: "- **`rowId` on the datasources** (`new UniRecordDatasource(rows, { rowId: (row) => row.id })`, also a third argument on `UniServerSideDatasource`, and settable afterwards): a stable identity for a row. Without one, rows are compared by reference, which never matches a row rebuilt from a fresh fetch \u2014 a realtime update that replaced the records emptied the selection. With one, `isSelected`, `toggleSelection` and the new `setSelected(rows, selected)` key by it, and so do the table's expanded row and its row tracking.\n- **`useMultiSelect`** is read now (it was declared and wired to nothing): a leading checkbox column over the datasource's own `selections` \u2014 a header box that selects or clears every selectable row on the page, `indeterminate` while only some are, and a box per row. `selectableWhen` keeps rows out of it (a disabled box, skipped by select-all); `selectLabel` and `selectAllLabel` name the boxes; `selectionChange` reports the datasource's selection after a box changed it. A box is its own control: a click on it is never the row's click. Theme options `selectionColumnWidth` (40), `selectionCheckboxSize` (`sm`) and `selectedRowColor` (unset: no tint).\n- **`expanded`**, a two-way model: the expanded row's `rowId`, or its page index when the datasource has none; `null` collapses all. A deep link can open a row before the records arrive, and a sort or re-fetch that reorders them keeps the same record open. **`expandableWhen`** names the rows that have a detail \u2014 the rest take no hover affordance and no `aria-expanded`, and a click on them only emits `rowClick`. **`rowClass`** adds a class per row. Rows with a detail carry `aria-expanded`.\n- `expandedIndex` is now a read-only computed of the open row's page index, **deprecated** in favour of `expanded`; `toggleRow(index)` still works. Removed in 12.0.",
|
|
19743
|
+
commit: "cfddc14"
|
|
19744
|
+
}
|
|
19745
|
+
],
|
|
19746
|
+
dependencyBumps: []
|
|
19747
|
+
},
|
|
19368
19748
|
{
|
|
19369
19749
|
version: "11.8.0",
|
|
19370
19750
|
entries: [
|
|
@@ -20353,6 +20733,30 @@ placeholder="Name or address\u2026"
|
|
|
20353
20733
|
{
|
|
20354
20734
|
package: "@uni-design-system/uni-core",
|
|
20355
20735
|
releases: [
|
|
20736
|
+
{
|
|
20737
|
+
version: "11.10.0",
|
|
20738
|
+
entries: [
|
|
20739
|
+
{
|
|
20740
|
+
bump: "minor",
|
|
20741
|
+
title: "`uni-card` gains states a theme can paint, and `uni-card-group` makes a pick-one grid of them.",
|
|
20742
|
+
body: "- **The frame is an Emotion class**, no longer an inline `[style]`. An inline style outranks every class, so no theme rule could express a state. One thing to know: a consumer stylesheet that was silently losing to the card's inline frame will start winning. Nothing in the base or storybook themes moves.\n- **`selected`** and **`interactive`** inputs add `card-selected` and `card-interactive` to the frame \u2014 the contract `uni-tag` has had since 11.1 \u2014 and the `card` theme entry gains `selectedBorder` (`primary` by default), `selectedColor` (`primary-container` by default \u2014 every card already wears the primary frame under the base theme, so the fill is what makes a pick visible), `selectedElevation`, `hoverColor` and `focusRingColor` for the common case; a variant's own `&.card-selected` rule reaches it for anything else. An interactive card emits `activated` on click, Space or Enter, and leaves clicks on its own content's controls alone. `disabled` is read.\n- **`[dialog-header]` follow-ups** (`dialog-rich-head-followups-2026-10-22.md`): a `rich` head finds its `[dialog-title]` in the DOM, so a title projected _through_ a wrapper component's template \u2014 invisible to a content query, and unable to inject the dialog \u2014 still names the dialog alone; and with no marked title it defers to the dialog's own `ariaLabel` rather than naming a wrapped sheet by its whole head. The header's close button, in both shapes, follows the dialog's `defaultCloseButton`, as the drawer header's follows the drawer's \u2014 a sheet that closes from its footer says `[defaultCloseButton]=\"false\"` once. **`[dialog-buttons]`, `[drawer-buttons]`**: an `alignItems` theme option, default `center`, so a one-line footnote sits on the buttons' centre line instead of stretched to the row's top edge; the pair renders as before.\n- **`uni-card-group`** (new): a `role=\"radiogroup\"` over the `uni-card`s projected into it. Each card with a `value` becomes a `role=\"radio\"` whose selection and tab stop the group drives; a card without one is plain content. `FormValueControl<T | null>` (`value`, `disabled`, `touched`/`touch`, `invalid`, `dirty`, `required`, `ariaDescribedBy`), named by `ariaLabel` or `ariaLabelledBy`, `activated` on a pick. APG radio keyboard model: one tab stop, arrows move and select (wrapping), Home/End, Space or Enter. Laid out as a grid from `templateColumns` and `gap`, with defaults in the new `cardGroup` theme entry. Single-select; `multiple` is deliberately not here until a case asks for it.",
|
|
20743
|
+
commit: "c5ba475"
|
|
20744
|
+
}
|
|
20745
|
+
],
|
|
20746
|
+
dependencyBumps: []
|
|
20747
|
+
},
|
|
20748
|
+
{
|
|
20749
|
+
version: "11.9.0",
|
|
20750
|
+
entries: [
|
|
20751
|
+
{
|
|
20752
|
+
bump: "minor",
|
|
20753
|
+
title: "`uni-data-table` gains a real selection column and an id-keyed, bindable detail row; the datasources gain a row identity.",
|
|
20754
|
+
body: "- **`rowId` on the datasources** (`new UniRecordDatasource(rows, { rowId: (row) => row.id })`, also a third argument on `UniServerSideDatasource`, and settable afterwards): a stable identity for a row. Without one, rows are compared by reference, which never matches a row rebuilt from a fresh fetch \u2014 a realtime update that replaced the records emptied the selection. With one, `isSelected`, `toggleSelection` and the new `setSelected(rows, selected)` key by it, and so do the table's expanded row and its row tracking.\n- **`useMultiSelect`** is read now (it was declared and wired to nothing): a leading checkbox column over the datasource's own `selections` \u2014 a header box that selects or clears every selectable row on the page, `indeterminate` while only some are, and a box per row. `selectableWhen` keeps rows out of it (a disabled box, skipped by select-all); `selectLabel` and `selectAllLabel` name the boxes; `selectionChange` reports the datasource's selection after a box changed it. A box is its own control: a click on it is never the row's click. Theme options `selectionColumnWidth` (40), `selectionCheckboxSize` (`sm`) and `selectedRowColor` (unset: no tint).\n- **`expanded`**, a two-way model: the expanded row's `rowId`, or its page index when the datasource has none; `null` collapses all. A deep link can open a row before the records arrive, and a sort or re-fetch that reorders them keeps the same record open. **`expandableWhen`** names the rows that have a detail \u2014 the rest take no hover affordance and no `aria-expanded`, and a click on them only emits `rowClick`. **`rowClass`** adds a class per row. Rows with a detail carry `aria-expanded`.\n- `expandedIndex` is now a read-only computed of the open row's page index, **deprecated** in favour of `expanded`; `toggleRow(index)` still works. Removed in 12.0.",
|
|
20755
|
+
commit: "cfddc14"
|
|
20756
|
+
}
|
|
20757
|
+
],
|
|
20758
|
+
dependencyBumps: []
|
|
20759
|
+
},
|
|
20356
20760
|
{
|
|
20357
20761
|
version: "11.8.0",
|
|
20358
20762
|
entries: [
|
|
@@ -21066,6 +21470,16 @@ placeholder="Name or address\u2026"
|
|
|
21066
21470
|
{
|
|
21067
21471
|
package: "@uni-design-system/uni-react",
|
|
21068
21472
|
releases: [
|
|
21473
|
+
{
|
|
21474
|
+
version: "11.10.0",
|
|
21475
|
+
entries: [],
|
|
21476
|
+
dependencyBumps: []
|
|
21477
|
+
},
|
|
21478
|
+
{
|
|
21479
|
+
version: "11.9.0",
|
|
21480
|
+
entries: [],
|
|
21481
|
+
dependencyBumps: []
|
|
21482
|
+
},
|
|
21069
21483
|
{
|
|
21070
21484
|
version: "11.8.0",
|
|
21071
21485
|
entries: [],
|
|
@@ -21387,6 +21801,16 @@ placeholder="Name or address\u2026"
|
|
|
21387
21801
|
{
|
|
21388
21802
|
package: "@uni-design-system/uni-mcp",
|
|
21389
21803
|
releases: [
|
|
21804
|
+
{
|
|
21805
|
+
version: "11.10.0",
|
|
21806
|
+
entries: [],
|
|
21807
|
+
dependencyBumps: []
|
|
21808
|
+
},
|
|
21809
|
+
{
|
|
21810
|
+
version: "11.9.0",
|
|
21811
|
+
entries: [],
|
|
21812
|
+
dependencyBumps: []
|
|
21813
|
+
},
|
|
21390
21814
|
{
|
|
21391
21815
|
version: "11.8.0",
|
|
21392
21816
|
entries: [],
|
|
@@ -21666,7 +22090,7 @@ placeholder="Name or address\u2026"
|
|
|
21666
22090
|
summary: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
|
|
21667
22091
|
description: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
|
|
21668
22092
|
members: [],
|
|
21669
|
-
version: "11.
|
|
22093
|
+
version: "11.10.0"
|
|
21670
22094
|
},
|
|
21671
22095
|
{
|
|
21672
22096
|
id: "focusable-selector",
|
|
@@ -21678,7 +22102,7 @@ placeholder="Name or address\u2026"
|
|
|
21678
22102
|
summary: "Selector matching natively focusable elements.",
|
|
21679
22103
|
description: "Selector matching natively focusable elements. Used to locate the interactive element inside a projected trigger so ARIA attributes land on the element that actually receives focus.",
|
|
21680
22104
|
members: [],
|
|
21681
|
-
version: "11.
|
|
22105
|
+
version: "11.10.0"
|
|
21682
22106
|
},
|
|
21683
22107
|
{
|
|
21684
22108
|
id: "resolve-focus-target",
|
|
@@ -21690,7 +22114,7 @@ placeholder="Name or address\u2026"
|
|
|
21690
22114
|
summary: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
|
|
21691
22115
|
description: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
|
|
21692
22116
|
members: [],
|
|
21693
|
-
version: "11.
|
|
22117
|
+
version: "11.10.0"
|
|
21694
22118
|
},
|
|
21695
22119
|
{
|
|
21696
22120
|
id: "visually-hidden",
|
|
@@ -21702,7 +22126,7 @@ placeholder="Name or address\u2026"
|
|
|
21702
22126
|
summary: "Visually hides content while keeping it available to screen readers.",
|
|
21703
22127
|
description: "Visually hides content while keeping it available to screen readers. Use for text alternatives (e.g. badge counts, icon-only affordances). `fixed`, not `absolute`, and that is load-bearing. An absolutely positioned box resolves its containing block to the nearest *positioned* ancestor \u2014 which, since the controls emitting these spans are `position: static`, is whatever positioned box happens to be above them in the consumer's layout, often several scroll containers up. The span then skips every intervening `overflow: auto` and lands in that distant ancestor's scrollable overflow, turning 1x1 of invisible text into real scrollable distance in a box that never opted into scrolling. A fixed box's containing block is the viewport, so it joins no ancestor's scrollable overflow at all. Caveat: inside a `transform`ed (or `filter`ed/`contain`ed) ancestor a fixed box re-anchors to that ancestor. Harmless here \u2014 the element is 1x1 and clipped to nothing, so where it lands never matters, only what it overflows.",
|
|
21704
22128
|
members: [],
|
|
21705
|
-
version: "11.
|
|
22129
|
+
version: "11.10.0"
|
|
21706
22130
|
},
|
|
21707
22131
|
{
|
|
21708
22132
|
id: "motion-safe",
|
|
@@ -21714,7 +22138,7 @@ placeholder="Name or address\u2026"
|
|
|
21714
22138
|
summary: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
|
|
21715
22139
|
description: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
|
|
21716
22140
|
members: [],
|
|
21717
|
-
version: "11.
|
|
22141
|
+
version: "11.10.0"
|
|
21718
22142
|
},
|
|
21719
22143
|
{
|
|
21720
22144
|
id: "announcer",
|
|
@@ -21739,7 +22163,7 @@ placeholder="Name or address\u2026"
|
|
|
21739
22163
|
description: "Announce `text`, even when it repeats what was just announced."
|
|
21740
22164
|
}
|
|
21741
22165
|
],
|
|
21742
|
-
version: "11.
|
|
22166
|
+
version: "11.10.0"
|
|
21743
22167
|
},
|
|
21744
22168
|
{
|
|
21745
22169
|
id: "create-announcer",
|
|
@@ -21751,7 +22175,7 @@ placeholder="Name or address\u2026"
|
|
|
21751
22175
|
summary: "A polite live region's text, for the running commentary a form control owes a screen reader: commits, clears, refused entries, result counts \u2014 changes a sighted user sees but that are otherwise silent.",
|
|
21752
22176
|
description: "A polite live region's text, for the running commentary a form control owes a screen reader: commits, clears, refused entries, result counts \u2014 changes a sighted user sees but that are otherwise silent. Extracted because five controls (`uni-combobox`, `uni-tag-input`, `uni-time-input`, `uni-date-input`, `uni-calendar`) carried byte-identical copies, including the repeat trick below \u2014 the kind of subtlety that is quietly dropped when the sixth control hand-rolls its own. Announcing the same text twice must still be heard: assistive tech reads a live region when its content *changes*, so setting an identical string is a no-op and the second \"No match.\" would be silent. A trailing space breaks the equality without changing a word of what is read. Successive repeats alternate between the padded and unpadded form, so nothing accumulates. Deliberately holds no DOM and no styling: the region belongs to the component's own template, where its placement and visually-hidden class are already the component's business.",
|
|
21753
22177
|
members: [],
|
|
21754
|
-
version: "11.
|
|
22178
|
+
version: "11.10.0"
|
|
21755
22179
|
},
|
|
21756
22180
|
{
|
|
21757
22181
|
id: "uni-date",
|
|
@@ -21763,7 +22187,7 @@ placeholder="Name or address\u2026"
|
|
|
21763
22187
|
summary: "A calendar date, `'YYYY-MM-DD'`.",
|
|
21764
22188
|
description: "A calendar date, `'YYYY-MM-DD'`.",
|
|
21765
22189
|
members: [],
|
|
21766
|
-
version: "11.
|
|
22190
|
+
version: "11.10.0"
|
|
21767
22191
|
},
|
|
21768
22192
|
{
|
|
21769
22193
|
id: "uni-time",
|
|
@@ -21775,7 +22199,7 @@ placeholder="Name or address\u2026"
|
|
|
21775
22199
|
summary: "A wall-clock time, `'HH:mm'` (24-hour).",
|
|
21776
22200
|
description: "A wall-clock time, `'HH:mm'` (24-hour). Display format is separate.",
|
|
21777
22201
|
members: [],
|
|
21778
|
-
version: "11.
|
|
22202
|
+
version: "11.10.0"
|
|
21779
22203
|
},
|
|
21780
22204
|
{
|
|
21781
22205
|
id: "uni-date-time",
|
|
@@ -21787,7 +22211,7 @@ placeholder="Name or address\u2026"
|
|
|
21787
22211
|
summary: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
|
|
21788
22212
|
description: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
|
|
21789
22213
|
members: [],
|
|
21790
|
-
version: "11.
|
|
22214
|
+
version: "11.10.0"
|
|
21791
22215
|
},
|
|
21792
22216
|
{
|
|
21793
22217
|
id: "uni-date-range",
|
|
@@ -21812,7 +22236,7 @@ placeholder="Name or address\u2026"
|
|
|
21812
22236
|
description: ""
|
|
21813
22237
|
}
|
|
21814
22238
|
],
|
|
21815
|
-
version: "11.
|
|
22239
|
+
version: "11.10.0"
|
|
21816
22240
|
},
|
|
21817
22241
|
{
|
|
21818
22242
|
id: "iso-date",
|
|
@@ -21824,7 +22248,7 @@ placeholder="Name or address\u2026"
|
|
|
21824
22248
|
summary: "`(2026, 8, 5)` \u2192 `'2026-08-05'`.",
|
|
21825
22249
|
description: "`(2026, 8, 5)` \u2192 `'2026-08-05'`. Does not validate \u2014 see `isValidDate`.",
|
|
21826
22250
|
members: [],
|
|
21827
|
-
version: "11.
|
|
22251
|
+
version: "11.10.0"
|
|
21828
22252
|
},
|
|
21829
22253
|
{
|
|
21830
22254
|
id: "is-valid-date",
|
|
@@ -21836,7 +22260,7 @@ placeholder="Name or address\u2026"
|
|
|
21836
22260
|
summary: "The ISO date when the parts form a real calendar day, else `null`.",
|
|
21837
22261
|
description: "The ISO date when the parts form a real calendar day, else `null`.",
|
|
21838
22262
|
members: [],
|
|
21839
|
-
version: "11.
|
|
22263
|
+
version: "11.10.0"
|
|
21840
22264
|
},
|
|
21841
22265
|
{
|
|
21842
22266
|
id: "days-in-month",
|
|
@@ -21848,7 +22272,7 @@ placeholder="Name or address\u2026"
|
|
|
21848
22272
|
summary: "Days in a month, leap-year aware.",
|
|
21849
22273
|
description: "Days in a month, leap-year aware.",
|
|
21850
22274
|
members: [],
|
|
21851
|
-
version: "11.
|
|
22275
|
+
version: "11.10.0"
|
|
21852
22276
|
},
|
|
21853
22277
|
{
|
|
21854
22278
|
id: "add-days",
|
|
@@ -21860,7 +22284,7 @@ placeholder="Name or address\u2026"
|
|
|
21860
22284
|
summary: "",
|
|
21861
22285
|
description: "",
|
|
21862
22286
|
members: [],
|
|
21863
|
-
version: "11.
|
|
22287
|
+
version: "11.10.0"
|
|
21864
22288
|
},
|
|
21865
22289
|
{
|
|
21866
22290
|
id: "add-months",
|
|
@@ -21872,7 +22296,7 @@ placeholder="Name or address\u2026"
|
|
|
21872
22296
|
summary: "Same day \xB1 n months, clamping the day to the target month's length.",
|
|
21873
22297
|
description: "Same day \xB1 n months, clamping the day to the target month's length.",
|
|
21874
22298
|
members: [],
|
|
21875
|
-
version: "11.
|
|
22299
|
+
version: "11.10.0"
|
|
21876
22300
|
},
|
|
21877
22301
|
{
|
|
21878
22302
|
id: "day-of-week",
|
|
@@ -21884,7 +22308,7 @@ placeholder="Name or address\u2026"
|
|
|
21884
22308
|
summary: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
21885
22309
|
description: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
21886
22310
|
members: [],
|
|
21887
|
-
version: "11.
|
|
22311
|
+
version: "11.10.0"
|
|
21888
22312
|
},
|
|
21889
22313
|
{
|
|
21890
22314
|
id: "month-of",
|
|
@@ -21896,7 +22320,7 @@ placeholder="Name or address\u2026"
|
|
|
21896
22320
|
summary: "`'2026-08-20'` \u2192 `'2026-08'`.",
|
|
21897
22321
|
description: "`'2026-08-20'` \u2192 `'2026-08'`.",
|
|
21898
22322
|
members: [],
|
|
21899
|
-
version: "11.
|
|
22323
|
+
version: "11.10.0"
|
|
21900
22324
|
},
|
|
21901
22325
|
{
|
|
21902
22326
|
id: "today-iso",
|
|
@@ -21908,7 +22332,7 @@ placeholder="Name or address\u2026"
|
|
|
21908
22332
|
summary: "Today as a local-wall-clock ISO date (the one place local time matters).",
|
|
21909
22333
|
description: "Today as a local-wall-clock ISO date (the one place local time matters).",
|
|
21910
22334
|
members: [],
|
|
21911
|
-
version: "11.
|
|
22335
|
+
version: "11.10.0"
|
|
21912
22336
|
},
|
|
21913
22337
|
{
|
|
21914
22338
|
id: "inclusive-day-count",
|
|
@@ -21920,7 +22344,7 @@ placeholder="Name or address\u2026"
|
|
|
21920
22344
|
summary: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
|
|
21921
22345
|
description: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
|
|
21922
22346
|
members: [],
|
|
21923
|
-
version: "11.
|
|
22347
|
+
version: "11.10.0"
|
|
21924
22348
|
},
|
|
21925
22349
|
{
|
|
21926
22350
|
id: "uni-month-grid-cell",
|
|
@@ -21945,7 +22369,7 @@ placeholder="Name or address\u2026"
|
|
|
21945
22369
|
description: "True for leading/trailing cells that belong to the adjacent months."
|
|
21946
22370
|
}
|
|
21947
22371
|
],
|
|
21948
|
-
version: "11.
|
|
22372
|
+
version: "11.10.0"
|
|
21949
22373
|
},
|
|
21950
22374
|
{
|
|
21951
22375
|
id: "build-month-grid",
|
|
@@ -21957,7 +22381,7 @@ placeholder="Name or address\u2026"
|
|
|
21957
22381
|
summary: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday).",
|
|
21958
22382
|
description: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday). Outside cells are always present so showing or hiding them is a pure render decision.",
|
|
21959
22383
|
members: [],
|
|
21960
|
-
version: "11.
|
|
22384
|
+
version: "11.10.0"
|
|
21961
22385
|
},
|
|
21962
22386
|
{
|
|
21963
22387
|
id: "format-date",
|
|
@@ -21969,7 +22393,7 @@ placeholder="Name or address\u2026"
|
|
|
21969
22393
|
summary: "",
|
|
21970
22394
|
description: "",
|
|
21971
22395
|
members: [],
|
|
21972
|
-
version: "11.
|
|
22396
|
+
version: "11.10.0"
|
|
21973
22397
|
},
|
|
21974
22398
|
{
|
|
21975
22399
|
id: "format-month-heading",
|
|
@@ -21981,7 +22405,7 @@ placeholder="Name or address\u2026"
|
|
|
21981
22405
|
summary: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
|
|
21982
22406
|
description: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
|
|
21983
22407
|
members: [],
|
|
21984
|
-
version: "11.
|
|
22408
|
+
version: "11.10.0"
|
|
21985
22409
|
},
|
|
21986
22410
|
{
|
|
21987
22411
|
id: "uni-weekday-name",
|
|
@@ -22006,7 +22430,7 @@ placeholder="Name or address\u2026"
|
|
|
22006
22430
|
description: "Full weekday name, for the columnheader's `abbr`."
|
|
22007
22431
|
}
|
|
22008
22432
|
],
|
|
22009
|
-
version: "11.
|
|
22433
|
+
version: "11.10.0"
|
|
22010
22434
|
},
|
|
22011
22435
|
{
|
|
22012
22436
|
id: "weekday-names",
|
|
@@ -22018,7 +22442,7 @@ placeholder="Name or address\u2026"
|
|
|
22018
22442
|
summary: "Weekday header labels starting at `weekStart` (0 = Sunday).",
|
|
22019
22443
|
description: "Weekday header labels starting at `weekStart` (0 = Sunday).",
|
|
22020
22444
|
members: [],
|
|
22021
|
-
version: "11.
|
|
22445
|
+
version: "11.10.0"
|
|
22022
22446
|
},
|
|
22023
22447
|
{
|
|
22024
22448
|
id: "format-time",
|
|
@@ -22030,7 +22454,7 @@ placeholder="Name or address\u2026"
|
|
|
22030
22454
|
summary: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
|
|
22031
22455
|
description: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
|
|
22032
22456
|
members: [],
|
|
22033
|
-
version: "11.
|
|
22457
|
+
version: "11.10.0"
|
|
22034
22458
|
},
|
|
22035
22459
|
{
|
|
22036
22460
|
id: "locale-week-start",
|
|
@@ -22042,7 +22466,7 @@ placeholder="Name or address\u2026"
|
|
|
22042
22466
|
summary: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
22043
22467
|
description: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday. Falls back to Sunday where `Intl.Locale` week info is unavailable.",
|
|
22044
22468
|
members: [],
|
|
22045
|
-
version: "11.
|
|
22469
|
+
version: "11.10.0"
|
|
22046
22470
|
},
|
|
22047
22471
|
{
|
|
22048
22472
|
id: "locale-default-hour12",
|
|
@@ -22054,7 +22478,7 @@ placeholder="Name or address\u2026"
|
|
|
22054
22478
|
summary: "Whether the locale's default clock is 12-hour.",
|
|
22055
22479
|
description: "Whether the locale's default clock is 12-hour.",
|
|
22056
22480
|
members: [],
|
|
22057
|
-
version: "11.
|
|
22481
|
+
version: "11.10.0"
|
|
22058
22482
|
},
|
|
22059
22483
|
{
|
|
22060
22484
|
id: "locale-field-order",
|
|
@@ -22066,7 +22490,7 @@ placeholder="Name or address\u2026"
|
|
|
22066
22490
|
summary: "The locale's numeric-date field order, e.g.",
|
|
22067
22491
|
description: "The locale's numeric-date field order, e.g. en-US \u2192 month, day, year.",
|
|
22068
22492
|
members: [],
|
|
22069
|
-
version: "11.
|
|
22493
|
+
version: "11.10.0"
|
|
22070
22494
|
},
|
|
22071
22495
|
{
|
|
22072
22496
|
id: "locale-month-names",
|
|
@@ -22078,7 +22502,7 @@ placeholder="Name or address\u2026"
|
|
|
22078
22502
|
summary: "Long + short month names \u2192 month number, lowercased, dots stripped.",
|
|
22079
22503
|
description: "Long + short month names \u2192 month number, lowercased, dots stripped.",
|
|
22080
22504
|
members: [],
|
|
22081
|
-
version: "11.
|
|
22505
|
+
version: "11.10.0"
|
|
22082
22506
|
},
|
|
22083
22507
|
{
|
|
22084
22508
|
id: "locale-date-placeholder",
|
|
@@ -22090,7 +22514,7 @@ placeholder="Name or address\u2026"
|
|
|
22090
22514
|
summary: "The locale's digit pattern as a placeholder, e.g.",
|
|
22091
22515
|
description: "The locale's digit pattern as a placeholder, e.g. `'MM/DD/YYYY'`.",
|
|
22092
22516
|
members: [],
|
|
22093
|
-
version: "11.
|
|
22517
|
+
version: "11.10.0"
|
|
22094
22518
|
},
|
|
22095
22519
|
{
|
|
22096
22520
|
id: "parse-date-text",
|
|
@@ -22102,7 +22526,7 @@ placeholder="Name or address\u2026"
|
|
|
22102
22526
|
summary: "Free-typed date text \u2192 ISO date, or `null` when unreadable.",
|
|
22103
22527
|
description: "Free-typed date text \u2192 ISO date, or `null` when unreadable. Accepts, in order: ISO (`2026-08-20`), a month name from the locale's own long/short lists (`aug 20`, `20 aug 2026`, `August 20th`), and locale-numeric text (`8/20/2026`, `20.8.2026`, `08-20`) with the digit order taken from `Intl.DateTimeFormat(locale).formatToParts()`. A missing year resolves to the next occurrence; two-digit years are refused rather than guessed.",
|
|
22104
22528
|
members: [],
|
|
22105
|
-
version: "11.
|
|
22529
|
+
version: "11.10.0"
|
|
22106
22530
|
},
|
|
22107
22531
|
{
|
|
22108
22532
|
id: "parse-time-text",
|
|
@@ -22114,7 +22538,7 @@ placeholder="Name or address\u2026"
|
|
|
22114
22538
|
summary: "Free-typed time text \u2192 `'HH:mm'`, or `null`.",
|
|
22115
22539
|
description: "Free-typed time text \u2192 `'HH:mm'`, or `null`. Accepts `9`, `930`, `9:30`, `9.30`, `9 30`, `3p`, `3pm`, `3 PM`, `15:00`. Bare hours 1\u20137 with no meridiem lean PM when `hour12` \u2014 typing `3` into an appointment field means 15:00, not 03:00.",
|
|
22116
22540
|
members: [],
|
|
22117
|
-
version: "11.
|
|
22541
|
+
version: "11.10.0"
|
|
22118
22542
|
},
|
|
22119
22543
|
{
|
|
22120
22544
|
id: "time-slots",
|
|
@@ -22126,7 +22550,7 @@ placeholder="Name or address\u2026"
|
|
|
22126
22550
|
summary: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
|
|
22127
22551
|
description: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
|
|
22128
22552
|
members: [],
|
|
22129
|
-
version: "11.
|
|
22553
|
+
version: "11.10.0"
|
|
22130
22554
|
},
|
|
22131
22555
|
{
|
|
22132
22556
|
id: "split-date-time",
|
|
@@ -22138,7 +22562,7 @@ placeholder="Name or address\u2026"
|
|
|
22138
22562
|
summary: "",
|
|
22139
22563
|
description: "",
|
|
22140
22564
|
members: [],
|
|
22141
|
-
version: "11.
|
|
22565
|
+
version: "11.10.0"
|
|
22142
22566
|
},
|
|
22143
22567
|
{
|
|
22144
22568
|
id: "join-date-time",
|
|
@@ -22150,7 +22574,7 @@ placeholder="Name or address\u2026"
|
|
|
22150
22574
|
summary: "One combined value only when both parts are present.",
|
|
22151
22575
|
description: "One combined value only when both parts are present.",
|
|
22152
22576
|
members: [],
|
|
22153
|
-
version: "11.
|
|
22577
|
+
version: "11.10.0"
|
|
22154
22578
|
},
|
|
22155
22579
|
{
|
|
22156
22580
|
id: "uni-number-range",
|
|
@@ -22175,7 +22599,7 @@ placeholder="Name or address\u2026"
|
|
|
22175
22599
|
description: ""
|
|
22176
22600
|
}
|
|
22177
22601
|
],
|
|
22178
|
-
version: "11.
|
|
22602
|
+
version: "11.10.0"
|
|
22179
22603
|
},
|
|
22180
22604
|
{
|
|
22181
22605
|
id: "uni-rounding-mode",
|
|
@@ -22187,7 +22611,7 @@ placeholder="Name or address\u2026"
|
|
|
22187
22611
|
summary: "How a tie is resolved when rounding to a fraction-digit count.",
|
|
22188
22612
|
description: "How a tie is resolved when rounding to a fraction-digit count. `half-up` is the invoice default (ties away from zero: `1.15` \u2192 `1.2`); `half-even` is banker's rounding, which removes the upward bias across a column of figures (`1.25` \u2192 `1.2`, `1.35` \u2192 `1.4`).",
|
|
22189
22613
|
members: [],
|
|
22190
|
-
version: "11.
|
|
22614
|
+
version: "11.10.0"
|
|
22191
22615
|
},
|
|
22192
22616
|
{
|
|
22193
22617
|
id: "uni-number-preset",
|
|
@@ -22199,7 +22623,7 @@ placeholder="Name or address\u2026"
|
|
|
22199
22623
|
summary: "Format archetype.",
|
|
22200
22624
|
description: "Format archetype. Supplies decimals, grouping, affix and `inputmode`.",
|
|
22201
22625
|
members: [],
|
|
22202
|
-
version: "11.
|
|
22626
|
+
version: "11.10.0"
|
|
22203
22627
|
},
|
|
22204
22628
|
{
|
|
22205
22629
|
id: "uni-number-grouping",
|
|
@@ -22211,7 +22635,7 @@ placeholder="Name or address\u2026"
|
|
|
22211
22635
|
summary: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`.",
|
|
22212
22636
|
description: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`. `min2` \u2014 the default \u2014 groups only from five integer digits, so a year renders `2026` rather than `2,026` while a price still renders `10,000`.",
|
|
22213
22637
|
members: [],
|
|
22214
|
-
version: "11.
|
|
22638
|
+
version: "11.10.0"
|
|
22215
22639
|
},
|
|
22216
22640
|
{
|
|
22217
22641
|
id: "uni-number-reject-reason",
|
|
@@ -22223,7 +22647,7 @@ placeholder="Name or address\u2026"
|
|
|
22223
22647
|
summary: "Why a typed commit was refused.",
|
|
22224
22648
|
description: "Why a typed commit was refused. The raw text stays in the field.",
|
|
22225
22649
|
members: [],
|
|
22226
|
-
version: "11.
|
|
22650
|
+
version: "11.10.0"
|
|
22227
22651
|
},
|
|
22228
22652
|
{
|
|
22229
22653
|
id: "uni-number-step-config",
|
|
@@ -22266,7 +22690,7 @@ placeholder="Name or address\u2026"
|
|
|
22266
22690
|
description: "Cycle past a fence instead of stopping at it \u2014 for genuinely cyclic fields only (23 \u2192 0 hours, 359 \u2192 0 degrees). Needs both `min` and `max`."
|
|
22267
22691
|
}
|
|
22268
22692
|
],
|
|
22269
|
-
version: "11.
|
|
22693
|
+
version: "11.10.0"
|
|
22270
22694
|
},
|
|
22271
22695
|
{
|
|
22272
22696
|
id: "uni-number-clamp",
|
|
@@ -22291,7 +22715,7 @@ placeholder="Name or address\u2026"
|
|
|
22291
22715
|
description: "Which fence was hit, or `null` when the value was already in range."
|
|
22292
22716
|
}
|
|
22293
22717
|
],
|
|
22294
|
-
version: "11.
|
|
22718
|
+
version: "11.10.0"
|
|
22295
22719
|
},
|
|
22296
22720
|
{
|
|
22297
22721
|
id: "uni-locale-number-parts",
|
|
@@ -22334,7 +22758,7 @@ placeholder="Name or address\u2026"
|
|
|
22334
22758
|
description: "Fraction digits `Intl` uses for the currency \u2014 JPY 0, USD 2."
|
|
22335
22759
|
}
|
|
22336
22760
|
],
|
|
22337
|
-
version: "11.
|
|
22761
|
+
version: "11.10.0"
|
|
22338
22762
|
},
|
|
22339
22763
|
{
|
|
22340
22764
|
id: "uni-number-format-config",
|
|
@@ -22419,7 +22843,7 @@ placeholder="Name or address\u2026"
|
|
|
22419
22843
|
description: "Spoken long form of an abbreviated suffix, for `aria-valuetext`."
|
|
22420
22844
|
}
|
|
22421
22845
|
],
|
|
22422
|
-
version: "11.
|
|
22846
|
+
version: "11.10.0"
|
|
22423
22847
|
},
|
|
22424
22848
|
{
|
|
22425
22849
|
id: "uni-resolved-number-format",
|
|
@@ -22510,7 +22934,7 @@ placeholder="Name or address\u2026"
|
|
|
22510
22934
|
description: ""
|
|
22511
22935
|
}
|
|
22512
22936
|
],
|
|
22513
|
-
version: "11.
|
|
22937
|
+
version: "11.10.0"
|
|
22514
22938
|
},
|
|
22515
22939
|
{
|
|
22516
22940
|
id: "uni-number-parse-result",
|
|
@@ -22522,7 +22946,7 @@ placeholder="Name or address\u2026"
|
|
|
22522
22946
|
summary: "The outcome of reading a user's text.",
|
|
22523
22947
|
description: "The outcome of reading a user's text. Refused text is never swallowed: the caller keeps it in the field and flags it, so nobody loses their work to a silently emptied box.",
|
|
22524
22948
|
members: [],
|
|
22525
|
-
version: "11.
|
|
22949
|
+
version: "11.10.0"
|
|
22526
22950
|
},
|
|
22527
22951
|
{
|
|
22528
22952
|
id: "is-canonical-decimal",
|
|
@@ -22534,7 +22958,7 @@ placeholder="Name or address\u2026"
|
|
|
22534
22958
|
summary: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
|
|
22535
22959
|
description: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
|
|
22536
22960
|
members: [],
|
|
22537
|
-
version: "11.
|
|
22961
|
+
version: "11.10.0"
|
|
22538
22962
|
},
|
|
22539
22963
|
{
|
|
22540
22964
|
id: "decimal-scale",
|
|
@@ -22546,7 +22970,7 @@ placeholder="Name or address\u2026"
|
|
|
22546
22970
|
summary: "Fraction-digit count.",
|
|
22547
22971
|
description: "Fraction-digit count. `'1.250'` \u2192 3, `'12'` \u2192 0, `'5.'` \u2192 0.",
|
|
22548
22972
|
members: [],
|
|
22549
|
-
version: "11.
|
|
22973
|
+
version: "11.10.0"
|
|
22550
22974
|
},
|
|
22551
22975
|
{
|
|
22552
22976
|
id: "to-scaled",
|
|
@@ -22558,7 +22982,7 @@ placeholder="Name or address\u2026"
|
|
|
22558
22982
|
summary: "Canonical decimal \u2192 integer scaled by `10^scale`.",
|
|
22559
22983
|
description: "Canonical decimal \u2192 integer scaled by `10^scale`. Fraction digits beyond `scale` are truncated, so callers that must not lose them pass a `scale` at least `decimalScale(value)`.",
|
|
22560
22984
|
members: [],
|
|
22561
|
-
version: "11.
|
|
22985
|
+
version: "11.10.0"
|
|
22562
22986
|
},
|
|
22563
22987
|
{
|
|
22564
22988
|
id: "from-scaled",
|
|
@@ -22570,7 +22994,7 @@ placeholder="Name or address\u2026"
|
|
|
22570
22994
|
summary: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
|
|
22571
22995
|
description: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
|
|
22572
22996
|
members: [],
|
|
22573
|
-
version: "11.
|
|
22997
|
+
version: "11.10.0"
|
|
22574
22998
|
},
|
|
22575
22999
|
{
|
|
22576
23000
|
id: "normalize-decimal",
|
|
@@ -22582,7 +23006,7 @@ placeholder="Name or address\u2026"
|
|
|
22582
23006
|
summary: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`.",
|
|
22583
23007
|
description: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`. Requires a canonical decimal; guard with `isCanonicalDecimal`.",
|
|
22584
23008
|
members: [],
|
|
22585
|
-
version: "11.
|
|
23009
|
+
version: "11.10.0"
|
|
22586
23010
|
},
|
|
22587
23011
|
{
|
|
22588
23012
|
id: "to-decimal",
|
|
@@ -22594,7 +23018,7 @@ placeholder="Name or address\u2026"
|
|
|
22594
23018
|
summary: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21.",
|
|
22595
23019
|
description: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21. A `step` of `1e-7` would otherwise reach the arithmetic as the literal text `'1e-7'`. Throws on text that is not numeric at all \u2014 every caller here passes either a `number` input or text already cleared by the parser.",
|
|
22596
23020
|
members: [],
|
|
22597
|
-
version: "11.
|
|
23021
|
+
version: "11.10.0"
|
|
22598
23022
|
},
|
|
22599
23023
|
{
|
|
22600
23024
|
id: "compare-decimal",
|
|
@@ -22606,7 +23030,7 @@ placeholder="Name or address\u2026"
|
|
|
22606
23030
|
summary: "`-1` when `a < b`, `1` when `a > b`, `0` when equal.",
|
|
22607
23031
|
description: "`-1` when `a < b`, `1` when `a > b`, `0` when equal. `'1.50'` equals `'1.5'`.",
|
|
22608
23032
|
members: [],
|
|
22609
|
-
version: "11.
|
|
23033
|
+
version: "11.10.0"
|
|
22610
23034
|
},
|
|
22611
23035
|
{
|
|
22612
23036
|
id: "round-decimal",
|
|
@@ -22618,7 +23042,7 @@ placeholder="Name or address\u2026"
|
|
|
22618
23042
|
summary: "Round to `fractionDigits`, breaking ties per `mode`.",
|
|
22619
23043
|
description: "Round to `fractionDigits`, breaking ties per `mode`. Exact where `Number.prototype.toFixed` is not \u2014 see the file header.",
|
|
22620
23044
|
members: [],
|
|
22621
|
-
version: "11.
|
|
23045
|
+
version: "11.10.0"
|
|
22622
23046
|
},
|
|
22623
23047
|
{
|
|
22624
23048
|
id: "shift-decimal",
|
|
@@ -22630,7 +23054,7 @@ placeholder="Name or address\u2026"
|
|
|
22630
23054
|
summary: "Multiply by `10^places`, exactly.",
|
|
22631
23055
|
description: "Multiply by `10^places`, exactly. Used for the percent preset's fraction \u21C4 display shift (`0.15` \u21C4 `15`) and for deriving a default large step of `step \xD7 10` without touching a float.",
|
|
22632
23056
|
members: [],
|
|
22633
|
-
version: "11.
|
|
23057
|
+
version: "11.10.0"
|
|
22634
23058
|
},
|
|
22635
23059
|
{
|
|
22636
23060
|
id: "clamp-decimal",
|
|
@@ -22642,7 +23066,7 @@ placeholder="Name or address\u2026"
|
|
|
22642
23066
|
summary: "Hold a value inside its fences, reporting which one it hit so the caller can announce it.",
|
|
22643
23067
|
description: "Hold a value inside its fences, reporting which one it hit so the caller can announce it. Clamping belongs on commit, never per keystroke: a `min=10` field that clamps live can never be typed into, because the `1` becomes `10` before the `5` arrives.",
|
|
22644
23068
|
members: [],
|
|
22645
|
-
version: "11.
|
|
23069
|
+
version: "11.10.0"
|
|
22646
23070
|
},
|
|
22647
23071
|
{
|
|
22648
23072
|
id: "step-decimal",
|
|
@@ -22654,7 +23078,7 @@ placeholder="Name or address\u2026"
|
|
|
22654
23078
|
summary: "One step from `current`, in `direction` (`1` up, `-1` down).",
|
|
22655
23079
|
description: "One step from `current`, in `direction` (`1` up, `-1` down). Steps land on the grid `origin + n \xB7 step`, where `origin` is `min` by default. A value that is *off* the grid snaps to the nearest grid point **in the direction of travel** rather than jumping past it: with `min=5, step=10` the grid is 5, 15, 25, and stepping up from 7 gives 15, not 17. Fences stop the value; they never wrap unless `wrap` is set and both bounds are defined. Returns `current` unchanged when `step` is zero.",
|
|
22656
23080
|
members: [],
|
|
22657
|
-
version: "11.
|
|
23081
|
+
version: "11.10.0"
|
|
22658
23082
|
},
|
|
22659
23083
|
{
|
|
22660
23084
|
id: "locale-number-parts",
|
|
@@ -22666,7 +23090,7 @@ placeholder="Name or address\u2026"
|
|
|
22666
23090
|
summary: "Locale separators plus, when a currency is given, its symbol, side and fraction digits.",
|
|
22667
23091
|
description: "Locale separators plus, when a currency is given, its symbol, side and fraction digits. Memoized: constructing an `Intl.NumberFormat` is expensive and a field re-resolves this on every keystroke.",
|
|
22668
23092
|
members: [],
|
|
22669
|
-
version: "11.
|
|
23093
|
+
version: "11.10.0"
|
|
22670
23094
|
},
|
|
22671
23095
|
{
|
|
22672
23096
|
id: "to-ascii-digits",
|
|
@@ -22678,7 +23102,7 @@ placeholder="Name or address\u2026"
|
|
|
22678
23102
|
summary: "Map localized digits and Arabic separators to ASCII, so `\u0661\u0662\u0663\u0664\u066B\u0665` parses in `ar` and `\u0967\u0968\u0969\u096A.\u096B` in `hi`.",
|
|
22679
23103
|
description: "Map localized digits and Arabic separators to ASCII, so `\u0661\u0662\u0663\u0664\u066B\u0665` parses in `ar` and `\u0967\u0968\u0969\u096A.\u096B` in `hi`.",
|
|
22680
23104
|
members: [],
|
|
22681
|
-
version: "11.
|
|
23105
|
+
version: "11.10.0"
|
|
22682
23106
|
},
|
|
22683
23107
|
{
|
|
22684
23108
|
id: "evaluate-expression",
|
|
@@ -22690,7 +23114,7 @@ placeholder="Name or address\u2026"
|
|
|
22690
23114
|
summary: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**.",
|
|
22691
23115
|
description: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**. Returns a canonical decimal, or `null` when the text is not a well-formed expression. Floats are acceptable here in a way they are not elsewhere: this is a convenience path for spreadsheet muscle memory (`12*3`, `100/4+5`), and the result is settled to ten decimals before re-entering exact arithmetic. Division is the only operation that can produce a non-terminating decimal, and no exact representation would help there either.",
|
|
22692
23116
|
members: [],
|
|
22693
|
-
version: "11.
|
|
23117
|
+
version: "11.10.0"
|
|
22694
23118
|
},
|
|
22695
23119
|
{
|
|
22696
23120
|
id: "resolve-number-format",
|
|
@@ -22702,7 +23126,7 @@ placeholder="Name or address\u2026"
|
|
|
22702
23126
|
summary: "Fill in every preset, locale and currency default.",
|
|
22703
23127
|
description: "Fill in every preset, locale and currency default.",
|
|
22704
23128
|
members: [],
|
|
22705
|
-
version: "11.
|
|
23129
|
+
version: "11.10.0"
|
|
22706
23130
|
},
|
|
22707
23131
|
{
|
|
22708
23132
|
id: "parse-number",
|
|
@@ -22714,7 +23138,7 @@ placeholder="Name or address\u2026"
|
|
|
22714
23138
|
summary: "Read a user's text into a canonical decimal in **model units**.",
|
|
22715
23139
|
description: "Read a user's text into a canonical decimal in **model units**. Accepted, in order: canonical/ASCII (always, whatever the locale \u2014 it is what agents and APIs write), locale-grouped, affixed, localized digits, compact (`1.5k`), accounting negatives (`(1,234.56)` \u2192 `-1234.56`), and expressions when `allowExpressions` is set.",
|
|
22716
23140
|
members: [],
|
|
22717
|
-
version: "11.
|
|
23141
|
+
version: "11.10.0"
|
|
22718
23142
|
},
|
|
22719
23143
|
{
|
|
22720
23144
|
id: "format-number",
|
|
@@ -22726,7 +23150,7 @@ placeholder="Name or address\u2026"
|
|
|
22726
23150
|
summary: "Canonical decimal (model units) \u2192 the display number, without affixes.",
|
|
22727
23151
|
description: "Canonical decimal (model units) \u2192 the display number, without affixes. `min2` grouping \u2014 the default \u2014 starts at five integer digits, so a year renders `2026` rather than `2,026` while a price still renders `10,000`.",
|
|
22728
23152
|
members: [],
|
|
22729
|
-
version: "11.
|
|
23153
|
+
version: "11.10.0"
|
|
22730
23154
|
},
|
|
22731
23155
|
{
|
|
22732
23156
|
id: "raw-number-text",
|
|
@@ -22738,7 +23162,7 @@ placeholder="Name or address\u2026"
|
|
|
22738
23162
|
summary: "The plain text the field shows while focused: the display number with no grouping and no affixes, so the caret never has to walk over a separator that appears and vanishes mid-word.",
|
|
22739
23163
|
description: "The plain text the field shows while focused: the display number with no grouping and no affixes, so the caret never has to walk over a separator that appears and vanishes mid-word.",
|
|
22740
23164
|
members: [],
|
|
22741
|
-
version: "11.
|
|
23165
|
+
version: "11.10.0"
|
|
22742
23166
|
},
|
|
22743
23167
|
{
|
|
22744
23168
|
id: "settle-number",
|
|
@@ -22750,7 +23174,7 @@ placeholder="Name or address\u2026"
|
|
|
22750
23174
|
summary: "Round a committed value to the field's precision, in model units.",
|
|
22751
23175
|
description: "Round a committed value to the field's precision, in model units.",
|
|
22752
23176
|
members: [],
|
|
22753
|
-
version: "11.
|
|
23177
|
+
version: "11.10.0"
|
|
22754
23178
|
},
|
|
22755
23179
|
{
|
|
22756
23180
|
id: "speak-number",
|
|
@@ -22762,7 +23186,7 @@ placeholder="Name or address\u2026"
|
|
|
22762
23186
|
summary: "The `aria-valuetext` string: the formatted number with its affixes spoken.",
|
|
22763
23187
|
description: 'The `aria-valuetext` string: the formatted number with its affixes spoken. `aria-valuenow` alone announces "1234.56", which is the one thing about a money field that is not the point. An empty field says "Empty" per APG.',
|
|
22764
23188
|
members: [],
|
|
22765
|
-
version: "11.
|
|
23189
|
+
version: "11.10.0"
|
|
22766
23190
|
},
|
|
22767
23191
|
{
|
|
22768
23192
|
id: "to-number",
|
|
@@ -22774,7 +23198,7 @@ placeholder="Name or address\u2026"
|
|
|
22774
23198
|
summary: "Model-units canonical decimal \u2192 the bound `number`.",
|
|
22775
23199
|
description: "Model-units canonical decimal \u2192 the bound `number`.",
|
|
22776
23200
|
members: [],
|
|
22777
|
-
version: "11.
|
|
23201
|
+
version: "11.10.0"
|
|
22778
23202
|
},
|
|
22779
23203
|
{
|
|
22780
23204
|
id: "loses-precision",
|
|
@@ -22786,7 +23210,7 @@ placeholder="Name or address\u2026"
|
|
|
22786
23210
|
summary: "True when a value cannot survive the trip through `number` \u2014 the reason the components also expose an exact `valueAsString` model, and the trigger for the dev-mode warning.",
|
|
22787
23211
|
description: "True when a value cannot survive the trip through `number` \u2014 the reason the components also expose an exact `valueAsString` model, and the trigger for the dev-mode warning. Silent precision loss is the whole point of that second model, so it is worth saying out loud once. A `number` can only be checked for magnitude, since it has already lost whatever it was going to lose. A canonical string can be checked properly: `'9007199254740993'` comes back as `'9007199254740992'`.",
|
|
22788
23212
|
members: [],
|
|
22789
|
-
version: "11.
|
|
23213
|
+
version: "11.10.0"
|
|
22790
23214
|
},
|
|
22791
23215
|
{
|
|
22792
23216
|
id: "press-repeat-timing",
|
|
@@ -22823,7 +23247,7 @@ placeholder="Name or address\u2026"
|
|
|
22823
23247
|
description: ""
|
|
22824
23248
|
}
|
|
22825
23249
|
],
|
|
22826
|
-
version: "11.
|
|
23250
|
+
version: "11.10.0"
|
|
22827
23251
|
},
|
|
22828
23252
|
{
|
|
22829
23253
|
id: "press-repeat-config",
|
|
@@ -22872,7 +23296,7 @@ placeholder="Name or address\u2026"
|
|
|
22872
23296
|
description: ""
|
|
22873
23297
|
}
|
|
22874
23298
|
],
|
|
22875
|
-
version: "11.
|
|
23299
|
+
version: "11.10.0"
|
|
22876
23300
|
},
|
|
22877
23301
|
{
|
|
22878
23302
|
id: "press-repeat",
|
|
@@ -22909,7 +23333,7 @@ placeholder="Name or address\u2026"
|
|
|
22909
23333
|
description: "End a hold without firing `onRelease` \u2014 for `Escape` and `pointercancel`."
|
|
22910
23334
|
}
|
|
22911
23335
|
],
|
|
22912
|
-
version: "11.
|
|
23336
|
+
version: "11.10.0"
|
|
22913
23337
|
},
|
|
22914
23338
|
{
|
|
22915
23339
|
id: "create-press-repeat",
|
|
@@ -22921,7 +23345,7 @@ placeholder="Name or address\u2026"
|
|
|
22921
23345
|
summary: "",
|
|
22922
23346
|
description: "",
|
|
22923
23347
|
members: [],
|
|
22924
|
-
version: "11.
|
|
23348
|
+
version: "11.10.0"
|
|
22925
23349
|
},
|
|
22926
23350
|
{
|
|
22927
23351
|
id: "listbox-navigation-config",
|
|
@@ -22964,7 +23388,7 @@ placeholder="Name or address\u2026"
|
|
|
22964
23388
|
description: "Let Home/End jump to the ends of the list. Default false. In an editable combobox those keys belong to the caret \u2014 APG reserves them for text editing, and a control that steals them makes the text un-navigable while its list is open. Opt in only where focus is *not* in a text field (uni-multi-select-dropdown, whose focus rides the option checkboxes). Nothing is lost by leaving it off: opening with ArrowUp already lands on the last option, ArrowDown on the first, and navigation wraps at both ends."
|
|
22965
23389
|
}
|
|
22966
23390
|
],
|
|
22967
|
-
version: "11.
|
|
23391
|
+
version: "11.10.0"
|
|
22968
23392
|
},
|
|
22969
23393
|
{
|
|
22970
23394
|
id: "listbox-navigation",
|
|
@@ -23037,7 +23461,7 @@ placeholder="Name or address\u2026"
|
|
|
23037
23461
|
description: "Close when focus leaves the control entirely (not on internal moves)."
|
|
23038
23462
|
}
|
|
23039
23463
|
],
|
|
23040
|
-
version: "11.
|
|
23464
|
+
version: "11.10.0"
|
|
23041
23465
|
},
|
|
23042
23466
|
{
|
|
23043
23467
|
id: "create-listbox-navigation",
|
|
@@ -23049,7 +23473,7 @@ placeholder="Name or address\u2026"
|
|
|
23049
23473
|
summary: "Factory mirroring the signal-API style used elsewhere in the CDK.",
|
|
23050
23474
|
description: "Factory mirroring the signal-API style used elsewhere in the CDK.",
|
|
23051
23475
|
members: [],
|
|
23052
|
-
version: "11.
|
|
23476
|
+
version: "11.10.0"
|
|
23053
23477
|
},
|
|
23054
23478
|
{
|
|
23055
23479
|
id: "placement",
|
|
@@ -23061,7 +23485,7 @@ placeholder="Name or address\u2026"
|
|
|
23061
23485
|
summary: "Native CSS Anchor Positioning helpers (Baseline 2026).",
|
|
23062
23486
|
description: "Native CSS Anchor Positioning helpers (Baseline 2026). These replace the former",
|
|
23063
23487
|
members: [],
|
|
23064
|
-
version: "11.
|
|
23488
|
+
version: "11.10.0"
|
|
23065
23489
|
},
|
|
23066
23490
|
{
|
|
23067
23491
|
id: "anchor-offset",
|
|
@@ -23086,7 +23510,7 @@ placeholder="Name or address\u2026"
|
|
|
23086
23510
|
description: "Shift along the cross axis, from the aligned edge."
|
|
23087
23511
|
}
|
|
23088
23512
|
],
|
|
23089
|
-
version: "11.
|
|
23513
|
+
version: "11.10.0"
|
|
23090
23514
|
},
|
|
23091
23515
|
{
|
|
23092
23516
|
id: "new-anchor-name",
|
|
@@ -23098,7 +23522,7 @@ placeholder="Name or address\u2026"
|
|
|
23098
23522
|
summary: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
|
|
23099
23523
|
description: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
|
|
23100
23524
|
members: [],
|
|
23101
|
-
version: "11.
|
|
23525
|
+
version: "11.10.0"
|
|
23102
23526
|
},
|
|
23103
23527
|
{
|
|
23104
23528
|
id: "anchor-styles",
|
|
@@ -23110,7 +23534,7 @@ placeholder="Name or address\u2026"
|
|
|
23110
23534
|
summary: "Emotion style object anchoring a panel to `anchor` at `placement`.",
|
|
23111
23535
|
description: "Emotion style object anchoring a panel to `anchor` at `placement`. Spread into the panel's `css()` styles. The trigger element must carry `anchor-name: <anchor>` (see `newAnchorName`).",
|
|
23112
23536
|
members: [],
|
|
23113
|
-
version: "11.
|
|
23537
|
+
version: "11.10.0"
|
|
23114
23538
|
},
|
|
23115
23539
|
{
|
|
23116
23540
|
id: "anchor-arrow-styles",
|
|
@@ -23122,7 +23546,7 @@ placeholder="Name or address\u2026"
|
|
|
23122
23546
|
summary: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor.",
|
|
23123
23547
|
description: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor. Static per placement: if the browser flips the panel via position-try, the arrow stays on the configured side (cosmetic-only degradation, matching the flip-support caveat above). `overlap` (default 0 \u2014 cut exactly on the panel edge) extends the kept half into the panel; see for when that is ever wanted.",
|
|
23124
23548
|
members: [],
|
|
23125
|
-
version: "11.
|
|
23549
|
+
version: "11.10.0"
|
|
23126
23550
|
},
|
|
23127
23551
|
{
|
|
23128
23552
|
id: "spotlight-options",
|
|
@@ -23153,7 +23577,7 @@ placeholder="Name or address\u2026"
|
|
|
23153
23577
|
description: "Scrim paint; scheme-invariant by convention, like `::backdrop`."
|
|
23154
23578
|
}
|
|
23155
23579
|
],
|
|
23156
|
-
version: "11.
|
|
23580
|
+
version: "11.10.0"
|
|
23157
23581
|
},
|
|
23158
23582
|
{
|
|
23159
23583
|
id: "spotlight-styles",
|
|
@@ -23184,7 +23608,7 @@ placeholder="Name or address\u2026"
|
|
|
23184
23608
|
description: "Hole-sized click-blocker, shown when the target must not be interactive."
|
|
23185
23609
|
}
|
|
23186
23610
|
],
|
|
23187
|
-
version: "11.
|
|
23611
|
+
version: "11.10.0"
|
|
23188
23612
|
},
|
|
23189
23613
|
{
|
|
23190
23614
|
id: "anchor-rect",
|
|
@@ -23233,7 +23657,7 @@ placeholder="Name or address\u2026"
|
|
|
23233
23657
|
description: ""
|
|
23234
23658
|
}
|
|
23235
23659
|
],
|
|
23236
|
-
version: "11.
|
|
23660
|
+
version: "11.10.0"
|
|
23237
23661
|
},
|
|
23238
23662
|
{
|
|
23239
23663
|
id: "transform-origin-for",
|
|
@@ -23245,7 +23669,7 @@ placeholder="Name or address\u2026"
|
|
|
23245
23669
|
summary: "Transform origin for a panel's open/close scale animation, derived from where the panel **actually** rendered relative to its anchor \u2014 not from the requested placement.",
|
|
23246
23670
|
description: "Transform origin for a panel's open/close scale animation, derived from where the panel **actually** rendered relative to its anchor \u2014 not from the requested placement. `position-try-fallbacks` lets the browser flip a panel at viewport edges, and a statically mapped origin then animates from the wrong corner (a `bottom-end` picker flipped above its field would still scale from `top right`). Measure after the popover is shown and apply the result as an inline style. Returns keyword pairs like `'top right'` / `'bottom center'`, or `null` when the panel has no box yet (e.g. `display: none`, or jsdom).",
|
|
23247
23671
|
members: [],
|
|
23248
|
-
version: "11.
|
|
23672
|
+
version: "11.10.0"
|
|
23249
23673
|
},
|
|
23250
23674
|
{
|
|
23251
23675
|
id: "transform-origins",
|
|
@@ -23257,7 +23681,7 @@ placeholder="Name or address\u2026"
|
|
|
23257
23681
|
summary: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
|
|
23258
23682
|
description: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
|
|
23259
23683
|
members: [],
|
|
23260
|
-
version: "11.
|
|
23684
|
+
version: "11.10.0"
|
|
23261
23685
|
},
|
|
23262
23686
|
{
|
|
23263
23687
|
id: "set-anchor-name",
|
|
@@ -23269,7 +23693,7 @@ placeholder="Name or address\u2026"
|
|
|
23269
23693
|
summary: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
|
|
23270
23694
|
description: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
|
|
23271
23695
|
members: [],
|
|
23272
|
-
version: "11.
|
|
23696
|
+
version: "11.10.0"
|
|
23273
23697
|
},
|
|
23274
23698
|
{
|
|
23275
23699
|
id: "clear-anchor-name",
|
|
@@ -23281,7 +23705,7 @@ placeholder="Name or address\u2026"
|
|
|
23281
23705
|
summary: "",
|
|
23282
23706
|
description: "",
|
|
23283
23707
|
members: [],
|
|
23284
|
-
version: "11.
|
|
23708
|
+
version: "11.10.0"
|
|
23285
23709
|
},
|
|
23286
23710
|
{
|
|
23287
23711
|
id: "resolve-element",
|
|
@@ -23293,7 +23717,7 @@ placeholder="Name or address\u2026"
|
|
|
23293
23717
|
summary: "Resolve an element-or-id reference.",
|
|
23294
23718
|
description: "Resolve an element-or-id reference. Id strings are looked up at call time \u2014 never cache the result across opens, the element may have been re-rendered. `''` and null-ish mean \"unset\" (falsy guard: an empty string is the only typeable empty for a string-typed input).",
|
|
23295
23719
|
members: [],
|
|
23296
|
-
version: "11.
|
|
23720
|
+
version: "11.10.0"
|
|
23297
23721
|
},
|
|
23298
23722
|
{
|
|
23299
23723
|
id: "is-toggle-open",
|
|
@@ -23305,7 +23729,7 @@ placeholder="Name or address\u2026"
|
|
|
23305
23729
|
summary: "True when a native `toggle` event reports the overlay opening.",
|
|
23306
23730
|
description: "True when a native `toggle` event reports the overlay opening.",
|
|
23307
23731
|
members: [],
|
|
23308
|
-
version: "11.
|
|
23732
|
+
version: "11.10.0"
|
|
23309
23733
|
},
|
|
23310
23734
|
{
|
|
23311
23735
|
id: "discrete-overlay-transition",
|
|
@@ -23317,7 +23741,7 @@ placeholder="Name or address\u2026"
|
|
|
23317
23741
|
summary: "The discrete-transition block that animates an element into and out of the top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus `display`/`overlay`, the shown state under `:popover-open`, and `@starting-style` so entry transitions run from the hidden state.",
|
|
23318
23742
|
description: "The discrete-transition block that animates an element into and out of the top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus `display`/`overlay`, the shown state under `:popover-open`, and `@starting-style` so entry transitions run from the hidden state. `display` and `overlay` must ride along or the element cannot animate into and out of the top layer at all \u2014 it would simply appear and vanish. `timingFunction` is omitted from the output when not given, leaving the CSS initial value (`ease`), so callers that never asked for one are unaffected.",
|
|
23319
23743
|
members: [],
|
|
23320
|
-
version: "11.
|
|
23744
|
+
version: "11.10.0"
|
|
23321
23745
|
},
|
|
23322
23746
|
{
|
|
23323
23747
|
id: "restore-overlay-focus",
|
|
@@ -23329,7 +23753,7 @@ placeholder="Name or address\u2026"
|
|
|
23329
23753
|
summary: "Returns focus to `target` when an overlay closes while focus was inside its panel (or was dropped on `<body>` by the top layer closing), so keyboard users are never stranded (WCAG 2.4.3).",
|
|
23330
23754
|
description: "Returns focus to `target` when an overlay closes while focus was inside its panel (or was dropped on `<body>` by the top layer closing), so keyboard users are never stranded (WCAG 2.4.3). Focus resting anywhere else is left alone.",
|
|
23331
23755
|
members: [],
|
|
23332
|
-
version: "11.
|
|
23756
|
+
version: "11.10.0"
|
|
23333
23757
|
},
|
|
23334
23758
|
{
|
|
23335
23759
|
id: "focusable-elements",
|
|
@@ -23341,7 +23765,7 @@ placeholder="Name or address\u2026"
|
|
|
23341
23765
|
summary: "The focusable elements inside `root`, in DOM order.",
|
|
23342
23766
|
description: "The focusable elements inside `root`, in DOM order. Filters disabled controls, and hidden ones where the environment can tell: jsdom reports `offsetParent` as null for every element, so the visibility filter applies only when the document actually lays out (some element has an offsetParent).",
|
|
23343
23767
|
members: [],
|
|
23344
|
-
version: "11.
|
|
23768
|
+
version: "11.10.0"
|
|
23345
23769
|
},
|
|
23346
23770
|
{
|
|
23347
23771
|
id: "backdrop-dismiss",
|
|
@@ -23366,7 +23790,7 @@ placeholder="Name or address\u2026"
|
|
|
23366
23790
|
description: "True only when both the press and the click landed on the dialog itself."
|
|
23367
23791
|
}
|
|
23368
23792
|
],
|
|
23369
|
-
version: "11.
|
|
23793
|
+
version: "11.10.0"
|
|
23370
23794
|
},
|
|
23371
23795
|
{
|
|
23372
23796
|
id: "sort-direction",
|
|
@@ -23378,7 +23802,38 @@ placeholder="Name or address\u2026"
|
|
|
23378
23802
|
summary: "",
|
|
23379
23803
|
description: "",
|
|
23380
23804
|
members: [],
|
|
23381
|
-
version: "11.
|
|
23805
|
+
version: "11.10.0"
|
|
23806
|
+
},
|
|
23807
|
+
{
|
|
23808
|
+
id: "row-key",
|
|
23809
|
+
name: "RowKey",
|
|
23810
|
+
kind: "type",
|
|
23811
|
+
module: "datasource",
|
|
23812
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23813
|
+
signature: "type RowKey = string | number",
|
|
23814
|
+
summary: "What `rowId` returns: a stable identity for a row across re-fetches.",
|
|
23815
|
+
description: "What `rowId` returns: a stable identity for a row across re-fetches.",
|
|
23816
|
+
members: [],
|
|
23817
|
+
version: "11.10.0"
|
|
23818
|
+
},
|
|
23819
|
+
{
|
|
23820
|
+
id: "uni-datasource-options",
|
|
23821
|
+
name: "UniDatasourceOptions",
|
|
23822
|
+
kind: "interface",
|
|
23823
|
+
module: "datasource",
|
|
23824
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23825
|
+
signature: "interface UniDatasourceOptions<T>",
|
|
23826
|
+
summary: "Options shared by every datasource.",
|
|
23827
|
+
description: "Options shared by every datasource.",
|
|
23828
|
+
members: [
|
|
23829
|
+
{
|
|
23830
|
+
name: "rowId",
|
|
23831
|
+
kind: "property",
|
|
23832
|
+
signature: "rowId?: (row: T) => RowKey",
|
|
23833
|
+
description: "Stable identity for a row. Unset, rows are compared by reference, which never matches a row rebuilt from a fresh fetch \u2014 a realtime update that replaces the records would empty a selection and move an expanded row. Set it (`(row) => row.id`) and selection, `uni-data-table`'s expanded row and its row tracking all key by it instead."
|
|
23834
|
+
}
|
|
23835
|
+
],
|
|
23836
|
+
version: "11.10.0"
|
|
23382
23837
|
},
|
|
23383
23838
|
{
|
|
23384
23839
|
id: "sort",
|
|
@@ -23403,7 +23858,7 @@ placeholder="Name or address\u2026"
|
|
|
23403
23858
|
description: ""
|
|
23404
23859
|
}
|
|
23405
23860
|
],
|
|
23406
|
-
version: "11.
|
|
23861
|
+
version: "11.10.0"
|
|
23407
23862
|
},
|
|
23408
23863
|
{
|
|
23409
23864
|
id: "uni-base-datasource",
|
|
@@ -23433,6 +23888,18 @@ placeholder="Name or address\u2026"
|
|
|
23433
23888
|
signature: "selections = signal<T[]>([])",
|
|
23434
23889
|
description: ""
|
|
23435
23890
|
},
|
|
23891
|
+
{
|
|
23892
|
+
name: "rowId",
|
|
23893
|
+
kind: "property",
|
|
23894
|
+
signature: "rowId?: (row: T) => RowKey",
|
|
23895
|
+
description: "See `UniDatasourceOptions.rowId`. Settable after construction."
|
|
23896
|
+
},
|
|
23897
|
+
{
|
|
23898
|
+
name: "rowKey",
|
|
23899
|
+
kind: "method",
|
|
23900
|
+
signature: "rowKey(row: T): RowKey | T",
|
|
23901
|
+
description: "The row's identity: its `rowId`, or the row itself when there is none."
|
|
23902
|
+
},
|
|
23436
23903
|
{
|
|
23437
23904
|
name: "sort",
|
|
23438
23905
|
kind: "property",
|
|
@@ -23517,6 +23984,12 @@ placeholder="Name or address\u2026"
|
|
|
23517
23984
|
signature: "toggleSelection(row: T)",
|
|
23518
23985
|
description: ""
|
|
23519
23986
|
},
|
|
23987
|
+
{
|
|
23988
|
+
name: "setSelected",
|
|
23989
|
+
kind: "method",
|
|
23990
|
+
signature: "setSelected(rows: T[], selected: boolean)",
|
|
23991
|
+
description: "Select or deselect several rows at once \u2014 a select-all over the rows that may be selected, leaving any others (another page's) as they are. Keyed by `rowId`, so a selected row re-fetched as a new object is replaced rather than duplicated."
|
|
23992
|
+
},
|
|
23520
23993
|
{
|
|
23521
23994
|
name: "clearSelections",
|
|
23522
23995
|
kind: "method",
|
|
@@ -23572,7 +24045,7 @@ placeholder="Name or address\u2026"
|
|
|
23572
24045
|
description: ""
|
|
23573
24046
|
}
|
|
23574
24047
|
],
|
|
23575
|
-
version: "11.
|
|
24048
|
+
version: "11.10.0"
|
|
23576
24049
|
},
|
|
23577
24050
|
{
|
|
23578
24051
|
id: "page-request",
|
|
@@ -23615,7 +24088,7 @@ placeholder="Name or address\u2026"
|
|
|
23615
24088
|
description: ""
|
|
23616
24089
|
}
|
|
23617
24090
|
],
|
|
23618
|
-
version: "11.
|
|
24091
|
+
version: "11.10.0"
|
|
23619
24092
|
},
|
|
23620
24093
|
{
|
|
23621
24094
|
id: "page-response",
|
|
@@ -23652,7 +24125,7 @@ placeholder="Name or address\u2026"
|
|
|
23652
24125
|
description: ""
|
|
23653
24126
|
}
|
|
23654
24127
|
],
|
|
23655
|
-
version: "11.
|
|
24128
|
+
version: "11.10.0"
|
|
23656
24129
|
},
|
|
23657
24130
|
{
|
|
23658
24131
|
id: "data-loader",
|
|
@@ -23664,7 +24137,7 @@ placeholder="Name or address\u2026"
|
|
|
23664
24137
|
summary: "",
|
|
23665
24138
|
description: "",
|
|
23666
24139
|
members: [],
|
|
23667
|
-
version: "11.
|
|
24140
|
+
version: "11.10.0"
|
|
23668
24141
|
},
|
|
23669
24142
|
{
|
|
23670
24143
|
id: "uni-server-side-datasource",
|
|
@@ -23803,7 +24276,7 @@ placeholder="Name or address\u2026"
|
|
|
23803
24276
|
description: ""
|
|
23804
24277
|
}
|
|
23805
24278
|
],
|
|
23806
|
-
version: "11.
|
|
24279
|
+
version: "11.10.0"
|
|
23807
24280
|
},
|
|
23808
24281
|
{
|
|
23809
24282
|
id: "uni-datasource",
|
|
@@ -23815,7 +24288,7 @@ placeholder="Name or address\u2026"
|
|
|
23815
24288
|
summary: "",
|
|
23816
24289
|
description: "",
|
|
23817
24290
|
members: [],
|
|
23818
|
-
version: "11.
|
|
24291
|
+
version: "11.10.0"
|
|
23819
24292
|
},
|
|
23820
24293
|
{
|
|
23821
24294
|
id: "uni-record-datasource",
|
|
@@ -23924,7 +24397,7 @@ placeholder="Name or address\u2026"
|
|
|
23924
24397
|
description: ""
|
|
23925
24398
|
}
|
|
23926
24399
|
],
|
|
23927
|
-
version: "11.
|
|
24400
|
+
version: "11.10.0"
|
|
23928
24401
|
},
|
|
23929
24402
|
{
|
|
23930
24403
|
id: "local-storage-service",
|
|
@@ -23979,7 +24452,7 @@ placeholder="Name or address\u2026"
|
|
|
23979
24452
|
description: ""
|
|
23980
24453
|
}
|
|
23981
24454
|
],
|
|
23982
|
-
version: "11.
|
|
24455
|
+
version: "11.10.0"
|
|
23983
24456
|
},
|
|
23984
24457
|
{
|
|
23985
24458
|
id: "alert",
|
|
@@ -24034,7 +24507,7 @@ placeholder="Name or address\u2026"
|
|
|
24034
24507
|
description: ""
|
|
24035
24508
|
}
|
|
24036
24509
|
],
|
|
24037
|
-
version: "11.
|
|
24510
|
+
version: "11.10.0"
|
|
24038
24511
|
},
|
|
24039
24512
|
{
|
|
24040
24513
|
id: "snackbar",
|
|
@@ -24089,7 +24562,7 @@ placeholder="Name or address\u2026"
|
|
|
24089
24562
|
description: ""
|
|
24090
24563
|
}
|
|
24091
24564
|
],
|
|
24092
|
-
version: "11.
|
|
24565
|
+
version: "11.10.0"
|
|
24093
24566
|
},
|
|
24094
24567
|
{
|
|
24095
24568
|
id: "confirmation",
|
|
@@ -24138,7 +24611,7 @@ placeholder="Name or address\u2026"
|
|
|
24138
24611
|
description: ""
|
|
24139
24612
|
}
|
|
24140
24613
|
],
|
|
24141
|
-
version: "11.
|
|
24614
|
+
version: "11.10.0"
|
|
24142
24615
|
},
|
|
24143
24616
|
{
|
|
24144
24617
|
id: "notification-service",
|
|
@@ -24205,7 +24678,7 @@ placeholder="Name or address\u2026"
|
|
|
24205
24678
|
description: ""
|
|
24206
24679
|
}
|
|
24207
24680
|
],
|
|
24208
|
-
version: "11.
|
|
24681
|
+
version: "11.10.0"
|
|
24209
24682
|
},
|
|
24210
24683
|
{
|
|
24211
24684
|
id: "option",
|
|
@@ -24242,7 +24715,7 @@ placeholder="Name or address\u2026"
|
|
|
24242
24715
|
description: "Visible and announced, but not committable; listbox navigation skips it."
|
|
24243
24716
|
}
|
|
24244
24717
|
],
|
|
24245
|
-
version: "11.
|
|
24718
|
+
version: "11.10.0"
|
|
24246
24719
|
},
|
|
24247
24720
|
{
|
|
24248
24721
|
id: "options",
|
|
@@ -24254,7 +24727,7 @@ placeholder="Name or address\u2026"
|
|
|
24254
24727
|
summary: "",
|
|
24255
24728
|
description: "",
|
|
24256
24729
|
members: [],
|
|
24257
|
-
version: "11.
|
|
24730
|
+
version: "11.10.0"
|
|
24258
24731
|
},
|
|
24259
24732
|
{
|
|
24260
24733
|
id: "use-timer",
|
|
@@ -24266,7 +24739,7 @@ placeholder="Name or address\u2026"
|
|
|
24266
24739
|
summary: "",
|
|
24267
24740
|
description: "",
|
|
24268
24741
|
members: [],
|
|
24269
|
-
version: "11.
|
|
24742
|
+
version: "11.10.0"
|
|
24270
24743
|
},
|
|
24271
24744
|
{
|
|
24272
24745
|
id: "acceptable-file",
|
|
@@ -24278,7 +24751,7 @@ placeholder="Name or address\u2026"
|
|
|
24278
24751
|
summary: "",
|
|
24279
24752
|
description: "",
|
|
24280
24753
|
members: [],
|
|
24281
|
-
version: "11.
|
|
24754
|
+
version: "11.10.0"
|
|
24282
24755
|
},
|
|
24283
24756
|
{
|
|
24284
24757
|
id: "get-file-extension",
|
|
@@ -24290,7 +24763,7 @@ placeholder="Name or address\u2026"
|
|
|
24290
24763
|
summary: "",
|
|
24291
24764
|
description: "",
|
|
24292
24765
|
members: [],
|
|
24293
|
-
version: "11.
|
|
24766
|
+
version: "11.10.0"
|
|
24294
24767
|
},
|
|
24295
24768
|
{
|
|
24296
24769
|
id: "query-permission",
|
|
@@ -24302,7 +24775,7 @@ placeholder="Name or address\u2026"
|
|
|
24302
24775
|
summary: "The current state of a browser permission.",
|
|
24303
24776
|
description: 'The current state of a browser permission. Resolves `unsupported` \u2014 never rejects \u2014 where the Permissions API is missing or does not know the name, which is the norm rather than the exception: Firefox and Safari reject `clipboard-write`, for one. Treat `unsupported` as "can\'t tell", not "no".',
|
|
24304
24777
|
members: [],
|
|
24305
|
-
version: "11.
|
|
24778
|
+
version: "11.10.0"
|
|
24306
24779
|
},
|
|
24307
24780
|
{
|
|
24308
24781
|
id: "permission-service",
|
|
@@ -24327,7 +24800,7 @@ placeholder="Name or address\u2026"
|
|
|
24327
24800
|
description: ""
|
|
24328
24801
|
}
|
|
24329
24802
|
],
|
|
24330
|
-
version: "11.
|
|
24803
|
+
version: "11.10.0"
|
|
24331
24804
|
},
|
|
24332
24805
|
{
|
|
24333
24806
|
id: "permission",
|
|
@@ -24339,7 +24812,7 @@ placeholder="Name or address\u2026"
|
|
|
24339
24812
|
summary: "",
|
|
24340
24813
|
description: "",
|
|
24341
24814
|
members: [],
|
|
24342
|
-
version: "11.
|
|
24815
|
+
version: "11.10.0"
|
|
24343
24816
|
},
|
|
24344
24817
|
{
|
|
24345
24818
|
id: "permission-state",
|
|
@@ -24351,7 +24824,7 @@ placeholder="Name or address\u2026"
|
|
|
24351
24824
|
summary: "",
|
|
24352
24825
|
description: "",
|
|
24353
24826
|
members: [],
|
|
24354
|
-
version: "11.
|
|
24827
|
+
version: "11.10.0"
|
|
24355
24828
|
},
|
|
24356
24829
|
{
|
|
24357
24830
|
id: "clipboard-copy-result",
|
|
@@ -24363,7 +24836,7 @@ placeholder="Name or address\u2026"
|
|
|
24363
24836
|
summary: "How a copy ended: - `copied` \u2014 the content is on the clipboard.",
|
|
24364
24837
|
description: "How a copy ended: - `copied` \u2014 the content is on the clipboard. - `denied` \u2014 the user or a policy has blocked clipboard access for this site; only a change in the browser's site settings will fix it. - `unsupported` \u2014 no Clipboard API here (an insecure context, a server render, an old browser) or the browser cannot write one of the types. - `failed` \u2014 the browser refused this attempt for another reason, most often a call made outside a user gesture or from an unfocused document.",
|
|
24365
24838
|
members: [],
|
|
24366
|
-
version: "11.
|
|
24839
|
+
version: "11.10.0"
|
|
24367
24840
|
},
|
|
24368
24841
|
{
|
|
24369
24842
|
id: "clipboard-data",
|
|
@@ -24375,7 +24848,7 @@ placeholder="Name or address\u2026"
|
|
|
24375
24848
|
summary: "One clipboard representation; a promise lets the data arrive after the gesture.",
|
|
24376
24849
|
description: "One clipboard representation; a promise lets the data arrive after the gesture.",
|
|
24377
24850
|
members: [],
|
|
24378
|
-
version: "11.
|
|
24851
|
+
version: "11.10.0"
|
|
24379
24852
|
},
|
|
24380
24853
|
{
|
|
24381
24854
|
id: "clipboard-content",
|
|
@@ -24387,7 +24860,7 @@ placeholder="Name or address\u2026"
|
|
|
24387
24860
|
summary: "What to copy: a plain string, or one item in several representations keyed by MIME type \u2014 `{ 'text/plain': \u2026, 'text/html': \u2026 }`, `{ 'image/png': blob }`.",
|
|
24388
24861
|
description: "What to copy: a plain string, or one item in several representations keyed by MIME type \u2014 `{ 'text/plain': \u2026, 'text/html': \u2026 }`, `{ 'image/png': blob }`.",
|
|
24389
24862
|
members: [],
|
|
24390
|
-
version: "11.
|
|
24863
|
+
version: "11.10.0"
|
|
24391
24864
|
},
|
|
24392
24865
|
{
|
|
24393
24866
|
id: "copy-to-clipboard",
|
|
@@ -24399,14 +24872,14 @@ placeholder="Name or address\u2026"
|
|
|
24399
24872
|
summary: "Copies text or rich content with the Async Clipboard API.",
|
|
24400
24873
|
description: "Copies text or rich content with the Async Clipboard API. Never rejects: the result says what happened, so a caller can tell the user why. Call it directly from the click or key handler. The write starts synchronously, before anything is awaited, because browsers only honor it inside the user gesture \u2014 which is also why the `clipboard-write` permission is consulted after a refusal, to explain it, rather than before the attempt. For content that has to be fetched or rendered first, pass a promise as the value instead of awaiting it yourself.",
|
|
24401
24874
|
members: [],
|
|
24402
|
-
version: "11.
|
|
24875
|
+
version: "11.10.0"
|
|
24403
24876
|
}
|
|
24404
24877
|
],
|
|
24405
24878
|
utilityDocs: [
|
|
24406
24879
|
{
|
|
24407
24880
|
module: "datasource",
|
|
24408
24881
|
title: "Datasource",
|
|
24409
|
-
markdown: "# Datasource\n\nThe Datasource system provides a flexible and reactive way to manage data collections in Angular applications. It supports both client-side and server-side data operations with a unified API.\n\n## Architecture\n\nThe datasource system consists of three main classes:\n\n- **`UniBaseDatasource<T>`**: Abstract base class defining the common interface\n- **`UniRecordDatasource<T>`**: Client-side datasource for in-memory data operations\n- **`UniServerSideDatasource<T>`**: Server-side datasource using Angular's resource signal\n\n## Features\n\n- **Reactive State Management**: Built with Angular signals for efficient reactivity\n- **Unified API**: Both client-side and server-side datasources implement the same interface\n- **Sorting**: Sort data by any column in ascending or descending order\n- **Filtering**: Apply filters with appropriate handling for client vs server-side\n- **Pagination**: Navigate through data with built-in pagination controls\n- **Selection**: Track and manage selected items\n- **Loading States**: Server-side datasource provides loading and error states\n\n## Client-Side Datasource\n\nFor in-memory data operations, use `UniRecordDatasource`:\n\n```typescript\nimport { UniRecordDatasource } from '@uni-design-system/uni-angular';\n\ninterface User {\n id: number;\n name: string;\n email: string;\n age: number;\n}\n\n@Component({...})\nclass ClientSideComponent {\n // Static data for client-side operations\n users: User[] = [\n { id: 1, name: 'John Doe', email: 'john@example.com', age: 30 },\n { id: 2, name: 'Jane Smith', email: 'jane@example.com', age: 25 },\n // more users...\n ];\n\n datasource = new UniRecordDatasource<User>(this.users);\n\n constructor() {\n // Set page size for pagination\n this.datasource.setPageSize(10);\n\n // Apply a filter function (client-side filtering)\n this.datasource.setFilter(user => user.age > 18);\n\n // Sort by a column\n this.datasource.sortRecords({\n column: 'name',\n direction: 'asc'\n });\n }\n\n // Handle row selection\n onRowClick(user: User) {\n this.datasource.toggleSelection(user);\n }\n\n // Navigate to next page\n nextPage() {\n this.datasource.nextPage();\n }\n}\n```\n\n## Server-Side Datasource\n\nFor server-side operations with automatic loading states, use `UniServerSideDatasource`:\n\n```typescript\nimport { UniServerSideDatasource, PageRequest, PageResponse } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass ServerSideComponent {\n datasource = new UniServerSideDatasource<User>(\n // Data loader function\n async (request: PageRequest): Promise<PageResponse<User>> => {\n const response = await this.userService.getUsers({\n page: request.pageNumber,\n size: request.pageSize,\n sort: request.sortColumn,\n order: request.sortDirection,\n filter: request.filter\n });\n\n return {\n data: response.users,\n totalRecords: response.total,\n pageNumber: request.pageNumber,\n pageSize: request.pageSize\n };\n },\n 10 // initial page size\n );\n\n constructor() {\n // Apply server-side filter (sends filter object to server)\n this.datasource.setFilter({ department: 'Engineering', active: true });\n\n // Sort by a column (triggers server request)\n this.datasource.sortRecords({\n column: 'name',\n direction: 'asc'\n });\n }\n\n // Access loading and error states\n get isLoading() {\n return this.datasource.isLoading();\n }\n\n get hasError() {\n return this.datasource.hasError();\n }\n\n // Refresh data from server\n refreshData() {\n this.datasource.refresh();\n }\n}\n```\n\n## API Reference\n\n### Common Properties (Both Datasources)\n\n- `records`: Signal containing the current page's filtered and sorted records\n- `recordCount`: Signal with the count of filtered records\n- `selections`: Signal containing currently selected items\n- `sort`: Signal containing the current sort configuration\n- `sortColumn`: Computed signal with the current sort column\n- `sortDirection`: Computed signal with the current sort direction\n- `pageIndex`: Signal with the current page index (zero-based)\n- `pageSize`: Signal with the number of items per page\n- `pageCount`: Signal with the total number of pages\n- `pages`: Signal with array of page numbers for pagination UI\n- `truncatedPages`: Signal with truncated page numbers (includes ellipsis)\n- `disablePrevious`: Signal indicating if previous button should be disabled\n- `disableNext`: Signal indicating if next button should be disabled\n\n### Common Methods (Both Datasources)\n\n- `isSelected(row)`: Checks if a row is selected\n- `toggleSelection(row)`: Toggles selection state of a row\n- `clearSelections()`: Clears all selections\n- `selectAll()`: Selects all records on current page\n- `sortRecords(sort)`: Sets the sort configuration\n- `firstPage()`, `nextPage()`, `previousPage()`, `lastPage()`: Navigation methods\n- `jumpToPage(page)`: Jumps to a specific page\n- `setPageSize(size)`: Sets the page size and resets to first page\n\n### Record Datasource Specific\n\n**Properties:**\n\n- `initialRecords`: Signal containing the original unfiltered data\n- `filter`: Signal containing the current filter function\n\n**Methods:**\n\n- `setFilter(predicate: (item: T) => boolean)`: Sets a filter function for client-side filtering\n- `clearFilter()`: Clears the current filter (shows all records)\n\n### Server-Side Datasource Specific\n\n**Properties:**\n\n- `isLoading`: Signal indicating if data is currently being loaded\n- `error`: Signal containing any loading errors\n- `hasError`: Signal indicating if there's an error state\n\n**Methods:**\n\n- `setFilter(filterObj: Record<string, any>)`: Sets filter parameters sent to server\n- `clearFilter()`: Clears all filter parameters\n- `refresh()`: Manually triggers a data reload from server\n- `getPageRequest()`: Returns the current page request parameters\n\n### Types\n\n```typescript\ninterface PageRequest {\n pageNumber: number;\n pageSize: number;\n sortColumn?: string;\n sortDirection?: SortDirection;\n filter?: Record<string, any>;\n}\n\ninterface PageResponse<T> {\n data: T[];\n totalRecords: number;\n pageNumber: number;\n pageSize: number;\n}\n\ntype DataLoader<T> = (request: PageRequest) => Promise<PageResponse<T>>;\n\ntype SortDirection = 'asc' | 'desc' | 'indet';\n\ninterface Sort<T> {\n column?: keyof T;\n direction: SortDirection;\n}\n```\n\n## Examples\n\n_Live demo on the Storybook page._"
|
|
24882
|
+
markdown: "# Datasource\n\nThe Datasource system provides a flexible and reactive way to manage data collections in Angular applications. It supports both client-side and server-side data operations with a unified API.\n\n## Architecture\n\nThe datasource system consists of three main classes:\n\n- **`UniBaseDatasource<T>`**: Abstract base class defining the common interface\n- **`UniRecordDatasource<T>`**: Client-side datasource for in-memory data operations\n- **`UniServerSideDatasource<T>`**: Server-side datasource using Angular's resource signal\n\n## Features\n\n- **Reactive State Management**: Built with Angular signals for efficient reactivity\n- **Unified API**: Both client-side and server-side datasources implement the same interface\n- **Sorting**: Sort data by any column in ascending or descending order\n- **Filtering**: Apply filters with appropriate handling for client vs server-side\n- **Pagination**: Navigate through data with built-in pagination controls\n- **Selection**: Track and manage selected items\n- **Loading States**: Server-side datasource provides loading and error states\n\n## Client-Side Datasource\n\nFor in-memory data operations, use `UniRecordDatasource`:\n\n```typescript\nimport { UniRecordDatasource } from '@uni-design-system/uni-angular';\n\ninterface User {\n id: number;\n name: string;\n email: string;\n age: number;\n}\n\n@Component({...})\nclass ClientSideComponent {\n // Static data for client-side operations\n users: User[] = [\n { id: 1, name: 'John Doe', email: 'john@example.com', age: 30 },\n { id: 2, name: 'Jane Smith', email: 'jane@example.com', age: 25 },\n // more users...\n ];\n\n datasource = new UniRecordDatasource<User>(this.users);\n\n constructor() {\n // Set page size for pagination\n this.datasource.setPageSize(10);\n\n // Apply a filter function (client-side filtering)\n this.datasource.setFilter(user => user.age > 18);\n\n // Sort by a column\n this.datasource.sortRecords({\n column: 'name',\n direction: 'asc'\n });\n }\n\n // Handle row selection\n onRowClick(user: User) {\n this.datasource.toggleSelection(user);\n }\n\n // Navigate to next page\n nextPage() {\n this.datasource.nextPage();\n }\n}\n```\n\n## Server-Side Datasource\n\nFor server-side operations with automatic loading states, use `UniServerSideDatasource`:\n\n```typescript\nimport { UniServerSideDatasource, PageRequest, PageResponse } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass ServerSideComponent {\n datasource = new UniServerSideDatasource<User>(\n // Data loader function\n async (request: PageRequest): Promise<PageResponse<User>> => {\n const response = await this.userService.getUsers({\n page: request.pageNumber,\n size: request.pageSize,\n sort: request.sortColumn,\n order: request.sortDirection,\n filter: request.filter\n });\n\n return {\n data: response.users,\n totalRecords: response.total,\n pageNumber: request.pageNumber,\n pageSize: request.pageSize\n };\n },\n 10 // initial page size\n );\n\n constructor() {\n // Apply server-side filter (sends filter object to server)\n this.datasource.setFilter({ department: 'Engineering', active: true });\n\n // Sort by a column (triggers server request)\n this.datasource.sortRecords({\n column: 'name',\n direction: 'asc'\n });\n }\n\n // Access loading and error states\n get isLoading() {\n return this.datasource.isLoading();\n }\n\n get hasError() {\n return this.datasource.hasError();\n }\n\n // Refresh data from server\n refreshData() {\n this.datasource.refresh();\n }\n}\n```\n\n## API Reference\n\n### Common Properties (Both Datasources)\n\n- `records`: Signal containing the current page's filtered and sorted records\n- `recordCount`: Signal with the count of filtered records\n- `selections`: Signal containing currently selected items\n- `sort`: Signal containing the current sort configuration\n- `sortColumn`: Computed signal with the current sort column\n- `sortDirection`: Computed signal with the current sort direction\n- `pageIndex`: Signal with the current page index (zero-based)\n- `pageSize`: Signal with the number of items per page\n- `pageCount`: Signal with the total number of pages\n- `pages`: Signal with array of page numbers for pagination UI\n- `truncatedPages`: Signal with truncated page numbers (includes ellipsis)\n- `disablePrevious`: Signal indicating if previous button should be disabled\n- `disableNext`: Signal indicating if next button should be disabled\n\n### Row identity\n\nBoth constructors take an options object with `rowId`, a function returning a\nstable key for a row (`{ rowId: (row) => row.id }`); it is also settable\nafterwards (`datasource.rowId = \u2026`). Without one, rows are compared by\nreference \u2014 which never matches a row rebuilt from a fresh fetch, so a\nrealtime update that replaced the records would empty the selection. With\none, `isSelected`, `toggleSelection` and `setSelected` key by it, and so do\n`uni-data-table`'s expanded row and its row tracking.\n\n### Common Methods (Both Datasources)\n\n- `isSelected(row)`: Checks if a row is selected (by `rowId` when set)\n- `toggleSelection(row)`: Toggles selection state of a row\n- `setSelected(rows, selected)`: Selects or deselects several rows, leaving the rest as they are\n- `clearSelections()`: Clears all selections\n- `selectAll()`: Selects all records on current page\n- `sortRecords(sort)`: Sets the sort configuration\n- `firstPage()`, `nextPage()`, `previousPage()`, `lastPage()`: Navigation methods\n- `jumpToPage(page)`: Jumps to a specific page\n- `setPageSize(size)`: Sets the page size and resets to first page\n\n### Record Datasource Specific\n\n**Properties:**\n\n- `initialRecords`: Signal containing the original unfiltered data\n- `filter`: Signal containing the current filter function\n\n**Methods:**\n\n- `setFilter(predicate: (item: T) => boolean)`: Sets a filter function for client-side filtering\n- `clearFilter()`: Clears the current filter (shows all records)\n\n### Server-Side Datasource Specific\n\n**Properties:**\n\n- `isLoading`: Signal indicating if data is currently being loaded\n- `error`: Signal containing any loading errors\n- `hasError`: Signal indicating if there's an error state\n\n**Methods:**\n\n- `setFilter(filterObj: Record<string, any>)`: Sets filter parameters sent to server\n- `clearFilter()`: Clears all filter parameters\n- `refresh()`: Manually triggers a data reload from server\n- `getPageRequest()`: Returns the current page request parameters\n\n### Types\n\n```typescript\ninterface PageRequest {\n pageNumber: number;\n pageSize: number;\n sortColumn?: string;\n sortDirection?: SortDirection;\n filter?: Record<string, any>;\n}\n\ninterface PageResponse<T> {\n data: T[];\n totalRecords: number;\n pageNumber: number;\n pageSize: number;\n}\n\ntype DataLoader<T> = (request: PageRequest) => Promise<PageResponse<T>>;\n\ntype SortDirection = 'asc' | 'desc' | 'indet';\n\ninterface Sort<T> {\n column?: keyof T;\n direction: SortDirection;\n}\n```\n\n## Examples\n\n_Live demo on the Storybook page._"
|
|
24410
24883
|
},
|
|
24411
24884
|
{
|
|
24412
24885
|
module: "local-storage",
|
|
@@ -26411,13 +26884,21 @@ var buildComponents = (c) => ({
|
|
|
26411
26884
|
}
|
|
26412
26885
|
},
|
|
26413
26886
|
card: {
|
|
26414
|
-
options: {
|
|
26887
|
+
options: {
|
|
26888
|
+
borderRadius: "xs",
|
|
26889
|
+
selectedBorder: "primary",
|
|
26890
|
+
selectedColor: "primary-container"
|
|
26891
|
+
},
|
|
26415
26892
|
fixed: {
|
|
26416
26893
|
overflow: "hidden",
|
|
26417
26894
|
backgroundColor: c.background,
|
|
26418
26895
|
color: c["on-background"]
|
|
26419
26896
|
}
|
|
26420
26897
|
},
|
|
26898
|
+
cardGroup: { options: {
|
|
26899
|
+
gap: "md",
|
|
26900
|
+
templateColumns: "repeat(auto-fit, minmax(160px, 1fr))"
|
|
26901
|
+
} },
|
|
26421
26902
|
cardHeader: {
|
|
26422
26903
|
fixed: { padding: "12px 24px" },
|
|
26423
26904
|
variants: {
|
|
@@ -26473,7 +26954,10 @@ var buildComponents = (c) => ({
|
|
|
26473
26954
|
rowHoverColor: "primary-container",
|
|
26474
26955
|
loadingOverlayColor: "scrim",
|
|
26475
26956
|
loadingSpinnerColor: "primary",
|
|
26476
|
-
loadingSpinnerSize: 40
|
|
26957
|
+
loadingSpinnerSize: 40,
|
|
26958
|
+
selectionColumnWidth: 40,
|
|
26959
|
+
selectionCheckboxSize: "sm",
|
|
26960
|
+
selectedRowColor: void 0
|
|
26477
26961
|
} },
|
|
26478
26962
|
notificationBadge: {
|
|
26479
26963
|
options: {
|
|
@@ -28041,4 +28525,4 @@ export {
|
|
|
28041
28525
|
buildStoredTheme,
|
|
28042
28526
|
createUniServer
|
|
28043
28527
|
};
|
|
28044
|
-
//# sourceMappingURL=chunk-
|
|
28528
|
+
//# sourceMappingURL=chunk-G27EXV3Z.js.map
|