@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,514 @@
|
|
|
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 StackProps } from '@mui/material/Stack';
|
|
19
|
+
export declare const ENTRIES_ID: Aglyn.ComponentId;
|
|
20
|
+
export declare const ENTRY_BODY_ID: Aglyn.ComponentId;
|
|
21
|
+
export declare const RELATED_ID: Aglyn.ComponentId;
|
|
22
|
+
export declare const SHARE_ID: Aglyn.ComponentId;
|
|
23
|
+
export declare const ENTRY_META_ID: Aglyn.ComponentId;
|
|
24
|
+
export declare const ENTRY_AUTHOR_ID: Aglyn.ComponentId;
|
|
25
|
+
export declare const CATEGORIES_ID: Aglyn.ComponentId;
|
|
26
|
+
export declare const SEARCH_ID: Aglyn.ComponentId;
|
|
27
|
+
export declare const AUTHOR_PROFILE_ID: Aglyn.ComponentId;
|
|
28
|
+
export interface CollectionEntriesProps extends StackProps {
|
|
29
|
+
/**
|
|
30
|
+
* Collection to repeat over (compose-time, AGL-551). Blank = the
|
|
31
|
+
* collection routed by the current URL on list-template screens.
|
|
32
|
+
*/
|
|
33
|
+
collectionSlug?: string;
|
|
34
|
+
/** Maximum entries rendered (compose-time; blank = all, capped at 100). */
|
|
35
|
+
entriesLimit?: number | string;
|
|
36
|
+
/**
|
|
37
|
+
* Only entries in this category repeat (compose-time, AGL-582).
|
|
38
|
+
* Matches the collection's category by stable id or display name.
|
|
39
|
+
*/
|
|
40
|
+
filterCategory?: string;
|
|
41
|
+
/** Only entries carrying this tag repeat (compose-time, AGL-582). */
|
|
42
|
+
filterTag?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Entries per page (compose-time, AGL-620). When set, the block renders one
|
|
45
|
+
* page window instead of the top `entriesLimit`; the built-in collection
|
|
46
|
+
* list uses this with the `page` from `/{collection}/page/{n}`.
|
|
47
|
+
*/
|
|
48
|
+
perPage?: number | string;
|
|
49
|
+
/** 1-based page for `perPage` (compose-time, AGL-620). */
|
|
50
|
+
page?: number | string;
|
|
51
|
+
/**
|
|
52
|
+
* Render this block only on page 1 of the routed listing (compose-time,
|
|
53
|
+
* AGL-1871). For a LEAD card — a block with no `perPage`, showing the top
|
|
54
|
+
* of the set — every `/{collection}/page/{n}` past the first otherwise
|
|
55
|
+
* repeats the identical entry above a page of different ones.
|
|
56
|
+
*
|
|
57
|
+
* Opt-in and default off: a block that legitimately belongs on every page
|
|
58
|
+
* of a listing (a "popular posts" rail) has exactly the same shape.
|
|
59
|
+
*/
|
|
60
|
+
firstPageOnly?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Show a search box that filters the RENDERED entries by title/excerpt as
|
|
63
|
+
* the reader types (AGL-1516, Figma 494:1220). Opt-in and default off, so
|
|
64
|
+
* every existing instance renders exactly as before.
|
|
65
|
+
*
|
|
66
|
+
* Client-evaluated over the entries this block already holds — the page is
|
|
67
|
+
* ISR-cached, so a keystroke never costs a Firestore read. That set is
|
|
68
|
+
* whatever the expansion left the block holding, which paging, an
|
|
69
|
+
* `entriesLimit` or the 100-entry cap can each cut down. A truncated block
|
|
70
|
+
* says so under its results either way — on a miss and on a hit
|
|
71
|
+
* (AGL-1516, AGL-2569) — rather than pretending global search.
|
|
72
|
+
*/
|
|
73
|
+
search?: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* What the search box DOES with a query (AGL-1525, Figma 496:1218).
|
|
76
|
+
*
|
|
77
|
+
* - `filter` (default, and the reading of an absent value) — hides the
|
|
78
|
+
* non-matching cards in place. What AGL-1516 shipped.
|
|
79
|
+
* - `suggest` — the card grid stays exactly as it was and a floating panel
|
|
80
|
+
* of matching entries opens under the field, ending in a link to the
|
|
81
|
+
* site-wide results page. The frame's toolbar behaviour: a reader
|
|
82
|
+
* skimming the list is not made to lose it to a typo.
|
|
83
|
+
*/
|
|
84
|
+
searchMode?: CollectionSearchMode;
|
|
85
|
+
/** Hint text inside the search box (blank = "Search posts…"). */
|
|
86
|
+
searchPlaceholder?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Server-stamped matchable text per rendered entry
|
|
89
|
+
* (`expandCollectionEntries`, AGL-1516); never set by hand.
|
|
90
|
+
*/
|
|
91
|
+
searchIndex?: Aglyn.CollectionEntrySearchItem[];
|
|
92
|
+
/**
|
|
93
|
+
* How many entries `searchIndex` was drawn from — server-stamped by
|
|
94
|
+
* `expandCollectionEntries` alongside it (AGL-1516), never set by hand.
|
|
95
|
+
* `searchIndex.length < searchTotal` is the only honest test of whether
|
|
96
|
+
* this block holds the whole set; `perPage` is not, because
|
|
97
|
+
* `entriesLimit` and the 100-entry cap truncate too.
|
|
98
|
+
*/
|
|
99
|
+
searchTotal?: number;
|
|
100
|
+
/**
|
|
101
|
+
* Whether the read behind `searchTotal` reached its own bound — server-
|
|
102
|
+
* stamped beside it (AGL-1516), never set by hand.
|
|
103
|
+
*
|
|
104
|
+
* `searchTotal` is a count of what the server SAW, and the collection read
|
|
105
|
+
* is limited. Without this flag a block holding 100 of 400 posts satisfies
|
|
106
|
+
* `searchIndex.length === searchTotal` and renders the one empty state that
|
|
107
|
+
* claims to have looked everywhere.
|
|
108
|
+
*/
|
|
109
|
+
searchCapped?: boolean;
|
|
110
|
+
}
|
|
111
|
+
/** The two things the toolbar search box can do (AGL-1516/AGL-1525). */
|
|
112
|
+
export type CollectionSearchMode = 'filter' | 'suggest';
|
|
113
|
+
/**
|
|
114
|
+
* Author-facing choices for {@link CollectionEntriesProps.searchMode}.
|
|
115
|
+
*
|
|
116
|
+
* Both values are truthy on purpose (AGL-1453): `''` cannot survive a save,
|
|
117
|
+
* so an author who tried the other mode would have no route back. "Filter"
|
|
118
|
+
* carries the absent-value reading, which is what every block published
|
|
119
|
+
* before AGL-1525 has.
|
|
120
|
+
*/
|
|
121
|
+
export declare const COLLECTION_SEARCH_MODE_OPTIONS: ReadonlyArray<{
|
|
122
|
+
value: CollectionSearchMode;
|
|
123
|
+
label: string;
|
|
124
|
+
}>;
|
|
125
|
+
/**
|
|
126
|
+
* Repeats its children once per published entry of a content collection
|
|
127
|
+
* (AGL-551) — the collections sibling of the dataset repeatable. The tenant
|
|
128
|
+
* expands it at compose time with `{{entry.*}}` tokens; in the besigner the
|
|
129
|
+
* template renders once with literal tokens, matching the repeatable UX.
|
|
130
|
+
*
|
|
131
|
+
* Search (AGL-1516): with `search` on, a toolbar search box filters the
|
|
132
|
+
* rendered entry clones client-side against the server-stamped
|
|
133
|
+
* `searchIndex` — fuzzy, via the same Fuse the icon picker uses. The clones
|
|
134
|
+
* arrive as `children` in stamp order, one group of template roots per
|
|
135
|
+
* entry, so group N of the children IS entry N of the index. Matches keep
|
|
136
|
+
* the list's own order rather than Fuse's score order: a blog list is
|
|
137
|
+
* chronological, and search narrows it, it does not reshuffle it. In the
|
|
138
|
+
* besigner the field renders as an inert affordance (the template renders
|
|
139
|
+
* once with literal tokens and there is no index to search), matching how
|
|
140
|
+
* Category Pills go inert on editing surfaces.
|
|
141
|
+
*/
|
|
142
|
+
declare const CollectionEntries: import("react").ForwardRefExoticComponent<Omit<CollectionEntriesProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
143
|
+
export declare const collectionEntriesSchema: Aglyn.ComponentSchema<CollectionEntriesProps>;
|
|
144
|
+
export interface CollectionEntryBodyProps {
|
|
145
|
+
/**
|
|
146
|
+
* Markdown-lite source. On entry-template screens `{{entry.body}}`
|
|
147
|
+
* resolves to the rendered entry's body at compose time.
|
|
148
|
+
*/
|
|
149
|
+
markdown?: string;
|
|
150
|
+
/**
|
|
151
|
+
* The pixel pair of each library image this body names, keyed by the target
|
|
152
|
+
* as the body writes it, stamped by the composition from the assets' DAM
|
|
153
|
+
* records (AGL-3149) — never set by hand, and never on the template, where
|
|
154
|
+
* `markdown` is still the `{{entry.body}}` token and names no asset.
|
|
155
|
+
*/
|
|
156
|
+
intrinsicSizes?: Record<string, {
|
|
157
|
+
width: number;
|
|
158
|
+
height: number;
|
|
159
|
+
}>;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Renders a content entry's markdown-lite body as themed MUI elements
|
|
163
|
+
* (AGL-551): headings, paragraphs, lists, and images pick up the site
|
|
164
|
+
* theme's typography instead of the old unthemed article HTML. Parsing is
|
|
165
|
+
* pure, so the full body server-renders (SEO keeps the article text).
|
|
166
|
+
*/
|
|
167
|
+
declare const CollectionEntryBody: import("react").ForwardRefExoticComponent<CollectionEntryBodyProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
168
|
+
export declare const collectionEntryBodySchema: Aglyn.ComponentSchema<CollectionEntryBodyProps>;
|
|
169
|
+
/** How the related posts are laid out (AGL-1457). */
|
|
170
|
+
export type CollectionRelatedLayout = 'list' | 'cards';
|
|
171
|
+
/** One related post as stamped by the compose pipeline (AGL-582). */
|
|
172
|
+
export interface CollectionRelatedProps extends StackProps {
|
|
173
|
+
/** Section heading; empty string hides it. */
|
|
174
|
+
heading?: string;
|
|
175
|
+
/** Compose-time: most related posts listed (default 3). */
|
|
176
|
+
limit?: number | string;
|
|
177
|
+
/**
|
|
178
|
+
* Emit each entry's cover image (AGL-1457). OFF is the default and the
|
|
179
|
+
* shipped behaviour — the block is live on every blog entry, so turning
|
|
180
|
+
* covers on by default would restyle published pages nobody asked about.
|
|
181
|
+
*/
|
|
182
|
+
showCover?: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* `list` (default) is the plain-link list that has always shipped; `cards`
|
|
185
|
+
* is the article frame's grid of cover + category chip + title.
|
|
186
|
+
*/
|
|
187
|
+
layout?: CollectionRelatedLayout;
|
|
188
|
+
/** Columns in the `cards` grid (default 3, the frame's 3-up). */
|
|
189
|
+
columns?: number | string;
|
|
190
|
+
/**
|
|
191
|
+
* Type step the section heading reads at (default `h5`). One of the
|
|
192
|
+
* theme's own rungs, shared with the Typography element — a heading sized
|
|
193
|
+
* by hand in the Styles panel is the pixel-typing the tokens exist to stop.
|
|
194
|
+
*/
|
|
195
|
+
headingVariant?: string;
|
|
196
|
+
/**
|
|
197
|
+
* Type step each card title reads at (default `subtitle1`, what the block
|
|
198
|
+
* has always emitted). The title is the block's own markup, so the Styles
|
|
199
|
+
* panel — which edits the node's root — cannot reach it; this is the only
|
|
200
|
+
* handle on it.
|
|
201
|
+
*/
|
|
202
|
+
titleVariant?: string;
|
|
203
|
+
/** Show each post's published date. On is the shipped behaviour. */
|
|
204
|
+
showDate?: boolean;
|
|
205
|
+
/**
|
|
206
|
+
* How each card's published date reads (AGL-1459) — a COMPOSE-TIME prop
|
|
207
|
+
* like {@link limit}: it is answered in `expandCollectionRelated`, where
|
|
208
|
+
* the timestamp still exists, and never reaches the DOM. Blank, or
|
|
209
|
+
* `default`, is the locale date the block has always emitted.
|
|
210
|
+
*
|
|
211
|
+
* Read here too, but only to date the SAMPLE cards: an editing surface has
|
|
212
|
+
* no routed entry and therefore no server fill, so the picker would
|
|
213
|
+
* otherwise preview nothing.
|
|
214
|
+
*/
|
|
215
|
+
dateFormat?: Aglyn.CollectionEntryDateFormat;
|
|
216
|
+
/** Show each post's category. On is the shipped behaviour. */
|
|
217
|
+
showCategory?: boolean;
|
|
218
|
+
/**
|
|
219
|
+
* Show each post's excerpt. OFF is the default and the shipped behaviour:
|
|
220
|
+
* the excerpt has been stamped onto every related item since AGL-582 and
|
|
221
|
+
* rendered by nothing, so turning it on by default would add a paragraph
|
|
222
|
+
* to every published entry nobody asked about.
|
|
223
|
+
*/
|
|
224
|
+
showExcerpt?: boolean;
|
|
225
|
+
/**
|
|
226
|
+
* Server-stamped related posts (`expandCollectionRelated`); never set by
|
|
227
|
+
* hand — the tenant computes it from the current entry's category/tags.
|
|
228
|
+
*/
|
|
229
|
+
entries?: Aglyn.CollectionRelatedItem[];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Lists other entries of the same collection sharing the current entry's
|
|
233
|
+
* category or a tag (AGL-582). The tenant stamps `entries` at compose time
|
|
234
|
+
* on entry renders; without them the published site renders nothing and an
|
|
235
|
+
* editing surface renders sample cards (AGL-2486).
|
|
236
|
+
*
|
|
237
|
+
* Two layouts (AGL-1457). `list` is the plain-link list that has always
|
|
238
|
+
* shipped and stays the default — the block is live on every blog entry, so
|
|
239
|
+
* a new default would restyle published pages nobody asked about. `cards` is
|
|
240
|
+
* the article frame's grid: cover, category chip, title, at an author-set
|
|
241
|
+
* column count.
|
|
242
|
+
*
|
|
243
|
+
* The block owns its markup, so nothing inside a card is a node the Styles
|
|
244
|
+
* panel can select. Every part it renders therefore needs an attribute, or
|
|
245
|
+
* it is unauthorable by construction — which is what the type steps and the
|
|
246
|
+
* `show*` switches are (AGL-2486).
|
|
247
|
+
*/
|
|
248
|
+
declare const CollectionRelated: import("react").ForwardRefExoticComponent<Omit<CollectionRelatedProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
249
|
+
export declare const collectionRelatedSchema: Aglyn.ComponentSchema<CollectionRelatedProps>;
|
|
250
|
+
export interface CollectionShareProps extends StackProps {
|
|
251
|
+
/** Heading before the buttons; empty string hides it. */
|
|
252
|
+
heading?: string;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Share buttons for the CURRENT page URL (AGL-582): X, LinkedIn, Facebook,
|
|
256
|
+
* and copy-link. Pure client behavior — the URL is read at click time so
|
|
257
|
+
* SSR and besigner renders stay markup-identical; editing surfaces no-op.
|
|
258
|
+
*/
|
|
259
|
+
declare const CollectionShare: import("react").ForwardRefExoticComponent<Omit<CollectionShareProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
260
|
+
export declare const collectionShareSchema: Aglyn.ComponentSchema<CollectionShareProps>;
|
|
261
|
+
export interface CollectionEntryMetaProps extends StackProps {
|
|
262
|
+
/**
|
|
263
|
+
* Published date. Server-filled from the routed entry on entry templates
|
|
264
|
+
* (`expandCollectionEntryMeta`, AGL-1385); set it — or bind
|
|
265
|
+
* `{{entry.date}}` — only to override.
|
|
266
|
+
*/
|
|
267
|
+
date?: string;
|
|
268
|
+
/**
|
|
269
|
+
* How {@link date} reads when the server fills it in (AGL-1459) — a
|
|
270
|
+
* COMPOSE-TIME prop, like Related Posts' `limit`: it is answered where the
|
|
271
|
+
* timestamp still exists (`expandCollectionEntryMeta`) and never reaches the
|
|
272
|
+
* DOM. Blank, or `default`, is the locale date the block has always emitted.
|
|
273
|
+
*/
|
|
274
|
+
dateFormat?: Aglyn.CollectionEntryDateFormat;
|
|
275
|
+
/**
|
|
276
|
+
* Byline (AGL-1459). Server-filled from the entry's own author on entry
|
|
277
|
+
* templates, exactly like {@link date}; set it — or bind `{{entry.author}}`
|
|
278
|
+
* — only to override.
|
|
279
|
+
*/
|
|
280
|
+
author?: string;
|
|
281
|
+
/** Category; server-filled, or bind `{{entry.category}}` to override. */
|
|
282
|
+
category?: string;
|
|
283
|
+
/** Comma-joined tags; server-filled, or bind `{{entry.tags}}`. */
|
|
284
|
+
tags?: string;
|
|
285
|
+
/**
|
|
286
|
+
* Round avatar shown before the byline (AGL-1459) — a media-picker target,
|
|
287
|
+
* so it holds a media reference (AGL-1215) as well as any URL form.
|
|
288
|
+
*
|
|
289
|
+
* A block-level pick, deliberately, and NOT a per-author image: entries
|
|
290
|
+
* carry an author NAME (`authorName`) and no portrait field, so a per-author
|
|
291
|
+
* avatar would need a schema decision on the entry model plus an editor
|
|
292
|
+
* field to fill it. Until then this is the site's brand mark, chosen once on
|
|
293
|
+
* the template — which is what the article frame actually asks for. Left
|
|
294
|
+
* unset it renders nothing at all, never a broken image.
|
|
295
|
+
*/
|
|
296
|
+
avatarImage?: string;
|
|
297
|
+
showDate?: boolean;
|
|
298
|
+
showAuthor?: boolean;
|
|
299
|
+
/**
|
|
300
|
+
* Where the byline's NAME links — the author's page on this site
|
|
301
|
+
* (AGL-2519). Server-filled from the routed entry's author, like the
|
|
302
|
+
* avatar beside it; blank renders the name as plain text.
|
|
303
|
+
*
|
|
304
|
+
* Distinct from the author's own `url`, which the Entry Author card offers
|
|
305
|
+
* as a link row: this is "everything they wrote here", that is "their
|
|
306
|
+
* site", and a byline that conflated them would send a reader off-site from
|
|
307
|
+
* every article.
|
|
308
|
+
*/
|
|
309
|
+
authorPageUrl?: string;
|
|
310
|
+
/** Off leaves the byline as plain text even when the author has a page. */
|
|
311
|
+
linkAuthor?: boolean;
|
|
312
|
+
showCategory?: boolean;
|
|
313
|
+
showTags?: boolean;
|
|
314
|
+
showAvatar?: boolean;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* "{{entry.date}} · {{entry.category}}" meta line plus tag chips
|
|
318
|
+
* (AGL-582). Values arrive through entry tokens on entry renders; on other
|
|
319
|
+
* surfaces unresolved tokens collapse to nothing instead of leaking.
|
|
320
|
+
*
|
|
321
|
+
* On an entry template the tenant now also FILLS the three values from the
|
|
322
|
+
* routed entry when nothing is bound (`expandCollectionEntryMeta`, AGL-1385).
|
|
323
|
+
* Before that, a block dragged from the palette rather than dropped as the
|
|
324
|
+
* preset had no values at all — three "Show" switches gating nothing — and
|
|
325
|
+
* rendered as the empty `<Box>` below, at height 0.
|
|
326
|
+
*/
|
|
327
|
+
declare const CollectionEntryMeta: import("react").ForwardRefExoticComponent<Omit<CollectionEntryMetaProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
328
|
+
export declare const collectionEntryMetaSchema: Aglyn.ComponentSchema<CollectionEntryMetaProps>;
|
|
329
|
+
export interface CollectionEntryAuthorProps extends StackProps {
|
|
330
|
+
/**
|
|
331
|
+
* The byline. Server-filled from the routed entry's author record on entry
|
|
332
|
+
* templates (`expandCollectionEntryAuthor`), exactly like Entry Meta's
|
|
333
|
+
* fields; set it — or bind `{{entry.author}}` — only to override.
|
|
334
|
+
*/
|
|
335
|
+
name?: string;
|
|
336
|
+
/**
|
|
337
|
+
* The author's blurb, from their record's `bio`; bind
|
|
338
|
+
* `{{entry.authorBio}}` to override.
|
|
339
|
+
*/
|
|
340
|
+
bio?: string;
|
|
341
|
+
/**
|
|
342
|
+
* Portrait or logo — a media reference (AGL-1215) or any URL. Server-filled
|
|
343
|
+
* from the author record, so the face changes with the byline instead of
|
|
344
|
+
* being picked once on the template the way Entry Meta's avatar is.
|
|
345
|
+
*/
|
|
346
|
+
image?: string;
|
|
347
|
+
/** The author's own site; offered as a link row beside the profile ones. */
|
|
348
|
+
url?: string;
|
|
349
|
+
/**
|
|
350
|
+
* The author's page on THIS site (AGL-2519), server-filled from the routed
|
|
351
|
+
* entry. The name links here.
|
|
352
|
+
*
|
|
353
|
+
* It wins over {@link url} for the NAME, and the ordering is the point: a
|
|
354
|
+
* reader who clicks a byline at the end of an article is asking "what else
|
|
355
|
+
* has this person written here", not "take me off this site". Their own
|
|
356
|
+
* url is still reachable — it is one of the link rows — so nothing is lost
|
|
357
|
+
* by giving the name the destination that answers the question asked.
|
|
358
|
+
*/
|
|
359
|
+
pageUrl?: string;
|
|
360
|
+
/**
|
|
361
|
+
* The author's profile links, server-filled from their record (AGL-2516).
|
|
362
|
+
*
|
|
363
|
+
* Not authorable as text: each row carries a platform or a picked icon, and
|
|
364
|
+
* the console's author editor is where those are chosen. `Show links` is
|
|
365
|
+
* the template's control over them.
|
|
366
|
+
*/
|
|
367
|
+
links?: Aglyn.ContentAuthorLink[];
|
|
368
|
+
showBio?: boolean;
|
|
369
|
+
showAvatar?: boolean;
|
|
370
|
+
showLinks?: boolean;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* The author card that closes an article (AGL-2486) — portrait, byline, bio.
|
|
374
|
+
*
|
|
375
|
+
* Entry Meta prints a NAME beside a date, which is all an entry carried when
|
|
376
|
+
* it was written: one free-typed string. Custom authors made the byline a
|
|
377
|
+
* record with a portrait, a bio and a url, and a template that wanted the
|
|
378
|
+
* card the article frame draws still had to type the name and the blurb in as
|
|
379
|
+
* literal text — text that keeps saying whatever it said under posts somebody
|
|
380
|
+
* else wrote, and that no edit to the author record can ever reach. This is
|
|
381
|
+
* that card, filled from the record.
|
|
382
|
+
*
|
|
383
|
+
* Every field is independently overridable and every one of them collapses
|
|
384
|
+
* when empty: an author with no portrait renders the text alone rather than a
|
|
385
|
+
* gap where a face would be, and an entry with no author at all renders
|
|
386
|
+
* nothing — never an empty bordered box.
|
|
387
|
+
*/
|
|
388
|
+
declare const CollectionEntryAuthor: import("react").ForwardRefExoticComponent<Omit<CollectionEntryAuthorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
389
|
+
export declare const collectionEntryAuthorSchema: Aglyn.ComponentSchema<CollectionEntryAuthorProps>;
|
|
390
|
+
export interface ContentAuthorProfileProps extends StackProps {
|
|
391
|
+
/**
|
|
392
|
+
* The byline. Server-filled from the routed author on their own page
|
|
393
|
+
* (`expandContentAuthorProfile`); set it — or bind `{{author.name}}` —
|
|
394
|
+
* only to override.
|
|
395
|
+
*/
|
|
396
|
+
name?: string;
|
|
397
|
+
/** The blurb from their record; bind `{{author.bio}}` to override. */
|
|
398
|
+
bio?: string;
|
|
399
|
+
/**
|
|
400
|
+
* Portrait or logo — a media reference (AGL-1215) or any URL, filled from
|
|
401
|
+
* the record so the face follows the person rather than the template.
|
|
402
|
+
*/
|
|
403
|
+
image?: string;
|
|
404
|
+
/** Person only — what they do; blank on an Organization. */
|
|
405
|
+
jobTitle?: string;
|
|
406
|
+
/** Person only — who they write for. */
|
|
407
|
+
worksFor?: string;
|
|
408
|
+
/**
|
|
409
|
+
* Their OWN site. The name links here; blank renders it as plain text.
|
|
410
|
+
* This block already IS the author's page, so it does not link to itself.
|
|
411
|
+
*/
|
|
412
|
+
url?: string;
|
|
413
|
+
/** Their profile links, server-filled from the record (AGL-2516). */
|
|
414
|
+
links?: Aglyn.ContentAuthorLink[];
|
|
415
|
+
showBio?: boolean;
|
|
416
|
+
showAvatar?: boolean;
|
|
417
|
+
showRole?: boolean;
|
|
418
|
+
showLinks?: boolean;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Who an author page is about (AGL-2518) — portrait, name, role, bio, links.
|
|
422
|
+
*
|
|
423
|
+
* The Entry Author card renders the same person as a footnote under an
|
|
424
|
+
* article. This renders them as the SUBJECT of a page, which is why it has
|
|
425
|
+
* the two fields that card has no room for: `jobTitle` and `worksFor` are
|
|
426
|
+
* what tell a stranger who they are looking at, and they are already on the
|
|
427
|
+
* record because `schema.org/Person` defines them (AGL-2486).
|
|
428
|
+
*
|
|
429
|
+
* Every field is independently overridable and every one collapses when
|
|
430
|
+
* empty, exactly as the card's do — an author with no portrait renders the
|
|
431
|
+
* text alone rather than a gap where a face would be. On an editing surface
|
|
432
|
+
* the block previews its own shape with sample text, because a template is
|
|
433
|
+
* designed before any author is routed through it.
|
|
434
|
+
*/
|
|
435
|
+
declare const ContentAuthorProfile: import("react").ForwardRefExoticComponent<Omit<ContentAuthorProfileProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
436
|
+
export { ContentAuthorProfile };
|
|
437
|
+
export declare const contentAuthorProfileSchema: Aglyn.ComponentSchema<ContentAuthorProfileProps>;
|
|
438
|
+
export interface CollectionCategoriesProps extends StackProps {
|
|
439
|
+
/**
|
|
440
|
+
* Collection whose taxonomy renders (compose-time). Blank = the collection
|
|
441
|
+
* routed by the current URL on list-template screens.
|
|
442
|
+
*/
|
|
443
|
+
collectionSlug?: string;
|
|
444
|
+
/**
|
|
445
|
+
* Label for the unfiltered pill (default "All"). Clearing the field
|
|
446
|
+
* persists `Aglyn.COLLECTION_ALL_PILL_NONE`, which omits the pill —
|
|
447
|
+
* `''` cannot be stored at all (AGL-1336).
|
|
448
|
+
*/
|
|
449
|
+
allLabel?: string;
|
|
450
|
+
/**
|
|
451
|
+
* Server-stamped pill links (`expandCollectionCategories`); never set by
|
|
452
|
+
* hand — the tenant builds them from the collection's categories and the
|
|
453
|
+
* routed category.
|
|
454
|
+
*/
|
|
455
|
+
items?: Aglyn.CollectionCategoryLink[];
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* The category filter row for a collection listing (AGL-1321): "All" plus one
|
|
459
|
+
* pill per category, each a REAL anchor to `/{collection}/category/{slug}`.
|
|
460
|
+
*
|
|
461
|
+
* Anchors, not click handlers, and that is the whole design. A JS-only toggle
|
|
462
|
+
* would be invisible to crawlers, unopenable in a new tab, unlinkable, and
|
|
463
|
+
* unreachable without hydration — and it could not exist anyway, since the
|
|
464
|
+
* filter is resolved server-side before the page is composed. The pill the
|
|
465
|
+
* current URL selected carries `aria-current="page"`, stamped on the server so
|
|
466
|
+
* it is in the HTML rather than derived after hydration.
|
|
467
|
+
*/
|
|
468
|
+
declare const CollectionCategories: import("react").ForwardRefExoticComponent<Omit<CollectionCategoriesProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
469
|
+
export declare const collectionCategoriesSchema: Aglyn.ComponentSchema<CollectionCategoriesProps>;
|
|
470
|
+
export interface CollectionSearchProps extends StackProps {
|
|
471
|
+
/**
|
|
472
|
+
* Collection whose entries this box searches (compose-time). Blank = the
|
|
473
|
+
* collection routed by the current URL on list-template screens.
|
|
474
|
+
*/
|
|
475
|
+
collectionSlug?: string;
|
|
476
|
+
/** Hint text inside the box (blank = "Search posts…"). */
|
|
477
|
+
searchPlaceholder?: string;
|
|
478
|
+
/**
|
|
479
|
+
* Server-stamped matchable text per entry (`expandCollectionSearch`);
|
|
480
|
+
* never set by hand.
|
|
481
|
+
*/
|
|
482
|
+
searchIndex?: Aglyn.CollectionEntrySearchItem[];
|
|
483
|
+
/** How many entries the index was drawn from; never set by hand. */
|
|
484
|
+
searchTotal?: number;
|
|
485
|
+
/** Whether that read reached its bound; never set by hand. */
|
|
486
|
+
searchCapped?: boolean;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* A search box for a collection that lives where the author puts it
|
|
490
|
+
* (AGL-1516, Figma 494:1220).
|
|
491
|
+
*
|
|
492
|
+
* The entries block has had a search box since AGL-1516's first half, and it
|
|
493
|
+
* renders inside that block — first child of its own stack. The frame puts
|
|
494
|
+
* the field in the listing's TOOLBAR: category pills on the left, search and
|
|
495
|
+
* RSS on the right, one row. That was unbuildable, and unbuildable in both
|
|
496
|
+
* directions — a block's own child cannot be lifted out of it, and the pills
|
|
497
|
+
* cannot be moved in, because every child of an entries block is cloned once
|
|
498
|
+
* per entry. Three passes of authoring hit the same wall.
|
|
499
|
+
*
|
|
500
|
+
* So the field became its own block. It searches the collection the listing
|
|
501
|
+
* beside it is drawn from, and answers with the suggestion panel (496:1218)
|
|
502
|
+
* — the only behaviour a standalone box can honestly have, since it owns no
|
|
503
|
+
* cards to hide. Enter submits to the site-wide results page, so the box
|
|
504
|
+
* works with no JavaScript at all.
|
|
505
|
+
*
|
|
506
|
+
* Inert on editing surfaces, like Category Pills: the besigner has no index
|
|
507
|
+
* to search, and a field that answered there would be answering about
|
|
508
|
+
* nothing.
|
|
509
|
+
*/
|
|
510
|
+
declare const CollectionSearch: import("react").ForwardRefExoticComponent<Omit<CollectionSearchProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
511
|
+
export declare const collectionSearchSchema: Aglyn.ComponentSchema<CollectionSearchProps>;
|
|
512
|
+
export declare const collectionPresets: Aglyn.PresetSchema[];
|
|
513
|
+
export { CollectionCategories, CollectionEntries, CollectionEntryAuthor, CollectionEntryBody, CollectionEntryMeta, CollectionRelated, CollectionSearch, CollectionShare, };
|
|
514
|
+
export default CollectionEntries;
|