@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.
Files changed (177) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +22 -0
  3. package/package.json +47 -0
  4. package/src/index.d.ts +21 -0
  5. package/src/index.js +22 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/components/accordion.d.ts +96 -0
  8. package/src/lib/components/accordion.js +392 -0
  9. package/src/lib/components/accordion.js.map +1 -0
  10. package/src/lib/components/app-bar.d.ts +32 -0
  11. package/src/lib/components/app-bar.js +86 -0
  12. package/src/lib/components/app-bar.js.map +1 -0
  13. package/src/lib/components/blocks.d.ts +46 -0
  14. package/src/lib/components/blocks.js +1007 -0
  15. package/src/lib/components/blocks.js.map +1 -0
  16. package/src/lib/components/box.d.ts +47 -0
  17. package/src/lib/components/box.js +125 -0
  18. package/src/lib/components/box.js.map +1 -0
  19. package/src/lib/components/breadcrumbs.d.ts +44 -0
  20. package/src/lib/components/breadcrumbs.js +172 -0
  21. package/src/lib/components/breadcrumbs.js.map +1 -0
  22. package/src/lib/components/button.d.ts +89 -0
  23. package/src/lib/components/button.js +272 -0
  24. package/src/lib/components/button.js.map +1 -0
  25. package/src/lib/components/card.d.ts +61 -0
  26. package/src/lib/components/card.js +336 -0
  27. package/src/lib/components/card.js.map +1 -0
  28. package/src/lib/components/collection.d.ts +514 -0
  29. package/src/lib/components/collection.js +2999 -0
  30. package/src/lib/components/collection.js.map +1 -0
  31. package/src/lib/components/container.d.ts +42 -0
  32. package/src/lib/components/container.js +169 -0
  33. package/src/lib/components/container.js.map +1 -0
  34. package/src/lib/components/custom-html.d.ts +78 -0
  35. package/src/lib/components/custom-html.js +219 -0
  36. package/src/lib/components/custom-html.js.map +1 -0
  37. package/src/lib/components/data-table.d.ts +57 -0
  38. package/src/lib/components/data-table.js +216 -0
  39. package/src/lib/components/data-table.js.map +1 -0
  40. package/src/lib/components/document-root.d.ts +77 -0
  41. package/src/lib/components/document-root.js +118 -0
  42. package/src/lib/components/document-root.js.map +1 -0
  43. package/src/lib/components/drawer.d.ts +93 -0
  44. package/src/lib/components/drawer.js +566 -0
  45. package/src/lib/components/drawer.js.map +1 -0
  46. package/src/lib/components/function-controls.d.ts +66 -0
  47. package/src/lib/components/function-controls.js +207 -0
  48. package/src/lib/components/function-controls.js.map +1 -0
  49. package/src/lib/components/function-scope.d.ts +110 -0
  50. package/src/lib/components/function-scope.js +478 -0
  51. package/src/lib/components/function-scope.js.map +1 -0
  52. package/src/lib/components/function-widget.d.ts +75 -0
  53. package/src/lib/components/function-widget.js +307 -0
  54. package/src/lib/components/function-widget.js.map +1 -0
  55. package/src/lib/components/grid.d.ts +91 -0
  56. package/src/lib/components/grid.js +322 -0
  57. package/src/lib/components/grid.js.map +1 -0
  58. package/src/lib/components/icon.d.ts +54 -0
  59. package/src/lib/components/icon.js +163 -0
  60. package/src/lib/components/icon.js.map +1 -0
  61. package/src/lib/components/image-list.d.ts +58 -0
  62. package/src/lib/components/image-list.js +336 -0
  63. package/src/lib/components/image-list.js.map +1 -0
  64. package/src/lib/components/image.d.ts +154 -0
  65. package/src/lib/components/image.js +451 -0
  66. package/src/lib/components/image.js.map +1 -0
  67. package/src/lib/components/inline-text.d.ts +74 -0
  68. package/src/lib/components/inline-text.js +407 -0
  69. package/src/lib/components/inline-text.js.map +1 -0
  70. package/src/lib/components/language-switcher.d.ts +35 -0
  71. package/src/lib/components/language-switcher.js +179 -0
  72. package/src/lib/components/language-switcher.js.map +1 -0
  73. package/src/lib/components/layout-slot.d.ts +68 -0
  74. package/src/lib/components/layout-slot.js +192 -0
  75. package/src/lib/components/layout-slot.js.map +1 -0
  76. package/src/lib/components/link-box-accessible-name.d.ts +79 -0
  77. package/src/lib/components/link-box-accessible-name.js +158 -0
  78. package/src/lib/components/link-box-accessible-name.js.map +1 -0
  79. package/src/lib/components/link-box.d.ts +66 -0
  80. package/src/lib/components/link-box.js +212 -0
  81. package/src/lib/components/link-box.js.map +1 -0
  82. package/src/lib/components/list-item-text.d.ts +22 -0
  83. package/src/lib/components/list-item-text.js +86 -0
  84. package/src/lib/components/list-item-text.js.map +1 -0
  85. package/src/lib/components/list-item.d.ts +32 -0
  86. package/src/lib/components/list-item.js +127 -0
  87. package/src/lib/components/list-item.js.map +1 -0
  88. package/src/lib/components/list.d.ts +34 -0
  89. package/src/lib/components/list.js +108 -0
  90. package/src/lib/components/list.js.map +1 -0
  91. package/src/lib/components/markdown.d.ts +129 -0
  92. package/src/lib/components/markdown.js +853 -0
  93. package/src/lib/components/markdown.js.map +1 -0
  94. package/src/lib/components/nav-menu.d.ts +68 -0
  95. package/src/lib/components/nav-menu.js +683 -0
  96. package/src/lib/components/nav-menu.js.map +1 -0
  97. package/src/lib/components/pagination.d.ts +59 -0
  98. package/src/lib/components/pagination.js +243 -0
  99. package/src/lib/components/pagination.js.map +1 -0
  100. package/src/lib/components/paper.d.ts +47 -0
  101. package/src/lib/components/paper.js +202 -0
  102. package/src/lib/components/paper.js.map +1 -0
  103. package/src/lib/components/plugin-frame.d.ts +64 -0
  104. package/src/lib/components/plugin-frame.js +335 -0
  105. package/src/lib/components/plugin-frame.js.map +1 -0
  106. package/src/lib/components/plugin.d.ts +95 -0
  107. package/src/lib/components/plugin.js +304 -0
  108. package/src/lib/components/plugin.js.map +1 -0
  109. package/src/lib/components/product.d.ts +40 -0
  110. package/src/lib/components/product.js +287 -0
  111. package/src/lib/components/product.js.map +1 -0
  112. package/src/lib/components/reusable-instance.d.ts +57 -0
  113. package/src/lib/components/reusable-instance.js +126 -0
  114. package/src/lib/components/reusable-instance.js.map +1 -0
  115. package/src/lib/components/screen-link.d.ts +85 -0
  116. package/src/lib/components/screen-link.js +324 -0
  117. package/src/lib/components/screen-link.js.map +1 -0
  118. package/src/lib/components/search-box.d.ts +41 -0
  119. package/src/lib/components/search-box.js +125 -0
  120. package/src/lib/components/search-box.js.map +1 -0
  121. package/src/lib/components/section.d.ts +56 -0
  122. package/src/lib/components/section.js +132 -0
  123. package/src/lib/components/section.js.map +1 -0
  124. package/src/lib/components/stack.d.ts +55 -0
  125. package/src/lib/components/stack.js +309 -0
  126. package/src/lib/components/stack.js.map +1 -0
  127. package/src/lib/components/tabs.d.ts +288 -0
  128. package/src/lib/components/tabs.js +788 -0
  129. package/src/lib/components/tabs.js.map +1 -0
  130. package/src/lib/components/theme-mode-switcher.d.ts +38 -0
  131. package/src/lib/components/theme-mode-switcher.js +168 -0
  132. package/src/lib/components/theme-mode-switcher.js.map +1 -0
  133. package/src/lib/components/toolbar.d.ts +37 -0
  134. package/src/lib/components/toolbar.js +117 -0
  135. package/src/lib/components/toolbar.js.map +1 -0
  136. package/src/lib/components/typography.d.ts +33 -0
  137. package/src/lib/components/typography.js +433 -0
  138. package/src/lib/components/typography.js.map +1 -0
  139. package/src/lib/components/video-lightbox-controls.d.ts +131 -0
  140. package/src/lib/components/video-lightbox-controls.js +536 -0
  141. package/src/lib/components/video-lightbox-controls.js.map +1 -0
  142. package/src/lib/components/video-lightbox.d.ts +60 -0
  143. package/src/lib/components/video-lightbox.js +247 -0
  144. package/src/lib/components/video-lightbox.js.map +1 -0
  145. package/src/lib/components/video-playback-beacon.d.ts +80 -0
  146. package/src/lib/components/video-playback-beacon.js +128 -0
  147. package/src/lib/components/video-playback-beacon.js.map +1 -0
  148. package/src/lib/components/video-player-frame.d.ts +58 -0
  149. package/src/lib/components/video-player-frame.js +51 -0
  150. package/src/lib/components/video-player-frame.js.map +1 -0
  151. package/src/lib/components/video.d.ts +220 -0
  152. package/src/lib/components/video.js +874 -0
  153. package/src/lib/components/video.js.map +1 -0
  154. package/src/lib/constants/bundle-common.d.ts +17 -0
  155. package/src/lib/constants/bundle-common.js +18 -0
  156. package/src/lib/constants/bundle-common.js.map +1 -0
  157. package/src/lib/constants/field-presets.d.ts +93 -0
  158. package/src/lib/constants/field-presets.js +248 -0
  159. package/src/lib/constants/field-presets.js.map +1 -0
  160. package/src/lib/plugin.d.ts +80 -0
  161. package/src/lib/plugin.js +599 -0
  162. package/src/lib/plugin.js.map +1 -0
  163. package/src/lib/utils/author-html-label.d.ts +73 -0
  164. package/src/lib/utils/author-html-label.js +89 -0
  165. package/src/lib/utils/author-html-label.js.map +1 -0
  166. package/src/lib/utils/drop-cleared-props.d.ts +18 -0
  167. package/src/lib/utils/drop-cleared-props.js +74 -0
  168. package/src/lib/utils/drop-cleared-props.js.map +1 -0
  169. package/src/lib/utils/element-picker.d.ts +99 -0
  170. package/src/lib/utils/element-picker.js +140 -0
  171. package/src/lib/utils/element-picker.js.map +1 -0
  172. package/src/lib/utils/generate-preset-id.d.ts +19 -0
  173. package/src/lib/utils/generate-preset-id.js +25 -0
  174. package/src/lib/utils/generate-preset-id.js.map +1 -0
  175. package/src/lib/utils/link-target-props.d.ts +53 -0
  176. package/src/lib/utils/link-target-props.js +53 -0
  177. 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;