@aglyn/plugins-mui 1.0.0-beta.143
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/LICENSE +201 -0
- package/README.md +22 -0
- package/package.json +47 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/lib/components/accordion.d.ts +96 -0
- package/src/lib/components/accordion.js +392 -0
- package/src/lib/components/accordion.js.map +1 -0
- package/src/lib/components/app-bar.d.ts +32 -0
- package/src/lib/components/app-bar.js +86 -0
- package/src/lib/components/app-bar.js.map +1 -0
- package/src/lib/components/blocks.d.ts +46 -0
- package/src/lib/components/blocks.js +1007 -0
- package/src/lib/components/blocks.js.map +1 -0
- package/src/lib/components/box.d.ts +47 -0
- package/src/lib/components/box.js +125 -0
- package/src/lib/components/box.js.map +1 -0
- package/src/lib/components/breadcrumbs.d.ts +44 -0
- package/src/lib/components/breadcrumbs.js +172 -0
- package/src/lib/components/breadcrumbs.js.map +1 -0
- package/src/lib/components/button.d.ts +89 -0
- package/src/lib/components/button.js +272 -0
- package/src/lib/components/button.js.map +1 -0
- package/src/lib/components/card.d.ts +61 -0
- package/src/lib/components/card.js +336 -0
- package/src/lib/components/card.js.map +1 -0
- package/src/lib/components/collection.d.ts +514 -0
- package/src/lib/components/collection.js +2999 -0
- package/src/lib/components/collection.js.map +1 -0
- package/src/lib/components/container.d.ts +42 -0
- package/src/lib/components/container.js +169 -0
- package/src/lib/components/container.js.map +1 -0
- package/src/lib/components/custom-html.d.ts +78 -0
- package/src/lib/components/custom-html.js +219 -0
- package/src/lib/components/custom-html.js.map +1 -0
- package/src/lib/components/data-table.d.ts +57 -0
- package/src/lib/components/data-table.js +216 -0
- package/src/lib/components/data-table.js.map +1 -0
- package/src/lib/components/document-root.d.ts +77 -0
- package/src/lib/components/document-root.js +118 -0
- package/src/lib/components/document-root.js.map +1 -0
- package/src/lib/components/drawer.d.ts +93 -0
- package/src/lib/components/drawer.js +566 -0
- package/src/lib/components/drawer.js.map +1 -0
- package/src/lib/components/function-controls.d.ts +66 -0
- package/src/lib/components/function-controls.js +207 -0
- package/src/lib/components/function-controls.js.map +1 -0
- package/src/lib/components/function-scope.d.ts +110 -0
- package/src/lib/components/function-scope.js +478 -0
- package/src/lib/components/function-scope.js.map +1 -0
- package/src/lib/components/function-widget.d.ts +75 -0
- package/src/lib/components/function-widget.js +307 -0
- package/src/lib/components/function-widget.js.map +1 -0
- package/src/lib/components/grid.d.ts +91 -0
- package/src/lib/components/grid.js +322 -0
- package/src/lib/components/grid.js.map +1 -0
- package/src/lib/components/icon.d.ts +54 -0
- package/src/lib/components/icon.js +163 -0
- package/src/lib/components/icon.js.map +1 -0
- package/src/lib/components/image-list.d.ts +58 -0
- package/src/lib/components/image-list.js +336 -0
- package/src/lib/components/image-list.js.map +1 -0
- package/src/lib/components/image.d.ts +154 -0
- package/src/lib/components/image.js +451 -0
- package/src/lib/components/image.js.map +1 -0
- package/src/lib/components/inline-text.d.ts +74 -0
- package/src/lib/components/inline-text.js +407 -0
- package/src/lib/components/inline-text.js.map +1 -0
- package/src/lib/components/language-switcher.d.ts +35 -0
- package/src/lib/components/language-switcher.js +179 -0
- package/src/lib/components/language-switcher.js.map +1 -0
- package/src/lib/components/layout-slot.d.ts +68 -0
- package/src/lib/components/layout-slot.js +192 -0
- package/src/lib/components/layout-slot.js.map +1 -0
- package/src/lib/components/link-box-accessible-name.d.ts +79 -0
- package/src/lib/components/link-box-accessible-name.js +158 -0
- package/src/lib/components/link-box-accessible-name.js.map +1 -0
- package/src/lib/components/link-box.d.ts +66 -0
- package/src/lib/components/link-box.js +212 -0
- package/src/lib/components/link-box.js.map +1 -0
- package/src/lib/components/list-item-text.d.ts +22 -0
- package/src/lib/components/list-item-text.js +86 -0
- package/src/lib/components/list-item-text.js.map +1 -0
- package/src/lib/components/list-item.d.ts +32 -0
- package/src/lib/components/list-item.js +127 -0
- package/src/lib/components/list-item.js.map +1 -0
- package/src/lib/components/list.d.ts +34 -0
- package/src/lib/components/list.js +108 -0
- package/src/lib/components/list.js.map +1 -0
- package/src/lib/components/markdown.d.ts +129 -0
- package/src/lib/components/markdown.js +853 -0
- package/src/lib/components/markdown.js.map +1 -0
- package/src/lib/components/nav-menu.d.ts +68 -0
- package/src/lib/components/nav-menu.js +683 -0
- package/src/lib/components/nav-menu.js.map +1 -0
- package/src/lib/components/pagination.d.ts +59 -0
- package/src/lib/components/pagination.js +243 -0
- package/src/lib/components/pagination.js.map +1 -0
- package/src/lib/components/paper.d.ts +47 -0
- package/src/lib/components/paper.js +202 -0
- package/src/lib/components/paper.js.map +1 -0
- package/src/lib/components/plugin-frame.d.ts +64 -0
- package/src/lib/components/plugin-frame.js +335 -0
- package/src/lib/components/plugin-frame.js.map +1 -0
- package/src/lib/components/plugin.d.ts +95 -0
- package/src/lib/components/plugin.js +304 -0
- package/src/lib/components/plugin.js.map +1 -0
- package/src/lib/components/product.d.ts +40 -0
- package/src/lib/components/product.js +287 -0
- package/src/lib/components/product.js.map +1 -0
- package/src/lib/components/reusable-instance.d.ts +57 -0
- package/src/lib/components/reusable-instance.js +126 -0
- package/src/lib/components/reusable-instance.js.map +1 -0
- package/src/lib/components/screen-link.d.ts +85 -0
- package/src/lib/components/screen-link.js +324 -0
- package/src/lib/components/screen-link.js.map +1 -0
- package/src/lib/components/search-box.d.ts +41 -0
- package/src/lib/components/search-box.js +125 -0
- package/src/lib/components/search-box.js.map +1 -0
- package/src/lib/components/section.d.ts +56 -0
- package/src/lib/components/section.js +132 -0
- package/src/lib/components/section.js.map +1 -0
- package/src/lib/components/stack.d.ts +55 -0
- package/src/lib/components/stack.js +309 -0
- package/src/lib/components/stack.js.map +1 -0
- package/src/lib/components/tabs.d.ts +288 -0
- package/src/lib/components/tabs.js +788 -0
- package/src/lib/components/tabs.js.map +1 -0
- package/src/lib/components/theme-mode-switcher.d.ts +38 -0
- package/src/lib/components/theme-mode-switcher.js +168 -0
- package/src/lib/components/theme-mode-switcher.js.map +1 -0
- package/src/lib/components/toolbar.d.ts +37 -0
- package/src/lib/components/toolbar.js +117 -0
- package/src/lib/components/toolbar.js.map +1 -0
- package/src/lib/components/typography.d.ts +33 -0
- package/src/lib/components/typography.js +433 -0
- package/src/lib/components/typography.js.map +1 -0
- package/src/lib/components/video-lightbox-controls.d.ts +131 -0
- package/src/lib/components/video-lightbox-controls.js +536 -0
- package/src/lib/components/video-lightbox-controls.js.map +1 -0
- package/src/lib/components/video-lightbox.d.ts +60 -0
- package/src/lib/components/video-lightbox.js +247 -0
- package/src/lib/components/video-lightbox.js.map +1 -0
- package/src/lib/components/video-playback-beacon.d.ts +80 -0
- package/src/lib/components/video-playback-beacon.js +128 -0
- package/src/lib/components/video-playback-beacon.js.map +1 -0
- package/src/lib/components/video-player-frame.d.ts +58 -0
- package/src/lib/components/video-player-frame.js +51 -0
- package/src/lib/components/video-player-frame.js.map +1 -0
- package/src/lib/components/video.d.ts +220 -0
- package/src/lib/components/video.js +874 -0
- package/src/lib/components/video.js.map +1 -0
- package/src/lib/constants/bundle-common.d.ts +17 -0
- package/src/lib/constants/bundle-common.js +18 -0
- package/src/lib/constants/bundle-common.js.map +1 -0
- package/src/lib/constants/field-presets.d.ts +93 -0
- package/src/lib/constants/field-presets.js +248 -0
- package/src/lib/constants/field-presets.js.map +1 -0
- package/src/lib/plugin.d.ts +80 -0
- package/src/lib/plugin.js +599 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/utils/author-html-label.d.ts +73 -0
- package/src/lib/utils/author-html-label.js +89 -0
- package/src/lib/utils/author-html-label.js.map +1 -0
- package/src/lib/utils/drop-cleared-props.d.ts +18 -0
- package/src/lib/utils/drop-cleared-props.js +74 -0
- package/src/lib/utils/drop-cleared-props.js.map +1 -0
- package/src/lib/utils/element-picker.d.ts +99 -0
- package/src/lib/utils/element-picker.js +140 -0
- package/src/lib/utils/element-picker.js.map +1 -0
- package/src/lib/utils/generate-preset-id.d.ts +19 -0
- package/src/lib/utils/generate-preset-id.js +25 -0
- package/src/lib/utils/generate-preset-id.js.map +1 -0
- package/src/lib/utils/link-target-props.d.ts +53 -0
- package/src/lib/utils/link-target-props.js +53 -0
- package/src/lib/utils/link-target-props.js.map +1 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import * as Aglyn from '@aglyn/aglyn';
|
|
18
|
+
import type { SxProps } from '@mui/material/styles';
|
|
19
|
+
import { type ReactNode } from 'react';
|
|
20
|
+
export declare const TABS_ID: Aglyn.ComponentId;
|
|
21
|
+
export declare const TAB_PANEL_ID: Aglyn.ComponentId;
|
|
22
|
+
/**
|
|
23
|
+
* How many tabs in a strip can carry a screen link (AGL-1312). The strip is
|
|
24
|
+
* authored as a free-form label list, so the links have to be flat props —
|
|
25
|
+
* one per position — and a flat prop needs a name that exists up front.
|
|
26
|
+
*
|
|
27
|
+
* Eight is well past any usable navigation row (the marketing content-tabs
|
|
28
|
+
* row is three) and costs nothing at render: the attributes panel only shows
|
|
29
|
+
* a link picker for a tab that actually exists, so a two-tab strip shows two.
|
|
30
|
+
*/
|
|
31
|
+
export declare const TAB_LINK_SLOTS = 8;
|
|
32
|
+
/** Prop name carrying the link of the 1-based `position`-th tab. */
|
|
33
|
+
export declare function tabLinkProp(position: number): string;
|
|
34
|
+
/**
|
|
35
|
+
* The per-tab screen links, `tabLink1`…`tabLink8`. Declared as a mapped type
|
|
36
|
+
* rather than an index signature: an index signature on the props interface
|
|
37
|
+
* would force `sx`, `children` and the rest to conform to it.
|
|
38
|
+
*/
|
|
39
|
+
export type TabLinkProps = Partial<Record<'tabLink1' | 'tabLink2' | 'tabLink3' | 'tabLink4' | 'tabLink5' | 'tabLink6' | 'tabLink7' | 'tabLink8', string>>;
|
|
40
|
+
export interface TabsElementProps extends TabLinkProps {
|
|
41
|
+
/** Tab labels, one per line (commas also accepted). */
|
|
42
|
+
labels?: string;
|
|
43
|
+
/**
|
|
44
|
+
* The LABEL of the tab the strip opens on (AGL-3164). Unset opens the
|
|
45
|
+
* first tab, which is what every Tabs already in the wild does.
|
|
46
|
+
*
|
|
47
|
+
* A label rather than a position, because a position is a silent lie the
|
|
48
|
+
* moment the list is edited: it keeps pointing at "the second tab" after
|
|
49
|
+
* the author reorders or renames, and nothing on screen says the wrong
|
|
50
|
+
* panel is now the one that opens. A label that no longer exists simply
|
|
51
|
+
* does not match, and the strip falls back to the first tab.
|
|
52
|
+
*
|
|
53
|
+
* See {@link openingTabIndex} for the whole rule, and `deferLazyPanelNodes`
|
|
54
|
+
* in tenant-runtime for the server side of it — the two must agree or the
|
|
55
|
+
* page ships the wrong panel's markup.
|
|
56
|
+
*/
|
|
57
|
+
opensOn?: string;
|
|
58
|
+
/** Accessible name of the strip; also names the nav landmark in link mode. */
|
|
59
|
+
ariaLabel?: string;
|
|
60
|
+
orientation?: 'horizontal' | 'vertical';
|
|
61
|
+
variant?: 'standard' | 'scrollable' | 'fullWidth';
|
|
62
|
+
/** Centres a standard strip; MUI ignores it when scrollable. */
|
|
63
|
+
centered?: boolean;
|
|
64
|
+
textColor?: 'primary' | 'secondary' | 'inherit';
|
|
65
|
+
indicatorColor?: 'primary' | 'secondary';
|
|
66
|
+
/**
|
|
67
|
+
* Render every panel into the SSR output up front instead of building each
|
|
68
|
+
* panel the first time its tab is opened (AGL-1283 option 3).
|
|
69
|
+
*
|
|
70
|
+
* Mount-on-first-selection is the DEFAULT: `/pricing` shipped eight copies
|
|
71
|
+
* of a 50-row table so desktop visitors could see none of them, and any
|
|
72
|
+
* large tab set pays the same tax silently. The trade is that an unopened
|
|
73
|
+
* panel's content is then not in the page source — not indexable, not
|
|
74
|
+
* findable — so this switch exists for the panels where that matters:
|
|
75
|
+
* content that appears nowhere else on the page and must reach crawlers.
|
|
76
|
+
*/
|
|
77
|
+
ssrPanels?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Legacy opt-in from when eager panels were the default (AGL-1283).
|
|
80
|
+
* Lazy mounting is now the default, so this is accepted from existing
|
|
81
|
+
* documents but no longer consulted — `ssrPanels` is the one switch.
|
|
82
|
+
* Still destructured so an authored value never leaks onto the DOM.
|
|
83
|
+
*/
|
|
84
|
+
lazyPanels?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Authored node styles, handed over by the renderer rather than typed into
|
|
87
|
+
* an attribute — the merge below reads it, so it belongs on the public
|
|
88
|
+
* interface. Leaving it undeclared (AGL-1284 added the reads, not the
|
|
89
|
+
* declaration) meant no typed caller could pass one, including the specs
|
|
90
|
+
* that exist to prove an authored `sx` survives (AGL-1323).
|
|
91
|
+
*/
|
|
92
|
+
sx?: SxProps;
|
|
93
|
+
children?: ReactNode;
|
|
94
|
+
}
|
|
95
|
+
export interface TabPanelElementProps {
|
|
96
|
+
/** Which tab reveals this panel; must match one of the Tabs labels. */
|
|
97
|
+
label?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Set by the server when this panel's children were withheld from the page
|
|
100
|
+
* payload (AGL-1285, `deferLazyPanelNodes`) — never authored, and there is
|
|
101
|
+
* deliberately no attribute for it.
|
|
102
|
+
*
|
|
103
|
+
* It must be destructured off the prop bag either way: everything else on
|
|
104
|
+
* this element is spread straight onto a `Box`, so leaving it in produced a
|
|
105
|
+
* React "does not recognize the prop" warning for every deferred panel.
|
|
106
|
+
*
|
|
107
|
+
* It also drives the loading state. A withheld panel that the reader has
|
|
108
|
+
* just opened has no children yet and is indistinguishable from a panel that
|
|
109
|
+
* is genuinely empty, and the fetch behind it is a full server compose —
|
|
110
|
+
* 3.8s cold when measured. This flag is what lets the panel say so.
|
|
111
|
+
*
|
|
112
|
+
* It clears itself: the patch from `/api/screen/nodes` carries the ORIGINAL
|
|
113
|
+
* panel nodes, which never had the marker, so the moment the real children
|
|
114
|
+
* arrive this is gone and the placeholder with it (AGL-1287).
|
|
115
|
+
*/
|
|
116
|
+
aglynDeferred?: boolean;
|
|
117
|
+
/** Authored node styles, merged over the panel's own — see Tabs' `sx`. */
|
|
118
|
+
sx?: SxProps;
|
|
119
|
+
children?: ReactNode;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Splits the authored label list. Newline-separated is the documented
|
|
123
|
+
* form; commas are accepted because a one-line "A, B, C" is what people
|
|
124
|
+
* type first.
|
|
125
|
+
*/
|
|
126
|
+
export declare function parseLabels(value: unknown): string[];
|
|
127
|
+
/** Stable DOM id fragment for the tab ⇄ panel aria wiring. */
|
|
128
|
+
export declare function labelSlug(label: string): string;
|
|
129
|
+
/** Case/whitespace-insensitive: authors don't retype labels exactly. */
|
|
130
|
+
export declare function labelsMatch(a: unknown, b: unknown): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Which tab the strip opens on, by index into the parsed label list.
|
|
133
|
+
*
|
|
134
|
+
* Two rules, in order:
|
|
135
|
+
*
|
|
136
|
+
* 1. the tab the author NAMED in `opensOn` (AGL-3164), matched by label with
|
|
137
|
+
* the same case/whitespace tolerance panels are matched with;
|
|
138
|
+
* 2. otherwise the landing tab — the first one WITHOUT a screen link, which
|
|
139
|
+
* is how a navigation row says "this is the page you are on" (AGL-1312),
|
|
140
|
+
* and which is tab 0 on a strip with no links at all, i.e. exactly what
|
|
141
|
+
* this element did before the attribute existed.
|
|
142
|
+
*
|
|
143
|
+
* The named tab is refused when it carries a screen link: a linked tab
|
|
144
|
+
* navigates instead of revealing a panel (AGL-1312), so it is not a tab the
|
|
145
|
+
* strip can rest on, and opening on it would show the indicator over a panel
|
|
146
|
+
* nobody can see. It falls back rather than rendering nothing.
|
|
147
|
+
*
|
|
148
|
+
* Never returns -1. `landing` is -1 when EVERY tab navigates — the strip
|
|
149
|
+
* shows no indicator there, but callers still read a label with this index.
|
|
150
|
+
*/
|
|
151
|
+
export declare function openingTabIndex(labels: readonly string[], opensOn?: unknown, linkIds?: readonly (string | undefined)[]): number;
|
|
152
|
+
interface TabsContextValue {
|
|
153
|
+
activeLabel: string;
|
|
154
|
+
/** True on the besigner canvas, where every panel is shown at once. */
|
|
155
|
+
showAll: boolean;
|
|
156
|
+
/** Panels render nothing until first selected (AGL-1283). */
|
|
157
|
+
lazyPanels: boolean;
|
|
158
|
+
/** Labels opened at least once — a lazily mounted panel stays mounted. */
|
|
159
|
+
opened: ReadonlySet<string>;
|
|
160
|
+
/**
|
|
161
|
+
* True when at least one tab carries a screen link (AGL-1312), which makes
|
|
162
|
+
* the whole row navigation rather than a tab list — see the a11y note on
|
|
163
|
+
* `TabsElement`. Panels drop `role="tabpanel"` in that mode: a tabpanel
|
|
164
|
+
* with no tablist to belong to is orphaned ARIA.
|
|
165
|
+
*/
|
|
166
|
+
navMode: boolean;
|
|
167
|
+
}
|
|
168
|
+
export declare const TabsContext: import("react").Context<TabsContextValue>;
|
|
169
|
+
/**
|
|
170
|
+
* Tabs (https://mui.com/material-ui/react-tabs/).
|
|
171
|
+
*
|
|
172
|
+
* The strip is authored on the container as a label list, and each Tab
|
|
173
|
+
* Panel child names the label it belongs to. It does **not** slice its
|
|
174
|
+
* React children by index: the node renderer hands every component a
|
|
175
|
+
* single `Branch` fragment rather than one element per child node
|
|
176
|
+
* (`libs/aglyn-node-renderer`), so an index-based split would silently
|
|
177
|
+
* put all the content behind the first tab. Matching by label also
|
|
178
|
+
* survives reordering panels in the hierarchy.
|
|
179
|
+
*
|
|
180
|
+
* The strip renders from the author's own list, so it is complete in the
|
|
181
|
+
* SSR output — no registration pass, no empty-then-filled flash, and it
|
|
182
|
+
* still reads as a tab list with JavaScript disabled.
|
|
183
|
+
*
|
|
184
|
+
* ## Link mode (AGL-1312)
|
|
185
|
+
*
|
|
186
|
+
* Any tab may carry a screen link (`tabLink1`…`tabLink8`, by position). A
|
|
187
|
+
* tab that has one renders as a real anchor — navigable, crawlable,
|
|
188
|
+
* middle-clickable — because the row it exists for (Blog | Changelog |
|
|
189
|
+
* Newsroom) is navigation ACROSS screens, which a panel switcher can only
|
|
190
|
+
* fake with empty panels or a hand-styled row of buttons. The anchor is an
|
|
191
|
+
* `AppLink`, never a bare `href`: a raw href full-reloads the SPA.
|
|
192
|
+
*
|
|
193
|
+
* A tab WITHOUT a link keeps today's behavior exactly, and mixed rows work
|
|
194
|
+
* — the marketing pattern IS a mixed row, since the tab for the page you
|
|
195
|
+
* are already on must not link to itself. That unlinked tab is also how the
|
|
196
|
+
* author says which page this copy of the row is on: the strip lands on it,
|
|
197
|
+
* so the same three-tab row placed on three screens shows the indicator in
|
|
198
|
+
* the right place on each, with no "selected tab" attribute to keep in sync
|
|
199
|
+
* — `opensOn` below is for panel rows and gives way to this one.
|
|
200
|
+
*
|
|
201
|
+
* ## Which tab opens (AGL-3164)
|
|
202
|
+
*
|
|
203
|
+
* `opensOn` names it, by LABEL. Unset opens the first tab, which is what
|
|
204
|
+
* every Tabs authored before the attribute existed does; a label that no
|
|
205
|
+
* longer matches opens the first tab too, rather than nothing. The rule
|
|
206
|
+
* lives in {@link openingTabIndex} and is mirrored server-side by
|
|
207
|
+
* `deferLazyPanelNodes` (tenant-runtime), which decides which panel's nodes
|
|
208
|
+
* reach the page at all — so the tab that opens is the one that was
|
|
209
|
+
* rendered, and the page does not paint one panel and swap to another.
|
|
210
|
+
*
|
|
211
|
+
* **Accessibility.** The row is a `tablist` only while NOTHING in it
|
|
212
|
+
* navigates. As soon as one tab carries a link the whole strip is marked up
|
|
213
|
+
* as navigation: a `nav` landmark, no `role="tab"`, no `aria-selected`, and
|
|
214
|
+
* no roving tab stop (every link is its own tab stop, as in any nav). The
|
|
215
|
+
* alternative — an `<a href>` wearing `role="tab"` — tells assistive tech
|
|
216
|
+
* the activation will reveal a panel when it actually loads a page, and a
|
|
217
|
+
* tablist whose children are not tabs is invalid either way. The tab for
|
|
218
|
+
* the current screen is marked `aria-current="page"`; tabs that still
|
|
219
|
+
* switch panels stay buttons and keep their `aria-controls`, which is an
|
|
220
|
+
* accurate disclosure relationship on its own. The half-applied version of
|
|
221
|
+
* this — links inside a tablist, or panels still claiming `role="tabpanel"`
|
|
222
|
+
* with no tablist above them — is what this deliberately avoids.
|
|
223
|
+
*/
|
|
224
|
+
declare const TabsElement: import("react").ForwardRefExoticComponent<TabsElementProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
225
|
+
/**
|
|
226
|
+
* One tab's content. Outside a Tabs container it renders plainly rather
|
|
227
|
+
* than disappearing — a panel dragged out of its tabs would otherwise
|
|
228
|
+
* vanish from the canvas with no explanation.
|
|
229
|
+
*/
|
|
230
|
+
export declare const TabPanelElement: import("react").ForwardRefExoticComponent<TabPanelElementProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
231
|
+
/**
|
|
232
|
+
* Shows a per-tab link picker only once the label list has that many tabs,
|
|
233
|
+
* so a three-tab strip offers three pickers rather than eight.
|
|
234
|
+
*
|
|
235
|
+
* Expressed as a serialisable `pattern` rather than an `is` predicate:
|
|
236
|
+
* conditions travel with the component schema, and a function in there is a
|
|
237
|
+
* live grenade the day a schema is cloned or sent across a boundary. An
|
|
238
|
+
* "item" is a run without a separator that holds something visible, and a
|
|
239
|
+
* separator run swallows blank lines, so it counts exactly what
|
|
240
|
+
* `parseLabels` counts.
|
|
241
|
+
*/
|
|
242
|
+
export declare function atLeastLabels(count: number): Record<string, unknown>;
|
|
243
|
+
/**
|
|
244
|
+
* The "Opens on" field's `resolveProps`: its answers are the element's OWN
|
|
245
|
+
* tab labels, read from the sibling `labels` field as they are typed
|
|
246
|
+
* (AGL-3164).
|
|
247
|
+
*
|
|
248
|
+
* A picker rather than a typed index or a typed label. An index goes on
|
|
249
|
+
* meaning "the second tab" after a reorder, with nothing on screen to say
|
|
250
|
+
* the wrong panel now opens; a typed label breaks on a rename and on every
|
|
251
|
+
* typo in between. Choosing from the list the author has just written is the
|
|
252
|
+
* only form of this control someone who does not write code can get right,
|
|
253
|
+
* which is the whole reason it exists instead of the tabs being reordered by
|
|
254
|
+
* hand to obtain a behavior.
|
|
255
|
+
*
|
|
256
|
+
* The answers follow the label list as it is edited because the field's
|
|
257
|
+
* `condition` names `labels`: data-driven-forms subscribes a conditional
|
|
258
|
+
* field to its condition's trigger fields, and that subscription is what
|
|
259
|
+
* re-runs this.
|
|
260
|
+
*
|
|
261
|
+
* A stored label the list no longer holds is offered back as its own option,
|
|
262
|
+
* named as gone. The element itself already falls back to the first tab, so
|
|
263
|
+
* the page is never broken by one; but a picker that rendered BLANK would
|
|
264
|
+
* read as "not set", and the author would never learn that the choice they
|
|
265
|
+
* made has stopped being honoured — the same reason a Screen picker names a
|
|
266
|
+
* target the host no longer has (AGL-1893).
|
|
267
|
+
*/
|
|
268
|
+
export declare function opensOnFieldProps(_props: unknown, field: {
|
|
269
|
+
input?: {
|
|
270
|
+
value?: unknown;
|
|
271
|
+
};
|
|
272
|
+
}, formOptions?: {
|
|
273
|
+
getFieldState?: (name: string) => {
|
|
274
|
+
value?: unknown;
|
|
275
|
+
} | undefined;
|
|
276
|
+
getState?: () => {
|
|
277
|
+
values?: Record<string, unknown>;
|
|
278
|
+
} | undefined;
|
|
279
|
+
}): {
|
|
280
|
+
options: {
|
|
281
|
+
value: string;
|
|
282
|
+
label: string;
|
|
283
|
+
}[];
|
|
284
|
+
};
|
|
285
|
+
export declare const tabsSchema: Aglyn.ComponentSchema<TabsElementProps>;
|
|
286
|
+
export declare const tabPanelSchema: Aglyn.ComponentSchema<TabPanelElementProps>;
|
|
287
|
+
export declare const tabsPresets: Aglyn.PresetSchema[];
|
|
288
|
+
export default TabsElement;
|