@uni-design-system/uni-mcp 11.4.1 → 11.6.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 +15 -0
- package/README.md +43 -40
- package/dist/{chunk-R323CZ2D.js → chunk-INTB6KJ7.js} +3733 -132
- package/dist/chunk-INTB6KJ7.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-R323CZ2D.js.map +0 -1
|
@@ -7,16 +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
|
+
version: "11.6.0",
|
|
11
|
+
builtAt: "2026-10-05T01:16:14.251Z",
|
|
12
12
|
frameworks: [
|
|
13
13
|
"angular"
|
|
14
14
|
],
|
|
15
15
|
counts: {
|
|
16
|
-
components:
|
|
17
|
-
tokens:
|
|
16
|
+
components: 88,
|
|
17
|
+
tokens: 504,
|
|
18
18
|
themes: 2,
|
|
19
|
-
examples:
|
|
19
|
+
examples: 254,
|
|
20
|
+
utilities: 122
|
|
20
21
|
}
|
|
21
22
|
},
|
|
22
23
|
components: [
|
|
@@ -27,7 +28,7 @@ var uni_index_default = {
|
|
|
27
28
|
summary: "",
|
|
28
29
|
description: "",
|
|
29
30
|
category: "feedback",
|
|
30
|
-
version: "11.
|
|
31
|
+
version: "11.6.0",
|
|
31
32
|
bindings: {
|
|
32
33
|
angular: {
|
|
33
34
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -117,7 +118,7 @@ var uni_index_default = {
|
|
|
117
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.",
|
|
118
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.",
|
|
119
120
|
category: "components",
|
|
120
|
-
version: "11.
|
|
121
|
+
version: "11.6.0",
|
|
121
122
|
bindings: {
|
|
122
123
|
angular: {
|
|
123
124
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -190,7 +191,7 @@ var uni_index_default = {
|
|
|
190
191
|
summary: "Identity avatar with a graceful fallback chain: image \u2192 initials from `name` \u2192 themed symbol.",
|
|
191
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.",
|
|
192
193
|
category: "components",
|
|
193
|
-
version: "11.
|
|
194
|
+
version: "11.6.0",
|
|
194
195
|
bindings: {
|
|
195
196
|
angular: {
|
|
196
197
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -285,7 +286,7 @@ var uni_index_default = {
|
|
|
285
286
|
summary: "Overlapping stack of avatars.",
|
|
286
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.",
|
|
287
288
|
category: "components",
|
|
288
|
-
version: "11.
|
|
289
|
+
version: "11.6.0",
|
|
289
290
|
bindings: {
|
|
290
291
|
angular: {
|
|
291
292
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -334,7 +335,7 @@ var uni_index_default = {
|
|
|
334
335
|
summary: "",
|
|
335
336
|
description: "",
|
|
336
337
|
category: "primitives",
|
|
337
|
-
version: "11.
|
|
338
|
+
version: "11.6.0",
|
|
338
339
|
bindings: {
|
|
339
340
|
angular: {
|
|
340
341
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -415,7 +416,7 @@ var uni_index_default = {
|
|
|
415
416
|
summary: "",
|
|
416
417
|
description: "",
|
|
417
418
|
category: "feedback",
|
|
418
|
-
version: "11.
|
|
419
|
+
version: "11.6.0",
|
|
419
420
|
bindings: {
|
|
420
421
|
angular: {
|
|
421
422
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -512,7 +513,7 @@ var uni_index_default = {
|
|
|
512
513
|
summary: "",
|
|
513
514
|
description: "",
|
|
514
515
|
category: "directives",
|
|
515
|
-
version: "11.
|
|
516
|
+
version: "11.6.0",
|
|
516
517
|
bindings: {
|
|
517
518
|
angular: {
|
|
518
519
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -536,7 +537,7 @@ var uni_index_default = {
|
|
|
536
537
|
summary: 'The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]="1" padding="md">`.',
|
|
537
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.',
|
|
538
539
|
category: "layout",
|
|
539
|
-
version: "11.
|
|
540
|
+
version: "11.6.0",
|
|
540
541
|
bindings: {
|
|
541
542
|
angular: {
|
|
542
543
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -944,7 +945,7 @@ var uni_index_default = {
|
|
|
944
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.',
|
|
945
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.',
|
|
946
947
|
category: "components",
|
|
947
|
-
version: "11.
|
|
948
|
+
version: "11.6.0",
|
|
948
949
|
bindings: {
|
|
949
950
|
angular: {
|
|
950
951
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1029,7 +1030,7 @@ var uni_index_default = {
|
|
|
1029
1030
|
summary: "",
|
|
1030
1031
|
description: "",
|
|
1031
1032
|
category: "primitives",
|
|
1032
|
-
version: "11.
|
|
1033
|
+
version: "11.6.0",
|
|
1033
1034
|
bindings: {
|
|
1034
1035
|
angular: {
|
|
1035
1036
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1189,7 +1190,7 @@ var uni_index_default = {
|
|
|
1189
1190
|
summary: "",
|
|
1190
1191
|
description: "",
|
|
1191
1192
|
category: "primitives",
|
|
1192
|
-
version: "11.
|
|
1193
|
+
version: "11.6.0",
|
|
1193
1194
|
bindings: {
|
|
1194
1195
|
angular: {
|
|
1195
1196
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1221,7 +1222,7 @@ var uni_index_default = {
|
|
|
1221
1222
|
summary: "Inline month calendar: single-date or start\u2013end range selection, day markers (availability dots), min/max fences and disabled dates.",
|
|
1222
1223
|
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.",
|
|
1223
1224
|
category: "forms",
|
|
1224
|
-
version: "11.
|
|
1225
|
+
version: "11.6.0",
|
|
1225
1226
|
bindings: {
|
|
1226
1227
|
angular: {
|
|
1227
1228
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1462,7 +1463,7 @@ var uni_index_default = {
|
|
|
1462
1463
|
summary: "Anchored coach-mark panel that dims the page and cuts a spotlight hole around its target.",
|
|
1463
1464
|
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).',
|
|
1464
1465
|
category: "components",
|
|
1465
|
-
version: "11.
|
|
1466
|
+
version: "11.6.0",
|
|
1466
1467
|
bindings: {
|
|
1467
1468
|
angular: {
|
|
1468
1469
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1682,7 +1683,7 @@ var uni_index_default = {
|
|
|
1682
1683
|
summary: "",
|
|
1683
1684
|
description: "",
|
|
1684
1685
|
category: "layout",
|
|
1685
|
-
version: "11.
|
|
1686
|
+
version: "11.6.0",
|
|
1686
1687
|
bindings: {
|
|
1687
1688
|
angular: {
|
|
1688
1689
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1744,7 +1745,7 @@ var uni_index_default = {
|
|
|
1744
1745
|
summary: "",
|
|
1745
1746
|
description: "",
|
|
1746
1747
|
category: "layout",
|
|
1747
|
-
version: "11.
|
|
1748
|
+
version: "11.6.0",
|
|
1748
1749
|
bindings: {
|
|
1749
1750
|
angular: {
|
|
1750
1751
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1785,7 +1786,7 @@ var uni_index_default = {
|
|
|
1785
1786
|
summary: "",
|
|
1786
1787
|
description: "",
|
|
1787
1788
|
category: "layout",
|
|
1788
|
-
version: "11.
|
|
1789
|
+
version: "11.6.0",
|
|
1789
1790
|
bindings: {
|
|
1790
1791
|
angular: {
|
|
1791
1792
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1842,7 +1843,7 @@ var uni_index_default = {
|
|
|
1842
1843
|
summary: "",
|
|
1843
1844
|
description: "",
|
|
1844
1845
|
category: "layout",
|
|
1845
|
-
version: "11.
|
|
1846
|
+
version: "11.6.0",
|
|
1846
1847
|
bindings: {
|
|
1847
1848
|
angular: {
|
|
1848
1849
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -1897,7 +1898,7 @@ var uni_index_default = {
|
|
|
1897
1898
|
summary: "",
|
|
1898
1899
|
description: "",
|
|
1899
1900
|
category: "forms",
|
|
1900
|
-
version: "11.
|
|
1901
|
+
version: "11.6.0",
|
|
1901
1902
|
bindings: {
|
|
1902
1903
|
angular: {
|
|
1903
1904
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2119,7 +2120,7 @@ var uni_index_default = {
|
|
|
2119
2120
|
summary: "Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>` over object `Options<T>`, type-to-filter, commit-on-select.",
|
|
2120
2121
|
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.",
|
|
2121
2122
|
category: "forms",
|
|
2122
|
-
version: "11.
|
|
2123
|
+
version: "11.6.0",
|
|
2123
2124
|
bindings: {
|
|
2124
2125
|
angular: {
|
|
2125
2126
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2257,6 +2258,14 @@ var uni_index_default = {
|
|
|
2257
2258
|
default: "250",
|
|
2258
2259
|
description: ""
|
|
2259
2260
|
},
|
|
2261
|
+
{
|
|
2262
|
+
name: "openOnFocus",
|
|
2263
|
+
kind: "input",
|
|
2264
|
+
type: "boolean",
|
|
2265
|
+
required: false,
|
|
2266
|
+
default: "false",
|
|
2267
|
+
description: "Open the list when the field takes focus, not only on click or ArrowDown. Off by default \u2014 a form tabbed through should not spray popups."
|
|
2268
|
+
},
|
|
2260
2269
|
{
|
|
2261
2270
|
name: "query",
|
|
2262
2271
|
kind: "output",
|
|
@@ -2405,7 +2414,7 @@ emptyText="No countries found"
|
|
|
2405
2414
|
summary: "",
|
|
2406
2415
|
description: "",
|
|
2407
2416
|
category: "feedback",
|
|
2408
|
-
version: "11.
|
|
2417
|
+
version: "11.6.0",
|
|
2409
2418
|
bindings: {
|
|
2410
2419
|
angular: {
|
|
2411
2420
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2445,6 +2454,283 @@ emptyText="No countries found"
|
|
|
2445
2454
|
},
|
|
2446
2455
|
relatedTokens: []
|
|
2447
2456
|
},
|
|
2457
|
+
{
|
|
2458
|
+
id: "contact-input",
|
|
2459
|
+
name: "ContactInput",
|
|
2460
|
+
status: "stable",
|
|
2461
|
+
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).",
|
|
2462
|
+
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.",
|
|
2463
|
+
category: "forms",
|
|
2464
|
+
version: "11.6.0",
|
|
2465
|
+
bindings: {
|
|
2466
|
+
angular: {
|
|
2467
|
+
importPath: "@uni-design-system/uni-angular",
|
|
2468
|
+
selectorOrTag: "uni-contact-input, ContactInput",
|
|
2469
|
+
api: [
|
|
2470
|
+
{
|
|
2471
|
+
name: "value",
|
|
2472
|
+
kind: "model",
|
|
2473
|
+
type: "UniContact[]",
|
|
2474
|
+
required: false,
|
|
2475
|
+
default: "[]",
|
|
2476
|
+
description: ""
|
|
2477
|
+
},
|
|
2478
|
+
{
|
|
2479
|
+
name: "disabled",
|
|
2480
|
+
kind: "input",
|
|
2481
|
+
type: "boolean",
|
|
2482
|
+
required: false,
|
|
2483
|
+
default: "false",
|
|
2484
|
+
description: ""
|
|
2485
|
+
},
|
|
2486
|
+
{
|
|
2487
|
+
name: "touched",
|
|
2488
|
+
kind: "model",
|
|
2489
|
+
type: "boolean",
|
|
2490
|
+
required: false,
|
|
2491
|
+
default: "false",
|
|
2492
|
+
description: ""
|
|
2493
|
+
},
|
|
2494
|
+
{
|
|
2495
|
+
name: "touch",
|
|
2496
|
+
kind: "output",
|
|
2497
|
+
type: "void",
|
|
2498
|
+
required: false,
|
|
2499
|
+
description: "Angular 22 marks the bound field touched through this output."
|
|
2500
|
+
},
|
|
2501
|
+
{
|
|
2502
|
+
name: "invalid",
|
|
2503
|
+
kind: "input",
|
|
2504
|
+
type: "boolean",
|
|
2505
|
+
required: false,
|
|
2506
|
+
default: "false",
|
|
2507
|
+
description: ""
|
|
2508
|
+
},
|
|
2509
|
+
{
|
|
2510
|
+
name: "dirty",
|
|
2511
|
+
kind: "input",
|
|
2512
|
+
type: "boolean",
|
|
2513
|
+
required: false,
|
|
2514
|
+
default: "false",
|
|
2515
|
+
description: ""
|
|
2516
|
+
},
|
|
2517
|
+
{
|
|
2518
|
+
name: "required",
|
|
2519
|
+
kind: "input",
|
|
2520
|
+
type: "boolean",
|
|
2521
|
+
required: false,
|
|
2522
|
+
default: "false",
|
|
2523
|
+
description: ""
|
|
2524
|
+
},
|
|
2525
|
+
{
|
|
2526
|
+
name: "ariaDescribedBy",
|
|
2527
|
+
kind: "input",
|
|
2528
|
+
type: "string",
|
|
2529
|
+
required: false,
|
|
2530
|
+
description: ""
|
|
2531
|
+
},
|
|
2532
|
+
{
|
|
2533
|
+
name: "label",
|
|
2534
|
+
kind: "input",
|
|
2535
|
+
type: "string",
|
|
2536
|
+
required: true,
|
|
2537
|
+
description: 'Accessible name for the field, e.g. "To".'
|
|
2538
|
+
},
|
|
2539
|
+
{
|
|
2540
|
+
name: "placeholder",
|
|
2541
|
+
kind: "input",
|
|
2542
|
+
type: "string",
|
|
2543
|
+
required: false,
|
|
2544
|
+
description: ""
|
|
2545
|
+
},
|
|
2546
|
+
{
|
|
2547
|
+
name: "contacts",
|
|
2548
|
+
kind: "input",
|
|
2549
|
+
type: "UniContact[]",
|
|
2550
|
+
required: false,
|
|
2551
|
+
default: "[]",
|
|
2552
|
+
description: "Everyone who can be suggested, in the order (and groups) to offer them."
|
|
2553
|
+
},
|
|
2554
|
+
{
|
|
2555
|
+
name: "allowCustom",
|
|
2556
|
+
kind: "input",
|
|
2557
|
+
type: "boolean",
|
|
2558
|
+
required: false,
|
|
2559
|
+
default: "true",
|
|
2560
|
+
description: "Accept a typed value that is not a known contact. On by default \u2014 a typed email address becomes a chip; `false` restricts the field to `contacts`."
|
|
2561
|
+
},
|
|
2562
|
+
{
|
|
2563
|
+
name: "filterLocally",
|
|
2564
|
+
kind: "input",
|
|
2565
|
+
type: "boolean",
|
|
2566
|
+
required: false,
|
|
2567
|
+
default: "true",
|
|
2568
|
+
description: "`false` renders `contacts` verbatim; narrow them app-side from `(query)` when the directory lives on a server."
|
|
2569
|
+
},
|
|
2570
|
+
{
|
|
2571
|
+
name: "autoHighlight",
|
|
2572
|
+
kind: "input",
|
|
2573
|
+
type: "boolean",
|
|
2574
|
+
required: false,
|
|
2575
|
+
default: "false",
|
|
2576
|
+
description: "Keep the first match highlighted so Enter or Tab picks it without arrowing. Off by default: nothing is highlighted until ArrowDown, and Enter commits what is typed."
|
|
2577
|
+
},
|
|
2578
|
+
{
|
|
2579
|
+
name: "debounceTime",
|
|
2580
|
+
kind: "input",
|
|
2581
|
+
type: "number",
|
|
2582
|
+
required: false,
|
|
2583
|
+
default: "250",
|
|
2584
|
+
description: ""
|
|
2585
|
+
},
|
|
2586
|
+
{
|
|
2587
|
+
name: "maxLength",
|
|
2588
|
+
kind: "input",
|
|
2589
|
+
type: "number | undefined",
|
|
2590
|
+
required: false,
|
|
2591
|
+
default: "undefined, { alias: 'max' }",
|
|
2592
|
+
description: ""
|
|
2593
|
+
},
|
|
2594
|
+
{
|
|
2595
|
+
name: "unframed",
|
|
2596
|
+
kind: "input",
|
|
2597
|
+
type: "unknown",
|
|
2598
|
+
required: false,
|
|
2599
|
+
default: "false, { transform: booleanAttribute }",
|
|
2600
|
+
description: "Drop the field chrome and render a bare row \u2014 an email client's To line."
|
|
2601
|
+
},
|
|
2602
|
+
{
|
|
2603
|
+
name: "autocomplete",
|
|
2604
|
+
kind: "input",
|
|
2605
|
+
type: "string",
|
|
2606
|
+
required: false,
|
|
2607
|
+
default: "'off'",
|
|
2608
|
+
description: "The text field's `autocomplete` token; see `uni-tag-input`."
|
|
2609
|
+
},
|
|
2610
|
+
{
|
|
2611
|
+
name: "tagVariant",
|
|
2612
|
+
kind: "input",
|
|
2613
|
+
type: "Variant",
|
|
2614
|
+
required: false,
|
|
2615
|
+
description: ""
|
|
2616
|
+
},
|
|
2617
|
+
{
|
|
2618
|
+
name: "tagTone",
|
|
2619
|
+
kind: "input",
|
|
2620
|
+
type: "TagTone",
|
|
2621
|
+
required: false,
|
|
2622
|
+
description: ""
|
|
2623
|
+
},
|
|
2624
|
+
{
|
|
2625
|
+
name: "tagSize",
|
|
2626
|
+
kind: "input",
|
|
2627
|
+
type: "Size",
|
|
2628
|
+
required: false,
|
|
2629
|
+
description: ""
|
|
2630
|
+
},
|
|
2631
|
+
{
|
|
2632
|
+
name: "added",
|
|
2633
|
+
kind: "output",
|
|
2634
|
+
type: "UniContact",
|
|
2635
|
+
required: false,
|
|
2636
|
+
description: ""
|
|
2637
|
+
},
|
|
2638
|
+
{
|
|
2639
|
+
name: "removed",
|
|
2640
|
+
kind: "output",
|
|
2641
|
+
type: "UniContact",
|
|
2642
|
+
required: false,
|
|
2643
|
+
description: ""
|
|
2644
|
+
},
|
|
2645
|
+
{
|
|
2646
|
+
name: "rejected",
|
|
2647
|
+
kind: "output",
|
|
2648
|
+
type: "UniTagRejection",
|
|
2649
|
+
required: false,
|
|
2650
|
+
description: "Typed text that did not become a person; an `invalid` one stays in the field."
|
|
2651
|
+
},
|
|
2652
|
+
{
|
|
2653
|
+
name: "query",
|
|
2654
|
+
kind: "output",
|
|
2655
|
+
type: "string",
|
|
2656
|
+
required: false,
|
|
2657
|
+
description: "Debounced typed text, for loading contacts remotely."
|
|
2658
|
+
},
|
|
2659
|
+
{
|
|
2660
|
+
name: "draftChange",
|
|
2661
|
+
kind: "output",
|
|
2662
|
+
type: "string",
|
|
2663
|
+
required: false,
|
|
2664
|
+
description: "Typed text on every change \u2014 e.g. to clear an error once it is edited."
|
|
2665
|
+
},
|
|
2666
|
+
{
|
|
2667
|
+
name: "variant",
|
|
2668
|
+
kind: "input",
|
|
2669
|
+
type: "Variant",
|
|
2670
|
+
required: false,
|
|
2671
|
+
default: "'primary'",
|
|
2672
|
+
description: "Style archetype from the theme. Inherited from BaseComponent."
|
|
2673
|
+
},
|
|
2674
|
+
{
|
|
2675
|
+
name: "size",
|
|
2676
|
+
kind: "input",
|
|
2677
|
+
type: "Size",
|
|
2678
|
+
required: false,
|
|
2679
|
+
default: "'lg'",
|
|
2680
|
+
description: "Size token from the theme. Inherited from BaseComponent. Only has an effect where the component theme defines a `sizes` block."
|
|
2681
|
+
}
|
|
2682
|
+
]
|
|
2683
|
+
}
|
|
2684
|
+
},
|
|
2685
|
+
examples: [
|
|
2686
|
+
{
|
|
2687
|
+
title: "Primary",
|
|
2688
|
+
framework: "angular",
|
|
2689
|
+
code: "<!-- Storybook story: Primary -->\n<!-- args:\n{ value: [{ value: 'alice@uni.dev', name: 'Alice Chen' }] }\n-->"
|
|
2690
|
+
},
|
|
2691
|
+
{
|
|
2692
|
+
title: "Grouped Contacts",
|
|
2693
|
+
framework: "angular",
|
|
2694
|
+
code: "<!-- Storybook story: Grouped Contacts -->\n<!-- args:\n{ contacts: GROUPED }\n-->"
|
|
2695
|
+
},
|
|
2696
|
+
{
|
|
2697
|
+
title: "Unframed",
|
|
2698
|
+
framework: "angular",
|
|
2699
|
+
code: "<!-- Storybook story: Unframed -->\n<!-- args:\n{ unframed: true, value: [{ value: 'alice@uni.dev', name: 'Alice Chen' }] }\n-->"
|
|
2700
|
+
},
|
|
2701
|
+
{
|
|
2702
|
+
title: "Known Contacts Only",
|
|
2703
|
+
framework: "angular",
|
|
2704
|
+
code: "<!-- Storybook story: Known Contacts Only -->\n<!-- args:\n{ allowCustom: false, placeholder: 'Search people\u2026' }\n-->"
|
|
2705
|
+
},
|
|
2706
|
+
{
|
|
2707
|
+
title: "Disabled",
|
|
2708
|
+
framework: "angular",
|
|
2709
|
+
code: "<!-- Storybook story: Disabled -->\n<!-- args:\n{ disabled: true, value: [{ value: 'alice@uni.dev', name: 'Alice Chen' }] }\n-->"
|
|
2710
|
+
}
|
|
2711
|
+
],
|
|
2712
|
+
guidelines: {
|
|
2713
|
+
whenToUse: "Recipient field for picking people: removable chips, a text input, and a list\nof known contacts that opens on focus and narrows as the user types. Each row\nis drawn as a person \u2014 avatar, name, address, and an optional note. Reach for\nit for a To line, a share dialog, assignees or mentions; for tokens that are\nnot people, use `uni-tag-input`, which this composes.\nIt behaves like a mail client: ArrowDown walks the matches and Enter picks\nthe active one, Backspace in an empty field removes the last person, and text\nthat is neither a known contact nor a valid address stays in the field to be\nfixed. Set `autoHighlight` to keep the first match active, so Enter or Tab\npicks it without arrowing. The chips come\nfrom the `tag` theme entry, the popup from `tagInput`, the field chrome from\n`input`, and the person row from `contactInput`.",
|
|
2714
|
+
dos: [
|
|
2715
|
+
"Order `contacts` most-relevant first; only the first few are shown.",
|
|
2716
|
+
"Set `filterLocally` to `false` and refresh `contacts` from `(query)` when",
|
|
2717
|
+
"Clear your error message from `(draftChange)` once the user edits the text."
|
|
2718
|
+
],
|
|
2719
|
+
donts: [
|
|
2720
|
+
"Don't use it for tokens that are not people \u2014 that is `uni-tag-input`.",
|
|
2721
|
+
"Don't use it to pick one person from a closed list \u2014 that is `uni-combobox`.",
|
|
2722
|
+
"Don't rely on `autocomplete=\"off\"` alone if Chrome's address autofill still"
|
|
2723
|
+
],
|
|
2724
|
+
accessibility: [
|
|
2725
|
+
'The text input is `role="combobox"` over a `role="listbox"` popup; nothing',
|
|
2726
|
+
"The whole field is one tab stop. Enter picks the active contact, otherwise",
|
|
2727
|
+
'Adds, removes and refusals announce through a `role="status"` live region.',
|
|
2728
|
+
"The control renders no validation message: handle `(rejected)`, render the",
|
|
2729
|
+
"`unframed` removes the focus ring along with the chrome; show focus on the"
|
|
2730
|
+
]
|
|
2731
|
+
},
|
|
2732
|
+
relatedTokens: []
|
|
2733
|
+
},
|
|
2448
2734
|
{
|
|
2449
2735
|
id: "data-search",
|
|
2450
2736
|
name: "DataSearch",
|
|
@@ -2452,7 +2738,7 @@ emptyText="No countries found"
|
|
|
2452
2738
|
summary: "",
|
|
2453
2739
|
description: "",
|
|
2454
2740
|
category: "forms",
|
|
2455
|
-
version: "11.
|
|
2741
|
+
version: "11.6.0",
|
|
2456
2742
|
bindings: {
|
|
2457
2743
|
angular: {
|
|
2458
2744
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2551,7 +2837,7 @@ emptyText="No countries found"
|
|
|
2551
2837
|
summary: "",
|
|
2552
2838
|
description: "",
|
|
2553
2839
|
category: "data",
|
|
2554
|
-
version: "11.
|
|
2840
|
+
version: "11.6.0",
|
|
2555
2841
|
bindings: {
|
|
2556
2842
|
angular: {
|
|
2557
2843
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -2791,7 +3077,7 @@ emptyText="No countries found"
|
|
|
2791
3077
|
summary: "Date field with free-typed parsing and a popup calendar.",
|
|
2792
3078
|
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.",
|
|
2793
3079
|
category: "forms",
|
|
2794
|
-
version: "11.
|
|
3080
|
+
version: "11.6.0",
|
|
2795
3081
|
bindings: {
|
|
2796
3082
|
angular: {
|
|
2797
3083
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3022,7 +3308,7 @@ emptyText="No countries found"
|
|
|
3022
3308
|
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.",
|
|
3023
3309
|
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.",
|
|
3024
3310
|
category: "forms",
|
|
3025
|
-
version: "11.
|
|
3311
|
+
version: "11.6.0",
|
|
3026
3312
|
bindings: {
|
|
3027
3313
|
angular: {
|
|
3028
3314
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3215,7 +3501,7 @@ emptyText="No countries found"
|
|
|
3215
3501
|
summary: "Text input that emits `change` only after the user pauses typing.",
|
|
3216
3502
|
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.",
|
|
3217
3503
|
category: "forms",
|
|
3218
|
-
version: "11.
|
|
3504
|
+
version: "11.6.0",
|
|
3219
3505
|
bindings: {
|
|
3220
3506
|
angular: {
|
|
3221
3507
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3363,7 +3649,7 @@ emptyText="No countries found"
|
|
|
3363
3649
|
summary: "Modal dialog on the native `<dialog>` element, laid out as three rows: an optional `[dialog-header]`, the projected body, an optional `[dialog-buttons]`.",
|
|
3364
3650
|
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.",
|
|
3365
3651
|
category: "feedback",
|
|
3366
|
-
version: "11.
|
|
3652
|
+
version: "11.6.0",
|
|
3367
3653
|
bindings: {
|
|
3368
3654
|
angular: {
|
|
3369
3655
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3516,7 +3802,7 @@ uni-dialog
|
|
|
3516
3802
|
summary: "",
|
|
3517
3803
|
description: "",
|
|
3518
3804
|
category: "feedback",
|
|
3519
|
-
version: "11.
|
|
3805
|
+
version: "11.6.0",
|
|
3520
3806
|
bindings: {
|
|
3521
3807
|
angular: {
|
|
3522
3808
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3620,7 +3906,7 @@ uni-dialog
|
|
|
3620
3906
|
summary: "",
|
|
3621
3907
|
description: "",
|
|
3622
3908
|
category: "feedback",
|
|
3623
|
-
version: "11.
|
|
3909
|
+
version: "11.6.0",
|
|
3624
3910
|
bindings: {
|
|
3625
3911
|
angular: {
|
|
3626
3912
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3661,7 +3947,7 @@ uni-dialog
|
|
|
3661
3947
|
summary: "",
|
|
3662
3948
|
description: "",
|
|
3663
3949
|
category: "layout",
|
|
3664
|
-
version: "11.
|
|
3950
|
+
version: "11.6.0",
|
|
3665
3951
|
bindings: {
|
|
3666
3952
|
angular: {
|
|
3667
3953
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3717,7 +4003,7 @@ uni-dialog
|
|
|
3717
4003
|
summary: "",
|
|
3718
4004
|
description: "",
|
|
3719
4005
|
category: "directives",
|
|
3720
|
-
version: "11.
|
|
4006
|
+
version: "11.6.0",
|
|
3721
4007
|
bindings: {
|
|
3722
4008
|
angular: {
|
|
3723
4009
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3749,7 +4035,7 @@ uni-dialog
|
|
|
3749
4035
|
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.",
|
|
3750
4036
|
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. **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.",
|
|
3751
4037
|
category: "components",
|
|
3752
|
-
version: "11.
|
|
4038
|
+
version: "11.6.0",
|
|
3753
4039
|
bindings: {
|
|
3754
4040
|
angular: {
|
|
3755
4041
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -3940,7 +4226,7 @@ initialFocus="input"
|
|
|
3940
4226
|
summary: "The drawer's pinned footer action row \u2014 the save bar of an editor panel.",
|
|
3941
4227
|
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.",
|
|
3942
4228
|
category: "primitives",
|
|
3943
|
-
version: "11.
|
|
4229
|
+
version: "11.6.0",
|
|
3944
4230
|
bindings: {
|
|
3945
4231
|
angular: {
|
|
3946
4232
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4037,7 +4323,7 @@ initialFocus="input"
|
|
|
4037
4323
|
summary: "The drawer's pinned header row: a title, and optionally a close button.",
|
|
4038
4324
|
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.",
|
|
4039
4325
|
category: "components",
|
|
4040
|
-
version: "11.
|
|
4326
|
+
version: "11.6.0",
|
|
4041
4327
|
bindings: {
|
|
4042
4328
|
angular: {
|
|
4043
4329
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4085,7 +4371,7 @@ initialFocus="input"
|
|
|
4085
4371
|
summary: "",
|
|
4086
4372
|
description: "",
|
|
4087
4373
|
category: "components",
|
|
4088
|
-
version: "11.
|
|
4374
|
+
version: "11.6.0",
|
|
4089
4375
|
bindings: {
|
|
4090
4376
|
angular: {
|
|
4091
4377
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4219,7 +4505,7 @@ initialFocus="input"
|
|
|
4219
4505
|
summary: "",
|
|
4220
4506
|
description: "",
|
|
4221
4507
|
category: "layout",
|
|
4222
|
-
version: "11.
|
|
4508
|
+
version: "11.6.0",
|
|
4223
4509
|
bindings: {
|
|
4224
4510
|
angular: {
|
|
4225
4511
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4323,7 +4609,7 @@ initialFocus="input"
|
|
|
4323
4609
|
summary: "",
|
|
4324
4610
|
description: "",
|
|
4325
4611
|
category: "layout",
|
|
4326
|
-
version: "11.
|
|
4612
|
+
version: "11.6.0",
|
|
4327
4613
|
bindings: {
|
|
4328
4614
|
angular: {
|
|
4329
4615
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4394,7 +4680,7 @@ initialFocus="input"
|
|
|
4394
4680
|
summary: "Trigger for a {@link UniExpandComponent} region.",
|
|
4395
4681
|
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.",
|
|
4396
4682
|
category: "layout",
|
|
4397
|
-
version: "11.
|
|
4683
|
+
version: "11.6.0",
|
|
4398
4684
|
bindings: {
|
|
4399
4685
|
angular: {
|
|
4400
4686
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4479,7 +4765,7 @@ initialFocus="input"
|
|
|
4479
4765
|
summary: "",
|
|
4480
4766
|
description: "",
|
|
4481
4767
|
category: "forms",
|
|
4482
|
-
version: "11.
|
|
4768
|
+
version: "11.6.0",
|
|
4483
4769
|
bindings: {
|
|
4484
4770
|
angular: {
|
|
4485
4771
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4637,7 +4923,7 @@ initialFocus="input"
|
|
|
4637
4923
|
summary: "",
|
|
4638
4924
|
description: "",
|
|
4639
4925
|
category: "layout",
|
|
4640
|
-
version: "11.
|
|
4926
|
+
version: "11.6.0",
|
|
4641
4927
|
bindings: {
|
|
4642
4928
|
angular: {
|
|
4643
4929
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4734,7 +5020,7 @@ initialFocus="input"
|
|
|
4734
5020
|
summary: "",
|
|
4735
5021
|
description: "",
|
|
4736
5022
|
category: "layout",
|
|
4737
|
-
version: "11.
|
|
5023
|
+
version: "11.6.0",
|
|
4738
5024
|
bindings: {
|
|
4739
5025
|
angular: {
|
|
4740
5026
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4766,7 +5052,7 @@ initialFocus="input"
|
|
|
4766
5052
|
summary: "",
|
|
4767
5053
|
description: "",
|
|
4768
5054
|
category: "primitives",
|
|
4769
|
-
version: "11.
|
|
5055
|
+
version: "11.6.0",
|
|
4770
5056
|
bindings: {
|
|
4771
5057
|
angular: {
|
|
4772
5058
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4826,7 +5112,7 @@ initialFocus="input"
|
|
|
4826
5112
|
summary: "",
|
|
4827
5113
|
description: "",
|
|
4828
5114
|
category: "primitives",
|
|
4829
|
-
version: "11.
|
|
5115
|
+
version: "11.6.0",
|
|
4830
5116
|
bindings: {
|
|
4831
5117
|
angular: {
|
|
4832
5118
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -4929,7 +5215,7 @@ initialFocus="input"
|
|
|
4929
5215
|
summary: "A button that lives inside a sentence.",
|
|
4930
5216
|
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.",
|
|
4931
5217
|
category: "primitives",
|
|
4932
|
-
version: "11.
|
|
5218
|
+
version: "11.6.0",
|
|
4933
5219
|
bindings: {
|
|
4934
5220
|
angular: {
|
|
4935
5221
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5044,7 +5330,7 @@ initialFocus="input"
|
|
|
5044
5330
|
summary: "",
|
|
5045
5331
|
description: "",
|
|
5046
5332
|
category: "forms",
|
|
5047
|
-
version: "11.
|
|
5333
|
+
version: "11.6.0",
|
|
5048
5334
|
bindings: {
|
|
5049
5335
|
angular: {
|
|
5050
5336
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5329,7 +5615,7 @@ initialFocus="input"
|
|
|
5329
5615
|
summary: "",
|
|
5330
5616
|
description: "",
|
|
5331
5617
|
category: "forms",
|
|
5332
|
-
version: "11.
|
|
5618
|
+
version: "11.6.0",
|
|
5333
5619
|
bindings: {
|
|
5334
5620
|
angular: {
|
|
5335
5621
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5450,7 +5736,7 @@ initialFocus="input"
|
|
|
5450
5736
|
summary: "",
|
|
5451
5737
|
description: "",
|
|
5452
5738
|
category: "components",
|
|
5453
|
-
version: "11.
|
|
5739
|
+
version: "11.6.0",
|
|
5454
5740
|
bindings: {
|
|
5455
5741
|
angular: {
|
|
5456
5742
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5520,7 +5806,7 @@ initialFocus="input"
|
|
|
5520
5806
|
summary: "",
|
|
5521
5807
|
description: "",
|
|
5522
5808
|
category: "layout",
|
|
5523
|
-
version: "11.
|
|
5809
|
+
version: "11.6.0",
|
|
5524
5810
|
bindings: {
|
|
5525
5811
|
angular: {
|
|
5526
5812
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5624,7 +5910,7 @@ initialFocus="input"
|
|
|
5624
5910
|
summary: "",
|
|
5625
5911
|
description: "",
|
|
5626
5912
|
category: "layout",
|
|
5627
|
-
version: "11.
|
|
5913
|
+
version: "11.6.0",
|
|
5628
5914
|
bindings: {
|
|
5629
5915
|
angular: {
|
|
5630
5916
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5706,7 +5992,7 @@ initialFocus="input"
|
|
|
5706
5992
|
summary: "",
|
|
5707
5993
|
description: "",
|
|
5708
5994
|
category: "forms",
|
|
5709
|
-
version: "11.
|
|
5995
|
+
version: "11.6.0",
|
|
5710
5996
|
bindings: {
|
|
5711
5997
|
angular: {
|
|
5712
5998
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5800,7 +6086,7 @@ initialFocus="input"
|
|
|
5800
6086
|
summary: "",
|
|
5801
6087
|
description: "",
|
|
5802
6088
|
category: "forms",
|
|
5803
|
-
version: "11.
|
|
6089
|
+
version: "11.6.0",
|
|
5804
6090
|
bindings: {
|
|
5805
6091
|
angular: {
|
|
5806
6092
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -5979,7 +6265,7 @@ initialFocus="input"
|
|
|
5979
6265
|
summary: "",
|
|
5980
6266
|
description: "",
|
|
5981
6267
|
category: "feedback",
|
|
5982
|
-
version: "11.
|
|
6268
|
+
version: "11.6.0",
|
|
5983
6269
|
bindings: {
|
|
5984
6270
|
angular: {
|
|
5985
6271
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6239,7 +6525,7 @@ initialFocus="input"
|
|
|
6239
6525
|
summary: "",
|
|
6240
6526
|
description: "",
|
|
6241
6527
|
category: "feedback",
|
|
6242
|
-
version: "11.
|
|
6528
|
+
version: "11.6.0",
|
|
6243
6529
|
bindings: {
|
|
6244
6530
|
angular: {
|
|
6245
6531
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6263,7 +6549,7 @@ initialFocus="input"
|
|
|
6263
6549
|
summary: "Numeric field with locale-aware parsing, `Intl` formatting on commit, prefix/suffix adornments and steppers that hold to repeat.",
|
|
6264
6550
|
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.',
|
|
6265
6551
|
category: "forms",
|
|
6266
|
-
version: "11.
|
|
6552
|
+
version: "11.6.0",
|
|
6267
6553
|
bindings: {
|
|
6268
6554
|
angular: {
|
|
6269
6555
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6689,7 +6975,7 @@ initialFocus="input"
|
|
|
6689
6975
|
summary: "Two linked numeric fields in one chrome, with one `{ start, end }` value \u2014 price filters, thresholds, tolerances.",
|
|
6690
6976
|
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.",
|
|
6691
6977
|
category: "forms",
|
|
6692
|
-
version: "11.
|
|
6978
|
+
version: "11.6.0",
|
|
6693
6979
|
bindings: {
|
|
6694
6980
|
angular: {
|
|
6695
6981
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -6980,7 +7266,7 @@ initialFocus="input"
|
|
|
6980
7266
|
summary: "",
|
|
6981
7267
|
description: "",
|
|
6982
7268
|
category: "data",
|
|
6983
|
-
version: "11.
|
|
7269
|
+
version: "11.6.0",
|
|
6984
7270
|
bindings: {
|
|
6985
7271
|
angular: {
|
|
6986
7272
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7081,7 +7367,7 @@ initialFocus="input"
|
|
|
7081
7367
|
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.",
|
|
7082
7368
|
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.',
|
|
7083
7369
|
category: "layout",
|
|
7084
|
-
version: "11.
|
|
7370
|
+
version: "11.6.0",
|
|
7085
7371
|
bindings: {
|
|
7086
7372
|
angular: {
|
|
7087
7373
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7273,7 +7559,7 @@ initialFocus="input"
|
|
|
7273
7559
|
summary: "",
|
|
7274
7560
|
description: "",
|
|
7275
7561
|
category: "feedback",
|
|
7276
|
-
version: "11.
|
|
7562
|
+
version: "11.6.0",
|
|
7277
7563
|
bindings: {
|
|
7278
7564
|
angular: {
|
|
7279
7565
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7337,7 +7623,7 @@ initialFocus="input"
|
|
|
7337
7623
|
summary: "",
|
|
7338
7624
|
description: "",
|
|
7339
7625
|
category: "feedback",
|
|
7340
|
-
version: "11.
|
|
7626
|
+
version: "11.6.0",
|
|
7341
7627
|
bindings: {
|
|
7342
7628
|
angular: {
|
|
7343
7629
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7409,7 +7695,7 @@ initialFocus="input"
|
|
|
7409
7695
|
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.",
|
|
7410
7696
|
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.',
|
|
7411
7697
|
category: "forms",
|
|
7412
|
-
version: "11.
|
|
7698
|
+
version: "11.6.0",
|
|
7413
7699
|
bindings: {
|
|
7414
7700
|
angular: {
|
|
7415
7701
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7612,7 +7898,7 @@ initialFocus="input"
|
|
|
7612
7898
|
summary: "",
|
|
7613
7899
|
description: "",
|
|
7614
7900
|
category: "forms",
|
|
7615
|
-
version: "11.
|
|
7901
|
+
version: "11.6.0",
|
|
7616
7902
|
bindings: {
|
|
7617
7903
|
angular: {
|
|
7618
7904
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7841,7 +8127,7 @@ initialFocus="input"
|
|
|
7841
8127
|
summary: "Content for each of a radio group's options, in place of the plain label string.",
|
|
7842
8128
|
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> ```',
|
|
7843
8129
|
category: "forms",
|
|
7844
|
-
version: "11.
|
|
8130
|
+
version: "11.6.0",
|
|
7845
8131
|
bindings: {
|
|
7846
8132
|
angular: {
|
|
7847
8133
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7865,7 +8151,7 @@ initialFocus="input"
|
|
|
7865
8151
|
summary: "",
|
|
7866
8152
|
description: "",
|
|
7867
8153
|
category: "directives",
|
|
7868
|
-
version: "11.
|
|
8154
|
+
version: "11.6.0",
|
|
7869
8155
|
bindings: {
|
|
7870
8156
|
angular: {
|
|
7871
8157
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7889,7 +8175,7 @@ initialFocus="input"
|
|
|
7889
8175
|
summary: "",
|
|
7890
8176
|
description: "",
|
|
7891
8177
|
category: "layout",
|
|
7892
|
-
version: "11.
|
|
8178
|
+
version: "11.6.0",
|
|
7893
8179
|
bindings: {
|
|
7894
8180
|
angular: {
|
|
7895
8181
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -7944,7 +8230,7 @@ initialFocus="input"
|
|
|
7944
8230
|
summary: "Native scroll area with theme-driven scrollbar styling.",
|
|
7945
8231
|
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.",
|
|
7946
8232
|
category: "layout",
|
|
7947
|
-
version: "11.
|
|
8233
|
+
version: "11.6.0",
|
|
7948
8234
|
bindings: {
|
|
7949
8235
|
angular: {
|
|
7950
8236
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8091,7 +8377,7 @@ initialFocus="input"
|
|
|
8091
8377
|
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.",
|
|
8092
8378
|
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.",
|
|
8093
8379
|
category: "forms",
|
|
8094
|
-
version: "11.
|
|
8380
|
+
version: "11.6.0",
|
|
8095
8381
|
bindings: {
|
|
8096
8382
|
angular: {
|
|
8097
8383
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8135,6 +8421,14 @@ initialFocus="input"
|
|
|
8135
8421
|
default: "[]",
|
|
8136
8422
|
description: "Type-ahead entries. Keep them fresh from `change` emissions; the list shows while the field has focus and entries exist."
|
|
8137
8423
|
},
|
|
8424
|
+
{
|
|
8425
|
+
name: "openOnFocus",
|
|
8426
|
+
kind: "input",
|
|
8427
|
+
type: "boolean",
|
|
8428
|
+
required: false,
|
|
8429
|
+
default: "false",
|
|
8430
|
+
description: "Show the suggestions on focus and on click, before anything is typed."
|
|
8431
|
+
},
|
|
8138
8432
|
{
|
|
8139
8433
|
name: "searchChange",
|
|
8140
8434
|
kind: "output",
|
|
@@ -8218,7 +8512,7 @@ initialFocus="input"
|
|
|
8218
8512
|
summary: "",
|
|
8219
8513
|
description: "",
|
|
8220
8514
|
category: "forms",
|
|
8221
|
-
version: "11.
|
|
8515
|
+
version: "11.6.0",
|
|
8222
8516
|
bindings: {
|
|
8223
8517
|
angular: {
|
|
8224
8518
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8388,7 +8682,7 @@ initialFocus="input"
|
|
|
8388
8682
|
summary: "Loading placeholder painted with surface tokens.",
|
|
8389
8683
|
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.",
|
|
8390
8684
|
category: "components",
|
|
8391
|
-
version: "11.
|
|
8685
|
+
version: "11.6.0",
|
|
8392
8686
|
bindings: {
|
|
8393
8687
|
angular: {
|
|
8394
8688
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8539,7 +8833,7 @@ initialFocus="input"
|
|
|
8539
8833
|
summary: "Bounded numeric input by pointer, for values where the *position* is the information: volume, opacity, weightings, price filters.",
|
|
8540
8834
|
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.",
|
|
8541
8835
|
category: "forms",
|
|
8542
|
-
version: "11.
|
|
8836
|
+
version: "11.6.0",
|
|
8543
8837
|
bindings: {
|
|
8544
8838
|
angular: {
|
|
8545
8839
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8816,7 +9110,7 @@ initialFocus="input"
|
|
|
8816
9110
|
summary: "",
|
|
8817
9111
|
description: "",
|
|
8818
9112
|
category: "feedback",
|
|
8819
|
-
version: "11.
|
|
9113
|
+
version: "11.6.0",
|
|
8820
9114
|
bindings: {
|
|
8821
9115
|
angular: {
|
|
8822
9116
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8928,7 +9222,7 @@ initialFocus="input"
|
|
|
8928
9222
|
summary: "",
|
|
8929
9223
|
description: "",
|
|
8930
9224
|
category: "data",
|
|
8931
|
-
version: "11.
|
|
9225
|
+
version: "11.6.0",
|
|
8932
9226
|
bindings: {
|
|
8933
9227
|
angular: {
|
|
8934
9228
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -8987,7 +9281,7 @@ initialFocus="input"
|
|
|
8987
9281
|
summary: "",
|
|
8988
9282
|
description: "",
|
|
8989
9283
|
category: "layout",
|
|
8990
|
-
version: "11.
|
|
9284
|
+
version: "11.6.0",
|
|
8991
9285
|
bindings: {
|
|
8992
9286
|
angular: {
|
|
8993
9287
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9042,7 +9336,7 @@ initialFocus="input"
|
|
|
9042
9336
|
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.',
|
|
9043
9337
|
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.',
|
|
9044
9338
|
category: "components",
|
|
9045
|
-
version: "11.
|
|
9339
|
+
version: "11.6.0",
|
|
9046
9340
|
bindings: {
|
|
9047
9341
|
angular: {
|
|
9048
9342
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9160,7 +9454,7 @@ initialFocus="input"
|
|
|
9160
9454
|
summary: "",
|
|
9161
9455
|
description: "",
|
|
9162
9456
|
category: "primitives",
|
|
9163
|
-
version: "11.
|
|
9457
|
+
version: "11.6.0",
|
|
9164
9458
|
bindings: {
|
|
9165
9459
|
angular: {
|
|
9166
9460
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9249,7 +9543,7 @@ initialFocus="input"
|
|
|
9249
9543
|
summary: "One tab inside `uni-tabs`: a label for the tablist plus projected panel content.",
|
|
9250
9544
|
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.",
|
|
9251
9545
|
category: "components",
|
|
9252
|
-
version: "11.
|
|
9546
|
+
version: "11.6.0",
|
|
9253
9547
|
bindings: {
|
|
9254
9548
|
angular: {
|
|
9255
9549
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9287,9 +9581,9 @@ initialFocus="input"
|
|
|
9287
9581
|
name: "Tabs",
|
|
9288
9582
|
status: "stable",
|
|
9289
9583
|
summary: "WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.",
|
|
9290
|
-
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.",
|
|
9584
|
+
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.",
|
|
9291
9585
|
category: "components",
|
|
9292
|
-
version: "11.
|
|
9586
|
+
version: "11.6.0",
|
|
9293
9587
|
bindings: {
|
|
9294
9588
|
angular: {
|
|
9295
9589
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9326,16 +9620,21 @@ initialFocus="input"
|
|
|
9326
9620
|
{
|
|
9327
9621
|
title: "Default",
|
|
9328
9622
|
framework: "angular",
|
|
9329
|
-
code: '<!-- Storybook story: Default -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <span uni-text="body-1-long">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </span>\n</uni-tab>\n<uni-tab label="Activity">\n <span uni-text="body-1-long">Recent activity would render here.</span>\n</uni-tab>\n<uni-tab label="Settings">\n <span uni-text="body-1-long">Settings content, instantiated on selection.</span>\n</uni-tab>\n</uni-tabs>'
|
|
9623
|
+
code: '<!-- Storybook story: Default -->\n<uni-tabs [selectedIndex]="selectedIndex ?? 0">\n<uni-tab label="Overview">\n <span uni-text="body-1-long" style="display: block; padding-top: 16px">\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\n to the extremes, and only the selected panel is rendered.\n </span>\n</uni-tab>\n<uni-tab label="Activity">\n <span uni-text="body-1-long" style="display: block; padding-top: 16px">Recent activity would render here.</span>\n</uni-tab>\n<uni-tab label="Settings">\n <span uni-text="body-1-long" style="display: block; padding-top: 16px">Settings content, instantiated on selection.</span>\n</uni-tab>\n</uni-tabs>'
|
|
9624
|
+
},
|
|
9625
|
+
{
|
|
9626
|
+
title: "Uneven Panels",
|
|
9627
|
+
framework: "angular",
|
|
9628
|
+
code: '<!-- Storybook story: Uneven Panels -->\n<uni-tabs>\n<uni-tab label="Summary">\n <span uni-text="body-1-long" style="display: block; padding-top: 16px">\n A single line.\n </span>\n</uni-tab>\n<uni-tab label="Details">\n <div style="padding-top: 16px">\n @for (line of [1, 2, 3, 4, 5, 6]; track line) {\n <p uni-text="body-1-long">Detail line {{ line }} of a much taller panel.</p>\n }\n </div>\n</uni-tab>\n<uni-tab label="Notes">\n <div style="padding-top: 16px">\n @for (line of [1, 2, 3]; track line) {\n <p uni-text="body-1-long">Note {{ line }}.</p>\n }\n </div>\n</uni-tab>\n</uni-tabs>\n<p uni-text="body-1-long">Content below the tabs moves with the panel.</p>'
|
|
9330
9629
|
},
|
|
9331
9630
|
{
|
|
9332
9631
|
title: "With Disabled Tab",
|
|
9333
9632
|
framework: "angular",
|
|
9334
|
-
code: '<!-- Storybook story: With Disabled Tab -->\n<uni-tabs>\n<uni-tab label="Open"><span uni-text="body-1-long">Open items.</span></uni-tab>\n<uni-tab label="Archived" [disabled]="true">\n <span uni-text="body-1-long">Unreachable while disabled.</span>\n</uni-tab>\n<uni-tab label="All"><span uni-text="body-1-long">Everything.</span></uni-tab>\n</uni-tabs>'
|
|
9633
|
+
code: '<!-- Storybook story: With Disabled Tab -->\n<uni-tabs>\n<uni-tab label="Open"><span uni-text="body-1-long" style="display: block; padding-top: 16px">Open items.</span></uni-tab>\n<uni-tab label="Archived" [disabled]="true">\n <span uni-text="body-1-long" style="display: block; padding-top: 16px">Unreachable while disabled.</span>\n</uni-tab>\n<uni-tab label="All"><span uni-text="body-1-long" style="display: block; padding-top: 16px">Everything.</span></uni-tab>\n</uni-tabs>'
|
|
9335
9634
|
}
|
|
9336
9635
|
],
|
|
9337
9636
|
guidelines: {
|
|
9338
|
-
whenToUse: "Tabs organize peer views behind a single switcher. Each `uni-tab` supplies a label and\nits panel content; only the selected panel is instantiated, so heavy tab content costs\nnothing until visited.\nThe default tokens render underline tabs; a theme that sets `borderRadius: 'max'` and\nan `activeColor` gets segmented pills without any component changes.",
|
|
9637
|
+
whenToUse: "Tabs organize peer views behind a single switcher. Each `uni-tab` supplies a label and\nits panel content; only the selected panel is instantiated, so heavy tab content costs\nnothing until visited.\nThe panel adds no padding of its own: content sits flush against the tablist, and\nthe spacing around it is yours to set on whatever you project.\nThe default tokens render underline tabs; a theme that sets `borderRadius: 'max'` and\nan `activeColor` gets segmented pills without any component changes.",
|
|
9339
9638
|
dos: [
|
|
9340
9639
|
"Use for peer views of the same subject (details, activity, settings)",
|
|
9341
9640
|
"Keep labels to one or two words"
|
|
@@ -9347,11 +9646,13 @@ initialFocus="input"
|
|
|
9347
9646
|
accessibility: [
|
|
9348
9647
|
"Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired",
|
|
9349
9648
|
"Arrow keys move between tabs with selection following focus, wrapping at the ends;",
|
|
9350
|
-
"Roving tabindex: only the selected tab sits in the tab order; the panel itself is"
|
|
9649
|
+
"Roving tabindex: only the selected tab sits in the tab order; the panel itself is",
|
|
9650
|
+
"The panel animation is skipped under `prefers-reduced-motion`."
|
|
9351
9651
|
]
|
|
9352
9652
|
},
|
|
9353
9653
|
relatedTokens: [
|
|
9354
9654
|
"tabs.behavior.motion",
|
|
9655
|
+
"tabs.behavior.panelMotion",
|
|
9355
9656
|
"tabs.behavior.typeface",
|
|
9356
9657
|
"tabs.behavior.textColor",
|
|
9357
9658
|
"tabs.behavior.activeTextColor",
|
|
@@ -9370,7 +9671,7 @@ initialFocus="input"
|
|
|
9370
9671
|
summary: "Compact chip for categories, states, filters and tokens.",
|
|
9371
9672
|
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.",
|
|
9372
9673
|
category: "data",
|
|
9373
|
-
version: "11.
|
|
9674
|
+
version: "11.6.0",
|
|
9374
9675
|
bindings: {
|
|
9375
9676
|
angular: {
|
|
9376
9677
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9748,7 +10049,7 @@ initialFocus="input"
|
|
|
9748
10049
|
summary: "A row of chips the user picks from: filters, facets, a set of labels.",
|
|
9749
10050
|
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.",
|
|
9750
10051
|
category: "data",
|
|
9751
|
-
version: "11.
|
|
10052
|
+
version: "11.6.0",
|
|
9752
10053
|
bindings: {
|
|
9753
10054
|
angular: {
|
|
9754
10055
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -9946,7 +10247,7 @@ initialFocus="input"
|
|
|
9946
10247
|
summary: "",
|
|
9947
10248
|
description: "",
|
|
9948
10249
|
category: "forms",
|
|
9949
|
-
version: "11.
|
|
10250
|
+
version: "11.6.0",
|
|
9950
10251
|
bindings: {
|
|
9951
10252
|
angular: {
|
|
9952
10253
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10069,19 +10370,49 @@ initialFocus="input"
|
|
|
10069
10370
|
description: ""
|
|
10070
10371
|
},
|
|
10071
10372
|
{
|
|
10072
|
-
name: "
|
|
10373
|
+
name: "unframed",
|
|
10073
10374
|
kind: "input",
|
|
10074
|
-
type: "
|
|
10375
|
+
type: "unknown",
|
|
10075
10376
|
required: false,
|
|
10076
|
-
default: "
|
|
10077
|
-
description: ""
|
|
10377
|
+
default: "false, { transform: booleanAttribute }",
|
|
10378
|
+
description: "Drop the field chrome (border, fill, inset) and render the bare chip row \u2014 an email client's To line. The surrounding layout draws any hairline and focus cue; the error state is still exposed through `aria-invalid`."
|
|
10078
10379
|
},
|
|
10079
10380
|
{
|
|
10080
|
-
name: "
|
|
10381
|
+
name: "backspaceRemoves",
|
|
10081
10382
|
kind: "input",
|
|
10082
|
-
type: "
|
|
10383
|
+
type: "boolean",
|
|
10384
|
+
required: false,
|
|
10385
|
+
default: "false",
|
|
10386
|
+
description: "Backspace in an empty field removes the last tag outright, as mail clients do. Off by default: the two-step (focus the chip, then remove) never deletes blind."
|
|
10387
|
+
},
|
|
10388
|
+
{
|
|
10389
|
+
name: "keepInvalidText",
|
|
10390
|
+
kind: "input",
|
|
10391
|
+
type: "boolean",
|
|
10392
|
+
required: false,
|
|
10393
|
+
default: "false",
|
|
10394
|
+
description: "Refuse a draft that fails validation instead of committing it as a flagged chip: the text stays in the field to be fixed and `rejected` fires with `reason: 'invalid'`."
|
|
10395
|
+
},
|
|
10396
|
+
{
|
|
10397
|
+
name: "autocomplete",
|
|
10398
|
+
kind: "input",
|
|
10399
|
+
type: "string",
|
|
10400
|
+
required: false,
|
|
10401
|
+
default: "'off'",
|
|
10402
|
+
description: "The text field's `autocomplete` token. The field has its own suggestion list, so browser autofill is off by default and password managers are told to skip it. Chrome can still ignore `off` on a field it takes for an email or address; pass another token if its dropdown competes with yours."
|
|
10403
|
+
},
|
|
10404
|
+
{
|
|
10405
|
+
name: "tagVariant",
|
|
10406
|
+
kind: "input",
|
|
10407
|
+
type: "Variant",
|
|
10408
|
+
required: false,
|
|
10409
|
+
description: ""
|
|
10410
|
+
},
|
|
10411
|
+
{
|
|
10412
|
+
name: "tagTone",
|
|
10413
|
+
kind: "input",
|
|
10414
|
+
type: "TagTone",
|
|
10083
10415
|
required: false,
|
|
10084
|
-
default: "'soft'",
|
|
10085
10416
|
description: ""
|
|
10086
10417
|
},
|
|
10087
10418
|
{
|
|
@@ -10114,6 +10445,29 @@ initialFocus="input"
|
|
|
10114
10445
|
default: "250",
|
|
10115
10446
|
description: ""
|
|
10116
10447
|
},
|
|
10448
|
+
{
|
|
10449
|
+
name: "openOnFocus",
|
|
10450
|
+
kind: "input",
|
|
10451
|
+
type: "boolean",
|
|
10452
|
+
required: false,
|
|
10453
|
+
default: "false",
|
|
10454
|
+
description: "Show the suggestions on focus and on click, before anything is typed."
|
|
10455
|
+
},
|
|
10456
|
+
{
|
|
10457
|
+
name: "autoHighlight",
|
|
10458
|
+
kind: "input",
|
|
10459
|
+
type: "boolean",
|
|
10460
|
+
required: false,
|
|
10461
|
+
default: "false",
|
|
10462
|
+
description: "Keep the first suggestion active while the list is open, so Enter or Tab picks it without arrowing. A draft that is already valid under the field's validator still commits as typed."
|
|
10463
|
+
},
|
|
10464
|
+
{
|
|
10465
|
+
name: "draftChange",
|
|
10466
|
+
kind: "output",
|
|
10467
|
+
type: "string",
|
|
10468
|
+
required: false,
|
|
10469
|
+
description: "Uncommitted text, on every change and undebounced (cf. `query`)."
|
|
10470
|
+
},
|
|
10117
10471
|
{
|
|
10118
10472
|
name: "added",
|
|
10119
10473
|
kind: "output",
|
|
@@ -10260,6 +10614,62 @@ placeholder="Name or address\u2026"
|
|
|
10260
10614
|
/>
|
|
10261
10615
|
<!-- args:
|
|
10262
10616
|
{ disabled: true, value: [{ value: 'alpha' }, { value: 'beta' }] }
|
|
10617
|
+
-->`
|
|
10618
|
+
},
|
|
10619
|
+
{
|
|
10620
|
+
title: "Grouped Suggestions",
|
|
10621
|
+
framework: "angular",
|
|
10622
|
+
code: `<!-- Storybook story: Grouped Suggestions -->
|
|
10623
|
+
<uni-tag-input
|
|
10624
|
+
label="To"
|
|
10625
|
+
preset="email"
|
|
10626
|
+
placeholder="Name or address\u2026"
|
|
10627
|
+
[openOnFocus]="true"
|
|
10628
|
+
[suggestions]="suggestions"
|
|
10629
|
+
/>
|
|
10630
|
+
<!-- args:
|
|
10631
|
+
{
|
|
10632
|
+
unframed: true,
|
|
10633
|
+
preset: 'email',
|
|
10634
|
+
value: [{ value: 'alice@uni.dev', label: 'Alice Chen', avatarName: 'Alice Chen' }],
|
|
10635
|
+
}
|
|
10636
|
+
-->`
|
|
10637
|
+
},
|
|
10638
|
+
{
|
|
10639
|
+
title: "Suggestion Template",
|
|
10640
|
+
framework: "angular",
|
|
10641
|
+
code: `<!-- Storybook story: Suggestion Template -->
|
|
10642
|
+
<uni-tag-input label="To" preset="email" [openOnFocus]="true" [suggestions]="suggestions">
|
|
10643
|
+
<ng-template uniTagSuggestion let-person let-index="index">
|
|
10644
|
+
{{ index + 1 }}. {{ person.label }} \u2014 {{ person.value }}
|
|
10645
|
+
</ng-template>
|
|
10646
|
+
</uni-tag-input>
|
|
10647
|
+
<!-- args:
|
|
10648
|
+
{
|
|
10649
|
+
unframed: true,
|
|
10650
|
+
preset: 'email',
|
|
10651
|
+
value: [{ value: 'alice@uni.dev', label: 'Alice Chen', avatarName: 'Alice Chen' }],
|
|
10652
|
+
}
|
|
10653
|
+
-->`
|
|
10654
|
+
},
|
|
10655
|
+
{
|
|
10656
|
+
title: "Unframed",
|
|
10657
|
+
framework: "angular",
|
|
10658
|
+
code: `<!-- Storybook story: Unframed -->
|
|
10659
|
+
<uni-tag-input
|
|
10660
|
+
label="To"
|
|
10661
|
+
preset="email"
|
|
10662
|
+
placeholder="Name or address\u2026"
|
|
10663
|
+
[value]="value"
|
|
10664
|
+
[suggestions]="suggestions"
|
|
10665
|
+
(query)="onQuery($event)"
|
|
10666
|
+
/>
|
|
10667
|
+
<!-- args:
|
|
10668
|
+
{
|
|
10669
|
+
unframed: true,
|
|
10670
|
+
preset: 'email',
|
|
10671
|
+
value: [{ value: 'alice@uni.dev', label: 'Alice Chen', avatarName: 'Alice Chen' }],
|
|
10672
|
+
}
|
|
10263
10673
|
-->`
|
|
10264
10674
|
}
|
|
10265
10675
|
],
|
|
@@ -10269,6 +10679,7 @@ placeholder="Name or address\u2026"
|
|
|
10269
10679
|
donts: [
|
|
10270
10680
|
"Don't use it to pick from a closed list \u2014 that is `uni-multi-select-dropdown`.",
|
|
10271
10681
|
"Don't filter `suggestions` inside the component; drive them from `(query)`.",
|
|
10682
|
+
"Don't rebuild a people picker on it \u2014 `uni-contact-input` already is one.",
|
|
10272
10683
|
"Don't set `preset=\"email\"` for people's names: Space would split them."
|
|
10273
10684
|
],
|
|
10274
10685
|
accessibility: [
|
|
@@ -10287,7 +10698,7 @@ placeholder="Name or address\u2026"
|
|
|
10287
10698
|
summary: "The typography primitive, applied as an attribute to any element so semantics stay yours.",
|
|
10288
10699
|
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.',
|
|
10289
10700
|
category: "primitives",
|
|
10290
|
-
version: "11.
|
|
10701
|
+
version: "11.6.0",
|
|
10291
10702
|
bindings: {
|
|
10292
10703
|
angular: {
|
|
10293
10704
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10397,7 +10808,7 @@ placeholder="Name or address\u2026"
|
|
|
10397
10808
|
summary: "",
|
|
10398
10809
|
description: "",
|
|
10399
10810
|
category: "forms",
|
|
10400
|
-
version: "11.
|
|
10811
|
+
version: "11.6.0",
|
|
10401
10812
|
bindings: {
|
|
10402
10813
|
angular: {
|
|
10403
10814
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10604,7 +11015,7 @@ placeholder="Name or address\u2026"
|
|
|
10604
11015
|
summary: "",
|
|
10605
11016
|
description: "",
|
|
10606
11017
|
category: "primitives",
|
|
10607
|
-
version: "11.
|
|
11018
|
+
version: "11.6.0",
|
|
10608
11019
|
bindings: {
|
|
10609
11020
|
angular: {
|
|
10610
11021
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10634,7 +11045,7 @@ placeholder="Name or address\u2026"
|
|
|
10634
11045
|
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).",
|
|
10635
11046
|
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).",
|
|
10636
11047
|
category: "components",
|
|
10637
|
-
version: "11.
|
|
11048
|
+
version: "11.6.0",
|
|
10638
11049
|
bindings: {
|
|
10639
11050
|
angular: {
|
|
10640
11051
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10692,7 +11103,7 @@ placeholder="Name or address\u2026"
|
|
|
10692
11103
|
summary: "Time field: a combobox over time options \u2014 the same listbox contract as uni-search-input and uni-tag-input.",
|
|
10693
11104
|
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.",
|
|
10694
11105
|
category: "forms",
|
|
10695
|
-
version: "11.
|
|
11106
|
+
version: "11.6.0",
|
|
10696
11107
|
bindings: {
|
|
10697
11108
|
angular: {
|
|
10698
11109
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -10907,7 +11318,7 @@ placeholder="Name or address\u2026"
|
|
|
10907
11318
|
summary: "",
|
|
10908
11319
|
description: "",
|
|
10909
11320
|
category: "forms",
|
|
10910
|
-
version: "11.
|
|
11321
|
+
version: "11.6.0",
|
|
10911
11322
|
bindings: {
|
|
10912
11323
|
angular: {
|
|
10913
11324
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11169,7 +11580,7 @@ placeholder="Name or address\u2026"
|
|
|
11169
11580
|
summary: "",
|
|
11170
11581
|
description: "",
|
|
11171
11582
|
category: "feedback",
|
|
11172
|
-
version: "11.
|
|
11583
|
+
version: "11.6.0",
|
|
11173
11584
|
bindings: {
|
|
11174
11585
|
angular: {
|
|
11175
11586
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11257,7 +11668,7 @@ placeholder="Name or address\u2026"
|
|
|
11257
11668
|
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).',
|
|
11258
11669
|
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.',
|
|
11259
11670
|
category: "components",
|
|
11260
|
-
version: "11.
|
|
11671
|
+
version: "11.6.0",
|
|
11261
11672
|
bindings: {
|
|
11262
11673
|
angular: {
|
|
11263
11674
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -11384,7 +11795,7 @@ placeholder="Name or address\u2026"
|
|
|
11384
11795
|
summary: "",
|
|
11385
11796
|
description: "",
|
|
11386
11797
|
category: "layout",
|
|
11387
|
-
version: "11.
|
|
11798
|
+
version: "11.6.0",
|
|
11388
11799
|
bindings: {
|
|
11389
11800
|
angular: {
|
|
11390
11801
|
importPath: "@uni-design-system/uni-angular",
|
|
@@ -15054,6 +15465,18 @@ placeholder="Name or address\u2026"
|
|
|
15054
15465
|
DarkTheme: "snap"
|
|
15055
15466
|
}
|
|
15056
15467
|
},
|
|
15468
|
+
{
|
|
15469
|
+
id: "tabs.behavior.panelMotion",
|
|
15470
|
+
value: "panel",
|
|
15471
|
+
type: "string",
|
|
15472
|
+
kind: "behavioral",
|
|
15473
|
+
target: "component-prop",
|
|
15474
|
+
appliesTo: "tabs",
|
|
15475
|
+
themeValues: {
|
|
15476
|
+
LightTheme: "panel",
|
|
15477
|
+
DarkTheme: "panel"
|
|
15478
|
+
}
|
|
15479
|
+
},
|
|
15057
15480
|
{
|
|
15058
15481
|
id: "tabs.behavior.typeface",
|
|
15059
15482
|
value: "title-small",
|
|
@@ -15390,6 +15813,30 @@ placeholder="Name or address\u2026"
|
|
|
15390
15813
|
DarkTheme: "md"
|
|
15391
15814
|
}
|
|
15392
15815
|
},
|
|
15816
|
+
{
|
|
15817
|
+
id: "tagInput.behavior.chipVariant",
|
|
15818
|
+
value: "primary",
|
|
15819
|
+
type: "string",
|
|
15820
|
+
kind: "behavioral",
|
|
15821
|
+
target: "component-prop",
|
|
15822
|
+
appliesTo: "tagInput",
|
|
15823
|
+
themeValues: {
|
|
15824
|
+
LightTheme: "primary",
|
|
15825
|
+
DarkTheme: "primary"
|
|
15826
|
+
}
|
|
15827
|
+
},
|
|
15828
|
+
{
|
|
15829
|
+
id: "tagInput.behavior.chipTone",
|
|
15830
|
+
value: "soft",
|
|
15831
|
+
type: "string",
|
|
15832
|
+
kind: "behavioral",
|
|
15833
|
+
target: "component-prop",
|
|
15834
|
+
appliesTo: "tagInput",
|
|
15835
|
+
themeValues: {
|
|
15836
|
+
LightTheme: "soft",
|
|
15837
|
+
DarkTheme: "soft"
|
|
15838
|
+
}
|
|
15839
|
+
},
|
|
15393
15840
|
{
|
|
15394
15841
|
id: "tagInput.behavior.minInputWidth",
|
|
15395
15842
|
value: "12ch",
|
|
@@ -15462,6 +15909,102 @@ placeholder="Name or address\u2026"
|
|
|
15462
15909
|
DarkTheme: 8
|
|
15463
15910
|
}
|
|
15464
15911
|
},
|
|
15912
|
+
{
|
|
15913
|
+
id: "tagInput.behavior.typeface",
|
|
15914
|
+
value: "label",
|
|
15915
|
+
type: "string",
|
|
15916
|
+
kind: "behavioral",
|
|
15917
|
+
target: "component-prop",
|
|
15918
|
+
appliesTo: "tagInput",
|
|
15919
|
+
themeValues: {
|
|
15920
|
+
LightTheme: "label",
|
|
15921
|
+
DarkTheme: "label"
|
|
15922
|
+
}
|
|
15923
|
+
},
|
|
15924
|
+
{
|
|
15925
|
+
id: "tagInput.behavior.headingTypeface",
|
|
15926
|
+
value: "caption",
|
|
15927
|
+
type: "string",
|
|
15928
|
+
kind: "behavioral",
|
|
15929
|
+
target: "component-prop",
|
|
15930
|
+
appliesTo: "tagInput",
|
|
15931
|
+
themeValues: {
|
|
15932
|
+
LightTheme: "caption",
|
|
15933
|
+
DarkTheme: "caption"
|
|
15934
|
+
}
|
|
15935
|
+
},
|
|
15936
|
+
{
|
|
15937
|
+
id: "tagInput.behavior.listWidth",
|
|
15938
|
+
value: "anchor",
|
|
15939
|
+
type: "string",
|
|
15940
|
+
kind: "behavioral",
|
|
15941
|
+
target: "component-prop",
|
|
15942
|
+
appliesTo: "tagInput",
|
|
15943
|
+
themeValues: {
|
|
15944
|
+
LightTheme: "anchor",
|
|
15945
|
+
DarkTheme: "anchor"
|
|
15946
|
+
}
|
|
15947
|
+
},
|
|
15948
|
+
{
|
|
15949
|
+
id: "contactInput.behavior.avatarSize",
|
|
15950
|
+
value: "md",
|
|
15951
|
+
type: "string",
|
|
15952
|
+
kind: "behavioral",
|
|
15953
|
+
target: "component-prop",
|
|
15954
|
+
appliesTo: "contactInput",
|
|
15955
|
+
themeValues: {
|
|
15956
|
+
LightTheme: "md",
|
|
15957
|
+
DarkTheme: "md"
|
|
15958
|
+
}
|
|
15959
|
+
},
|
|
15960
|
+
{
|
|
15961
|
+
id: "contactInput.behavior.avatarVariant",
|
|
15962
|
+
value: "primary",
|
|
15963
|
+
type: "string",
|
|
15964
|
+
kind: "behavioral",
|
|
15965
|
+
target: "component-prop",
|
|
15966
|
+
appliesTo: "contactInput",
|
|
15967
|
+
themeValues: {
|
|
15968
|
+
LightTheme: "primary",
|
|
15969
|
+
DarkTheme: "primary"
|
|
15970
|
+
}
|
|
15971
|
+
},
|
|
15972
|
+
{
|
|
15973
|
+
id: "contactInput.behavior.nameTypeface",
|
|
15974
|
+
value: "body-2-short",
|
|
15975
|
+
type: "string",
|
|
15976
|
+
kind: "behavioral",
|
|
15977
|
+
target: "component-prop",
|
|
15978
|
+
appliesTo: "contactInput",
|
|
15979
|
+
themeValues: {
|
|
15980
|
+
LightTheme: "body-2-short",
|
|
15981
|
+
DarkTheme: "body-2-short"
|
|
15982
|
+
}
|
|
15983
|
+
},
|
|
15984
|
+
{
|
|
15985
|
+
id: "contactInput.behavior.detailTypeface",
|
|
15986
|
+
value: "caption",
|
|
15987
|
+
type: "string",
|
|
15988
|
+
kind: "behavioral",
|
|
15989
|
+
target: "component-prop",
|
|
15990
|
+
appliesTo: "contactInput",
|
|
15991
|
+
themeValues: {
|
|
15992
|
+
LightTheme: "caption",
|
|
15993
|
+
DarkTheme: "caption"
|
|
15994
|
+
}
|
|
15995
|
+
},
|
|
15996
|
+
{
|
|
15997
|
+
id: "contactInput.behavior.rowGap",
|
|
15998
|
+
value: "sm",
|
|
15999
|
+
type: "string",
|
|
16000
|
+
kind: "behavioral",
|
|
16001
|
+
target: "component-prop",
|
|
16002
|
+
appliesTo: "contactInput",
|
|
16003
|
+
themeValues: {
|
|
16004
|
+
LightTheme: "sm",
|
|
16005
|
+
DarkTheme: "sm"
|
|
16006
|
+
}
|
|
16007
|
+
},
|
|
15465
16008
|
{
|
|
15466
16009
|
id: "calendar.behavior.dayBorderRadius",
|
|
15467
16010
|
value: "max",
|
|
@@ -17580,6 +18123,7 @@ placeholder="Name or address\u2026"
|
|
|
17580
18123
|
},
|
|
17581
18124
|
tabs: {
|
|
17582
18125
|
motion: "snap",
|
|
18126
|
+
panelMotion: "panel",
|
|
17583
18127
|
typeface: "title-small",
|
|
17584
18128
|
textColor: "on-surface-variant",
|
|
17585
18129
|
activeTextColor: "primary",
|
|
@@ -17618,12 +18162,24 @@ placeholder="Name or address\u2026"
|
|
|
17618
18162
|
tagInput: {
|
|
17619
18163
|
chipGap: "xs",
|
|
17620
18164
|
chipSize: "md",
|
|
18165
|
+
chipVariant: "primary",
|
|
18166
|
+
chipTone: "soft",
|
|
17621
18167
|
minInputWidth: "12ch",
|
|
17622
18168
|
listColor: "primary-surface",
|
|
17623
18169
|
listShadow: "menu",
|
|
17624
18170
|
listBorderRadius: "xs",
|
|
17625
18171
|
activeColor: "primary-container",
|
|
17626
|
-
maxSuggestions: 8
|
|
18172
|
+
maxSuggestions: 8,
|
|
18173
|
+
typeface: "label",
|
|
18174
|
+
headingTypeface: "caption",
|
|
18175
|
+
listWidth: "anchor"
|
|
18176
|
+
},
|
|
18177
|
+
contactInput: {
|
|
18178
|
+
avatarSize: "md",
|
|
18179
|
+
avatarVariant: "primary",
|
|
18180
|
+
nameTypeface: "body-2-short",
|
|
18181
|
+
detailTypeface: "caption",
|
|
18182
|
+
rowGap: "sm"
|
|
17627
18183
|
},
|
|
17628
18184
|
calendar: {
|
|
17629
18185
|
dayBorderRadius: "max",
|
|
@@ -18193,6 +18749,7 @@ placeholder="Name or address\u2026"
|
|
|
18193
18749
|
},
|
|
18194
18750
|
tabs: {
|
|
18195
18751
|
motion: "snap",
|
|
18752
|
+
panelMotion: "panel",
|
|
18196
18753
|
typeface: "title-small",
|
|
18197
18754
|
textColor: "on-surface-variant",
|
|
18198
18755
|
activeTextColor: "primary",
|
|
@@ -18231,12 +18788,24 @@ placeholder="Name or address\u2026"
|
|
|
18231
18788
|
tagInput: {
|
|
18232
18789
|
chipGap: "xs",
|
|
18233
18790
|
chipSize: "md",
|
|
18791
|
+
chipVariant: "primary",
|
|
18792
|
+
chipTone: "soft",
|
|
18234
18793
|
minInputWidth: "12ch",
|
|
18235
18794
|
listColor: "primary-surface",
|
|
18236
18795
|
listShadow: "menu",
|
|
18237
18796
|
listBorderRadius: "xs",
|
|
18238
18797
|
activeColor: "primary-container",
|
|
18239
|
-
maxSuggestions: 8
|
|
18798
|
+
maxSuggestions: 8,
|
|
18799
|
+
typeface: "label",
|
|
18800
|
+
headingTypeface: "caption",
|
|
18801
|
+
listWidth: "anchor"
|
|
18802
|
+
},
|
|
18803
|
+
contactInput: {
|
|
18804
|
+
avatarSize: "md",
|
|
18805
|
+
avatarVariant: "primary",
|
|
18806
|
+
nameTypeface: "body-2-short",
|
|
18807
|
+
detailTypeface: "caption",
|
|
18808
|
+
rowGap: "sm"
|
|
18240
18809
|
},
|
|
18241
18810
|
calendar: {
|
|
18242
18811
|
dayBorderRadius: "max",
|
|
@@ -18435,6 +19004,42 @@ placeholder="Name or address\u2026"
|
|
|
18435
19004
|
{
|
|
18436
19005
|
package: "@uni-design-system/uni-angular",
|
|
18437
19006
|
releases: [
|
|
19007
|
+
{
|
|
19008
|
+
version: "11.6.0",
|
|
19009
|
+
entries: [
|
|
19010
|
+
{
|
|
19011
|
+
bump: "minor",
|
|
19012
|
+
title: "Add `uni-contact-input`, a recipient field for picking people, and close the gaps that kept `uni-tag-input` from being an email client's To row.",
|
|
19013
|
+
body: "- **`uni-contact-input`** (new): chips plus a contact list that opens on focus, filters by name or address, groups under headings, and draws each row as a person (avatar, name, address, note). ArrowDown and Enter pick a match (`autoHighlight` makes Enter or Tab pick the first one without arrowing), Backspace removes the last person, and a typo stays in the field while `(rejected)` reports it. `allowCustom` controls whether typed addresses are accepted; `unframed` drops the field chrome. Themed through the new `contactInput` entry.\n- **`uni-tag-input`**: `uniTagSuggestion` row template; `group` headings and `avatarName` on suggestions; `openOnFocus`, `autoHighlight`, `backspaceRemoves`, `keepInvalidText`, `unframed` and `autocomplete` inputs; an undebounced `draftChange` output; a public `focus()`; `chipVariant` and `chipTone` theme options, so a theme sets the chip look once (`tagVariant` / `tagTone` still override per field). The default suggestion row now paints `description` (previously screen-reader only) and an avatar when one is given. The field opts out of password managers, and the first Escape that closes the list no longer reaches an enclosing dialog.\n- **Listbox popups** (`tagInput`, `combobox`, `searchInput`, `timeInput`): `typeface` and `listWidth` theme options. Defaults are unchanged (`label`, field width).\n- **`uni-combobox`, `uni-search-input`**: `openOnFocus` input.\n- **`uni-tag`**: an avatar image that fails to load now falls back to the `avatarName` initials.",
|
|
19014
|
+
commit: "3a41065"
|
|
19015
|
+
}
|
|
19016
|
+
],
|
|
19017
|
+
dependencyBumps: []
|
|
19018
|
+
},
|
|
19019
|
+
{
|
|
19020
|
+
version: "11.5.0",
|
|
19021
|
+
entries: [
|
|
19022
|
+
{
|
|
19023
|
+
bump: "minor",
|
|
19024
|
+
title: "New CDK utility: `copyToClipboard`, for text and rich content.",
|
|
19025
|
+
body: "`copyToClipboard(content)` wraps the Async Clipboard API and never rejects. It resolves `'copied' | 'denied' | 'unsupported' | 'failed'`, so a caller can tell the user why a copy did not work. Pass a string for text, or a map of MIME type to data (`{ 'text/plain': \u2026, 'text/html': \u2026 }`, `{ 'image/png': blob }`) for rich content; a value may be a promise, for content that has to be fetched or rendered first.\n\nThe write starts synchronously inside the user gesture. The `clipboard-write` permission is consulted only after a refusal, to tell `denied` apart from `failed`: only Chromium answers that query, and waiting on it before the write can cost the gesture in other browsers.\n\n`PermissionService`, the `Permission` and `PermissionState` types, and a new plain function `queryPermission` are now exported; the docs already described the service as importable, but it was missing from the public API.",
|
|
19026
|
+
commit: "a5e4bd0"
|
|
19027
|
+
},
|
|
19028
|
+
{
|
|
19029
|
+
bump: "minor",
|
|
19030
|
+
title: "`uni-tabs` softens a tab switch: the incoming panel fades in while the panel animates between the two contents' heights.",
|
|
19031
|
+
body: "Switching between panels of different heights used to cut, and everything below the tabs jumped with it. The panel now travels from the outgoing content's height to the incoming one while the new content fades in. The new content is rendered and interactive from the first frame, so the animation never delays the switch, and a second switch mid-animation picks up from the height the first had reached.\n\nThe timing is a new `tabs` theme option, `panelMotion`, naming a motion primitive. The base theme sets it to `panel`, so **this is on by default**; set `panelMotion: undefined` in a theme to keep the instant switch. Under `prefers-reduced-motion` the switch is always instant.",
|
|
19032
|
+
commit: "ec2cc45"
|
|
19033
|
+
},
|
|
19034
|
+
{
|
|
19035
|
+
bump: "patch",
|
|
19036
|
+
title: "`uni-tabs` no longer pads its panel.",
|
|
19037
|
+
body: "The panel carried a hardcoded `md` top padding, which assumed every consumer wanted that gap between the tablist and their content. Full-bleed content (a table, a divider, a tinted surface) could not sit flush against the tablist without a negative margin. The panel now adds no padding; content that relied on the gap should set its own spacing.",
|
|
19038
|
+
commit: "9a51a28"
|
|
19039
|
+
}
|
|
19040
|
+
],
|
|
19041
|
+
dependencyBumps: []
|
|
19042
|
+
},
|
|
18438
19043
|
{
|
|
18439
19044
|
version: "11.4.1",
|
|
18440
19045
|
entries: [
|
|
@@ -19357,6 +19962,30 @@ placeholder="Name or address\u2026"
|
|
|
19357
19962
|
{
|
|
19358
19963
|
package: "@uni-design-system/uni-core",
|
|
19359
19964
|
releases: [
|
|
19965
|
+
{
|
|
19966
|
+
version: "11.6.0",
|
|
19967
|
+
entries: [
|
|
19968
|
+
{
|
|
19969
|
+
bump: "minor",
|
|
19970
|
+
title: "Add `uni-contact-input`, a recipient field for picking people, and close the gaps that kept `uni-tag-input` from being an email client's To row.",
|
|
19971
|
+
body: "- **`uni-contact-input`** (new): chips plus a contact list that opens on focus, filters by name or address, groups under headings, and draws each row as a person (avatar, name, address, note). ArrowDown and Enter pick a match (`autoHighlight` makes Enter or Tab pick the first one without arrowing), Backspace removes the last person, and a typo stays in the field while `(rejected)` reports it. `allowCustom` controls whether typed addresses are accepted; `unframed` drops the field chrome. Themed through the new `contactInput` entry.\n- **`uni-tag-input`**: `uniTagSuggestion` row template; `group` headings and `avatarName` on suggestions; `openOnFocus`, `autoHighlight`, `backspaceRemoves`, `keepInvalidText`, `unframed` and `autocomplete` inputs; an undebounced `draftChange` output; a public `focus()`; `chipVariant` and `chipTone` theme options, so a theme sets the chip look once (`tagVariant` / `tagTone` still override per field). The default suggestion row now paints `description` (previously screen-reader only) and an avatar when one is given. The field opts out of password managers, and the first Escape that closes the list no longer reaches an enclosing dialog.\n- **Listbox popups** (`tagInput`, `combobox`, `searchInput`, `timeInput`): `typeface` and `listWidth` theme options. Defaults are unchanged (`label`, field width).\n- **`uni-combobox`, `uni-search-input`**: `openOnFocus` input.\n- **`uni-tag`**: an avatar image that fails to load now falls back to the `avatarName` initials.",
|
|
19972
|
+
commit: "3a41065"
|
|
19973
|
+
}
|
|
19974
|
+
],
|
|
19975
|
+
dependencyBumps: []
|
|
19976
|
+
},
|
|
19977
|
+
{
|
|
19978
|
+
version: "11.5.0",
|
|
19979
|
+
entries: [
|
|
19980
|
+
{
|
|
19981
|
+
bump: "minor",
|
|
19982
|
+
title: "`uni-tabs` softens a tab switch: the incoming panel fades in while the panel animates between the two contents' heights.",
|
|
19983
|
+
body: "Switching between panels of different heights used to cut, and everything below the tabs jumped with it. The panel now travels from the outgoing content's height to the incoming one while the new content fades in. The new content is rendered and interactive from the first frame, so the animation never delays the switch, and a second switch mid-animation picks up from the height the first had reached.\n\nThe timing is a new `tabs` theme option, `panelMotion`, naming a motion primitive. The base theme sets it to `panel`, so **this is on by default**; set `panelMotion: undefined` in a theme to keep the instant switch. Under `prefers-reduced-motion` the switch is always instant.",
|
|
19984
|
+
commit: "ec2cc45"
|
|
19985
|
+
}
|
|
19986
|
+
],
|
|
19987
|
+
dependencyBumps: []
|
|
19988
|
+
},
|
|
19360
19989
|
{
|
|
19361
19990
|
version: "11.4.1",
|
|
19362
19991
|
entries: [],
|
|
@@ -20016,6 +20645,16 @@ placeholder="Name or address\u2026"
|
|
|
20016
20645
|
{
|
|
20017
20646
|
package: "@uni-design-system/uni-react",
|
|
20018
20647
|
releases: [
|
|
20648
|
+
{
|
|
20649
|
+
version: "11.6.0",
|
|
20650
|
+
entries: [],
|
|
20651
|
+
dependencyBumps: []
|
|
20652
|
+
},
|
|
20653
|
+
{
|
|
20654
|
+
version: "11.5.0",
|
|
20655
|
+
entries: [],
|
|
20656
|
+
dependencyBumps: []
|
|
20657
|
+
},
|
|
20019
20658
|
{
|
|
20020
20659
|
version: "11.4.1",
|
|
20021
20660
|
entries: [],
|
|
@@ -20317,6 +20956,23 @@ placeholder="Name or address\u2026"
|
|
|
20317
20956
|
{
|
|
20318
20957
|
package: "@uni-design-system/uni-mcp",
|
|
20319
20958
|
releases: [
|
|
20959
|
+
{
|
|
20960
|
+
version: "11.6.0",
|
|
20961
|
+
entries: [],
|
|
20962
|
+
dependencyBumps: []
|
|
20963
|
+
},
|
|
20964
|
+
{
|
|
20965
|
+
version: "11.5.0",
|
|
20966
|
+
entries: [
|
|
20967
|
+
{
|
|
20968
|
+
bump: "minor",
|
|
20969
|
+
title: "The MCP now covers the CDK \u2014 the non-visual half of `uni-angular`.",
|
|
20970
|
+
body: "Until now the index held components only, so `copyToClipboard`, `PermissionService`, the decimal helpers, the datasources and every other CDK export were invisible to an assistant: nothing in them has a selector. A new `cdk-adapter` walks the CDK barrel (`cdk/index.ts`) and indexes every exported function, injectable service, class, interface, type and const with its signature and JSDoc \u2014 read from the TypeScript AST, so arrow-function consts, generics and multi-line parameter lists come through as written. Each CDK module's docs page ships alongside as markdown.\n- **`list-utilities`** \u2014 the inventory, grouped by module; filter by `module` or `kind`.\n- **`get-utility`** \u2014 one export by id (`copy-to-clipboard`) or name (`copyToClipboard`): import line, signature, members, the other symbols in its module, and the module's docs page with usage examples.\n- **`search`** gains a `utility` kind, and **`uni://utilities/{id}`** serves the same card as a resource.\n\nThe server's instructions point assistants at these before they hand-roll a browser API call.",
|
|
20971
|
+
commit: "42aee9e"
|
|
20972
|
+
}
|
|
20973
|
+
],
|
|
20974
|
+
dependencyBumps: []
|
|
20975
|
+
},
|
|
20320
20976
|
{
|
|
20321
20977
|
version: "11.4.1",
|
|
20322
20978
|
entries: [],
|
|
@@ -20557,15 +21213,2794 @@ placeholder="Name or address\u2026"
|
|
|
20557
21213
|
}
|
|
20558
21214
|
]
|
|
20559
21215
|
}
|
|
20560
|
-
]
|
|
20561
|
-
|
|
20562
|
-
|
|
20563
|
-
|
|
20564
|
-
|
|
20565
|
-
|
|
20566
|
-
|
|
20567
|
-
|
|
20568
|
-
|
|
21216
|
+
],
|
|
21217
|
+
utilities: [
|
|
21218
|
+
{
|
|
21219
|
+
id: "unique-id",
|
|
21220
|
+
name: "uniqueId",
|
|
21221
|
+
kind: "function",
|
|
21222
|
+
module: "a11y",
|
|
21223
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21224
|
+
signature: "function uniqueId(prefix = 'uni'): string",
|
|
21225
|
+
summary: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
|
|
21226
|
+
description: "Returns a document-unique id for wiring ARIA relationships (aria-controls, aria-describedby, aria-labelledby, ...).",
|
|
21227
|
+
members: [],
|
|
21228
|
+
version: "11.6.0"
|
|
21229
|
+
},
|
|
21230
|
+
{
|
|
21231
|
+
id: "focusable-selector",
|
|
21232
|
+
name: "FOCUSABLE_SELECTOR",
|
|
21233
|
+
kind: "const",
|
|
21234
|
+
module: "a11y",
|
|
21235
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21236
|
+
signature: `const FOCUSABLE_SELECTOR = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'`,
|
|
21237
|
+
summary: "Selector matching natively focusable elements.",
|
|
21238
|
+
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.",
|
|
21239
|
+
members: [],
|
|
21240
|
+
version: "11.6.0"
|
|
21241
|
+
},
|
|
21242
|
+
{
|
|
21243
|
+
id: "resolve-focus-target",
|
|
21244
|
+
name: "resolveFocusTarget",
|
|
21245
|
+
kind: "function",
|
|
21246
|
+
module: "a11y",
|
|
21247
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21248
|
+
signature: "function resolveFocusTarget(element: HTMLElement): HTMLElement",
|
|
21249
|
+
summary: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
|
|
21250
|
+
description: "Resolves the element that should carry ARIA state for a trigger: the element itself when focusable, otherwise its first focusable descendant.",
|
|
21251
|
+
members: [],
|
|
21252
|
+
version: "11.6.0"
|
|
21253
|
+
},
|
|
21254
|
+
{
|
|
21255
|
+
id: "visually-hidden",
|
|
21256
|
+
name: "visuallyHidden",
|
|
21257
|
+
kind: "const",
|
|
21258
|
+
module: "a11y",
|
|
21259
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21260
|
+
signature: "const visuallyHidden = { position: 'fixed', width: 1, height: 1, padding: 0, margin: -1, overflow: 'hid\u2026",
|
|
21261
|
+
summary: "Visually hides content while keeping it available to screen readers.",
|
|
21262
|
+
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.",
|
|
21263
|
+
members: [],
|
|
21264
|
+
version: "11.6.0"
|
|
21265
|
+
},
|
|
21266
|
+
{
|
|
21267
|
+
id: "motion-safe",
|
|
21268
|
+
name: "motionSafe",
|
|
21269
|
+
kind: "function",
|
|
21270
|
+
module: "a11y",
|
|
21271
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21272
|
+
signature: "function motionSafe<T extends object>(styles: T)",
|
|
21273
|
+
summary: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
|
|
21274
|
+
description: "Wraps animation/transition styles so they only apply when the user has not requested reduced motion (WCAG 2.3.3).",
|
|
21275
|
+
members: [],
|
|
21276
|
+
version: "11.6.0"
|
|
21277
|
+
},
|
|
21278
|
+
{
|
|
21279
|
+
id: "announcer",
|
|
21280
|
+
name: "Announcer",
|
|
21281
|
+
kind: "interface",
|
|
21282
|
+
module: "a11y",
|
|
21283
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21284
|
+
signature: "interface Announcer",
|
|
21285
|
+
summary: "",
|
|
21286
|
+
description: "",
|
|
21287
|
+
members: [
|
|
21288
|
+
{
|
|
21289
|
+
name: "message",
|
|
21290
|
+
kind: "property",
|
|
21291
|
+
signature: "readonly message: Signal<string>",
|
|
21292
|
+
description: 'Current live-region text. Bind it to a visually hidden element that is already in the DOM when the component renders \u2014 a region added at the moment it gains text is not reliably announced: ```html <span role="status" aria-live="polite" [class]="srOnly"> {{ announcer.message() }} </span> ```'
|
|
21293
|
+
},
|
|
21294
|
+
{
|
|
21295
|
+
name: "announce",
|
|
21296
|
+
kind: "method",
|
|
21297
|
+
signature: "announce(text: string): void",
|
|
21298
|
+
description: "Announce `text`, even when it repeats what was just announced."
|
|
21299
|
+
}
|
|
21300
|
+
],
|
|
21301
|
+
version: "11.6.0"
|
|
21302
|
+
},
|
|
21303
|
+
{
|
|
21304
|
+
id: "create-announcer",
|
|
21305
|
+
name: "createAnnouncer",
|
|
21306
|
+
kind: "function",
|
|
21307
|
+
module: "a11y",
|
|
21308
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21309
|
+
signature: "function createAnnouncer(): Announcer",
|
|
21310
|
+
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.",
|
|
21311
|
+
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.",
|
|
21312
|
+
members: [],
|
|
21313
|
+
version: "11.6.0"
|
|
21314
|
+
},
|
|
21315
|
+
{
|
|
21316
|
+
id: "uni-date",
|
|
21317
|
+
name: "UniDate",
|
|
21318
|
+
kind: "type",
|
|
21319
|
+
module: "datetime",
|
|
21320
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21321
|
+
signature: "type UniDate = string",
|
|
21322
|
+
summary: "A calendar date, `'YYYY-MM-DD'`.",
|
|
21323
|
+
description: "A calendar date, `'YYYY-MM-DD'`.",
|
|
21324
|
+
members: [],
|
|
21325
|
+
version: "11.6.0"
|
|
21326
|
+
},
|
|
21327
|
+
{
|
|
21328
|
+
id: "uni-time",
|
|
21329
|
+
name: "UniTime",
|
|
21330
|
+
kind: "type",
|
|
21331
|
+
module: "datetime",
|
|
21332
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21333
|
+
signature: "type UniTime = string",
|
|
21334
|
+
summary: "A wall-clock time, `'HH:mm'` (24-hour).",
|
|
21335
|
+
description: "A wall-clock time, `'HH:mm'` (24-hour). Display format is separate.",
|
|
21336
|
+
members: [],
|
|
21337
|
+
version: "11.6.0"
|
|
21338
|
+
},
|
|
21339
|
+
{
|
|
21340
|
+
id: "uni-date-time",
|
|
21341
|
+
name: "UniDateTime",
|
|
21342
|
+
kind: "type",
|
|
21343
|
+
module: "datetime",
|
|
21344
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21345
|
+
signature: "type UniDateTime = string",
|
|
21346
|
+
summary: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
|
|
21347
|
+
description: "A combined date and time, `'YYYY-MM-DDTHH:mm'`.",
|
|
21348
|
+
members: [],
|
|
21349
|
+
version: "11.6.0"
|
|
21350
|
+
},
|
|
21351
|
+
{
|
|
21352
|
+
id: "uni-date-range",
|
|
21353
|
+
name: "UniDateRange",
|
|
21354
|
+
kind: "interface",
|
|
21355
|
+
module: "datetime",
|
|
21356
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21357
|
+
signature: "interface UniDateRange",
|
|
21358
|
+
summary: "A start\u2013end date range.",
|
|
21359
|
+
description: "A start\u2013end date range. Both ends are inclusive.",
|
|
21360
|
+
members: [
|
|
21361
|
+
{
|
|
21362
|
+
name: "start",
|
|
21363
|
+
kind: "property",
|
|
21364
|
+
signature: "start?: UniDate",
|
|
21365
|
+
description: ""
|
|
21366
|
+
},
|
|
21367
|
+
{
|
|
21368
|
+
name: "end",
|
|
21369
|
+
kind: "property",
|
|
21370
|
+
signature: "end?: UniDate",
|
|
21371
|
+
description: ""
|
|
21372
|
+
}
|
|
21373
|
+
],
|
|
21374
|
+
version: "11.6.0"
|
|
21375
|
+
},
|
|
21376
|
+
{
|
|
21377
|
+
id: "iso-date",
|
|
21378
|
+
name: "isoDate",
|
|
21379
|
+
kind: "function",
|
|
21380
|
+
module: "datetime",
|
|
21381
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21382
|
+
signature: "function isoDate(year: number, month: number, day: number): UniDate",
|
|
21383
|
+
summary: "`(2026, 8, 5)` \u2192 `'2026-08-05'`.",
|
|
21384
|
+
description: "`(2026, 8, 5)` \u2192 `'2026-08-05'`. Does not validate \u2014 see `isValidDate`.",
|
|
21385
|
+
members: [],
|
|
21386
|
+
version: "11.6.0"
|
|
21387
|
+
},
|
|
21388
|
+
{
|
|
21389
|
+
id: "is-valid-date",
|
|
21390
|
+
name: "isValidDate",
|
|
21391
|
+
kind: "function",
|
|
21392
|
+
module: "datetime",
|
|
21393
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21394
|
+
signature: "function isValidDate(year: number, month: number, day: number): UniDate | null",
|
|
21395
|
+
summary: "The ISO date when the parts form a real calendar day, else `null`.",
|
|
21396
|
+
description: "The ISO date when the parts form a real calendar day, else `null`.",
|
|
21397
|
+
members: [],
|
|
21398
|
+
version: "11.6.0"
|
|
21399
|
+
},
|
|
21400
|
+
{
|
|
21401
|
+
id: "days-in-month",
|
|
21402
|
+
name: "daysInMonth",
|
|
21403
|
+
kind: "function",
|
|
21404
|
+
module: "datetime",
|
|
21405
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21406
|
+
signature: "function daysInMonth(year: number, month: number): number",
|
|
21407
|
+
summary: "Days in a month, leap-year aware.",
|
|
21408
|
+
description: "Days in a month, leap-year aware.",
|
|
21409
|
+
members: [],
|
|
21410
|
+
version: "11.6.0"
|
|
21411
|
+
},
|
|
21412
|
+
{
|
|
21413
|
+
id: "add-days",
|
|
21414
|
+
name: "addDays",
|
|
21415
|
+
kind: "function",
|
|
21416
|
+
module: "datetime",
|
|
21417
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21418
|
+
signature: "function addDays(date: UniDate, days: number): UniDate",
|
|
21419
|
+
summary: "",
|
|
21420
|
+
description: "",
|
|
21421
|
+
members: [],
|
|
21422
|
+
version: "11.6.0"
|
|
21423
|
+
},
|
|
21424
|
+
{
|
|
21425
|
+
id: "add-months",
|
|
21426
|
+
name: "addMonths",
|
|
21427
|
+
kind: "function",
|
|
21428
|
+
module: "datetime",
|
|
21429
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21430
|
+
signature: "function addMonths(date: UniDate, months: number): UniDate",
|
|
21431
|
+
summary: "Same day \xB1 n months, clamping the day to the target month's length.",
|
|
21432
|
+
description: "Same day \xB1 n months, clamping the day to the target month's length.",
|
|
21433
|
+
members: [],
|
|
21434
|
+
version: "11.6.0"
|
|
21435
|
+
},
|
|
21436
|
+
{
|
|
21437
|
+
id: "day-of-week",
|
|
21438
|
+
name: "dayOfWeek",
|
|
21439
|
+
kind: "function",
|
|
21440
|
+
module: "datetime",
|
|
21441
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21442
|
+
signature: "function dayOfWeek(date: UniDate): number",
|
|
21443
|
+
summary: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
21444
|
+
description: "Day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
21445
|
+
members: [],
|
|
21446
|
+
version: "11.6.0"
|
|
21447
|
+
},
|
|
21448
|
+
{
|
|
21449
|
+
id: "month-of",
|
|
21450
|
+
name: "monthOf",
|
|
21451
|
+
kind: "function",
|
|
21452
|
+
module: "datetime",
|
|
21453
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21454
|
+
signature: "function monthOf(date: UniDate): string",
|
|
21455
|
+
summary: "`'2026-08-20'` \u2192 `'2026-08'`.",
|
|
21456
|
+
description: "`'2026-08-20'` \u2192 `'2026-08'`.",
|
|
21457
|
+
members: [],
|
|
21458
|
+
version: "11.6.0"
|
|
21459
|
+
},
|
|
21460
|
+
{
|
|
21461
|
+
id: "today-iso",
|
|
21462
|
+
name: "todayIso",
|
|
21463
|
+
kind: "function",
|
|
21464
|
+
module: "datetime",
|
|
21465
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21466
|
+
signature: "function todayIso(): UniDate",
|
|
21467
|
+
summary: "Today as a local-wall-clock ISO date (the one place local time matters).",
|
|
21468
|
+
description: "Today as a local-wall-clock ISO date (the one place local time matters).",
|
|
21469
|
+
members: [],
|
|
21470
|
+
version: "11.6.0"
|
|
21471
|
+
},
|
|
21472
|
+
{
|
|
21473
|
+
id: "inclusive-day-count",
|
|
21474
|
+
name: "inclusiveDayCount",
|
|
21475
|
+
kind: "function",
|
|
21476
|
+
module: "datetime",
|
|
21477
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21478
|
+
signature: "function inclusiveDayCount(start: UniDate, end: UniDate): number",
|
|
21479
|
+
summary: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
|
|
21480
|
+
description: "Inclusive day count of a range: `('-20', '-24')` \u2192 5.",
|
|
21481
|
+
members: [],
|
|
21482
|
+
version: "11.6.0"
|
|
21483
|
+
},
|
|
21484
|
+
{
|
|
21485
|
+
id: "uni-month-grid-cell",
|
|
21486
|
+
name: "UniMonthGridCell",
|
|
21487
|
+
kind: "interface",
|
|
21488
|
+
module: "datetime",
|
|
21489
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21490
|
+
signature: "interface UniMonthGridCell",
|
|
21491
|
+
summary: "",
|
|
21492
|
+
description: "",
|
|
21493
|
+
members: [
|
|
21494
|
+
{
|
|
21495
|
+
name: "date",
|
|
21496
|
+
kind: "property",
|
|
21497
|
+
signature: "date: UniDate",
|
|
21498
|
+
description: ""
|
|
21499
|
+
},
|
|
21500
|
+
{
|
|
21501
|
+
name: "outside",
|
|
21502
|
+
kind: "property",
|
|
21503
|
+
signature: "outside: boolean",
|
|
21504
|
+
description: "True for leading/trailing cells that belong to the adjacent months."
|
|
21505
|
+
}
|
|
21506
|
+
],
|
|
21507
|
+
version: "11.6.0"
|
|
21508
|
+
},
|
|
21509
|
+
{
|
|
21510
|
+
id: "build-month-grid",
|
|
21511
|
+
name: "buildMonthGrid",
|
|
21512
|
+
kind: "function",
|
|
21513
|
+
module: "datetime",
|
|
21514
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21515
|
+
signature: "function buildMonthGrid(month: string, weekStart: number): UniMonthGridCell[][]",
|
|
21516
|
+
summary: "The week matrix a calendar renders: full weeks covering `'YYYY-MM'`, starting on `weekStart` (0 = Sunday).",
|
|
21517
|
+
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.",
|
|
21518
|
+
members: [],
|
|
21519
|
+
version: "11.6.0"
|
|
21520
|
+
},
|
|
21521
|
+
{
|
|
21522
|
+
id: "format-date",
|
|
21523
|
+
name: "formatDate",
|
|
21524
|
+
kind: "function",
|
|
21525
|
+
module: "datetime",
|
|
21526
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21527
|
+
signature: "function formatDate(date: UniDate, locale: string, options: Intl.DateTimeFormatOptions = { dateStyle: 'medium' }): string",
|
|
21528
|
+
summary: "",
|
|
21529
|
+
description: "",
|
|
21530
|
+
members: [],
|
|
21531
|
+
version: "11.6.0"
|
|
21532
|
+
},
|
|
21533
|
+
{
|
|
21534
|
+
id: "format-month-heading",
|
|
21535
|
+
name: "formatMonthHeading",
|
|
21536
|
+
kind: "function",
|
|
21537
|
+
module: "datetime",
|
|
21538
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21539
|
+
signature: "function formatMonthHeading(month: string, locale: string): string",
|
|
21540
|
+
summary: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
|
|
21541
|
+
description: "`'2026-08'` \u2192 `'August 2026'` in the locale.",
|
|
21542
|
+
members: [],
|
|
21543
|
+
version: "11.6.0"
|
|
21544
|
+
},
|
|
21545
|
+
{
|
|
21546
|
+
id: "uni-weekday-name",
|
|
21547
|
+
name: "UniWeekdayName",
|
|
21548
|
+
kind: "interface",
|
|
21549
|
+
module: "datetime",
|
|
21550
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21551
|
+
signature: "interface UniWeekdayName",
|
|
21552
|
+
summary: "",
|
|
21553
|
+
description: "",
|
|
21554
|
+
members: [
|
|
21555
|
+
{
|
|
21556
|
+
name: "label",
|
|
21557
|
+
kind: "property",
|
|
21558
|
+
signature: "label: string",
|
|
21559
|
+
description: "Column label in the requested format ('narrow' | 'short')."
|
|
21560
|
+
},
|
|
21561
|
+
{
|
|
21562
|
+
name: "full",
|
|
21563
|
+
kind: "property",
|
|
21564
|
+
signature: "full: string",
|
|
21565
|
+
description: "Full weekday name, for the columnheader's `abbr`."
|
|
21566
|
+
}
|
|
21567
|
+
],
|
|
21568
|
+
version: "11.6.0"
|
|
21569
|
+
},
|
|
21570
|
+
{
|
|
21571
|
+
id: "weekday-names",
|
|
21572
|
+
name: "weekdayNames",
|
|
21573
|
+
kind: "const",
|
|
21574
|
+
module: "datetime",
|
|
21575
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21576
|
+
signature: "const weekdayNames = memoize(\u2026)",
|
|
21577
|
+
summary: "Weekday header labels starting at `weekStart` (0 = Sunday).",
|
|
21578
|
+
description: "Weekday header labels starting at `weekStart` (0 = Sunday).",
|
|
21579
|
+
members: [],
|
|
21580
|
+
version: "11.6.0"
|
|
21581
|
+
},
|
|
21582
|
+
{
|
|
21583
|
+
id: "format-time",
|
|
21584
|
+
name: "formatTime",
|
|
21585
|
+
kind: "function",
|
|
21586
|
+
module: "datetime",
|
|
21587
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21588
|
+
signature: "function formatTime(time: UniTime, locale: string, hour12: boolean): string",
|
|
21589
|
+
summary: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
|
|
21590
|
+
description: "`'15:00'` \u2192 `'3:00 PM'` (or `'15:00'` when `hour12` is false).",
|
|
21591
|
+
members: [],
|
|
21592
|
+
version: "11.6.0"
|
|
21593
|
+
},
|
|
21594
|
+
{
|
|
21595
|
+
id: "locale-week-start",
|
|
21596
|
+
name: "localeWeekStart",
|
|
21597
|
+
kind: "const",
|
|
21598
|
+
module: "datetime",
|
|
21599
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21600
|
+
signature: "const localeWeekStart = memoize(\u2026)",
|
|
21601
|
+
summary: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday.",
|
|
21602
|
+
description: "The locale's first day of week, 0 = Sunday \u2026 6 = Saturday. Falls back to Sunday where `Intl.Locale` week info is unavailable.",
|
|
21603
|
+
members: [],
|
|
21604
|
+
version: "11.6.0"
|
|
21605
|
+
},
|
|
21606
|
+
{
|
|
21607
|
+
id: "locale-default-hour12",
|
|
21608
|
+
name: "localeDefaultHour12",
|
|
21609
|
+
kind: "const",
|
|
21610
|
+
module: "datetime",
|
|
21611
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21612
|
+
signature: "const localeDefaultHour12 = memoize(\u2026)",
|
|
21613
|
+
summary: "Whether the locale's default clock is 12-hour.",
|
|
21614
|
+
description: "Whether the locale's default clock is 12-hour.",
|
|
21615
|
+
members: [],
|
|
21616
|
+
version: "11.6.0"
|
|
21617
|
+
},
|
|
21618
|
+
{
|
|
21619
|
+
id: "locale-field-order",
|
|
21620
|
+
name: "localeFieldOrder",
|
|
21621
|
+
kind: "const",
|
|
21622
|
+
module: "datetime",
|
|
21623
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21624
|
+
signature: "const localeFieldOrder = memoize(\u2026)",
|
|
21625
|
+
summary: "The locale's numeric-date field order, e.g.",
|
|
21626
|
+
description: "The locale's numeric-date field order, e.g. en-US \u2192 month, day, year.",
|
|
21627
|
+
members: [],
|
|
21628
|
+
version: "11.6.0"
|
|
21629
|
+
},
|
|
21630
|
+
{
|
|
21631
|
+
id: "locale-month-names",
|
|
21632
|
+
name: "localeMonthNames",
|
|
21633
|
+
kind: "const",
|
|
21634
|
+
module: "datetime",
|
|
21635
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21636
|
+
signature: "const localeMonthNames = memoize(\u2026)",
|
|
21637
|
+
summary: "Long + short month names \u2192 month number, lowercased, dots stripped.",
|
|
21638
|
+
description: "Long + short month names \u2192 month number, lowercased, dots stripped.",
|
|
21639
|
+
members: [],
|
|
21640
|
+
version: "11.6.0"
|
|
21641
|
+
},
|
|
21642
|
+
{
|
|
21643
|
+
id: "locale-date-placeholder",
|
|
21644
|
+
name: "localeDatePlaceholder",
|
|
21645
|
+
kind: "const",
|
|
21646
|
+
module: "datetime",
|
|
21647
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21648
|
+
signature: "const localeDatePlaceholder = memoize(\u2026)",
|
|
21649
|
+
summary: "The locale's digit pattern as a placeholder, e.g.",
|
|
21650
|
+
description: "The locale's digit pattern as a placeholder, e.g. `'MM/DD/YYYY'`.",
|
|
21651
|
+
members: [],
|
|
21652
|
+
version: "11.6.0"
|
|
21653
|
+
},
|
|
21654
|
+
{
|
|
21655
|
+
id: "parse-date-text",
|
|
21656
|
+
name: "parseDateText",
|
|
21657
|
+
kind: "function",
|
|
21658
|
+
module: "datetime",
|
|
21659
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21660
|
+
signature: "function parseDateText(raw: string, locale: string, options: { today?: UniDate } = {}): UniDate | null",
|
|
21661
|
+
summary: "Free-typed date text \u2192 ISO date, or `null` when unreadable.",
|
|
21662
|
+
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.",
|
|
21663
|
+
members: [],
|
|
21664
|
+
version: "11.6.0"
|
|
21665
|
+
},
|
|
21666
|
+
{
|
|
21667
|
+
id: "parse-time-text",
|
|
21668
|
+
name: "parseTimeText",
|
|
21669
|
+
kind: "function",
|
|
21670
|
+
module: "datetime",
|
|
21671
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21672
|
+
signature: "function parseTimeText(raw: string, hour12: boolean): UniTime | null",
|
|
21673
|
+
summary: "Free-typed time text \u2192 `'HH:mm'`, or `null`.",
|
|
21674
|
+
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.",
|
|
21675
|
+
members: [],
|
|
21676
|
+
version: "11.6.0"
|
|
21677
|
+
},
|
|
21678
|
+
{
|
|
21679
|
+
id: "time-slots",
|
|
21680
|
+
name: "timeSlots",
|
|
21681
|
+
kind: "function",
|
|
21682
|
+
module: "datetime",
|
|
21683
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21684
|
+
signature: "function timeSlots(minuteStep: number, min?: UniTime, max?: UniTime): UniTime[]",
|
|
21685
|
+
summary: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
|
|
21686
|
+
description: "Every `minuteStep` time between `min` and `max` (inclusive bounds).",
|
|
21687
|
+
members: [],
|
|
21688
|
+
version: "11.6.0"
|
|
21689
|
+
},
|
|
21690
|
+
{
|
|
21691
|
+
id: "split-date-time",
|
|
21692
|
+
name: "splitDateTime",
|
|
21693
|
+
kind: "function",
|
|
21694
|
+
module: "datetime",
|
|
21695
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21696
|
+
signature: "function splitDateTime(value?: UniDateTime): { date?: UniDate; time?: UniTime }",
|
|
21697
|
+
summary: "",
|
|
21698
|
+
description: "",
|
|
21699
|
+
members: [],
|
|
21700
|
+
version: "11.6.0"
|
|
21701
|
+
},
|
|
21702
|
+
{
|
|
21703
|
+
id: "join-date-time",
|
|
21704
|
+
name: "joinDateTime",
|
|
21705
|
+
kind: "function",
|
|
21706
|
+
module: "datetime",
|
|
21707
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21708
|
+
signature: "function joinDateTime(date?: UniDate, time?: UniTime): UniDateTime | undefined",
|
|
21709
|
+
summary: "One combined value only when both parts are present.",
|
|
21710
|
+
description: "One combined value only when both parts are present.",
|
|
21711
|
+
members: [],
|
|
21712
|
+
version: "11.6.0"
|
|
21713
|
+
},
|
|
21714
|
+
{
|
|
21715
|
+
id: "uni-number-range",
|
|
21716
|
+
name: "UniNumberRange",
|
|
21717
|
+
kind: "interface",
|
|
21718
|
+
module: "number",
|
|
21719
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21720
|
+
signature: "interface UniNumberRange",
|
|
21721
|
+
summary: "A start\u2013end numeric range.",
|
|
21722
|
+
description: "A start\u2013end numeric range. Either end alone is a valid value.",
|
|
21723
|
+
members: [
|
|
21724
|
+
{
|
|
21725
|
+
name: "start",
|
|
21726
|
+
kind: "property",
|
|
21727
|
+
signature: "start?: number",
|
|
21728
|
+
description: ""
|
|
21729
|
+
},
|
|
21730
|
+
{
|
|
21731
|
+
name: "end",
|
|
21732
|
+
kind: "property",
|
|
21733
|
+
signature: "end?: number",
|
|
21734
|
+
description: ""
|
|
21735
|
+
}
|
|
21736
|
+
],
|
|
21737
|
+
version: "11.6.0"
|
|
21738
|
+
},
|
|
21739
|
+
{
|
|
21740
|
+
id: "uni-rounding-mode",
|
|
21741
|
+
name: "UniRoundingMode",
|
|
21742
|
+
kind: "type",
|
|
21743
|
+
module: "number",
|
|
21744
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21745
|
+
signature: "type UniRoundingMode = 'half-up' | 'half-even' | 'ceil' | 'floor' | 'trunc'",
|
|
21746
|
+
summary: "How a tie is resolved when rounding to a fraction-digit count.",
|
|
21747
|
+
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`).",
|
|
21748
|
+
members: [],
|
|
21749
|
+
version: "11.6.0"
|
|
21750
|
+
},
|
|
21751
|
+
{
|
|
21752
|
+
id: "uni-number-preset",
|
|
21753
|
+
name: "UniNumberPreset",
|
|
21754
|
+
kind: "type",
|
|
21755
|
+
module: "number",
|
|
21756
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21757
|
+
signature: "type UniNumberPreset = 'decimal' | 'integer' | 'currency' | 'percent'",
|
|
21758
|
+
summary: "Format archetype.",
|
|
21759
|
+
description: "Format archetype. Supplies decimals, grouping, affix and `inputmode`.",
|
|
21760
|
+
members: [],
|
|
21761
|
+
version: "11.6.0"
|
|
21762
|
+
},
|
|
21763
|
+
{
|
|
21764
|
+
id: "uni-number-grouping",
|
|
21765
|
+
name: "UniNumberGrouping",
|
|
21766
|
+
kind: "type",
|
|
21767
|
+
module: "number",
|
|
21768
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21769
|
+
signature: "type UniNumberGrouping = 'auto' | 'always' | 'min2' | false",
|
|
21770
|
+
summary: "Thousands-separator policy, mapped onto `Intl`'s `useGrouping`.",
|
|
21771
|
+
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`.",
|
|
21772
|
+
members: [],
|
|
21773
|
+
version: "11.6.0"
|
|
21774
|
+
},
|
|
21775
|
+
{
|
|
21776
|
+
id: "uni-number-reject-reason",
|
|
21777
|
+
name: "UniNumberRejectReason",
|
|
21778
|
+
kind: "type",
|
|
21779
|
+
module: "number",
|
|
21780
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21781
|
+
signature: "type UniNumberRejectReason = 'unparseable' | 'min' | 'max' | 'step' | 'precision' | 'not-integer'",
|
|
21782
|
+
summary: "Why a typed commit was refused.",
|
|
21783
|
+
description: "Why a typed commit was refused. The raw text stays in the field.",
|
|
21784
|
+
members: [],
|
|
21785
|
+
version: "11.6.0"
|
|
21786
|
+
},
|
|
21787
|
+
{
|
|
21788
|
+
id: "uni-number-step-config",
|
|
21789
|
+
name: "UniNumberStepConfig",
|
|
21790
|
+
kind: "interface",
|
|
21791
|
+
module: "number",
|
|
21792
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21793
|
+
signature: "interface UniNumberStepConfig",
|
|
21794
|
+
summary: "Fences and snap grid for `stepDecimal`.",
|
|
21795
|
+
description: "Fences and snap grid for `stepDecimal`.",
|
|
21796
|
+
members: [
|
|
21797
|
+
{
|
|
21798
|
+
name: "step",
|
|
21799
|
+
kind: "property",
|
|
21800
|
+
signature: "step?: number | string",
|
|
21801
|
+
description: "Grid spacing. Steps land on `origin + n \xB7 step`. Default `1`."
|
|
21802
|
+
},
|
|
21803
|
+
{
|
|
21804
|
+
name: "min",
|
|
21805
|
+
kind: "property",
|
|
21806
|
+
signature: "min?: number | string",
|
|
21807
|
+
description: ""
|
|
21808
|
+
},
|
|
21809
|
+
{
|
|
21810
|
+
name: "max",
|
|
21811
|
+
kind: "property",
|
|
21812
|
+
signature: "max?: number | string",
|
|
21813
|
+
description: ""
|
|
21814
|
+
},
|
|
21815
|
+
{
|
|
21816
|
+
name: "stepOrigin",
|
|
21817
|
+
kind: "property",
|
|
21818
|
+
signature: "stepOrigin?: 'min' | 'zero'",
|
|
21819
|
+
description: "Snap-grid anchor. `'min'` matches the platform's `<input type=\"number\">` (a field with `min=5, step=10` steps 5 \u2192 15 \u2192 25); `'zero'` anchors the grid at 0 regardless of the fence."
|
|
21820
|
+
},
|
|
21821
|
+
{
|
|
21822
|
+
name: "wrap",
|
|
21823
|
+
kind: "property",
|
|
21824
|
+
signature: "wrap?: boolean",
|
|
21825
|
+
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`."
|
|
21826
|
+
}
|
|
21827
|
+
],
|
|
21828
|
+
version: "11.6.0"
|
|
21829
|
+
},
|
|
21830
|
+
{
|
|
21831
|
+
id: "uni-number-clamp",
|
|
21832
|
+
name: "UniNumberClamp",
|
|
21833
|
+
kind: "interface",
|
|
21834
|
+
module: "number",
|
|
21835
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21836
|
+
signature: "interface UniNumberClamp",
|
|
21837
|
+
summary: "The outcome of clamping a value to its fences.",
|
|
21838
|
+
description: "The outcome of clamping a value to its fences.",
|
|
21839
|
+
members: [
|
|
21840
|
+
{
|
|
21841
|
+
name: "value",
|
|
21842
|
+
kind: "property",
|
|
21843
|
+
signature: "value: string",
|
|
21844
|
+
description: "The clamped canonical decimal."
|
|
21845
|
+
},
|
|
21846
|
+
{
|
|
21847
|
+
name: "hit",
|
|
21848
|
+
kind: "property",
|
|
21849
|
+
signature: "hit: 'min' | 'max' | null",
|
|
21850
|
+
description: "Which fence was hit, or `null` when the value was already in range."
|
|
21851
|
+
}
|
|
21852
|
+
],
|
|
21853
|
+
version: "11.6.0"
|
|
21854
|
+
},
|
|
21855
|
+
{
|
|
21856
|
+
id: "uni-locale-number-parts",
|
|
21857
|
+
name: "UniLocaleNumberParts",
|
|
21858
|
+
kind: "interface",
|
|
21859
|
+
module: "number",
|
|
21860
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21861
|
+
signature: "interface UniLocaleNumberParts",
|
|
21862
|
+
summary: "Separators, currency placement and fraction digits read out of `Intl` for a locale.",
|
|
21863
|
+
description: "Separators, currency placement and fraction digits read out of `Intl` for a locale. Nothing here is hardcoded per language \u2014 `1.234,56` is German input, not malformed input, and only the locale knows that.",
|
|
21864
|
+
members: [
|
|
21865
|
+
{
|
|
21866
|
+
name: "group",
|
|
21867
|
+
kind: "property",
|
|
21868
|
+
signature: "group: string",
|
|
21869
|
+
description: "Thousands separator: `','` (en), `'.'` (de), a narrow no-break space (fr)."
|
|
21870
|
+
},
|
|
21871
|
+
{
|
|
21872
|
+
name: "decimal",
|
|
21873
|
+
kind: "property",
|
|
21874
|
+
signature: "decimal: string",
|
|
21875
|
+
description: "Decimal separator: `'.'` (en), `','` (de)."
|
|
21876
|
+
},
|
|
21877
|
+
{
|
|
21878
|
+
name: "currencySymbol",
|
|
21879
|
+
kind: "property",
|
|
21880
|
+
signature: "currencySymbol: string",
|
|
21881
|
+
description: "Currency symbol, when a currency was given: `'$'`, `'\u20AC'`, `'\xA5'`."
|
|
21882
|
+
},
|
|
21883
|
+
{
|
|
21884
|
+
name: "currencyLeading",
|
|
21885
|
+
kind: "property",
|
|
21886
|
+
signature: "currencyLeading: boolean",
|
|
21887
|
+
description: "True when the locale writes the symbol before the number."
|
|
21888
|
+
},
|
|
21889
|
+
{
|
|
21890
|
+
name: "currencyDecimals",
|
|
21891
|
+
kind: "property",
|
|
21892
|
+
signature: "currencyDecimals: number",
|
|
21893
|
+
description: "Fraction digits `Intl` uses for the currency \u2014 JPY 0, USD 2."
|
|
21894
|
+
}
|
|
21895
|
+
],
|
|
21896
|
+
version: "11.6.0"
|
|
21897
|
+
},
|
|
21898
|
+
{
|
|
21899
|
+
id: "uni-number-format-config",
|
|
21900
|
+
name: "UniNumberFormatConfig",
|
|
21901
|
+
kind: "interface",
|
|
21902
|
+
module: "number",
|
|
21903
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21904
|
+
signature: "interface UniNumberFormatConfig",
|
|
21905
|
+
summary: "What a component knows about its own formatting, before resolution.",
|
|
21906
|
+
description: "What a component knows about its own formatting, before resolution. Mirrors the component inputs so a control can forward its signals almost verbatim.",
|
|
21907
|
+
members: [
|
|
21908
|
+
{
|
|
21909
|
+
name: "preset",
|
|
21910
|
+
kind: "property",
|
|
21911
|
+
signature: "preset?: UniNumberPreset",
|
|
21912
|
+
description: ""
|
|
21913
|
+
},
|
|
21914
|
+
{
|
|
21915
|
+
name: "currency",
|
|
21916
|
+
kind: "property",
|
|
21917
|
+
signature: "currency?: string",
|
|
21918
|
+
description: "ISO 4217 code, e.g. `'USD'`. Implies the `currency` preset."
|
|
21919
|
+
},
|
|
21920
|
+
{
|
|
21921
|
+
name: "locale",
|
|
21922
|
+
kind: "property",
|
|
21923
|
+
signature: "locale?: string",
|
|
21924
|
+
description: "BCP 47 tag. Defaults to `'en-US'`; components pass the document's."
|
|
21925
|
+
},
|
|
21926
|
+
{
|
|
21927
|
+
name: "decimals",
|
|
21928
|
+
kind: "property",
|
|
21929
|
+
signature: "decimals?: number | [min: number, max: number]",
|
|
21930
|
+
description: "Fixed fraction digits, or `[min, max]`. Overrides the preset."
|
|
21931
|
+
},
|
|
21932
|
+
{
|
|
21933
|
+
name: "grouping",
|
|
21934
|
+
kind: "property",
|
|
21935
|
+
signature: "grouping?: UniNumberGrouping",
|
|
21936
|
+
description: ""
|
|
21937
|
+
},
|
|
21938
|
+
{
|
|
21939
|
+
name: "prefix",
|
|
21940
|
+
kind: "property",
|
|
21941
|
+
signature: "prefix?: string",
|
|
21942
|
+
description: "Static adornment, rendered outside the editable text."
|
|
21943
|
+
},
|
|
21944
|
+
{
|
|
21945
|
+
name: "suffix",
|
|
21946
|
+
kind: "property",
|
|
21947
|
+
signature: "suffix?: string",
|
|
21948
|
+
description: ""
|
|
21949
|
+
},
|
|
21950
|
+
{
|
|
21951
|
+
name: "roundingMode",
|
|
21952
|
+
kind: "property",
|
|
21953
|
+
signature: "roundingMode?: UniRoundingMode",
|
|
21954
|
+
description: ""
|
|
21955
|
+
},
|
|
21956
|
+
{
|
|
21957
|
+
name: "valueIsFraction",
|
|
21958
|
+
kind: "property",
|
|
21959
|
+
signature: "valueIsFraction?: boolean",
|
|
21960
|
+
description: "The model is a fraction: `0.15` displays as `15`. Without it, a percent field displays `15` for `15` and never divides behind the user's back."
|
|
21961
|
+
},
|
|
21962
|
+
{
|
|
21963
|
+
name: "numberFormat",
|
|
21964
|
+
kind: "property",
|
|
21965
|
+
signature: "numberFormat?: Intl.NumberFormatOptions",
|
|
21966
|
+
description: "Escape hatch, merged over the preset. Only `notation` is read today."
|
|
21967
|
+
},
|
|
21968
|
+
{
|
|
21969
|
+
name: "min",
|
|
21970
|
+
kind: "property",
|
|
21971
|
+
signature: "min?: number",
|
|
21972
|
+
description: "Read only to decide `inputmode` \u2014 a field that can go negative needs `-`."
|
|
21973
|
+
},
|
|
21974
|
+
{
|
|
21975
|
+
name: "unitAnnouncement",
|
|
21976
|
+
kind: "property",
|
|
21977
|
+
signature: "unitAnnouncement?: string",
|
|
21978
|
+
description: "Spoken long form of an abbreviated suffix, for `aria-valuetext`."
|
|
21979
|
+
}
|
|
21980
|
+
],
|
|
21981
|
+
version: "11.6.0"
|
|
21982
|
+
},
|
|
21983
|
+
{
|
|
21984
|
+
id: "uni-resolved-number-format",
|
|
21985
|
+
name: "UniResolvedNumberFormat",
|
|
21986
|
+
kind: "interface",
|
|
21987
|
+
module: "number",
|
|
21988
|
+
importPath: "@uni-design-system/uni-angular",
|
|
21989
|
+
signature: "interface UniResolvedNumberFormat",
|
|
21990
|
+
summary: "A format config with every preset and locale default filled in.",
|
|
21991
|
+
description: "A format config with every preset and locale default filled in.",
|
|
21992
|
+
members: [
|
|
21993
|
+
{
|
|
21994
|
+
name: "locale",
|
|
21995
|
+
kind: "property",
|
|
21996
|
+
signature: "locale: string",
|
|
21997
|
+
description: ""
|
|
21998
|
+
},
|
|
21999
|
+
{
|
|
22000
|
+
name: "parts",
|
|
22001
|
+
kind: "property",
|
|
22002
|
+
signature: "parts: UniLocaleNumberParts",
|
|
22003
|
+
description: ""
|
|
22004
|
+
},
|
|
22005
|
+
{
|
|
22006
|
+
name: "prefix",
|
|
22007
|
+
kind: "property",
|
|
22008
|
+
signature: "prefix: string",
|
|
22009
|
+
description: ""
|
|
22010
|
+
},
|
|
22011
|
+
{
|
|
22012
|
+
name: "suffix",
|
|
22013
|
+
kind: "property",
|
|
22014
|
+
signature: "suffix: string",
|
|
22015
|
+
description: ""
|
|
22016
|
+
},
|
|
22017
|
+
{
|
|
22018
|
+
name: "minimumFractionDigits",
|
|
22019
|
+
kind: "property",
|
|
22020
|
+
signature: "minimumFractionDigits: number",
|
|
22021
|
+
description: ""
|
|
22022
|
+
},
|
|
22023
|
+
{
|
|
22024
|
+
name: "maximumFractionDigits",
|
|
22025
|
+
kind: "property",
|
|
22026
|
+
signature: "maximumFractionDigits: number",
|
|
22027
|
+
description: ""
|
|
22028
|
+
},
|
|
22029
|
+
{
|
|
22030
|
+
name: "grouping",
|
|
22031
|
+
kind: "property",
|
|
22032
|
+
signature: "grouping: UniNumberGrouping",
|
|
22033
|
+
description: ""
|
|
22034
|
+
},
|
|
22035
|
+
{
|
|
22036
|
+
name: "compact",
|
|
22037
|
+
kind: "property",
|
|
22038
|
+
signature: "compact: boolean",
|
|
22039
|
+
description: "`1.5k` in, `1.5K` out."
|
|
22040
|
+
},
|
|
22041
|
+
{
|
|
22042
|
+
name: "isInteger",
|
|
22043
|
+
kind: "property",
|
|
22044
|
+
signature: "isInteger: boolean",
|
|
22045
|
+
description: "Fraction entry is refused outright rather than rounded away."
|
|
22046
|
+
},
|
|
22047
|
+
{
|
|
22048
|
+
name: "shift",
|
|
22049
|
+
kind: "property",
|
|
22050
|
+
signature: "shift: number",
|
|
22051
|
+
description: "Display value is the model value \xD7 `10^shift`."
|
|
22052
|
+
},
|
|
22053
|
+
{
|
|
22054
|
+
name: "roundingMode",
|
|
22055
|
+
kind: "property",
|
|
22056
|
+
signature: "roundingMode: UniRoundingMode",
|
|
22057
|
+
description: ""
|
|
22058
|
+
},
|
|
22059
|
+
{
|
|
22060
|
+
name: "inputMode",
|
|
22061
|
+
kind: "property",
|
|
22062
|
+
signature: "inputMode: 'decimal' | 'numeric'",
|
|
22063
|
+
description: "`numeric` only when negatives and decimals are both impossible."
|
|
22064
|
+
},
|
|
22065
|
+
{
|
|
22066
|
+
name: "unitAnnouncement",
|
|
22067
|
+
kind: "property",
|
|
22068
|
+
signature: "unitAnnouncement?: string",
|
|
22069
|
+
description: ""
|
|
22070
|
+
}
|
|
22071
|
+
],
|
|
22072
|
+
version: "11.6.0"
|
|
22073
|
+
},
|
|
22074
|
+
{
|
|
22075
|
+
id: "uni-number-parse-result",
|
|
22076
|
+
name: "UniNumberParseResult",
|
|
22077
|
+
kind: "type",
|
|
22078
|
+
module: "number",
|
|
22079
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22080
|
+
signature: "type UniNumberParseResult = { status: 'empty' } | { status: 'ok'; value: string; viaExpression: boolean } | { status: 'error'; reason: UniNumberRejectReason }",
|
|
22081
|
+
summary: "The outcome of reading a user's text.",
|
|
22082
|
+
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.",
|
|
22083
|
+
members: [],
|
|
22084
|
+
version: "11.6.0"
|
|
22085
|
+
},
|
|
22086
|
+
{
|
|
22087
|
+
id: "is-canonical-decimal",
|
|
22088
|
+
name: "isCanonicalDecimal",
|
|
22089
|
+
kind: "function",
|
|
22090
|
+
module: "number",
|
|
22091
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22092
|
+
signature: "function isCanonicalDecimal(text: string): boolean",
|
|
22093
|
+
summary: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
|
|
22094
|
+
description: "True when `text` is already a canonical decimal (leading/trailing space allowed).",
|
|
22095
|
+
members: [],
|
|
22096
|
+
version: "11.6.0"
|
|
22097
|
+
},
|
|
22098
|
+
{
|
|
22099
|
+
id: "decimal-scale",
|
|
22100
|
+
name: "decimalScale",
|
|
22101
|
+
kind: "function",
|
|
22102
|
+
module: "number",
|
|
22103
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22104
|
+
signature: "function decimalScale(value: string): number",
|
|
22105
|
+
summary: "Fraction-digit count.",
|
|
22106
|
+
description: "Fraction-digit count. `'1.250'` \u2192 3, `'12'` \u2192 0, `'5.'` \u2192 0.",
|
|
22107
|
+
members: [],
|
|
22108
|
+
version: "11.6.0"
|
|
22109
|
+
},
|
|
22110
|
+
{
|
|
22111
|
+
id: "to-scaled",
|
|
22112
|
+
name: "toScaled",
|
|
22113
|
+
kind: "function",
|
|
22114
|
+
module: "number",
|
|
22115
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22116
|
+
signature: "function toScaled(value: string, scale: number): bigint",
|
|
22117
|
+
summary: "Canonical decimal \u2192 integer scaled by `10^scale`.",
|
|
22118
|
+
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)`.",
|
|
22119
|
+
members: [],
|
|
22120
|
+
version: "11.6.0"
|
|
22121
|
+
},
|
|
22122
|
+
{
|
|
22123
|
+
id: "from-scaled",
|
|
22124
|
+
name: "fromScaled",
|
|
22125
|
+
kind: "function",
|
|
22126
|
+
module: "number",
|
|
22127
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22128
|
+
signature: "function fromScaled(scaled: bigint, scale: number): string",
|
|
22129
|
+
summary: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
|
|
22130
|
+
description: "Scaled integer \u2192 canonical decimal, with trailing fraction zeros trimmed.",
|
|
22131
|
+
members: [],
|
|
22132
|
+
version: "11.6.0"
|
|
22133
|
+
},
|
|
22134
|
+
{
|
|
22135
|
+
id: "normalize-decimal",
|
|
22136
|
+
name: "normalizeDecimal",
|
|
22137
|
+
kind: "function",
|
|
22138
|
+
module: "number",
|
|
22139
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22140
|
+
signature: "function normalizeDecimal(value: string): string",
|
|
22141
|
+
summary: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`.",
|
|
22142
|
+
description: "Strip a leading `+`, leading zeros and trailing fraction zeros: `'+01.50'` \u2192 `'1.5'`. Requires a canonical decimal; guard with `isCanonicalDecimal`.",
|
|
22143
|
+
members: [],
|
|
22144
|
+
version: "11.6.0"
|
|
22145
|
+
},
|
|
22146
|
+
{
|
|
22147
|
+
id: "to-decimal",
|
|
22148
|
+
name: "toDecimal",
|
|
22149
|
+
kind: "function",
|
|
22150
|
+
module: "number",
|
|
22151
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22152
|
+
signature: "function toDecimal(value: number | string): string",
|
|
22153
|
+
summary: "Any numeric input \u2192 canonical decimal, expanding the exponential notation `String(number)` produces outside 1e-7\u20261e21.",
|
|
22154
|
+
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.",
|
|
22155
|
+
members: [],
|
|
22156
|
+
version: "11.6.0"
|
|
22157
|
+
},
|
|
22158
|
+
{
|
|
22159
|
+
id: "compare-decimal",
|
|
22160
|
+
name: "compareDecimal",
|
|
22161
|
+
kind: "function",
|
|
22162
|
+
module: "number",
|
|
22163
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22164
|
+
signature: "function compareDecimal(a: string, b: string): -1 | 0 | 1",
|
|
22165
|
+
summary: "`-1` when `a < b`, `1` when `a > b`, `0` when equal.",
|
|
22166
|
+
description: "`-1` when `a < b`, `1` when `a > b`, `0` when equal. `'1.50'` equals `'1.5'`.",
|
|
22167
|
+
members: [],
|
|
22168
|
+
version: "11.6.0"
|
|
22169
|
+
},
|
|
22170
|
+
{
|
|
22171
|
+
id: "round-decimal",
|
|
22172
|
+
name: "roundDecimal",
|
|
22173
|
+
kind: "function",
|
|
22174
|
+
module: "number",
|
|
22175
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22176
|
+
signature: "function roundDecimal(value: string, fractionDigits: number, mode: UniRoundingMode = 'half-up'): string",
|
|
22177
|
+
summary: "Round to `fractionDigits`, breaking ties per `mode`.",
|
|
22178
|
+
description: "Round to `fractionDigits`, breaking ties per `mode`. Exact where `Number.prototype.toFixed` is not \u2014 see the file header.",
|
|
22179
|
+
members: [],
|
|
22180
|
+
version: "11.6.0"
|
|
22181
|
+
},
|
|
22182
|
+
{
|
|
22183
|
+
id: "shift-decimal",
|
|
22184
|
+
name: "shiftDecimal",
|
|
22185
|
+
kind: "function",
|
|
22186
|
+
module: "number",
|
|
22187
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22188
|
+
signature: "function shiftDecimal(value: string, places: number): string",
|
|
22189
|
+
summary: "Multiply by `10^places`, exactly.",
|
|
22190
|
+
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.",
|
|
22191
|
+
members: [],
|
|
22192
|
+
version: "11.6.0"
|
|
22193
|
+
},
|
|
22194
|
+
{
|
|
22195
|
+
id: "clamp-decimal",
|
|
22196
|
+
name: "clampDecimal",
|
|
22197
|
+
kind: "function",
|
|
22198
|
+
module: "number",
|
|
22199
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22200
|
+
signature: "function clampDecimal(value: string, min?: number | string, max?: number | string): UniNumberClamp",
|
|
22201
|
+
summary: "Hold a value inside its fences, reporting which one it hit so the caller can announce it.",
|
|
22202
|
+
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.",
|
|
22203
|
+
members: [],
|
|
22204
|
+
version: "11.6.0"
|
|
22205
|
+
},
|
|
22206
|
+
{
|
|
22207
|
+
id: "step-decimal",
|
|
22208
|
+
name: "stepDecimal",
|
|
22209
|
+
kind: "function",
|
|
22210
|
+
module: "number",
|
|
22211
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22212
|
+
signature: "function stepDecimal(current: string, direction: 1 | -1, config: UniNumberStepConfig = {}): string",
|
|
22213
|
+
summary: "One step from `current`, in `direction` (`1` up, `-1` down).",
|
|
22214
|
+
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.",
|
|
22215
|
+
members: [],
|
|
22216
|
+
version: "11.6.0"
|
|
22217
|
+
},
|
|
22218
|
+
{
|
|
22219
|
+
id: "locale-number-parts",
|
|
22220
|
+
name: "localeNumberParts",
|
|
22221
|
+
kind: "const",
|
|
22222
|
+
module: "number",
|
|
22223
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22224
|
+
signature: "const localeNumberParts = memoize(\u2026)",
|
|
22225
|
+
summary: "Locale separators plus, when a currency is given, its symbol, side and fraction digits.",
|
|
22226
|
+
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.",
|
|
22227
|
+
members: [],
|
|
22228
|
+
version: "11.6.0"
|
|
22229
|
+
},
|
|
22230
|
+
{
|
|
22231
|
+
id: "to-ascii-digits",
|
|
22232
|
+
name: "toAsciiDigits",
|
|
22233
|
+
kind: "function",
|
|
22234
|
+
module: "number",
|
|
22235
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22236
|
+
signature: "function toAsciiDigits(text: string): string",
|
|
22237
|
+
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`.",
|
|
22238
|
+
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`.",
|
|
22239
|
+
members: [],
|
|
22240
|
+
version: "11.6.0"
|
|
22241
|
+
},
|
|
22242
|
+
{
|
|
22243
|
+
id: "evaluate-expression",
|
|
22244
|
+
name: "evaluateExpression",
|
|
22245
|
+
kind: "function",
|
|
22246
|
+
module: "number",
|
|
22247
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22248
|
+
signature: "function evaluateExpression(text: string): string | null",
|
|
22249
|
+
summary: "Evaluate `+ \u2212 \xD7 \xF7 ( )` over decimal literals \u2014 shunting-yard, roughly thirty lines, and **never `eval`**.",
|
|
22250
|
+
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.",
|
|
22251
|
+
members: [],
|
|
22252
|
+
version: "11.6.0"
|
|
22253
|
+
},
|
|
22254
|
+
{
|
|
22255
|
+
id: "resolve-number-format",
|
|
22256
|
+
name: "resolveNumberFormat",
|
|
22257
|
+
kind: "function",
|
|
22258
|
+
module: "number",
|
|
22259
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22260
|
+
signature: "function resolveNumberFormat(config: UniNumberFormatConfig = {}): UniResolvedNumberFormat",
|
|
22261
|
+
summary: "Fill in every preset, locale and currency default.",
|
|
22262
|
+
description: "Fill in every preset, locale and currency default.",
|
|
22263
|
+
members: [],
|
|
22264
|
+
version: "11.6.0"
|
|
22265
|
+
},
|
|
22266
|
+
{
|
|
22267
|
+
id: "parse-number",
|
|
22268
|
+
name: "parseNumber",
|
|
22269
|
+
kind: "function",
|
|
22270
|
+
module: "number",
|
|
22271
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22272
|
+
signature: "function parseNumber(raw: string, format: UniResolvedNumberFormat, options: { allowExpressions?: boolean; currency?: string } = {}): UniNumberParseResult",
|
|
22273
|
+
summary: "Read a user's text into a canonical decimal in **model units**.",
|
|
22274
|
+
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.",
|
|
22275
|
+
members: [],
|
|
22276
|
+
version: "11.6.0"
|
|
22277
|
+
},
|
|
22278
|
+
{
|
|
22279
|
+
id: "format-number",
|
|
22280
|
+
name: "formatNumber",
|
|
22281
|
+
kind: "function",
|
|
22282
|
+
module: "number",
|
|
22283
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22284
|
+
signature: "function formatNumber(canonical: string, format: UniResolvedNumberFormat): string",
|
|
22285
|
+
summary: "Canonical decimal (model units) \u2192 the display number, without affixes.",
|
|
22286
|
+
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`.",
|
|
22287
|
+
members: [],
|
|
22288
|
+
version: "11.6.0"
|
|
22289
|
+
},
|
|
22290
|
+
{
|
|
22291
|
+
id: "raw-number-text",
|
|
22292
|
+
name: "rawNumberText",
|
|
22293
|
+
kind: "function",
|
|
22294
|
+
module: "number",
|
|
22295
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22296
|
+
signature: "function rawNumberText(canonical: string, format: UniResolvedNumberFormat): string",
|
|
22297
|
+
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.",
|
|
22298
|
+
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.",
|
|
22299
|
+
members: [],
|
|
22300
|
+
version: "11.6.0"
|
|
22301
|
+
},
|
|
22302
|
+
{
|
|
22303
|
+
id: "settle-number",
|
|
22304
|
+
name: "settleNumber",
|
|
22305
|
+
kind: "function",
|
|
22306
|
+
module: "number",
|
|
22307
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22308
|
+
signature: "function settleNumber(canonical: string, format: UniResolvedNumberFormat): string",
|
|
22309
|
+
summary: "Round a committed value to the field's precision, in model units.",
|
|
22310
|
+
description: "Round a committed value to the field's precision, in model units.",
|
|
22311
|
+
members: [],
|
|
22312
|
+
version: "11.6.0"
|
|
22313
|
+
},
|
|
22314
|
+
{
|
|
22315
|
+
id: "speak-number",
|
|
22316
|
+
name: "speakNumber",
|
|
22317
|
+
kind: "function",
|
|
22318
|
+
module: "number",
|
|
22319
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22320
|
+
signature: "function speakNumber(canonical: string | null, format: UniResolvedNumberFormat, emptyText = 'Empty'): string",
|
|
22321
|
+
summary: "The `aria-valuetext` string: the formatted number with its affixes spoken.",
|
|
22322
|
+
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.',
|
|
22323
|
+
members: [],
|
|
22324
|
+
version: "11.6.0"
|
|
22325
|
+
},
|
|
22326
|
+
{
|
|
22327
|
+
id: "to-number",
|
|
22328
|
+
name: "toNumber",
|
|
22329
|
+
kind: "function",
|
|
22330
|
+
module: "number",
|
|
22331
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22332
|
+
signature: "function toNumber(canonical: string): number",
|
|
22333
|
+
summary: "Model-units canonical decimal \u2192 the bound `number`.",
|
|
22334
|
+
description: "Model-units canonical decimal \u2192 the bound `number`.",
|
|
22335
|
+
members: [],
|
|
22336
|
+
version: "11.6.0"
|
|
22337
|
+
},
|
|
22338
|
+
{
|
|
22339
|
+
id: "loses-precision",
|
|
22340
|
+
name: "losesPrecision",
|
|
22341
|
+
kind: "function",
|
|
22342
|
+
module: "number",
|
|
22343
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22344
|
+
signature: "function losesPrecision(value: number | string): boolean",
|
|
22345
|
+
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.",
|
|
22346
|
+
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'`.",
|
|
22347
|
+
members: [],
|
|
22348
|
+
version: "11.6.0"
|
|
22349
|
+
},
|
|
22350
|
+
{
|
|
22351
|
+
id: "press-repeat-timing",
|
|
22352
|
+
name: "PressRepeatTiming",
|
|
22353
|
+
kind: "interface",
|
|
22354
|
+
module: "number",
|
|
22355
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22356
|
+
signature: "interface PressRepeatTiming",
|
|
22357
|
+
summary: "Repeat timings, normally sourced from a component's theme options.",
|
|
22358
|
+
description: "Repeat timings, normally sourced from a component's theme options.",
|
|
22359
|
+
members: [
|
|
22360
|
+
{
|
|
22361
|
+
name: "delayMs",
|
|
22362
|
+
kind: "property",
|
|
22363
|
+
signature: "delayMs?: number",
|
|
22364
|
+
description: ""
|
|
22365
|
+
},
|
|
22366
|
+
{
|
|
22367
|
+
name: "intervalMs",
|
|
22368
|
+
kind: "property",
|
|
22369
|
+
signature: "intervalMs?: number",
|
|
22370
|
+
description: ""
|
|
22371
|
+
},
|
|
22372
|
+
{
|
|
22373
|
+
name: "fastIntervalMs",
|
|
22374
|
+
kind: "property",
|
|
22375
|
+
signature: "fastIntervalMs?: number",
|
|
22376
|
+
description: ""
|
|
22377
|
+
},
|
|
22378
|
+
{
|
|
22379
|
+
name: "rampMs",
|
|
22380
|
+
kind: "property",
|
|
22381
|
+
signature: "rampMs?: number",
|
|
22382
|
+
description: ""
|
|
22383
|
+
}
|
|
22384
|
+
],
|
|
22385
|
+
version: "11.6.0"
|
|
22386
|
+
},
|
|
22387
|
+
{
|
|
22388
|
+
id: "press-repeat-config",
|
|
22389
|
+
name: "PressRepeatConfig",
|
|
22390
|
+
kind: "interface",
|
|
22391
|
+
module: "number",
|
|
22392
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22393
|
+
signature: "interface PressRepeatConfig",
|
|
22394
|
+
summary: "",
|
|
22395
|
+
description: "",
|
|
22396
|
+
members: [
|
|
22397
|
+
{
|
|
22398
|
+
name: "onStep",
|
|
22399
|
+
kind: "property",
|
|
22400
|
+
signature: "onStep: (repeat: boolean) => void",
|
|
22401
|
+
description: "Perform one step. `repeat` is `false` for the initial press and `true` for every automatic repeat, so a caller can stay silent during the run."
|
|
22402
|
+
},
|
|
22403
|
+
{
|
|
22404
|
+
name: "onRelease",
|
|
22405
|
+
kind: "property",
|
|
22406
|
+
signature: "onRelease?: (repeated: boolean) => void",
|
|
22407
|
+
description: "The hold ended. `repeated` says whether it ever auto-repeated, which is the cue to announce the final value: a screen reader narrating two hundred intermediate values is a denial of service, so announcing belongs here and not in `onStep`."
|
|
22408
|
+
},
|
|
22409
|
+
{
|
|
22410
|
+
name: "disabled",
|
|
22411
|
+
kind: "property",
|
|
22412
|
+
signature: "disabled?: () => boolean",
|
|
22413
|
+
description: "Consulted on press; a disabled button must not start a run."
|
|
22414
|
+
},
|
|
22415
|
+
{
|
|
22416
|
+
name: "focus",
|
|
22417
|
+
kind: "property",
|
|
22418
|
+
signature: "focus?: (button: HTMLElement | null) => void",
|
|
22419
|
+
description: "Put focus where it belongs for this control \u2014 normally its text field, the way a native spinner does. Called on press, because taking pointer capture means preventing the default, which would otherwise leave focus nowhere. Receives the pressed button, as a fallback for controls with no field to focus."
|
|
22420
|
+
},
|
|
22421
|
+
{
|
|
22422
|
+
name: "repeat",
|
|
22423
|
+
kind: "property",
|
|
22424
|
+
signature: "repeat?: () => boolean",
|
|
22425
|
+
description: "When this returns `false`, a press steps exactly once and the repeat timer is never armed \u2014 `onRelease` still fires, with `repeated: false`. Lets a caller turn hold-to-repeat off without a second set of event bindings."
|
|
22426
|
+
},
|
|
22427
|
+
{
|
|
22428
|
+
name: "timing",
|
|
22429
|
+
kind: "property",
|
|
22430
|
+
signature: "timing?: () => PressRepeatTiming",
|
|
22431
|
+
description: ""
|
|
22432
|
+
}
|
|
22433
|
+
],
|
|
22434
|
+
version: "11.6.0"
|
|
22435
|
+
},
|
|
22436
|
+
{
|
|
22437
|
+
id: "press-repeat",
|
|
22438
|
+
name: "PressRepeat",
|
|
22439
|
+
kind: "interface",
|
|
22440
|
+
module: "number",
|
|
22441
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22442
|
+
signature: "interface PressRepeat",
|
|
22443
|
+
summary: "",
|
|
22444
|
+
description: "",
|
|
22445
|
+
members: [
|
|
22446
|
+
{
|
|
22447
|
+
name: "holding",
|
|
22448
|
+
kind: "property",
|
|
22449
|
+
signature: "readonly holding: Signal<boolean>",
|
|
22450
|
+
description: "True while a press is in flight \u2014 bind it to the button's pressed state."
|
|
22451
|
+
},
|
|
22452
|
+
{
|
|
22453
|
+
name: "press",
|
|
22454
|
+
kind: "method",
|
|
22455
|
+
signature: "press(event?: PointerEvent): void",
|
|
22456
|
+
description: "Begin a hold and step once immediately. Given a pointer event, it also takes pointer capture, so sliding off the button mid-hold neither strands the repeat nor drops the release."
|
|
22457
|
+
},
|
|
22458
|
+
{
|
|
22459
|
+
name: "release",
|
|
22460
|
+
kind: "method",
|
|
22461
|
+
signature: "release(): void",
|
|
22462
|
+
description: "End a hold normally, firing `onRelease`."
|
|
22463
|
+
},
|
|
22464
|
+
{
|
|
22465
|
+
name: "cancel",
|
|
22466
|
+
kind: "method",
|
|
22467
|
+
signature: "cancel(): void",
|
|
22468
|
+
description: "End a hold without firing `onRelease` \u2014 for `Escape` and `pointercancel`."
|
|
22469
|
+
}
|
|
22470
|
+
],
|
|
22471
|
+
version: "11.6.0"
|
|
22472
|
+
},
|
|
22473
|
+
{
|
|
22474
|
+
id: "create-press-repeat",
|
|
22475
|
+
name: "createPressRepeat",
|
|
22476
|
+
kind: "function",
|
|
22477
|
+
module: "number",
|
|
22478
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22479
|
+
signature: "function createPressRepeat(config: PressRepeatConfig): PressRepeat",
|
|
22480
|
+
summary: "",
|
|
22481
|
+
description: "",
|
|
22482
|
+
members: [],
|
|
22483
|
+
version: "11.6.0"
|
|
22484
|
+
},
|
|
22485
|
+
{
|
|
22486
|
+
id: "listbox-navigation-config",
|
|
22487
|
+
name: "ListboxNavigationConfig",
|
|
22488
|
+
kind: "interface",
|
|
22489
|
+
module: "listbox",
|
|
22490
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22491
|
+
signature: "interface ListboxNavigationConfig",
|
|
22492
|
+
summary: "",
|
|
22493
|
+
description: "",
|
|
22494
|
+
members: [
|
|
22495
|
+
{
|
|
22496
|
+
name: "count",
|
|
22497
|
+
kind: "property",
|
|
22498
|
+
signature: "count: () => number",
|
|
22499
|
+
description: "How many options are currently navigable. Read reactively."
|
|
22500
|
+
},
|
|
22501
|
+
{
|
|
22502
|
+
name: "idPrefix",
|
|
22503
|
+
kind: "property",
|
|
22504
|
+
signature: "idPrefix?: string",
|
|
22505
|
+
description: "Id prefix for the listbox and its options."
|
|
22506
|
+
},
|
|
22507
|
+
{
|
|
22508
|
+
name: "wrap",
|
|
22509
|
+
kind: "property",
|
|
22510
|
+
signature: "wrap?: boolean",
|
|
22511
|
+
description: "Wrap past the ends. Default true."
|
|
22512
|
+
},
|
|
22513
|
+
{
|
|
22514
|
+
name: "disabled",
|
|
22515
|
+
kind: "property",
|
|
22516
|
+
signature: "disabled?: (index: number) => boolean",
|
|
22517
|
+
description: "Non-navigable options. Arrows step over them; Home/End land on the nearest enabled option; an all-disabled list never activates."
|
|
22518
|
+
},
|
|
22519
|
+
{
|
|
22520
|
+
name: "homeEndNavigates",
|
|
22521
|
+
kind: "property",
|
|
22522
|
+
signature: "homeEndNavigates?: boolean",
|
|
22523
|
+
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."
|
|
22524
|
+
}
|
|
22525
|
+
],
|
|
22526
|
+
version: "11.6.0"
|
|
22527
|
+
},
|
|
22528
|
+
{
|
|
22529
|
+
id: "listbox-navigation",
|
|
22530
|
+
name: "ListboxNavigation",
|
|
22531
|
+
kind: "class",
|
|
22532
|
+
module: "listbox",
|
|
22533
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22534
|
+
signature: "class ListboxNavigation",
|
|
22535
|
+
summary: "The keyboard and ARIA bookkeeping shared by every combobox-style popup: open state, the active option index, and the `aria-activedescendant` id wiring.",
|
|
22536
|
+
description: "The keyboard and ARIA bookkeeping shared by every combobox-style popup: open state, the active option index, and the `aria-activedescendant` id wiring. Deliberately owns no markup and no filtering \u2014 each control renders its own options and decides what a suggestion *is*. Extracted because three controls need the identical contract (`uni-search-input`, `uni-tag-input`, and the multi-select upgrade), and the parts that silently drift between hand-rolled copies all live here: the wrap-around arithmetic and keeping the active id in sync with the option list. Home/End are opt-in (`homeEndNavigates`) because a text field's caret has the better claim on them. `Enter` and `Escape` are deliberately *not* handled: what they mean depends on the control (submit a search, commit a typed token, clear the field), and `activeIndex()` is all a caller needs to decide.",
|
|
22537
|
+
members: [
|
|
22538
|
+
{
|
|
22539
|
+
name: "listboxId",
|
|
22540
|
+
kind: "property",
|
|
22541
|
+
signature: "readonly listboxId: string",
|
|
22542
|
+
description: 'Id for the `role="listbox"` element; wire as `aria-controls`.'
|
|
22543
|
+
},
|
|
22544
|
+
{
|
|
22545
|
+
name: "open",
|
|
22546
|
+
kind: "property",
|
|
22547
|
+
signature: "readonly open: Signal<boolean>",
|
|
22548
|
+
description: "Whether the popup is showing. Also false when there is nothing to show."
|
|
22549
|
+
},
|
|
22550
|
+
{
|
|
22551
|
+
name: "activeIndex",
|
|
22552
|
+
kind: "property",
|
|
22553
|
+
signature: "readonly activeIndex: Signal<number>",
|
|
22554
|
+
description: "Index of the highlighted option, or -1 when none is active."
|
|
22555
|
+
},
|
|
22556
|
+
{
|
|
22557
|
+
name: "activeDescendantId",
|
|
22558
|
+
kind: "property",
|
|
22559
|
+
signature: "readonly activeDescendantId: Signal<string | null>",
|
|
22560
|
+
description: "Value for `aria-activedescendant`, or null when nothing is active."
|
|
22561
|
+
},
|
|
22562
|
+
{
|
|
22563
|
+
name: "optionId",
|
|
22564
|
+
kind: "method",
|
|
22565
|
+
signature: "optionId(index: number): string",
|
|
22566
|
+
description: 'Stable per-option id, for `role="option"` elements.'
|
|
22567
|
+
},
|
|
22568
|
+
{
|
|
22569
|
+
name: "show",
|
|
22570
|
+
kind: "method",
|
|
22571
|
+
signature: "show(): void",
|
|
22572
|
+
description: ""
|
|
22573
|
+
},
|
|
22574
|
+
{
|
|
22575
|
+
name: "hide",
|
|
22576
|
+
kind: "method",
|
|
22577
|
+
signature: "hide(): void",
|
|
22578
|
+
description: "Close and drop the active option, so reopening starts clean."
|
|
22579
|
+
},
|
|
22580
|
+
{
|
|
22581
|
+
name: "setActive",
|
|
22582
|
+
kind: "method",
|
|
22583
|
+
signature: "setActive(index: number): void",
|
|
22584
|
+
description: ""
|
|
22585
|
+
},
|
|
22586
|
+
{
|
|
22587
|
+
name: "navigate",
|
|
22588
|
+
kind: "method",
|
|
22589
|
+
signature: "navigate(event: KeyboardEvent): boolean",
|
|
22590
|
+
description: "Handle ArrowDown / ArrowUp \u2014 and Home / End where `homeEndNavigates` is on. Opens the popup if needed. Returns true when the key was consumed, so a caller can fall through to its own handling for everything else."
|
|
22591
|
+
},
|
|
22592
|
+
{
|
|
22593
|
+
name: "closeOnFocusOut",
|
|
22594
|
+
kind: "method",
|
|
22595
|
+
signature: "closeOnFocusOut(event: FocusEvent): void",
|
|
22596
|
+
description: "Close when focus leaves the control entirely (not on internal moves)."
|
|
22597
|
+
}
|
|
22598
|
+
],
|
|
22599
|
+
version: "11.6.0"
|
|
22600
|
+
},
|
|
22601
|
+
{
|
|
22602
|
+
id: "create-listbox-navigation",
|
|
22603
|
+
name: "createListboxNavigation",
|
|
22604
|
+
kind: "function",
|
|
22605
|
+
module: "listbox",
|
|
22606
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22607
|
+
signature: "function createListboxNavigation(config: ListboxNavigationConfig): ListboxNavigation",
|
|
22608
|
+
summary: "Factory mirroring the signal-API style used elsewhere in the CDK.",
|
|
22609
|
+
description: "Factory mirroring the signal-API style used elsewhere in the CDK.",
|
|
22610
|
+
members: [],
|
|
22611
|
+
version: "11.6.0"
|
|
22612
|
+
},
|
|
22613
|
+
{
|
|
22614
|
+
id: "placement",
|
|
22615
|
+
name: "Placement",
|
|
22616
|
+
kind: "type",
|
|
22617
|
+
module: "position",
|
|
22618
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22619
|
+
signature: "type Placement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'right-start' | 'bottom-start' | 'left-start' | 'top-end' | 'right-end' | 'bottom-end' | 'left-end'",
|
|
22620
|
+
summary: "Native CSS Anchor Positioning helpers (Baseline 2026).",
|
|
22621
|
+
description: "Native CSS Anchor Positioning helpers (Baseline 2026). These replace the former",
|
|
22622
|
+
members: [],
|
|
22623
|
+
version: "11.6.0"
|
|
22624
|
+
},
|
|
22625
|
+
{
|
|
22626
|
+
id: "anchor-offset",
|
|
22627
|
+
name: "AnchorOffset",
|
|
22628
|
+
kind: "interface",
|
|
22629
|
+
module: "position",
|
|
22630
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22631
|
+
signature: "interface AnchorOffset",
|
|
22632
|
+
summary: "Distances between the anchor and the positioned panel, in px.",
|
|
22633
|
+
description: "Distances between the anchor and the positioned panel, in px.",
|
|
22634
|
+
members: [
|
|
22635
|
+
{
|
|
22636
|
+
name: "mainAxis",
|
|
22637
|
+
kind: "property",
|
|
22638
|
+
signature: "mainAxis?: number",
|
|
22639
|
+
description: "Gap along the placement axis (anchor \u2192 panel)."
|
|
22640
|
+
},
|
|
22641
|
+
{
|
|
22642
|
+
name: "alignmentAxis",
|
|
22643
|
+
kind: "property",
|
|
22644
|
+
signature: "alignmentAxis?: number",
|
|
22645
|
+
description: "Shift along the cross axis, from the aligned edge."
|
|
22646
|
+
}
|
|
22647
|
+
],
|
|
22648
|
+
version: "11.6.0"
|
|
22649
|
+
},
|
|
22650
|
+
{
|
|
22651
|
+
id: "new-anchor-name",
|
|
22652
|
+
name: "newAnchorName",
|
|
22653
|
+
kind: "function",
|
|
22654
|
+
module: "position",
|
|
22655
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22656
|
+
signature: "function newAnchorName(): string",
|
|
22657
|
+
summary: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
|
|
22658
|
+
description: "Returns a document-unique dashed-ident usable as a CSS `anchor-name`.",
|
|
22659
|
+
members: [],
|
|
22660
|
+
version: "11.6.0"
|
|
22661
|
+
},
|
|
22662
|
+
{
|
|
22663
|
+
id: "anchor-styles",
|
|
22664
|
+
name: "anchorStyles",
|
|
22665
|
+
kind: "function",
|
|
22666
|
+
module: "position",
|
|
22667
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22668
|
+
signature: "function anchorStyles(anchor: string, placement: Placement, offset: AnchorOffset = {}): Record<string, string | number>",
|
|
22669
|
+
summary: "Emotion style object anchoring a panel to `anchor` at `placement`.",
|
|
22670
|
+
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`).",
|
|
22671
|
+
members: [],
|
|
22672
|
+
version: "11.6.0"
|
|
22673
|
+
},
|
|
22674
|
+
{
|
|
22675
|
+
id: "anchor-arrow-styles",
|
|
22676
|
+
name: "anchorArrowStyles",
|
|
22677
|
+
kind: "function",
|
|
22678
|
+
module: "position",
|
|
22679
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22680
|
+
signature: "function anchorArrowStyles(placement: Placement, size = 8, overlap = 0): Record<string, string | number>",
|
|
22681
|
+
summary: "Absolute positioning for a rotated-square arrow sitting on the panel edge that faces the anchor.",
|
|
22682
|
+
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.",
|
|
22683
|
+
members: [],
|
|
22684
|
+
version: "11.6.0"
|
|
22685
|
+
},
|
|
22686
|
+
{
|
|
22687
|
+
id: "spotlight-options",
|
|
22688
|
+
name: "SpotlightOptions",
|
|
22689
|
+
kind: "interface",
|
|
22690
|
+
module: "position",
|
|
22691
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22692
|
+
signature: "interface SpotlightOptions",
|
|
22693
|
+
summary: "",
|
|
22694
|
+
description: "",
|
|
22695
|
+
members: [
|
|
22696
|
+
{
|
|
22697
|
+
name: "pad",
|
|
22698
|
+
kind: "property",
|
|
22699
|
+
signature: "pad?: number",
|
|
22700
|
+
description: "Gap between the target's box and the hole edge, px."
|
|
22701
|
+
},
|
|
22702
|
+
{
|
|
22703
|
+
name: "ringWidth",
|
|
22704
|
+
kind: "property",
|
|
22705
|
+
signature: "ringWidth?: number",
|
|
22706
|
+
description: "Ring border width, px \u2014 border-color and radius come from the caller."
|
|
22707
|
+
},
|
|
22708
|
+
{
|
|
22709
|
+
name: "scrimColor",
|
|
22710
|
+
kind: "property",
|
|
22711
|
+
signature: "scrimColor?: string",
|
|
22712
|
+
description: "Scrim paint; scheme-invariant by convention, like `::backdrop`."
|
|
22713
|
+
}
|
|
22714
|
+
],
|
|
22715
|
+
version: "11.6.0"
|
|
22716
|
+
},
|
|
22717
|
+
{
|
|
22718
|
+
id: "spotlight-styles",
|
|
22719
|
+
name: "SpotlightStyles",
|
|
22720
|
+
kind: "interface",
|
|
22721
|
+
module: "position",
|
|
22722
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22723
|
+
signature: "interface SpotlightStyles",
|
|
22724
|
+
summary: "",
|
|
22725
|
+
description: "",
|
|
22726
|
+
members: [
|
|
22727
|
+
{
|
|
22728
|
+
name: "window",
|
|
22729
|
+
kind: "property",
|
|
22730
|
+
signature: "window: Record<string, string | number>",
|
|
22731
|
+
description: "Paints the scrim + ring. `pointer-events: none` \u2014 purely visual."
|
|
22732
|
+
},
|
|
22733
|
+
{
|
|
22734
|
+
name: "strips",
|
|
22735
|
+
kind: "property",
|
|
22736
|
+
signature: "strips: Record<'top' | 'bottom' | 'left' | 'right', Record<string, string | number>>",
|
|
22737
|
+
description: "Click-blockers surrounding the hole; the hole itself is genuinely empty."
|
|
22738
|
+
},
|
|
22739
|
+
{
|
|
22740
|
+
name: "cover",
|
|
22741
|
+
kind: "property",
|
|
22742
|
+
signature: "cover: Record<string, string | number>",
|
|
22743
|
+
description: "Hole-sized click-blocker, shown when the target must not be interactive."
|
|
22744
|
+
}
|
|
22745
|
+
],
|
|
22746
|
+
version: "11.6.0"
|
|
22747
|
+
},
|
|
22748
|
+
{
|
|
22749
|
+
id: "anchor-rect",
|
|
22750
|
+
name: "AnchorRect",
|
|
22751
|
+
kind: "interface",
|
|
22752
|
+
module: "position",
|
|
22753
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22754
|
+
signature: "interface AnchorRect",
|
|
22755
|
+
summary: "The rect fields the origin computation reads \u2014 satisfied by DOMRect.",
|
|
22756
|
+
description: "The rect fields the origin computation reads \u2014 satisfied by DOMRect.",
|
|
22757
|
+
members: [
|
|
22758
|
+
{
|
|
22759
|
+
name: "top",
|
|
22760
|
+
kind: "property",
|
|
22761
|
+
signature: "top: number",
|
|
22762
|
+
description: ""
|
|
22763
|
+
},
|
|
22764
|
+
{
|
|
22765
|
+
name: "right",
|
|
22766
|
+
kind: "property",
|
|
22767
|
+
signature: "right: number",
|
|
22768
|
+
description: ""
|
|
22769
|
+
},
|
|
22770
|
+
{
|
|
22771
|
+
name: "bottom",
|
|
22772
|
+
kind: "property",
|
|
22773
|
+
signature: "bottom: number",
|
|
22774
|
+
description: ""
|
|
22775
|
+
},
|
|
22776
|
+
{
|
|
22777
|
+
name: "left",
|
|
22778
|
+
kind: "property",
|
|
22779
|
+
signature: "left: number",
|
|
22780
|
+
description: ""
|
|
22781
|
+
},
|
|
22782
|
+
{
|
|
22783
|
+
name: "width",
|
|
22784
|
+
kind: "property",
|
|
22785
|
+
signature: "width: number",
|
|
22786
|
+
description: ""
|
|
22787
|
+
},
|
|
22788
|
+
{
|
|
22789
|
+
name: "height",
|
|
22790
|
+
kind: "property",
|
|
22791
|
+
signature: "height: number",
|
|
22792
|
+
description: ""
|
|
22793
|
+
}
|
|
22794
|
+
],
|
|
22795
|
+
version: "11.6.0"
|
|
22796
|
+
},
|
|
22797
|
+
{
|
|
22798
|
+
id: "transform-origin-for",
|
|
22799
|
+
name: "transformOriginFor",
|
|
22800
|
+
kind: "function",
|
|
22801
|
+
module: "position",
|
|
22802
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22803
|
+
signature: "function transformOriginFor(panel: AnchorRect, trigger: AnchorRect): string | null",
|
|
22804
|
+
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.",
|
|
22805
|
+
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).",
|
|
22806
|
+
members: [],
|
|
22807
|
+
version: "11.6.0"
|
|
22808
|
+
},
|
|
22809
|
+
{
|
|
22810
|
+
id: "transform-origins",
|
|
22811
|
+
name: "TRANSFORM_ORIGINS",
|
|
22812
|
+
kind: "const",
|
|
22813
|
+
module: "overlay",
|
|
22814
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22815
|
+
signature: "const TRANSFORM_ORIGINS: Record<Placement, string>",
|
|
22816
|
+
summary: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
|
|
22817
|
+
description: "Placement \u2192 `transform-origin`, so scale animations grow from the anchor.",
|
|
22818
|
+
members: [],
|
|
22819
|
+
version: "11.6.0"
|
|
22820
|
+
},
|
|
22821
|
+
{
|
|
22822
|
+
id: "set-anchor-name",
|
|
22823
|
+
name: "setAnchorName",
|
|
22824
|
+
kind: "function",
|
|
22825
|
+
module: "overlay",
|
|
22826
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22827
|
+
signature: "function setAnchorName(el: HTMLElement, name: string): void",
|
|
22828
|
+
summary: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
|
|
22829
|
+
description: "Write a CSS `anchor-name` onto an element (detached anchors and targets).",
|
|
22830
|
+
members: [],
|
|
22831
|
+
version: "11.6.0"
|
|
22832
|
+
},
|
|
22833
|
+
{
|
|
22834
|
+
id: "clear-anchor-name",
|
|
22835
|
+
name: "clearAnchorName",
|
|
22836
|
+
kind: "function",
|
|
22837
|
+
module: "overlay",
|
|
22838
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22839
|
+
signature: "function clearAnchorName(el: HTMLElement): void",
|
|
22840
|
+
summary: "",
|
|
22841
|
+
description: "",
|
|
22842
|
+
members: [],
|
|
22843
|
+
version: "11.6.0"
|
|
22844
|
+
},
|
|
22845
|
+
{
|
|
22846
|
+
id: "resolve-element",
|
|
22847
|
+
name: "resolveElement",
|
|
22848
|
+
kind: "function",
|
|
22849
|
+
module: "overlay",
|
|
22850
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22851
|
+
signature: "function resolveElement(ref: HTMLElement | string | null | undefined): HTMLElement | null",
|
|
22852
|
+
summary: "Resolve an element-or-id reference.",
|
|
22853
|
+
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).",
|
|
22854
|
+
members: [],
|
|
22855
|
+
version: "11.6.0"
|
|
22856
|
+
},
|
|
22857
|
+
{
|
|
22858
|
+
id: "is-toggle-open",
|
|
22859
|
+
name: "isToggleOpen",
|
|
22860
|
+
kind: "function",
|
|
22861
|
+
module: "overlay",
|
|
22862
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22863
|
+
signature: "function isToggleOpen(event: Event): boolean",
|
|
22864
|
+
summary: "True when a native `toggle` event reports the overlay opening.",
|
|
22865
|
+
description: "True when a native `toggle` event reports the overlay opening.",
|
|
22866
|
+
members: [],
|
|
22867
|
+
version: "11.6.0"
|
|
22868
|
+
},
|
|
22869
|
+
{
|
|
22870
|
+
id: "discrete-overlay-transition",
|
|
22871
|
+
name: "discreteOverlayTransition",
|
|
22872
|
+
kind: "function",
|
|
22873
|
+
module: "overlay",
|
|
22874
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22875
|
+
signature: "function discreteOverlayTransition(durationMs: number, hidden: Record<string, string | number>, shown: Record<string, string | number>, timingFunction?: string): Record<string, unknown>",
|
|
22876
|
+
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.",
|
|
22877
|
+
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.",
|
|
22878
|
+
members: [],
|
|
22879
|
+
version: "11.6.0"
|
|
22880
|
+
},
|
|
22881
|
+
{
|
|
22882
|
+
id: "restore-overlay-focus",
|
|
22883
|
+
name: "restoreOverlayFocus",
|
|
22884
|
+
kind: "function",
|
|
22885
|
+
module: "overlay",
|
|
22886
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22887
|
+
signature: "function restoreOverlayFocus(panel: HTMLElement, target: HTMLElement | null): void",
|
|
22888
|
+
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).",
|
|
22889
|
+
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.",
|
|
22890
|
+
members: [],
|
|
22891
|
+
version: "11.6.0"
|
|
22892
|
+
},
|
|
22893
|
+
{
|
|
22894
|
+
id: "focusable-elements",
|
|
22895
|
+
name: "focusableElements",
|
|
22896
|
+
kind: "function",
|
|
22897
|
+
module: "overlay",
|
|
22898
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22899
|
+
signature: "function focusableElements(root: HTMLElement): HTMLElement[]",
|
|
22900
|
+
summary: "The focusable elements inside `root`, in DOM order.",
|
|
22901
|
+
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).",
|
|
22902
|
+
members: [],
|
|
22903
|
+
version: "11.6.0"
|
|
22904
|
+
},
|
|
22905
|
+
{
|
|
22906
|
+
id: "backdrop-dismiss",
|
|
22907
|
+
name: "BackdropDismiss",
|
|
22908
|
+
kind: "class",
|
|
22909
|
+
module: "overlay",
|
|
22910
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22911
|
+
signature: "class BackdropDismiss",
|
|
22912
|
+
summary: "Decides whether a click on a modal `<dialog>` was a click on its `::backdrop` \u2014 shared by `dialog[uni-dialog]` and `uni-drawer` (`over`), so the rule cannot drift between the two again.",
|
|
22913
|
+
description: 'Decides whether a click on a modal `<dialog>` was a click on its `::backdrop` \u2014 shared by `dialog[uni-dialog]` and `uni-drawer` (`over`), so the rule cannot drift between the two again. The click\'s target alone cannot tell. A `click` is dispatched to the nearest common ancestor of the press and the release, and the `::backdrop` belongs to the `<dialog>`: a text selection that starts in a field and is released over the scrim therefore produces a click whose target *is* the `<dialog>`, and used to close the surface \u2014 taking the user\'s unsaved input with it. Only where the press began separates the two, so a backdrop click is one that was both pressed and clicked on the dialog itself. Both checks compare against `currentTarget` rather than `nodeName`, so a nested `<dialog>` in projected content never counts as this one\'s backdrop. ```ts readonly backdrop = new BackdropDismiss(); // (pointerdown)="backdrop.press($event)" // (click)="backdrop.isBackdropClick($event) && close()" ```',
|
|
22914
|
+
members: [
|
|
22915
|
+
{
|
|
22916
|
+
name: "press",
|
|
22917
|
+
kind: "method",
|
|
22918
|
+
signature: "press(event: Event): void",
|
|
22919
|
+
description: "Record where the press began. `pointerdown` covers mouse, touch and pen."
|
|
22920
|
+
},
|
|
22921
|
+
{
|
|
22922
|
+
name: "isBackdropClick",
|
|
22923
|
+
kind: "method",
|
|
22924
|
+
signature: "isBackdropClick(event: Event): boolean",
|
|
22925
|
+
description: "True only when both the press and the click landed on the dialog itself."
|
|
22926
|
+
}
|
|
22927
|
+
],
|
|
22928
|
+
version: "11.6.0"
|
|
22929
|
+
},
|
|
22930
|
+
{
|
|
22931
|
+
id: "sort-direction",
|
|
22932
|
+
name: "SortDirection",
|
|
22933
|
+
kind: "type",
|
|
22934
|
+
module: "datasource",
|
|
22935
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22936
|
+
signature: "type SortDirection = 'asc' | 'desc' | 'indet'",
|
|
22937
|
+
summary: "",
|
|
22938
|
+
description: "",
|
|
22939
|
+
members: [],
|
|
22940
|
+
version: "11.6.0"
|
|
22941
|
+
},
|
|
22942
|
+
{
|
|
22943
|
+
id: "sort",
|
|
22944
|
+
name: "Sort",
|
|
22945
|
+
kind: "interface",
|
|
22946
|
+
module: "datasource",
|
|
22947
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22948
|
+
signature: "interface Sort<T>",
|
|
22949
|
+
summary: "",
|
|
22950
|
+
description: "",
|
|
22951
|
+
members: [
|
|
22952
|
+
{
|
|
22953
|
+
name: "column",
|
|
22954
|
+
kind: "property",
|
|
22955
|
+
signature: "column?: keyof T",
|
|
22956
|
+
description: ""
|
|
22957
|
+
},
|
|
22958
|
+
{
|
|
22959
|
+
name: "direction",
|
|
22960
|
+
kind: "property",
|
|
22961
|
+
signature: "direction: SortDirection",
|
|
22962
|
+
description: ""
|
|
22963
|
+
}
|
|
22964
|
+
],
|
|
22965
|
+
version: "11.6.0"
|
|
22966
|
+
},
|
|
22967
|
+
{
|
|
22968
|
+
id: "uni-base-datasource",
|
|
22969
|
+
name: "UniBaseDatasource",
|
|
22970
|
+
kind: "class",
|
|
22971
|
+
module: "datasource",
|
|
22972
|
+
importPath: "@uni-design-system/uni-angular",
|
|
22973
|
+
signature: "class UniBaseDatasource<T>",
|
|
22974
|
+
summary: "",
|
|
22975
|
+
description: "",
|
|
22976
|
+
members: [
|
|
22977
|
+
{
|
|
22978
|
+
name: "records",
|
|
22979
|
+
kind: "property",
|
|
22980
|
+
signature: "abstract records: Signal<T[]>",
|
|
22981
|
+
description: ""
|
|
22982
|
+
},
|
|
22983
|
+
{
|
|
22984
|
+
name: "recordCount",
|
|
22985
|
+
kind: "property",
|
|
22986
|
+
signature: "abstract recordCount: Signal<number>",
|
|
22987
|
+
description: ""
|
|
22988
|
+
},
|
|
22989
|
+
{
|
|
22990
|
+
name: "selections",
|
|
22991
|
+
kind: "property",
|
|
22992
|
+
signature: "selections = signal<T[]>([])",
|
|
22993
|
+
description: ""
|
|
22994
|
+
},
|
|
22995
|
+
{
|
|
22996
|
+
name: "sort",
|
|
22997
|
+
kind: "property",
|
|
22998
|
+
signature: "sort: WritableSignal<Sort<T>>",
|
|
22999
|
+
description: ""
|
|
23000
|
+
},
|
|
23001
|
+
{
|
|
23002
|
+
name: "sortColumn",
|
|
23003
|
+
kind: "property",
|
|
23004
|
+
signature: "sortColumn = computed(() => this.sort().column)",
|
|
23005
|
+
description: ""
|
|
23006
|
+
},
|
|
23007
|
+
{
|
|
23008
|
+
name: "sortDirection",
|
|
23009
|
+
kind: "property",
|
|
23010
|
+
signature: "sortDirection = computed(() => this.sort().direction)",
|
|
23011
|
+
description: ""
|
|
23012
|
+
},
|
|
23013
|
+
{
|
|
23014
|
+
name: "pageIndex",
|
|
23015
|
+
kind: "property",
|
|
23016
|
+
signature: "abstract pageIndex: Signal<number>",
|
|
23017
|
+
description: ""
|
|
23018
|
+
},
|
|
23019
|
+
{
|
|
23020
|
+
name: "pageSize",
|
|
23021
|
+
kind: "property",
|
|
23022
|
+
signature: "abstract pageSize: Signal<number>",
|
|
23023
|
+
description: ""
|
|
23024
|
+
},
|
|
23025
|
+
{
|
|
23026
|
+
name: "pageCount",
|
|
23027
|
+
kind: "property",
|
|
23028
|
+
signature: "abstract pageCount: Signal<number>",
|
|
23029
|
+
description: ""
|
|
23030
|
+
},
|
|
23031
|
+
{
|
|
23032
|
+
name: "pages",
|
|
23033
|
+
kind: "property",
|
|
23034
|
+
signature: "pages = computed(\u2026)",
|
|
23035
|
+
description: ""
|
|
23036
|
+
},
|
|
23037
|
+
{
|
|
23038
|
+
name: "startIndex",
|
|
23039
|
+
kind: "property",
|
|
23040
|
+
signature: "startIndex = computed(\u2026)",
|
|
23041
|
+
description: ""
|
|
23042
|
+
},
|
|
23043
|
+
{
|
|
23044
|
+
name: "endIndex",
|
|
23045
|
+
kind: "property",
|
|
23046
|
+
signature: "endIndex = computed(\u2026)",
|
|
23047
|
+
description: ""
|
|
23048
|
+
},
|
|
23049
|
+
{
|
|
23050
|
+
name: "disablePrevious",
|
|
23051
|
+
kind: "property",
|
|
23052
|
+
signature: "disablePrevious = computed(\u2026)",
|
|
23053
|
+
description: ""
|
|
23054
|
+
},
|
|
23055
|
+
{
|
|
23056
|
+
name: "disableNext",
|
|
23057
|
+
kind: "property",
|
|
23058
|
+
signature: "disableNext = computed(\u2026)",
|
|
23059
|
+
description: ""
|
|
23060
|
+
},
|
|
23061
|
+
{
|
|
23062
|
+
name: "truncatedPages",
|
|
23063
|
+
kind: "property",
|
|
23064
|
+
signature: "truncatedPages = computed(\u2026)",
|
|
23065
|
+
description: ""
|
|
23066
|
+
},
|
|
23067
|
+
{
|
|
23068
|
+
name: "isSelected",
|
|
23069
|
+
kind: "method",
|
|
23070
|
+
signature: "isSelected(row: T): boolean",
|
|
23071
|
+
description: ""
|
|
23072
|
+
},
|
|
23073
|
+
{
|
|
23074
|
+
name: "toggleSelection",
|
|
23075
|
+
kind: "method",
|
|
23076
|
+
signature: "toggleSelection(row: T)",
|
|
23077
|
+
description: ""
|
|
23078
|
+
},
|
|
23079
|
+
{
|
|
23080
|
+
name: "clearSelections",
|
|
23081
|
+
kind: "method",
|
|
23082
|
+
signature: "clearSelections()",
|
|
23083
|
+
description: ""
|
|
23084
|
+
},
|
|
23085
|
+
{
|
|
23086
|
+
name: "selectAll",
|
|
23087
|
+
kind: "method",
|
|
23088
|
+
signature: "selectAll()",
|
|
23089
|
+
description: ""
|
|
23090
|
+
},
|
|
23091
|
+
{
|
|
23092
|
+
name: "sortRecords",
|
|
23093
|
+
kind: "method",
|
|
23094
|
+
signature: "abstract sortRecords(sort: Sort<T>): void",
|
|
23095
|
+
description: ""
|
|
23096
|
+
},
|
|
23097
|
+
{
|
|
23098
|
+
name: "firstPage",
|
|
23099
|
+
kind: "method",
|
|
23100
|
+
signature: "abstract firstPage(): void",
|
|
23101
|
+
description: ""
|
|
23102
|
+
},
|
|
23103
|
+
{
|
|
23104
|
+
name: "nextPage",
|
|
23105
|
+
kind: "method",
|
|
23106
|
+
signature: "abstract nextPage(): void",
|
|
23107
|
+
description: ""
|
|
23108
|
+
},
|
|
23109
|
+
{
|
|
23110
|
+
name: "previousPage",
|
|
23111
|
+
kind: "method",
|
|
23112
|
+
signature: "abstract previousPage(): void",
|
|
23113
|
+
description: ""
|
|
23114
|
+
},
|
|
23115
|
+
{
|
|
23116
|
+
name: "lastPage",
|
|
23117
|
+
kind: "method",
|
|
23118
|
+
signature: "abstract lastPage(): void",
|
|
23119
|
+
description: ""
|
|
23120
|
+
},
|
|
23121
|
+
{
|
|
23122
|
+
name: "jumpToPage",
|
|
23123
|
+
kind: "method",
|
|
23124
|
+
signature: "abstract jumpToPage(page: number): void",
|
|
23125
|
+
description: ""
|
|
23126
|
+
},
|
|
23127
|
+
{
|
|
23128
|
+
name: "setPageSize",
|
|
23129
|
+
kind: "method",
|
|
23130
|
+
signature: "abstract setPageSize(size: number): void",
|
|
23131
|
+
description: ""
|
|
23132
|
+
}
|
|
23133
|
+
],
|
|
23134
|
+
version: "11.6.0"
|
|
23135
|
+
},
|
|
23136
|
+
{
|
|
23137
|
+
id: "page-request",
|
|
23138
|
+
name: "PageRequest",
|
|
23139
|
+
kind: "interface",
|
|
23140
|
+
module: "datasource",
|
|
23141
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23142
|
+
signature: "interface PageRequest",
|
|
23143
|
+
summary: "",
|
|
23144
|
+
description: "",
|
|
23145
|
+
members: [
|
|
23146
|
+
{
|
|
23147
|
+
name: "pageNumber",
|
|
23148
|
+
kind: "property",
|
|
23149
|
+
signature: "pageNumber: number",
|
|
23150
|
+
description: ""
|
|
23151
|
+
},
|
|
23152
|
+
{
|
|
23153
|
+
name: "pageSize",
|
|
23154
|
+
kind: "property",
|
|
23155
|
+
signature: "pageSize: number",
|
|
23156
|
+
description: ""
|
|
23157
|
+
},
|
|
23158
|
+
{
|
|
23159
|
+
name: "sortColumn",
|
|
23160
|
+
kind: "property",
|
|
23161
|
+
signature: "sortColumn?: string",
|
|
23162
|
+
description: ""
|
|
23163
|
+
},
|
|
23164
|
+
{
|
|
23165
|
+
name: "sortDirection",
|
|
23166
|
+
kind: "property",
|
|
23167
|
+
signature: "sortDirection?: SortDirection",
|
|
23168
|
+
description: ""
|
|
23169
|
+
},
|
|
23170
|
+
{
|
|
23171
|
+
name: "filter",
|
|
23172
|
+
kind: "property",
|
|
23173
|
+
signature: "filter?: Record<string, any>",
|
|
23174
|
+
description: ""
|
|
23175
|
+
}
|
|
23176
|
+
],
|
|
23177
|
+
version: "11.6.0"
|
|
23178
|
+
},
|
|
23179
|
+
{
|
|
23180
|
+
id: "page-response",
|
|
23181
|
+
name: "PageResponse",
|
|
23182
|
+
kind: "interface",
|
|
23183
|
+
module: "datasource",
|
|
23184
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23185
|
+
signature: "interface PageResponse<T>",
|
|
23186
|
+
summary: "",
|
|
23187
|
+
description: "",
|
|
23188
|
+
members: [
|
|
23189
|
+
{
|
|
23190
|
+
name: "data",
|
|
23191
|
+
kind: "property",
|
|
23192
|
+
signature: "data: T[]",
|
|
23193
|
+
description: ""
|
|
23194
|
+
},
|
|
23195
|
+
{
|
|
23196
|
+
name: "totalRecords",
|
|
23197
|
+
kind: "property",
|
|
23198
|
+
signature: "totalRecords: number",
|
|
23199
|
+
description: ""
|
|
23200
|
+
},
|
|
23201
|
+
{
|
|
23202
|
+
name: "pageNumber",
|
|
23203
|
+
kind: "property",
|
|
23204
|
+
signature: "pageNumber: number",
|
|
23205
|
+
description: ""
|
|
23206
|
+
},
|
|
23207
|
+
{
|
|
23208
|
+
name: "pageSize",
|
|
23209
|
+
kind: "property",
|
|
23210
|
+
signature: "pageSize: number",
|
|
23211
|
+
description: ""
|
|
23212
|
+
}
|
|
23213
|
+
],
|
|
23214
|
+
version: "11.6.0"
|
|
23215
|
+
},
|
|
23216
|
+
{
|
|
23217
|
+
id: "data-loader",
|
|
23218
|
+
name: "DataLoader",
|
|
23219
|
+
kind: "type",
|
|
23220
|
+
module: "datasource",
|
|
23221
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23222
|
+
signature: "type DataLoader<T> = (request: PageRequest) => Promise<PageResponse<T>>",
|
|
23223
|
+
summary: "",
|
|
23224
|
+
description: "",
|
|
23225
|
+
members: [],
|
|
23226
|
+
version: "11.6.0"
|
|
23227
|
+
},
|
|
23228
|
+
{
|
|
23229
|
+
id: "uni-server-side-datasource",
|
|
23230
|
+
name: "UniServerSideDatasource",
|
|
23231
|
+
kind: "class",
|
|
23232
|
+
module: "datasource",
|
|
23233
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23234
|
+
signature: "class UniServerSideDatasource<T> extends UniBaseDatasource<T>",
|
|
23235
|
+
summary: "",
|
|
23236
|
+
description: "",
|
|
23237
|
+
members: [
|
|
23238
|
+
{
|
|
23239
|
+
name: "sortColumn",
|
|
23240
|
+
kind: "property",
|
|
23241
|
+
signature: "sortColumn = computed(() => this._sortColumn())",
|
|
23242
|
+
description: ""
|
|
23243
|
+
},
|
|
23244
|
+
{
|
|
23245
|
+
name: "sortDirection",
|
|
23246
|
+
kind: "property",
|
|
23247
|
+
signature: "sortDirection = computed(() => this._sortDirection())",
|
|
23248
|
+
description: ""
|
|
23249
|
+
},
|
|
23250
|
+
{
|
|
23251
|
+
name: "pageIndex",
|
|
23252
|
+
kind: "property",
|
|
23253
|
+
signature: "pageIndex = computed(() => this._pageNumber() - 1)",
|
|
23254
|
+
description: ""
|
|
23255
|
+
},
|
|
23256
|
+
{
|
|
23257
|
+
name: "pageSize",
|
|
23258
|
+
kind: "property",
|
|
23259
|
+
signature: "pageSize = computed(() => this._pageSize())",
|
|
23260
|
+
description: ""
|
|
23261
|
+
},
|
|
23262
|
+
{
|
|
23263
|
+
name: "pageCount",
|
|
23264
|
+
kind: "property",
|
|
23265
|
+
signature: "pageCount = computed(\u2026)",
|
|
23266
|
+
description: ""
|
|
23267
|
+
},
|
|
23268
|
+
{
|
|
23269
|
+
name: "records",
|
|
23270
|
+
kind: "property",
|
|
23271
|
+
signature: "records = this._records.asReadonly()",
|
|
23272
|
+
description: ""
|
|
23273
|
+
},
|
|
23274
|
+
{
|
|
23275
|
+
name: "recordCount",
|
|
23276
|
+
kind: "property",
|
|
23277
|
+
signature: "recordCount = computed(() => this.totalRecords())",
|
|
23278
|
+
description: ""
|
|
23279
|
+
},
|
|
23280
|
+
{
|
|
23281
|
+
name: "isLoading",
|
|
23282
|
+
kind: "property",
|
|
23283
|
+
signature: "isLoading = computed(() => this.dataResource.isLoading())",
|
|
23284
|
+
description: ""
|
|
23285
|
+
},
|
|
23286
|
+
{
|
|
23287
|
+
name: "error",
|
|
23288
|
+
kind: "property",
|
|
23289
|
+
signature: "error = computed(() => this.dataResource.error())",
|
|
23290
|
+
description: ""
|
|
23291
|
+
},
|
|
23292
|
+
{
|
|
23293
|
+
name: "hasError",
|
|
23294
|
+
kind: "property",
|
|
23295
|
+
signature: "hasError = computed(\u2026)",
|
|
23296
|
+
description: ""
|
|
23297
|
+
},
|
|
23298
|
+
{
|
|
23299
|
+
name: "sortRecords",
|
|
23300
|
+
kind: "method",
|
|
23301
|
+
signature: "sortRecords(sort: Sort<T>)",
|
|
23302
|
+
description: ""
|
|
23303
|
+
},
|
|
23304
|
+
{
|
|
23305
|
+
name: "firstPage",
|
|
23306
|
+
kind: "method",
|
|
23307
|
+
signature: "firstPage()",
|
|
23308
|
+
description: ""
|
|
23309
|
+
},
|
|
23310
|
+
{
|
|
23311
|
+
name: "nextPage",
|
|
23312
|
+
kind: "method",
|
|
23313
|
+
signature: "nextPage()",
|
|
23314
|
+
description: ""
|
|
23315
|
+
},
|
|
23316
|
+
{
|
|
23317
|
+
name: "previousPage",
|
|
23318
|
+
kind: "method",
|
|
23319
|
+
signature: "previousPage()",
|
|
23320
|
+
description: ""
|
|
23321
|
+
},
|
|
23322
|
+
{
|
|
23323
|
+
name: "lastPage",
|
|
23324
|
+
kind: "method",
|
|
23325
|
+
signature: "lastPage()",
|
|
23326
|
+
description: ""
|
|
23327
|
+
},
|
|
23328
|
+
{
|
|
23329
|
+
name: "jumpToPage",
|
|
23330
|
+
kind: "method",
|
|
23331
|
+
signature: "jumpToPage(page: number)",
|
|
23332
|
+
description: ""
|
|
23333
|
+
},
|
|
23334
|
+
{
|
|
23335
|
+
name: "setPageSize",
|
|
23336
|
+
kind: "method",
|
|
23337
|
+
signature: "setPageSize(size: number)",
|
|
23338
|
+
description: ""
|
|
23339
|
+
},
|
|
23340
|
+
{
|
|
23341
|
+
name: "setFilter",
|
|
23342
|
+
kind: "method",
|
|
23343
|
+
signature: "setFilter(filterValues: Record<string, any>)",
|
|
23344
|
+
description: ""
|
|
23345
|
+
},
|
|
23346
|
+
{
|
|
23347
|
+
name: "clearFilter",
|
|
23348
|
+
kind: "method",
|
|
23349
|
+
signature: "clearFilter()",
|
|
23350
|
+
description: ""
|
|
23351
|
+
},
|
|
23352
|
+
{
|
|
23353
|
+
name: "refresh",
|
|
23354
|
+
kind: "method",
|
|
23355
|
+
signature: "refresh()",
|
|
23356
|
+
description: ""
|
|
23357
|
+
},
|
|
23358
|
+
{
|
|
23359
|
+
name: "getPageRequest",
|
|
23360
|
+
kind: "method",
|
|
23361
|
+
signature: "getPageRequest(): PageRequest",
|
|
23362
|
+
description: ""
|
|
23363
|
+
}
|
|
23364
|
+
],
|
|
23365
|
+
version: "11.6.0"
|
|
23366
|
+
},
|
|
23367
|
+
{
|
|
23368
|
+
id: "uni-datasource",
|
|
23369
|
+
name: "UniDatasource",
|
|
23370
|
+
kind: "type",
|
|
23371
|
+
module: "datasource",
|
|
23372
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23373
|
+
signature: "type UniDatasource<T> = UniBaseDatasource<T>",
|
|
23374
|
+
summary: "",
|
|
23375
|
+
description: "",
|
|
23376
|
+
members: [],
|
|
23377
|
+
version: "11.6.0"
|
|
23378
|
+
},
|
|
23379
|
+
{
|
|
23380
|
+
id: "uni-record-datasource",
|
|
23381
|
+
name: "UniRecordDatasource",
|
|
23382
|
+
kind: "class",
|
|
23383
|
+
module: "datasource",
|
|
23384
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23385
|
+
signature: "class UniRecordDatasource<T> extends UniBaseDatasource<T>",
|
|
23386
|
+
summary: "",
|
|
23387
|
+
description: "",
|
|
23388
|
+
members: [
|
|
23389
|
+
{
|
|
23390
|
+
name: "initialRecords",
|
|
23391
|
+
kind: "property",
|
|
23392
|
+
signature: "initialRecords = signal<T[]>([])",
|
|
23393
|
+
description: ""
|
|
23394
|
+
},
|
|
23395
|
+
{
|
|
23396
|
+
name: "recordCount",
|
|
23397
|
+
kind: "property",
|
|
23398
|
+
signature: "recordCount = computed((): number => this.initialRecords().filter(this.filter()).length)",
|
|
23399
|
+
description: ""
|
|
23400
|
+
},
|
|
23401
|
+
{
|
|
23402
|
+
name: "filter",
|
|
23403
|
+
kind: "property",
|
|
23404
|
+
signature: "filter = signal<(value: T) => boolean>((value) => true)",
|
|
23405
|
+
description: ""
|
|
23406
|
+
},
|
|
23407
|
+
{
|
|
23408
|
+
name: "pageIndex",
|
|
23409
|
+
kind: "property",
|
|
23410
|
+
signature: "pageIndex = signal<number>(0)",
|
|
23411
|
+
description: ""
|
|
23412
|
+
},
|
|
23413
|
+
{
|
|
23414
|
+
name: "pageSize",
|
|
23415
|
+
kind: "property",
|
|
23416
|
+
signature: "pageSize = computed(() => this._pageSize())",
|
|
23417
|
+
description: ""
|
|
23418
|
+
},
|
|
23419
|
+
{
|
|
23420
|
+
name: "pageCount",
|
|
23421
|
+
kind: "property",
|
|
23422
|
+
signature: "pageCount = computed(\u2026)",
|
|
23423
|
+
description: ""
|
|
23424
|
+
},
|
|
23425
|
+
{
|
|
23426
|
+
name: "records",
|
|
23427
|
+
kind: "property",
|
|
23428
|
+
signature: "records = computed(\u2026)",
|
|
23429
|
+
description: ""
|
|
23430
|
+
},
|
|
23431
|
+
{
|
|
23432
|
+
name: "sortRecords",
|
|
23433
|
+
kind: "method",
|
|
23434
|
+
signature: "sortRecords(sort: Sort<T>)",
|
|
23435
|
+
description: ""
|
|
23436
|
+
},
|
|
23437
|
+
{
|
|
23438
|
+
name: "firstPage",
|
|
23439
|
+
kind: "method",
|
|
23440
|
+
signature: "firstPage()",
|
|
23441
|
+
description: ""
|
|
23442
|
+
},
|
|
23443
|
+
{
|
|
23444
|
+
name: "nextPage",
|
|
23445
|
+
kind: "method",
|
|
23446
|
+
signature: "nextPage()",
|
|
23447
|
+
description: ""
|
|
23448
|
+
},
|
|
23449
|
+
{
|
|
23450
|
+
name: "previousPage",
|
|
23451
|
+
kind: "method",
|
|
23452
|
+
signature: "previousPage()",
|
|
23453
|
+
description: ""
|
|
23454
|
+
},
|
|
23455
|
+
{
|
|
23456
|
+
name: "lastPage",
|
|
23457
|
+
kind: "method",
|
|
23458
|
+
signature: "lastPage()",
|
|
23459
|
+
description: ""
|
|
23460
|
+
},
|
|
23461
|
+
{
|
|
23462
|
+
name: "jumpToPage",
|
|
23463
|
+
kind: "method",
|
|
23464
|
+
signature: "jumpToPage(page: number)",
|
|
23465
|
+
description: ""
|
|
23466
|
+
},
|
|
23467
|
+
{
|
|
23468
|
+
name: "setPageSize",
|
|
23469
|
+
kind: "method",
|
|
23470
|
+
signature: "setPageSize(size: number)",
|
|
23471
|
+
description: ""
|
|
23472
|
+
},
|
|
23473
|
+
{
|
|
23474
|
+
name: "setFilter",
|
|
23475
|
+
kind: "method",
|
|
23476
|
+
signature: "setFilter(filter: (value: T) => boolean)",
|
|
23477
|
+
description: ""
|
|
23478
|
+
},
|
|
23479
|
+
{
|
|
23480
|
+
name: "clearFilter",
|
|
23481
|
+
kind: "method",
|
|
23482
|
+
signature: "clearFilter()",
|
|
23483
|
+
description: ""
|
|
23484
|
+
}
|
|
23485
|
+
],
|
|
23486
|
+
version: "11.6.0"
|
|
23487
|
+
},
|
|
23488
|
+
{
|
|
23489
|
+
id: "local-storage-service",
|
|
23490
|
+
name: "LocalStorageService",
|
|
23491
|
+
kind: "service",
|
|
23492
|
+
module: "local-storage",
|
|
23493
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23494
|
+
signature: "class LocalStorageService",
|
|
23495
|
+
summary: "",
|
|
23496
|
+
description: "",
|
|
23497
|
+
members: [
|
|
23498
|
+
{
|
|
23499
|
+
name: "setItem",
|
|
23500
|
+
kind: "method",
|
|
23501
|
+
signature: "setItem<T>(key: string, value: T): boolean",
|
|
23502
|
+
description: ""
|
|
23503
|
+
},
|
|
23504
|
+
{
|
|
23505
|
+
name: "getItem",
|
|
23506
|
+
kind: "method",
|
|
23507
|
+
signature: "getItem<T>(key: string): T | null",
|
|
23508
|
+
description: ""
|
|
23509
|
+
},
|
|
23510
|
+
{
|
|
23511
|
+
name: "removeItem",
|
|
23512
|
+
kind: "method",
|
|
23513
|
+
signature: "removeItem(key: string): boolean",
|
|
23514
|
+
description: ""
|
|
23515
|
+
},
|
|
23516
|
+
{
|
|
23517
|
+
name: "clear",
|
|
23518
|
+
kind: "method",
|
|
23519
|
+
signature: "clear(): boolean",
|
|
23520
|
+
description: ""
|
|
23521
|
+
},
|
|
23522
|
+
{
|
|
23523
|
+
name: "hasKey",
|
|
23524
|
+
kind: "method",
|
|
23525
|
+
signature: "hasKey(key: string): boolean",
|
|
23526
|
+
description: ""
|
|
23527
|
+
},
|
|
23528
|
+
{
|
|
23529
|
+
name: "getAllKeys",
|
|
23530
|
+
kind: "method",
|
|
23531
|
+
signature: "getAllKeys(): string[]",
|
|
23532
|
+
description: ""
|
|
23533
|
+
},
|
|
23534
|
+
{
|
|
23535
|
+
name: "getSize",
|
|
23536
|
+
kind: "method",
|
|
23537
|
+
signature: "getSize(): number",
|
|
23538
|
+
description: ""
|
|
23539
|
+
}
|
|
23540
|
+
],
|
|
23541
|
+
version: "11.6.0"
|
|
23542
|
+
},
|
|
23543
|
+
{
|
|
23544
|
+
id: "alert",
|
|
23545
|
+
name: "Alert",
|
|
23546
|
+
kind: "interface",
|
|
23547
|
+
module: "notification",
|
|
23548
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23549
|
+
signature: "interface Alert",
|
|
23550
|
+
summary: "",
|
|
23551
|
+
description: "",
|
|
23552
|
+
members: [
|
|
23553
|
+
{
|
|
23554
|
+
name: "message",
|
|
23555
|
+
kind: "property",
|
|
23556
|
+
signature: "message: string",
|
|
23557
|
+
description: ""
|
|
23558
|
+
},
|
|
23559
|
+
{
|
|
23560
|
+
name: "iconName",
|
|
23561
|
+
kind: "property",
|
|
23562
|
+
signature: "iconName?: IconName",
|
|
23563
|
+
description: ""
|
|
23564
|
+
},
|
|
23565
|
+
{
|
|
23566
|
+
name: "symbolName",
|
|
23567
|
+
kind: "property",
|
|
23568
|
+
signature: "symbolName?: string",
|
|
23569
|
+
description: ""
|
|
23570
|
+
},
|
|
23571
|
+
{
|
|
23572
|
+
name: "variant",
|
|
23573
|
+
kind: "property",
|
|
23574
|
+
signature: "variant?: Variant",
|
|
23575
|
+
description: ""
|
|
23576
|
+
},
|
|
23577
|
+
{
|
|
23578
|
+
name: "action",
|
|
23579
|
+
kind: "property",
|
|
23580
|
+
signature: "action?: () => void",
|
|
23581
|
+
description: ""
|
|
23582
|
+
},
|
|
23583
|
+
{
|
|
23584
|
+
name: "actionLabel",
|
|
23585
|
+
kind: "property",
|
|
23586
|
+
signature: "actionLabel?: string",
|
|
23587
|
+
description: ""
|
|
23588
|
+
},
|
|
23589
|
+
{
|
|
23590
|
+
name: "topPosition",
|
|
23591
|
+
kind: "property",
|
|
23592
|
+
signature: "topPosition?: number",
|
|
23593
|
+
description: ""
|
|
23594
|
+
}
|
|
23595
|
+
],
|
|
23596
|
+
version: "11.6.0"
|
|
23597
|
+
},
|
|
23598
|
+
{
|
|
23599
|
+
id: "snackbar",
|
|
23600
|
+
name: "Snackbar",
|
|
23601
|
+
kind: "interface",
|
|
23602
|
+
module: "notification",
|
|
23603
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23604
|
+
signature: "interface Snackbar",
|
|
23605
|
+
summary: "",
|
|
23606
|
+
description: "",
|
|
23607
|
+
members: [
|
|
23608
|
+
{
|
|
23609
|
+
name: "message",
|
|
23610
|
+
kind: "property",
|
|
23611
|
+
signature: "message: string",
|
|
23612
|
+
description: ""
|
|
23613
|
+
},
|
|
23614
|
+
{
|
|
23615
|
+
name: "action",
|
|
23616
|
+
kind: "property",
|
|
23617
|
+
signature: "action?: () => void",
|
|
23618
|
+
description: ""
|
|
23619
|
+
},
|
|
23620
|
+
{
|
|
23621
|
+
name: "actionLabel",
|
|
23622
|
+
kind: "property",
|
|
23623
|
+
signature: "actionLabel?: string",
|
|
23624
|
+
description: ""
|
|
23625
|
+
},
|
|
23626
|
+
{
|
|
23627
|
+
name: "iconName",
|
|
23628
|
+
kind: "property",
|
|
23629
|
+
signature: "iconName?: IconName",
|
|
23630
|
+
description: ""
|
|
23631
|
+
},
|
|
23632
|
+
{
|
|
23633
|
+
name: "symbolName",
|
|
23634
|
+
kind: "property",
|
|
23635
|
+
signature: "symbolName?: string",
|
|
23636
|
+
description: ""
|
|
23637
|
+
},
|
|
23638
|
+
{
|
|
23639
|
+
name: "variant",
|
|
23640
|
+
kind: "property",
|
|
23641
|
+
signature: "variant?: Variant",
|
|
23642
|
+
description: ""
|
|
23643
|
+
},
|
|
23644
|
+
{
|
|
23645
|
+
name: "timeout",
|
|
23646
|
+
kind: "property",
|
|
23647
|
+
signature: "timeout?: number | string | 'disabled'",
|
|
23648
|
+
description: ""
|
|
23649
|
+
}
|
|
23650
|
+
],
|
|
23651
|
+
version: "11.6.0"
|
|
23652
|
+
},
|
|
23653
|
+
{
|
|
23654
|
+
id: "confirmation",
|
|
23655
|
+
name: "Confirmation",
|
|
23656
|
+
kind: "interface",
|
|
23657
|
+
module: "notification",
|
|
23658
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23659
|
+
signature: "interface Confirmation",
|
|
23660
|
+
summary: "",
|
|
23661
|
+
description: "",
|
|
23662
|
+
members: [
|
|
23663
|
+
{
|
|
23664
|
+
name: "title",
|
|
23665
|
+
kind: "property",
|
|
23666
|
+
signature: "title: string",
|
|
23667
|
+
description: ""
|
|
23668
|
+
},
|
|
23669
|
+
{
|
|
23670
|
+
name: "message",
|
|
23671
|
+
kind: "property",
|
|
23672
|
+
signature: "message: string",
|
|
23673
|
+
description: ""
|
|
23674
|
+
},
|
|
23675
|
+
{
|
|
23676
|
+
name: "action",
|
|
23677
|
+
kind: "property",
|
|
23678
|
+
signature: "action: () => void",
|
|
23679
|
+
description: ""
|
|
23680
|
+
},
|
|
23681
|
+
{
|
|
23682
|
+
name: "actionLabel",
|
|
23683
|
+
kind: "property",
|
|
23684
|
+
signature: "actionLabel?: string",
|
|
23685
|
+
description: ""
|
|
23686
|
+
},
|
|
23687
|
+
{
|
|
23688
|
+
name: "dismissLabel",
|
|
23689
|
+
kind: "property",
|
|
23690
|
+
signature: "dismissLabel?: string",
|
|
23691
|
+
description: ""
|
|
23692
|
+
},
|
|
23693
|
+
{
|
|
23694
|
+
name: "color",
|
|
23695
|
+
kind: "property",
|
|
23696
|
+
signature: "color?: ContainerColorToken",
|
|
23697
|
+
description: ""
|
|
23698
|
+
}
|
|
23699
|
+
],
|
|
23700
|
+
version: "11.6.0"
|
|
23701
|
+
},
|
|
23702
|
+
{
|
|
23703
|
+
id: "notification-service",
|
|
23704
|
+
name: "NotificationService",
|
|
23705
|
+
kind: "service",
|
|
23706
|
+
module: "notification",
|
|
23707
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23708
|
+
signature: "class NotificationService",
|
|
23709
|
+
summary: "",
|
|
23710
|
+
description: "",
|
|
23711
|
+
members: [
|
|
23712
|
+
{
|
|
23713
|
+
name: "alert",
|
|
23714
|
+
kind: "property",
|
|
23715
|
+
signature: "alert = signal<Alert | undefined>(undefined)",
|
|
23716
|
+
description: ""
|
|
23717
|
+
},
|
|
23718
|
+
{
|
|
23719
|
+
name: "showAlert",
|
|
23720
|
+
kind: "method",
|
|
23721
|
+
signature: "showAlert(alert: Alert)",
|
|
23722
|
+
description: ""
|
|
23723
|
+
},
|
|
23724
|
+
{
|
|
23725
|
+
name: "hideAlert",
|
|
23726
|
+
kind: "method",
|
|
23727
|
+
signature: "hideAlert()",
|
|
23728
|
+
description: ""
|
|
23729
|
+
},
|
|
23730
|
+
{
|
|
23731
|
+
name: "snackbar",
|
|
23732
|
+
kind: "property",
|
|
23733
|
+
signature: "snackbar = signal<Snackbar | undefined>(undefined)",
|
|
23734
|
+
description: ""
|
|
23735
|
+
},
|
|
23736
|
+
{
|
|
23737
|
+
name: "showSnackbar",
|
|
23738
|
+
kind: "method",
|
|
23739
|
+
signature: "showSnackbar(snackbar: Snackbar)",
|
|
23740
|
+
description: ""
|
|
23741
|
+
},
|
|
23742
|
+
{
|
|
23743
|
+
name: "hideSnackbar",
|
|
23744
|
+
kind: "method",
|
|
23745
|
+
signature: "hideSnackbar()",
|
|
23746
|
+
description: ""
|
|
23747
|
+
},
|
|
23748
|
+
{
|
|
23749
|
+
name: "confirmation",
|
|
23750
|
+
kind: "property",
|
|
23751
|
+
signature: "confirmation = signal<Confirmation | undefined>(undefined)",
|
|
23752
|
+
description: ""
|
|
23753
|
+
},
|
|
23754
|
+
{
|
|
23755
|
+
name: "showConfirmation",
|
|
23756
|
+
kind: "method",
|
|
23757
|
+
signature: "showConfirmation(confirmation: Confirmation)",
|
|
23758
|
+
description: ""
|
|
23759
|
+
},
|
|
23760
|
+
{
|
|
23761
|
+
name: "hideConfirmation",
|
|
23762
|
+
kind: "method",
|
|
23763
|
+
signature: "hideConfirmation()",
|
|
23764
|
+
description: ""
|
|
23765
|
+
}
|
|
23766
|
+
],
|
|
23767
|
+
version: "11.6.0"
|
|
23768
|
+
},
|
|
23769
|
+
{
|
|
23770
|
+
id: "option",
|
|
23771
|
+
name: "Option",
|
|
23772
|
+
kind: "interface",
|
|
23773
|
+
module: "option",
|
|
23774
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23775
|
+
signature: "interface Option<T = unknown>",
|
|
23776
|
+
summary: "",
|
|
23777
|
+
description: "",
|
|
23778
|
+
members: [
|
|
23779
|
+
{
|
|
23780
|
+
name: "label",
|
|
23781
|
+
kind: "property",
|
|
23782
|
+
signature: "label: string",
|
|
23783
|
+
description: ""
|
|
23784
|
+
},
|
|
23785
|
+
{
|
|
23786
|
+
name: "value",
|
|
23787
|
+
kind: "property",
|
|
23788
|
+
signature: "value: T",
|
|
23789
|
+
description: ""
|
|
23790
|
+
},
|
|
23791
|
+
{
|
|
23792
|
+
name: "description",
|
|
23793
|
+
kind: "property",
|
|
23794
|
+
signature: "description?: string",
|
|
23795
|
+
description: "Secondary line, e.g. an email under a name. Read as part of the option's name."
|
|
23796
|
+
},
|
|
23797
|
+
{
|
|
23798
|
+
name: "disabled",
|
|
23799
|
+
kind: "property",
|
|
23800
|
+
signature: "disabled?: boolean",
|
|
23801
|
+
description: "Visible and announced, but not committable; listbox navigation skips it."
|
|
23802
|
+
}
|
|
23803
|
+
],
|
|
23804
|
+
version: "11.6.0"
|
|
23805
|
+
},
|
|
23806
|
+
{
|
|
23807
|
+
id: "options",
|
|
23808
|
+
name: "Options",
|
|
23809
|
+
kind: "type",
|
|
23810
|
+
module: "option",
|
|
23811
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23812
|
+
signature: "type Options<T = unknown> = Option<T>[]",
|
|
23813
|
+
summary: "",
|
|
23814
|
+
description: "",
|
|
23815
|
+
members: [],
|
|
23816
|
+
version: "11.6.0"
|
|
23817
|
+
},
|
|
23818
|
+
{
|
|
23819
|
+
id: "use-timer",
|
|
23820
|
+
name: "useTimer",
|
|
23821
|
+
kind: "function",
|
|
23822
|
+
module: "timer",
|
|
23823
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23824
|
+
signature: "function useTimer()",
|
|
23825
|
+
summary: "",
|
|
23826
|
+
description: "",
|
|
23827
|
+
members: [],
|
|
23828
|
+
version: "11.6.0"
|
|
23829
|
+
},
|
|
23830
|
+
{
|
|
23831
|
+
id: "acceptable-file",
|
|
23832
|
+
name: "acceptableFile",
|
|
23833
|
+
kind: "function",
|
|
23834
|
+
module: "file",
|
|
23835
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23836
|
+
signature: "function acceptableFile(file: File, acceptedFileExtensions: string[] | undefined): boolean",
|
|
23837
|
+
summary: "",
|
|
23838
|
+
description: "",
|
|
23839
|
+
members: [],
|
|
23840
|
+
version: "11.6.0"
|
|
23841
|
+
},
|
|
23842
|
+
{
|
|
23843
|
+
id: "get-file-extension",
|
|
23844
|
+
name: "getFileExtension",
|
|
23845
|
+
kind: "function",
|
|
23846
|
+
module: "file",
|
|
23847
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23848
|
+
signature: "function getFileExtension(file: File): string",
|
|
23849
|
+
summary: "",
|
|
23850
|
+
description: "",
|
|
23851
|
+
members: [],
|
|
23852
|
+
version: "11.6.0"
|
|
23853
|
+
},
|
|
23854
|
+
{
|
|
23855
|
+
id: "query-permission",
|
|
23856
|
+
name: "queryPermission",
|
|
23857
|
+
kind: "function",
|
|
23858
|
+
module: "permission",
|
|
23859
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23860
|
+
signature: "async function queryPermission(permission: Permission): Promise<PermissionState>",
|
|
23861
|
+
summary: "The current state of a browser permission.",
|
|
23862
|
+
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".',
|
|
23863
|
+
members: [],
|
|
23864
|
+
version: "11.6.0"
|
|
23865
|
+
},
|
|
23866
|
+
{
|
|
23867
|
+
id: "permission-service",
|
|
23868
|
+
name: "PermissionService",
|
|
23869
|
+
kind: "service",
|
|
23870
|
+
module: "permission",
|
|
23871
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23872
|
+
signature: "class PermissionService",
|
|
23873
|
+
summary: "",
|
|
23874
|
+
description: "",
|
|
23875
|
+
members: [
|
|
23876
|
+
{
|
|
23877
|
+
name: "getPermissionState",
|
|
23878
|
+
kind: "method",
|
|
23879
|
+
signature: "getPermissionState(permission: Permission): Promise<PermissionState>",
|
|
23880
|
+
description: ""
|
|
23881
|
+
},
|
|
23882
|
+
{
|
|
23883
|
+
name: "isAllowed",
|
|
23884
|
+
kind: "method",
|
|
23885
|
+
signature: "async isAllowed(permission: Permission)",
|
|
23886
|
+
description: ""
|
|
23887
|
+
}
|
|
23888
|
+
],
|
|
23889
|
+
version: "11.6.0"
|
|
23890
|
+
},
|
|
23891
|
+
{
|
|
23892
|
+
id: "permission",
|
|
23893
|
+
name: "Permission",
|
|
23894
|
+
kind: "type",
|
|
23895
|
+
module: "permission",
|
|
23896
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23897
|
+
signature: "type Permission = 'accelerometer' | 'ambient-light-sensor' | 'background-fetch' | 'background-sync' | 'bluetooth' | 'camera' | 'clipboard-read' | 'clipboard-write' | 'compute-pressure' | 'device-info' | 'display-capture' | 'geolocation' | 'gyroscope' | 'local-fonts' | 'magnetometer' | 'microphone' | 'midi' | 'nfc' | 'notifications' | 'payment-handler' | 'persistent-storage' | 'push' | 'screen-wake-lock' | 'speaker' | 'storage-access' | 'top-level-storage-access' | 'window-management'",
|
|
23898
|
+
summary: "",
|
|
23899
|
+
description: "",
|
|
23900
|
+
members: [],
|
|
23901
|
+
version: "11.6.0"
|
|
23902
|
+
},
|
|
23903
|
+
{
|
|
23904
|
+
id: "permission-state",
|
|
23905
|
+
name: "PermissionState",
|
|
23906
|
+
kind: "type",
|
|
23907
|
+
module: "permission",
|
|
23908
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23909
|
+
signature: "type PermissionState = 'granted' | 'prompt' | 'denied' | 'unsupported'",
|
|
23910
|
+
summary: "",
|
|
23911
|
+
description: "",
|
|
23912
|
+
members: [],
|
|
23913
|
+
version: "11.6.0"
|
|
23914
|
+
},
|
|
23915
|
+
{
|
|
23916
|
+
id: "clipboard-copy-result",
|
|
23917
|
+
name: "ClipboardCopyResult",
|
|
23918
|
+
kind: "type",
|
|
23919
|
+
module: "clipboard",
|
|
23920
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23921
|
+
signature: "type ClipboardCopyResult = 'copied' | 'denied' | 'unsupported' | 'failed'",
|
|
23922
|
+
summary: "How a copy ended: - `copied` \u2014 the content is on the clipboard.",
|
|
23923
|
+
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.",
|
|
23924
|
+
members: [],
|
|
23925
|
+
version: "11.6.0"
|
|
23926
|
+
},
|
|
23927
|
+
{
|
|
23928
|
+
id: "clipboard-data",
|
|
23929
|
+
name: "ClipboardData",
|
|
23930
|
+
kind: "type",
|
|
23931
|
+
module: "clipboard",
|
|
23932
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23933
|
+
signature: "type ClipboardData = string | Blob | PromiseLike<string | Blob>",
|
|
23934
|
+
summary: "One clipboard representation; a promise lets the data arrive after the gesture.",
|
|
23935
|
+
description: "One clipboard representation; a promise lets the data arrive after the gesture.",
|
|
23936
|
+
members: [],
|
|
23937
|
+
version: "11.6.0"
|
|
23938
|
+
},
|
|
23939
|
+
{
|
|
23940
|
+
id: "clipboard-content",
|
|
23941
|
+
name: "ClipboardContent",
|
|
23942
|
+
kind: "type",
|
|
23943
|
+
module: "clipboard",
|
|
23944
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23945
|
+
signature: "type ClipboardContent = string | Record<string, ClipboardData>",
|
|
23946
|
+
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 }`.",
|
|
23947
|
+
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 }`.",
|
|
23948
|
+
members: [],
|
|
23949
|
+
version: "11.6.0"
|
|
23950
|
+
},
|
|
23951
|
+
{
|
|
23952
|
+
id: "copy-to-clipboard",
|
|
23953
|
+
name: "copyToClipboard",
|
|
23954
|
+
kind: "function",
|
|
23955
|
+
module: "clipboard",
|
|
23956
|
+
importPath: "@uni-design-system/uni-angular",
|
|
23957
|
+
signature: "async function copyToClipboard(content: ClipboardContent): Promise<ClipboardCopyResult>",
|
|
23958
|
+
summary: "Copies text or rich content with the Async Clipboard API.",
|
|
23959
|
+
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.",
|
|
23960
|
+
members: [],
|
|
23961
|
+
version: "11.6.0"
|
|
23962
|
+
}
|
|
23963
|
+
],
|
|
23964
|
+
utilityDocs: [
|
|
23965
|
+
{
|
|
23966
|
+
module: "datasource",
|
|
23967
|
+
title: "Datasource",
|
|
23968
|
+
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._"
|
|
23969
|
+
},
|
|
23970
|
+
{
|
|
23971
|
+
module: "local-storage",
|
|
23972
|
+
title: "LocalStorage",
|
|
23973
|
+
markdown: "# LocalStorage\n\nThe LocalStorage Service provides a safe, type-safe wrapper around the browser's localStorage API with enhanced error handling and utility methods. It includes availability checking to ensure localStorage is accessible in the current environment and provides methods for storage operations.\n\n## Key Features\n\n- **Availability Checking**: Automatically detects if localStorage is available before operations\n- **Type Safety**: Generic methods support typed data storage and retrieval\n- **Error Handling**: Try-catch blocks with console logging for debugging\n- **JSON Support**: Automatic JSON serialization/deserialization for objects\n- **Utility Methods**: Additional methods for key management, storage size calculation, and existence checking\n\n## Example Implementation\n\n```typescript\nimport { LocalStorageService } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass MyComponent {\n\n constructor(private localStorage: LocalStorageService) {}\n\n // Store different data types\n saveUserPreferences() {\n const preferences = { theme: 'dark', language: 'en' };\n const success = this.localStorage.setItem('user-prefs', preferences);\n console.log('Save successful:', success);\n }\n\n // Retrieve with type safety\n getUserPreferences() {\n const prefs = this.localStorage.getItem<{theme: string, language: string}>('user-prefs');\n return prefs || { theme: 'light', language: 'en' }; // fallback if null\n }\n\n // Check if data exists\n hasUserData() {\n return this.localStorage.hasKey('user-prefs');\n }\n\n // Clean up storage\n clearUserData() {\n this.localStorage.removeItem('user-prefs');\n }\n}\n```\n\n## API Methods\n\n### Core Operations\n\n- `setItem<T>(key: string, value: T): boolean` - Store any data type with JSON serialization\n- `getItem<T>(key: string): T | null` - Retrieve data with automatic type casting\n- `removeItem(key: string): boolean` - Remove a specific item\n- `clear(): boolean` - Clear all localStorage data\n\n### Utility Methods\n\n- `hasKey(key: string): boolean` - Check if a key exists in storage\n- `getAllKeys(): string[]` - Get array of all storage keys\n- `getSize(): number` - Calculate total storage size in characters\n\nAll methods return boolean success indicators for operations and handle localStorage unavailability gracefully.\n\n## Examples\n\n_Live demo on the Storybook page._"
|
|
23974
|
+
},
|
|
23975
|
+
{
|
|
23976
|
+
module: "notification",
|
|
23977
|
+
title: "Notifications",
|
|
23978
|
+
markdown: "# Notifications\n\nThe Notification service is designed to be used alongside a single instance of\nthe `<uni-notifications>` component, which renders whatever the service emits.\nPlace one near the root of your layout, then call the service's methods from\nanywhere to present the notifications below.\n\n## Example Implementations\n\n### Alert\n\n_Live demo on the Storybook page._\n\n_Note: The [alert component](?path=/docs/components-feedback-alert--alert) can be implemented independently._\n\n```\nimport { NotificationService, Alert } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass MyComponent {\n constructor(notifications: NotificationService) {}\n\n const alert: Alert = {\n\n }\n\n showAlert = () => this.notifications.showAlert(alert);\n\n}\n```\n\n### Snackbar\n\n_Live demo on the Storybook page._\n\n```\nimport { NotificationService, Snackbar } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass MyComponent {\n constructor(notifications: NotificationService) {}\n\n const snackbar: Snackbar = {\n message: 'The record has been deleted.',\n action?: () => undoDelete();\n actionLabel: 'Undo';\n symbolName: 'delete';\n variant: 'warn';\n }\n\n showDeleteSnackbar = () => this.notifications.showSnackbar(snackbar);\n\n}\n```\n\n### Confirmation\n\n_Live demo on the Storybook page._\n\n```\nimport { NotificationService, Confirmation } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass MyComponent {\n constructor(notifications: NotificationService) {}\n\n const confirmation: Confirmation = {\n title: 'Delete Record',\n message: 'Are you sure you want to delete this record?',\n action: () => deleteRecord(),\n actionLabel: 'Yes',\n dismissLabel: 'No',\n color: 'warn'\n }\n\n confirmDelete = () => this.notifications.showConfirmation(confirmation);\n\n}\n```"
|
|
23979
|
+
},
|
|
23980
|
+
{
|
|
23981
|
+
module: "timer",
|
|
23982
|
+
title: "Timer",
|
|
23983
|
+
markdown: "# Timer\n\nThe Timer utility provides a reusable, reactive timer service with start, pause, resume, and stop functionality. It's built using Angular signals for reactive state management and automatically handles cleanup through Angular's DestroyRef to prevent memory leaks.\n\n## Key Features\n\n- **Reactive State**: Uses Angular signals for real-time timer updates\n- **Full Control**: Start, pause, resume, and stop operations\n- **Automatic Cleanup**: Automatically clears intervals on component destruction\n- **Completion Callbacks**: Execute custom functions when timer completes\n- **Multiple Time Units**: Access both milliseconds and seconds remaining\n- **Status Tracking**: Monitor active and paused states\n\n## Example Implementation\n\n```typescript\nimport { Component } from '@angular/core';\nimport { useTimer } from '@uni-design-system/uni-angular';\n\n@Component({\n selector: 'app-countdown',\n template: `\n <div>\n <h3>Countdown: {{ timer.secondsRemaining() }}s</h3>\n <p>Status: {{ timer.isActive() ? 'Running' : 'Stopped' }}</p>\n <p>Paused: {{ timer.isPaused() ? 'Yes' : 'No' }}</p>\n\n <button (click)=\"startTimer()\">Start 30s Timer</button>\n <button (click)=\"pauseTimer()\">Pause</button>\n <button (click)=\"resumeTimer()\">Resume</button>\n <button (click)=\"stopTimer()\">Stop</button>\n </div>\n `,\n standalone: true,\n})\nexport class CountdownComponent {\n timer = useTimer();\n\n startTimer() {\n this.timer.start(30000, () => {\n console.log('Timer completed!');\n // Handle completion logic here\n });\n }\n\n pauseTimer() {\n this.timer.pause();\n }\n\n resumeTimer() {\n this.timer.resume();\n }\n\n stopTimer() {\n this.timer.stop();\n }\n}\n```\n\n## Auto-close Feature Example\n\nPerfect for notifications, modals, or temporary UI elements:\n\n```typescript\n@Component({\n selector: 'app-auto-close-notification',\n template: `\n <div *ngIf=\"isVisible\" class=\"notification\">\n <p>This notification will close in {{ timer.secondsRemaining() }}s</p>\n <button (click)=\"dismissNow()\">Dismiss Now</button>\n </div>\n `,\n standalone: true,\n})\nexport class AutoCloseNotificationComponent {\n timer = useTimer();\n isVisible = true;\n\n ngOnInit() {\n // Auto-close after 5 seconds\n this.timer.start(5000, () => {\n this.isVisible = false;\n });\n }\n\n dismissNow() {\n this.timer.stop();\n this.isVisible = false;\n }\n}\n```\n\n## Session Timeout Example\n\nUseful for authentication timeouts or activity tracking:\n\n```typescript\n@Component({...})\nexport class SessionManagerComponent {\n sessionTimer = useTimer();\n warningTimer = useTimer();\n\n private readonly SESSION_DURATION = 30 * 60 * 1000; // 30 minutes\n private readonly WARNING_DURATION = 5 * 60 * 1000; // 5 minutes\n\n startSession() {\n // Start main session timer\n this.sessionTimer.start(this.SESSION_DURATION, () => {\n this.handleSessionExpired();\n });\n\n // Start warning timer (triggers 5 min before session expires)\n this.warningTimer.start(this.SESSION_DURATION - this.WARNING_DURATION, () => {\n this.showSessionWarning();\n });\n }\n\n extendSession() {\n // User activity detected - restart timers\n this.sessionTimer.stop();\n this.warningTimer.stop();\n this.startSession();\n }\n\n private showSessionWarning() {\n console.log(`Session expires in ${this.sessionTimer.secondsRemaining()}s`);\n }\n\n private handleSessionExpired() {\n // Log out user or redirect to login\n this.logoutUser();\n }\n}\n```\n\n## API Reference\n\n### Core Methods\n\n- `start(durationMs: number, onComplete?: () => void): void` - Start timer with duration in milliseconds and optional completion callback\n- `pause(): void` - Pause the active timer (no-op if not active or already paused)\n- `resume(): void` - Resume paused timer (no-op if not paused)\n- `stop(): void` - Stop timer and reset remaining time to 0\n\n### Reactive Properties\n\n- `msRemaining: Signal<number>` - Milliseconds remaining (updates every 100ms)\n- `secondsRemaining: Signal<number>` - Seconds remaining (rounded up)\n- `isPaused: Signal<boolean>` - Whether timer is currently paused\n- `isActive: Signal<boolean>` - Whether timer has time remaining (computed from msRemaining > 0)\n\n### Behavior Notes\n\n- Timer updates every 100ms for smooth UI updates\n- `pause()` and `resume()` are safe to call - they check state before executing\n- `start()` automatically stops any existing timer before starting new one\n- Completion callback is optional and executes when timer reaches 0\n- Component destruction automatically cleans up active timers\n\n## Interactive Example\n\n_Live demo on the Storybook page._"
|
|
23984
|
+
},
|
|
23985
|
+
{
|
|
23986
|
+
module: "permission",
|
|
23987
|
+
title: "Permissions API",
|
|
23988
|
+
markdown: "# Permissions API\n\nThe Permissions API service is used to check if a specific feature or API is available for interaction within your code.\nFor instance, `copyToClipboard` checks `clipboard-write` after a refused copy to tell a blocked permission apart from any other failure.\nMany permissions cannot be queried in every browser (Firefox and Safari do not answer `clipboard-write`), and those report `unsupported`: treat that as \"can't tell\" rather than \"no\".\nIf the permission is in a `prompt` state, the API is available and the user will be prompted to approve the first execution of the associated method.\nIf a permission is not allowed or unsupported, this condition can be used to hide any associated functionality in your UI.\n\n## Example Implementation\n\n```\nimport { PermissionService } from '@uni-design-system/uni-angular';\n\n@Component({...})\nclass MyComponent {\n\n allowWriteToClipboard = false;\n\n constructor(private permissionService: PermissionService) {\n permissionService\n .isAllowed('clipboard-write')\n .then((allowed) => (this.allowWriteToClipboard = allowed));\n }\n\n}\n\n```\n\n## Permission manifest\n\nEvery permission name this service knows, with its current state on this device:\n\n_Live demo on the Storybook page._\n\n## Resources\n\n- [Permissions API](https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API)"
|
|
23989
|
+
},
|
|
23990
|
+
{
|
|
23991
|
+
module: "clipboard",
|
|
23992
|
+
title: "Clipboard",
|
|
23993
|
+
markdown: "# Clipboard\n\n`copyToClipboard` copies text or rich content with the Async Clipboard API. It never\nrejects: it resolves with what happened, so you can tell the user why a copy did not work\ninstead of wrapping every call in a `try`/`catch`.\n\n`import { copyToClipboard } from '@uni-design-system/uni-angular';`\n\n_Live demo on the Storybook page._\n\n## Copying text\n\n```typescript\nprotected async copyLink(): Promise<void> {\n const result = await copyToClipboard(this.url());\n if (result === 'copied') this.copied.set(true);\n}\n```\n\n## Copying rich content\n\nPass one item as a map of MIME type to data. Applications that understand HTML paste the\nrich version; everything else falls back to the plain text.\n\n```typescript\nawait copyToClipboard({\n 'text/plain': 'Quarterly report',\n 'text/html': '<a href=\"https://example.com/report\">Quarterly report</a>',\n});\n```\n\nA value can be a string, a `Blob`, or a promise of either. Use a promise for content that\nhas to be fetched or rendered first, rather than awaiting it before the call:\n\n```typescript\nawait copyToClipboard({ 'image/png': this.chart.toBlob() });\n```\n\n## Results\n\n## Call it from the user gesture\n\nBrowsers only honor a clipboard write made inside a click or key handler. The write starts\nsynchronously when you call `copyToClipboard`, so call it directly from the handler; do not\n`await` other work first.\n\nThis is also why the `clipboard-write` permission is not checked up front. Only Chromium\ncan answer that query, and waiting on it can cost the gesture elsewhere. The permission is\nconsulted after a refusal, to tell `denied` apart from `failed`.\n\n## Resources\n\n- [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API)\n- [ClipboardItem](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardItem)"
|
|
23994
|
+
}
|
|
23995
|
+
]
|
|
23996
|
+
};
|
|
23997
|
+
|
|
23998
|
+
// src/server/store.ts
|
|
23999
|
+
var index = uni_index_default;
|
|
24000
|
+
var meta = index.meta;
|
|
24001
|
+
function frameworksFor(c) {
|
|
24002
|
+
return Object.keys(c.bindings);
|
|
24003
|
+
}
|
|
20569
24004
|
function listComponents(filter = {}) {
|
|
20570
24005
|
return index.components.filter((c) => {
|
|
20571
24006
|
if (filter.framework && !c.bindings[filter.framework]) return false;
|
|
@@ -20624,6 +24059,23 @@ function selectReleases(cl, scope) {
|
|
|
20624
24059
|
if (scope.since) return cl.releases.filter((r) => compareVersions(r.version, scope.since) > 0);
|
|
20625
24060
|
return cl.releases;
|
|
20626
24061
|
}
|
|
24062
|
+
function listUtilities(filter = {}) {
|
|
24063
|
+
return (index.utilities ?? []).filter((u) => {
|
|
24064
|
+
if (filter.module && u.module !== filter.module) return false;
|
|
24065
|
+
if (filter.kind && u.kind !== filter.kind) return false;
|
|
24066
|
+
return true;
|
|
24067
|
+
});
|
|
24068
|
+
}
|
|
24069
|
+
function getUtility(idOrName) {
|
|
24070
|
+
const q = idOrName.trim();
|
|
24071
|
+
const lower = q.toLowerCase();
|
|
24072
|
+
return listUtilities().find(
|
|
24073
|
+
(u) => u.id === lower || u.name === q || u.name.toLowerCase() === lower
|
|
24074
|
+
);
|
|
24075
|
+
}
|
|
24076
|
+
function getUtilityDoc(module) {
|
|
24077
|
+
return (index.utilityDocs ?? []).find((d) => d.module === module);
|
|
24078
|
+
}
|
|
20627
24079
|
function search(query, kind) {
|
|
20628
24080
|
const q = query.toLowerCase().trim();
|
|
20629
24081
|
if (!q) return [];
|
|
@@ -20633,7 +24085,12 @@ function search(query, kind) {
|
|
|
20633
24085
|
for (const c of index.components) {
|
|
20634
24086
|
const apiNames = frameworksFor(c).flatMap((f) => c.bindings[f].api.map((a) => a.name));
|
|
20635
24087
|
if (match(c.id, c.name, c.summary, c.description, c.category, ...apiNames)) {
|
|
20636
|
-
hits.push({
|
|
24088
|
+
hits.push({
|
|
24089
|
+
kind: "component",
|
|
24090
|
+
id: c.id,
|
|
24091
|
+
label: c.name,
|
|
24092
|
+
snippet: c.summary || c.description.slice(0, 120)
|
|
24093
|
+
});
|
|
20637
24094
|
}
|
|
20638
24095
|
}
|
|
20639
24096
|
}
|
|
@@ -20651,11 +24108,29 @@ function search(query, kind) {
|
|
|
20651
24108
|
}
|
|
20652
24109
|
}
|
|
20653
24110
|
}
|
|
24111
|
+
if (!kind || kind === "utility") {
|
|
24112
|
+
for (const u of index.utilities ?? []) {
|
|
24113
|
+
const memberNames = u.members.map((m) => m.name);
|
|
24114
|
+
if (match(u.id, u.name, u.module, u.summary, u.description, ...memberNames)) {
|
|
24115
|
+
hits.push({
|
|
24116
|
+
kind: "utility",
|
|
24117
|
+
id: u.id,
|
|
24118
|
+
label: `${u.name} (${u.module})`,
|
|
24119
|
+
snippet: u.summary || u.signature
|
|
24120
|
+
});
|
|
24121
|
+
}
|
|
24122
|
+
}
|
|
24123
|
+
}
|
|
20654
24124
|
if (!kind || kind === "guideline") {
|
|
20655
24125
|
for (const c of index.components) {
|
|
20656
24126
|
const g = c.guidelines;
|
|
20657
24127
|
if (match(g.whenToUse, ...g.dos, ...g.donts, ...g.accessibility)) {
|
|
20658
|
-
hits.push({
|
|
24128
|
+
hits.push({
|
|
24129
|
+
kind: "guideline",
|
|
24130
|
+
id: c.id,
|
|
24131
|
+
label: `${c.name} guidelines`,
|
|
24132
|
+
snippet: g.whenToUse.slice(0, 120)
|
|
24133
|
+
});
|
|
20659
24134
|
}
|
|
20660
24135
|
}
|
|
20661
24136
|
}
|
|
@@ -20704,7 +24179,8 @@ _Not yet available for ${f}._`);
|
|
|
20704
24179
|
**API**
|
|
20705
24180
|
${formatApiTable(b)}`);
|
|
20706
24181
|
}
|
|
20707
|
-
if (c.relatedTokens.length)
|
|
24182
|
+
if (c.relatedTokens.length)
|
|
24183
|
+
out.push(`
|
|
20708
24184
|
**Related tokens:** ${c.relatedTokens.map((t) => `\`${t}\``).join(", ")}`);
|
|
20709
24185
|
if (c.examples.length) {
|
|
20710
24186
|
const ex = c.examples[0];
|
|
@@ -20713,13 +24189,15 @@ ${formatApiTable(b)}`);
|
|
|
20713
24189
|
\`\`\`html
|
|
20714
24190
|
${ex.code}
|
|
20715
24191
|
\`\`\``);
|
|
20716
|
-
if (c.examples.length > 1)
|
|
24192
|
+
if (c.examples.length > 1)
|
|
24193
|
+
out.push(`_+${c.examples.length - 1} more via get-component-examples._`);
|
|
20717
24194
|
}
|
|
20718
24195
|
return out.join("\n");
|
|
20719
24196
|
}
|
|
20720
24197
|
function formatExamples(c, framework) {
|
|
20721
24198
|
const examples = framework ? c.examples.filter((e) => e.framework === framework) : c.examples;
|
|
20722
|
-
if (!examples.length)
|
|
24199
|
+
if (!examples.length)
|
|
24200
|
+
return `No examples found for \`${c.id}\`${framework ? ` (${framework})` : ""}.`;
|
|
20723
24201
|
const blocks = examples.map((e) => {
|
|
20724
24202
|
const link = e.storybookUrl ? `
|
|
20725
24203
|
[Open in Storybook](${e.storybookUrl})` : "";
|
|
@@ -20773,7 +24251,9 @@ function formatTheme(t) {
|
|
|
20773
24251
|
out.push("\n## Component options (-> component inputs/props)");
|
|
20774
24252
|
out.push("_Behavioral preferences. Pass as inputs/props, not CSS._");
|
|
20775
24253
|
for (const [component, opts] of Object.entries(t.componentOptions)) {
|
|
20776
|
-
out.push(
|
|
24254
|
+
out.push(
|
|
24255
|
+
`- **${component}**: ${Object.entries(opts).map(([k, v]) => `\`${k}=${v}\``).join(", ")}`
|
|
24256
|
+
);
|
|
20777
24257
|
}
|
|
20778
24258
|
if (t.usage) out.push(`
|
|
20779
24259
|
## How to apply
|
|
@@ -20783,7 +24263,8 @@ ${t.usage}`);
|
|
|
20783
24263
|
function formatGuidelines(c) {
|
|
20784
24264
|
const g = c.guidelines;
|
|
20785
24265
|
const has = g.whenToUse || g.dos.length || g.donts.length || g.accessibility.length;
|
|
20786
|
-
if (!has)
|
|
24266
|
+
if (!has)
|
|
24267
|
+
return `No authored guidelines yet for \`${c.id}\`. (Author them in the component's MDX.)`;
|
|
20787
24268
|
const out = [`# ${c.name} - guidelines`];
|
|
20788
24269
|
if (g.whenToUse) out.push(`
|
|
20789
24270
|
**When to use**
|
|
@@ -20794,7 +24275,8 @@ ${g.dos.map((d) => `- ${d}`).join("\n")}`);
|
|
|
20794
24275
|
if (g.donts.length) out.push(`
|
|
20795
24276
|
**Don't**
|
|
20796
24277
|
${g.donts.map((d) => `- ${d}`).join("\n")}`);
|
|
20797
|
-
if (g.accessibility.length)
|
|
24278
|
+
if (g.accessibility.length)
|
|
24279
|
+
out.push(`
|
|
20798
24280
|
**Accessibility**
|
|
20799
24281
|
${g.accessibility.map((a) => `- ${a}`).join("\n")}`);
|
|
20800
24282
|
return out.join("\n");
|
|
@@ -20832,7 +24314,9 @@ function formatChangelog(cl, scope = {}) {
|
|
|
20832
24314
|
const shown = full ? releases : releases.slice(0, 15);
|
|
20833
24315
|
const out = [`# ${cl.package} \u2014 release notes`, ...shown.map((r) => formatRelease(r, full))];
|
|
20834
24316
|
if (shown.length < releases.length) {
|
|
20835
|
-
out.push(
|
|
24317
|
+
out.push(
|
|
24318
|
+
`_...and ${releases.length - shown.length} older releases. Pass \`version\` or \`since\` to scope._`
|
|
24319
|
+
);
|
|
20836
24320
|
}
|
|
20837
24321
|
return out.join("\n\n");
|
|
20838
24322
|
}
|
|
@@ -20846,6 +24330,53 @@ _...and ${hits.length - 40} more. Narrow with \`kind\`._` : "";
|
|
|
20846
24330
|
|
|
20847
24331
|
${rows.join("\n")}${more}`;
|
|
20848
24332
|
}
|
|
24333
|
+
function formatUtilityList(utilities) {
|
|
24334
|
+
if (!utilities.length) return "No utilities match that filter.";
|
|
24335
|
+
const byModule = /* @__PURE__ */ new Map();
|
|
24336
|
+
for (const u of utilities) byModule.set(u.module, [...byModule.get(u.module) ?? [], u]);
|
|
24337
|
+
const out = [
|
|
24338
|
+
`# Uni CDK utilities (${utilities.length})`,
|
|
24339
|
+
"",
|
|
24340
|
+
"Import every symbol from `@uni-design-system/uni-angular`."
|
|
24341
|
+
];
|
|
24342
|
+
for (const [module, list] of byModule) {
|
|
24343
|
+
const doc = getUtilityDoc(module);
|
|
24344
|
+
out.push(`
|
|
24345
|
+
## ${module}${doc ? ` \u2014 ${doc.title}` : ""}`);
|
|
24346
|
+
for (const u of list)
|
|
24347
|
+
out.push(`- **${u.name}** \`${u.id}\` _(${u.kind})_${u.summary ? ` - ${u.summary}` : ""}`);
|
|
24348
|
+
}
|
|
24349
|
+
return out.join("\n");
|
|
24350
|
+
}
|
|
24351
|
+
function formatUtility(u) {
|
|
24352
|
+
const out = [`# ${u.name} \`${u.id}\``];
|
|
24353
|
+
out.push(`_${u.kind} \xB7 cdk/${u.module} \xB7 Uni v${u.version}_`);
|
|
24354
|
+
if (u.description) out.push(`
|
|
24355
|
+
${u.description}`);
|
|
24356
|
+
out.push(`
|
|
24357
|
+
- import: \`import { ${u.name} } from '${u.importPath}';\``);
|
|
24358
|
+
out.push(`
|
|
24359
|
+
\`\`\`ts
|
|
24360
|
+
${u.signature}
|
|
24361
|
+
\`\`\``);
|
|
24362
|
+
if (u.members.length) {
|
|
24363
|
+
out.push("\n**Members**");
|
|
24364
|
+
for (const m of u.members)
|
|
24365
|
+
out.push(`- \`${m.signature}\`${m.description ? ` - ${m.description}` : ""}`);
|
|
24366
|
+
}
|
|
24367
|
+
const siblings = listUtilities({ module: u.module }).filter((s) => s.id !== u.id);
|
|
24368
|
+
if (siblings.length)
|
|
24369
|
+
out.push(`
|
|
24370
|
+
**Same module:** ${siblings.map((s) => `\`${s.name}\``).join(", ")}`);
|
|
24371
|
+
const doc = getUtilityDoc(u.module);
|
|
24372
|
+
if (doc) out.push(`
|
|
24373
|
+
---
|
|
24374
|
+
|
|
24375
|
+
_From the ${doc.title} docs page:_
|
|
24376
|
+
|
|
24377
|
+
${doc.markdown}`);
|
|
24378
|
+
return out.join("\n");
|
|
24379
|
+
}
|
|
20849
24380
|
|
|
20850
24381
|
// ../core/dist/esm/index.js
|
|
20851
24382
|
var EXPAND_DEFAULT_SPEED = 0.35;
|
|
@@ -22025,6 +25556,7 @@ var buildComponents = (c) => ({
|
|
|
22025
25556
|
},
|
|
22026
25557
|
tabs: { options: {
|
|
22027
25558
|
motion: "snap",
|
|
25559
|
+
panelMotion: "panel",
|
|
22028
25560
|
typeface: "title-small",
|
|
22029
25561
|
textColor: "on-surface-variant",
|
|
22030
25562
|
activeTextColor: "primary",
|
|
@@ -22137,12 +25669,24 @@ var buildComponents = (c) => ({
|
|
|
22137
25669
|
tagInput: { options: {
|
|
22138
25670
|
chipGap: "xs",
|
|
22139
25671
|
chipSize: "md",
|
|
25672
|
+
chipVariant: "primary",
|
|
25673
|
+
chipTone: "soft",
|
|
22140
25674
|
minInputWidth: "12ch",
|
|
22141
25675
|
listColor: "primary-surface",
|
|
22142
25676
|
listShadow: "menu",
|
|
22143
25677
|
listBorderRadius: "xs",
|
|
22144
25678
|
activeColor: "primary-container",
|
|
22145
|
-
maxSuggestions: 8
|
|
25679
|
+
maxSuggestions: 8,
|
|
25680
|
+
typeface: "label",
|
|
25681
|
+
headingTypeface: "caption",
|
|
25682
|
+
listWidth: "anchor"
|
|
25683
|
+
} },
|
|
25684
|
+
contactInput: { options: {
|
|
25685
|
+
avatarSize: "md",
|
|
25686
|
+
avatarVariant: "primary",
|
|
25687
|
+
nameTypeface: "body-2-short",
|
|
25688
|
+
detailTypeface: "caption",
|
|
25689
|
+
rowGap: "sm"
|
|
22146
25690
|
} },
|
|
22147
25691
|
calendar: {
|
|
22148
25692
|
options: {
|
|
@@ -23599,7 +27143,8 @@ var RuntimeThemeOutput = {
|
|
|
23599
27143
|
iconsElided: z.literal(true)
|
|
23600
27144
|
};
|
|
23601
27145
|
function runtimeTheme(result) {
|
|
23602
|
-
if (!result.ok)
|
|
27146
|
+
if (!result.ok)
|
|
27147
|
+
return { content: [{ type: "text", text: result.error }], isError: true };
|
|
23603
27148
|
return {
|
|
23604
27149
|
content: [{ type: "text", text: summarizeEnvelope(result.envelope) }],
|
|
23605
27150
|
structuredContent: result.envelope
|
|
@@ -23614,7 +27159,7 @@ function createUniServer() {
|
|
|
23614
27159
|
const server = new McpServer(
|
|
23615
27160
|
{ name: "uni-design-system", version: meta.version },
|
|
23616
27161
|
{
|
|
23617
|
-
instructions: 'Authoritative interface to the Uni Design System. Prefer these tools over recalling component APIs or token values from memory: names, props, and tokens here match the exact Uni release the developer installed. Start with `list-components` or `search`, then `get-component` / `get-component-examples`. Use real token ids (via `list-tokens`) instead of raw hex. Theming has four tools, split by what you need: to brand an app permanently, call `generate-uni-theme` once and write the returned static `uni-theme.ts` \u2014 then change look and feel by editing that file\'s tokens directly, since shared tokens propagate everywhere; to apply a theme immediately with no build step (previews, per-tenant theming, generated UI), call `generate-runtime-theme` or `get-runtime-theme` and register the JSON they return; to read a theme\'s token values without applying one, use `get-theme-template`. Never inline `<svg>` in a component: when you meet inline SVG, or a brand icon set to import, call `create-icon-tokens` to convert it into theme icon tokens, add them to `uni-theme.ts`, and render with `<uni-icon name="\u2026" />`. For release questions ("what changed in 8.1?", "what does upgrading get me?"), call `get-changelog`.'
|
|
27162
|
+
instructions: 'Authoritative interface to the Uni Design System. Prefer these tools over recalling component APIs or token values from memory: names, props, and tokens here match the exact Uni release the developer installed. Start with `list-components` or `search`, then `get-component` / `get-component-examples`. The CDK \u2014 the non-visual half of uni-angular (clipboard, permissions, timers, local storage, notifications, datasources, exact decimal math, overlay and focus helpers) \u2014 is covered by `list-utilities` and `get-utility`; reach for those before hand-rolling a browser API call. Use real token ids (via `list-tokens`) instead of raw hex. Theming has four tools, split by what you need: to brand an app permanently, call `generate-uni-theme` once and write the returned static `uni-theme.ts` \u2014 then change look and feel by editing that file\'s tokens directly, since shared tokens propagate everywhere; to apply a theme immediately with no build step (previews, per-tenant theming, generated UI), call `generate-runtime-theme` or `get-runtime-theme` and register the JSON they return; to read a theme\'s token values without applying one, use `get-theme-template`. Never inline `<svg>` in a component: when you meet inline SVG, or a brand icon set to import, call `create-icon-tokens` to convert it into theme icon tokens, add them to `uni-theme.ts`, and render with `<uni-icon name="\u2026" />`. For release questions ("what changed in 8.1?", "what does upgrading get me?"), call `get-changelog`.'
|
|
23618
27163
|
}
|
|
23619
27164
|
);
|
|
23620
27165
|
server.registerTool(
|
|
@@ -23657,6 +27202,30 @@ function createUniServer() {
|
|
|
23657
27202
|
return c ? text(formatExamples(c, framework)) : notFound("component", id);
|
|
23658
27203
|
}
|
|
23659
27204
|
);
|
|
27205
|
+
server.registerTool(
|
|
27206
|
+
"list-utilities",
|
|
27207
|
+
{
|
|
27208
|
+
title: "List Uni CDK utilities",
|
|
27209
|
+
description: "Inventory of the CDK \u2014 the non-visual exports of uni-angular: functions, injectable services, classes and types, grouped by module (clipboard, permission, timer, local-storage, notification, datasource, number, datetime, overlay, a11y, \u2026). Filter by module or kind.",
|
|
27210
|
+
inputSchema: {
|
|
27211
|
+
module: z.string().optional().describe('CDK folder, e.g. "clipboard", "number", "datasource"'),
|
|
27212
|
+
kind: z.enum(["function", "service", "class", "interface", "type", "const"]).optional()
|
|
27213
|
+
}
|
|
27214
|
+
},
|
|
27215
|
+
async ({ module, kind }) => text(formatUtilityList(listUtilities({ module, kind })))
|
|
27216
|
+
);
|
|
27217
|
+
server.registerTool(
|
|
27218
|
+
"get-utility",
|
|
27219
|
+
{
|
|
27220
|
+
title: "Get a Uni CDK utility",
|
|
27221
|
+
description: `Full reference for one CDK export: description, import line, signature, members (for services and interfaces), the other symbols in its module, and the module's docs page with usage examples. Accepts the id ("copy-to-clipboard") or the exported name ("copyToClipboard").`,
|
|
27222
|
+
inputSchema: { id: z.string().describe("utility id or exported name") }
|
|
27223
|
+
},
|
|
27224
|
+
async ({ id }) => {
|
|
27225
|
+
const u = getUtility(id);
|
|
27226
|
+
return u ? text(formatUtility(u)) : notFound("utility", id);
|
|
27227
|
+
}
|
|
27228
|
+
);
|
|
23660
27229
|
server.registerTool(
|
|
23661
27230
|
"list-tokens",
|
|
23662
27231
|
{
|
|
@@ -23767,7 +27336,8 @@ function createUniServer() {
|
|
|
23767
27336
|
},
|
|
23768
27337
|
async ({ theme }) => {
|
|
23769
27338
|
const result = buildDtcgTokens(theme);
|
|
23770
|
-
if (!result.ok)
|
|
27339
|
+
if (!result.ok)
|
|
27340
|
+
return { content: [{ type: "text", text: result.error }], isError: true };
|
|
23771
27341
|
return text("```json\n" + result.json + "\n```");
|
|
23772
27342
|
}
|
|
23773
27343
|
);
|
|
@@ -23796,7 +27366,9 @@ function createUniServer() {
|
|
|
23796
27366
|
title: "Get release notes",
|
|
23797
27367
|
description: 'Release notes for the Uni packages, from their changesets changelogs. Answers "what changed in X?" and "what do I get by upgrading?". Pass `version` for one release\'s full notes ("8.1" matches every 8.1.x), `since` for the full notes of every release after an installed version (an upgrade diff), or neither for a compact release list.',
|
|
23798
27368
|
inputSchema: {
|
|
23799
|
-
package: z.string().optional().describe(
|
|
27369
|
+
package: z.string().optional().describe(
|
|
27370
|
+
'npm name or short name, e.g. "uni-angular" (default), "uni-core", "uni-react", "uni-mcp".'
|
|
27371
|
+
),
|
|
23800
27372
|
version: z.string().optional().describe('One release, e.g. "8.1.0" or "8.1".'),
|
|
23801
27373
|
since: z.string().optional().describe('Every release newer than this version, e.g. the installed "8.0.0".')
|
|
23802
27374
|
}
|
|
@@ -23814,10 +27386,10 @@ function createUniServer() {
|
|
|
23814
27386
|
"search",
|
|
23815
27387
|
{
|
|
23816
27388
|
title: "Search the design system",
|
|
23817
|
-
description: "Keyword search across components, tokens, themes, and guidelines. Narrow with `kind`.",
|
|
27389
|
+
description: "Keyword search across components, CDK utilities, tokens, themes, and guidelines. Narrow with `kind`.",
|
|
23818
27390
|
inputSchema: {
|
|
23819
27391
|
query: z.string(),
|
|
23820
|
-
kind: z.enum(["component", "token", "theme", "guideline"]).optional()
|
|
27392
|
+
kind: z.enum(["component", "utility", "token", "theme", "guideline"]).optional()
|
|
23821
27393
|
}
|
|
23822
27394
|
},
|
|
23823
27395
|
async ({ query, kind }) => text(formatSearch(query, search(query, kind)))
|
|
@@ -23865,6 +27437,35 @@ function registerResources(server) {
|
|
|
23865
27437
|
};
|
|
23866
27438
|
}
|
|
23867
27439
|
);
|
|
27440
|
+
server.registerResource(
|
|
27441
|
+
"utility",
|
|
27442
|
+
new ResourceTemplate("uni://utilities/{id}", {
|
|
27443
|
+
list: async () => ({
|
|
27444
|
+
resources: listUtilities().map((u) => ({
|
|
27445
|
+
uri: `uni://utilities/${u.id}`,
|
|
27446
|
+
name: u.name,
|
|
27447
|
+
description: u.summary || u.signature
|
|
27448
|
+
}))
|
|
27449
|
+
})
|
|
27450
|
+
}),
|
|
27451
|
+
{
|
|
27452
|
+
title: "Uni CDK utility",
|
|
27453
|
+
description: "A CDK utility reference card, with its module docs.",
|
|
27454
|
+
mimeType: "text/markdown"
|
|
27455
|
+
},
|
|
27456
|
+
async (uri, { id }) => {
|
|
27457
|
+
const u = getUtility(String(id));
|
|
27458
|
+
return {
|
|
27459
|
+
contents: [
|
|
27460
|
+
{
|
|
27461
|
+
uri: uri.href,
|
|
27462
|
+
mimeType: "text/markdown",
|
|
27463
|
+
text: u ? formatUtility(u) : `Unknown utility: ${id}`
|
|
27464
|
+
}
|
|
27465
|
+
]
|
|
27466
|
+
};
|
|
27467
|
+
}
|
|
27468
|
+
);
|
|
23868
27469
|
server.registerResource(
|
|
23869
27470
|
"token",
|
|
23870
27471
|
new ResourceTemplate("uni://tokens/{id}", {
|
|
@@ -23981,4 +27582,4 @@ export {
|
|
|
23981
27582
|
buildStoredTheme,
|
|
23982
27583
|
createUniServer
|
|
23983
27584
|
};
|
|
23984
|
-
//# sourceMappingURL=chunk-
|
|
27585
|
+
//# sourceMappingURL=chunk-INTB6KJ7.js.map
|