@aglyn/plugins-mui 1.0.0-beta.215 → 1.0.0-beta.216
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/package.json +7 -7
- package/src/lib/components/collection-author-links.d.ts +41 -0
- package/src/lib/components/collection-author-links.js +135 -0
- package/src/lib/components/collection-author-links.js.map +1 -0
- package/src/lib/components/collection-author-profile.d.ts +67 -0
- package/src/lib/components/collection-author-profile.js +269 -0
- package/src/lib/components/collection-author-profile.js.map +1 -0
- package/src/lib/components/collection-categories.d.ts +52 -0
- package/src/lib/components/collection-categories.js +163 -0
- package/src/lib/components/collection-categories.js.map +1 -0
- package/src/lib/components/collection-common.d.ts +104 -0
- package/src/lib/components/collection-common.js +95 -0
- package/src/lib/components/collection-common.js.map +1 -0
- package/src/lib/components/collection-entries.d.ts +137 -0
- package/src/lib/components/collection-entries.js +358 -0
- package/src/lib/components/collection-entries.js.map +1 -0
- package/src/lib/components/collection-entry-author.d.ts +81 -0
- package/src/lib/components/collection-entry-author.js +259 -0
- package/src/lib/components/collection-entry-author.js.map +1 -0
- package/src/lib/components/collection-entry-body.d.ts +44 -0
- package/src/lib/components/collection-entry-body.js +328 -0
- package/src/lib/components/collection-entry-body.js.map +1 -0
- package/src/lib/components/collection-entry-meta.d.ts +88 -0
- package/src/lib/components/collection-entry-meta.js +331 -0
- package/src/lib/components/collection-entry-meta.js.map +1 -0
- package/src/lib/components/collection-presets.d.ts +18 -0
- package/src/lib/components/collection-presets.js +328 -0
- package/src/lib/components/collection-presets.js.map +1 -0
- package/src/lib/components/collection-related.d.ts +101 -0
- package/src/lib/components/collection-related.js +536 -0
- package/src/lib/components/collection-related.js.map +1 -0
- package/src/lib/components/collection-search-box.d.ts +92 -0
- package/src/lib/components/collection-search-box.js +334 -0
- package/src/lib/components/collection-search-box.js.map +1 -0
- package/src/lib/components/collection-search-fuse.d.ts +28 -0
- package/src/lib/components/collection-search-fuse.js +28 -0
- package/src/lib/components/collection-search-fuse.js.map +1 -0
- package/src/lib/components/collection-search.d.ts +62 -0
- package/src/lib/components/collection-search.js +140 -0
- package/src/lib/components/collection-search.js.map +1 -0
- package/src/lib/components/collection-share.d.ts +31 -0
- package/src/lib/components/collection-share.js +154 -0
- package/src/lib/components/collection-share.js.map +1 -0
- package/src/lib/components/collection.d.ts +19 -497
- package/src/lib/components/collection.js +19 -2982
- package/src/lib/components/collection.js.map +1 -1
- package/src/lib/components/image-list.d.ts +2 -2
- package/src/lib/components/image-list.js +4 -6
- package/src/lib/components/image-list.js.map +1 -1
- package/src/lib/element-tier.d.ts +9 -1
- package/src/lib/element-tier.js +12 -1
- package/src/lib/element-tier.js.map +1 -1
- package/src/lib/plugin.js +20 -12
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/utils/to-count.d.ts +25 -0
- package/src/lib/utils/to-count.js +30 -0
- package/src/lib/utils/to-count.js.map +1 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
* Copyright 2026 Aglyn LLC
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
* you may not use this file except in compliance with the License.
|
|
10
|
+
* You may obtain a copy of the License at
|
|
11
|
+
*
|
|
12
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
*
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
* See the License for the specific language governing permissions and
|
|
18
|
+
* limitations under the License.
|
|
19
|
+
*/ import * as Aglyn from "@aglyn/aglyn";
|
|
20
|
+
import { mdiTagOutline } from "@aglyn/shared-data-mdi";
|
|
21
|
+
import { AppLink } from "@aglyn/shared-ui-jsx";
|
|
22
|
+
import Box from "@mui/material/Box";
|
|
23
|
+
import Chip from "@mui/material/Chip";
|
|
24
|
+
import MuiStack from "@mui/material/Stack";
|
|
25
|
+
import Typography from "@mui/material/Typography";
|
|
26
|
+
import { forwardRef, useContext } from "react";
|
|
27
|
+
import { BUNDLE_ID } from "../constants/bundle-common.js";
|
|
28
|
+
import { UNRESOLVED_TOKEN, ENTRY_SAMPLE_PUBLISHED_AT, ENTRY_SAMPLE_AUTHOR, ENTRY_SAMPLE_CATEGORY, ENTRY_SAMPLE_TAGS, samplePortraitSx, metaValue, SAFE_AUTHOR_HREF } from "./collection-common.js";
|
|
29
|
+
// Persisted component id (AGL-551/582); the compose pipeline references it
|
|
30
|
+
// through the @aglyn/aglyn constant. Never rename.
|
|
31
|
+
export const ENTRY_META_ID = Aglyn.COLLECTION_ENTRY_META_COMPONENT_ID;
|
|
32
|
+
/** Byline avatar, from the article frame (Figma 170:190). */ const ENTRY_AVATAR_SIZE = 36;
|
|
33
|
+
/**
|
|
34
|
+
* "{{entry.date}} · {{entry.category}}" meta line plus tag chips
|
|
35
|
+
* (AGL-582). Values arrive through entry tokens on entry renders; on other
|
|
36
|
+
* surfaces unresolved tokens collapse to nothing instead of leaking.
|
|
37
|
+
*
|
|
38
|
+
* On an entry template the tenant now also FILLS the three values from the
|
|
39
|
+
* routed entry when nothing is bound (`expandCollectionEntryMeta`, AGL-1385).
|
|
40
|
+
* Before that, a block dragged from the palette rather than dropped as the
|
|
41
|
+
* preset had no values at all — three "Show" switches gating nothing — and
|
|
42
|
+
* rendered as the empty `<Box>` below, at height 0.
|
|
43
|
+
*/ const CollectionEntryMeta = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
44
|
+
const { date, // Compose-time (AGL-1459): read by `expandCollectionEntryMeta`, which has
|
|
45
|
+
// the timestamp. Destructured so it never reaches the DOM.
|
|
46
|
+
dateFormat: _dateFormat, author, authorPageUrl, linkAuthor, category, tags, avatarImage, showDate, showAuthor, showCategory, showTags, showAvatar } = props, rest = _object_without_properties_loose(props, [
|
|
47
|
+
"date",
|
|
48
|
+
"dateFormat",
|
|
49
|
+
"author",
|
|
50
|
+
"authorPageUrl",
|
|
51
|
+
"linkAuthor",
|
|
52
|
+
"category",
|
|
53
|
+
"tags",
|
|
54
|
+
"avatarImage",
|
|
55
|
+
"showDate",
|
|
56
|
+
"showAuthor",
|
|
57
|
+
"showCategory",
|
|
58
|
+
"showTags",
|
|
59
|
+
"showAvatar"
|
|
60
|
+
]);
|
|
61
|
+
// Node styles ride the renderer-merged sx; recompose (stack.ts pattern).
|
|
62
|
+
const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [
|
|
63
|
+
props['sx']
|
|
64
|
+
];
|
|
65
|
+
const { suppressNavigation } = useContext(Aglyn.ScreenLinkContext);
|
|
66
|
+
// The resolver every other surface shares (AGL-1215), so one media
|
|
67
|
+
// reference keeps working across sites. A hook — before any early return.
|
|
68
|
+
const { hostId } = Aglyn.useSite();
|
|
69
|
+
const dateValue = showDate !== false ? metaValue(date, suppressNavigation) : '';
|
|
70
|
+
const authorValue = showAuthor !== false ? metaValue(author, suppressNavigation) : '';
|
|
71
|
+
const categoryValue = showCategory !== false ? metaValue(category, suppressNavigation) : '';
|
|
72
|
+
const tagsValue = showTags !== false ? metaValue(tags, suppressNavigation) : '';
|
|
73
|
+
const tagList = tagsValue.split(',').map((tag)=>tag.trim()).filter(Boolean);
|
|
74
|
+
// An unresolved token empties on EVERY surface here, unlike the text
|
|
75
|
+
// fields: a literal `{{…}}` in a src is a broken image in the canvas, and a
|
|
76
|
+
// byline that renders a broken avatar on every post is worse than no
|
|
77
|
+
// avatar at all.
|
|
78
|
+
const avatarRaw = (avatarImage != null ? avatarImage : '').trim();
|
|
79
|
+
const avatarSrc = showAvatar !== false && avatarRaw && !UNRESOLVED_TOKEN.test(avatarRaw) ? Aglyn.resolveMediaSrc(avatarRaw, {
|
|
80
|
+
hostId
|
|
81
|
+
}) : '';
|
|
82
|
+
// Author leads, so the frame's "The Aglyn Team · Jul 2026" reads in that
|
|
83
|
+
// order. With no author the join is character-for-character what it was.
|
|
84
|
+
const filledLine = [
|
|
85
|
+
authorValue,
|
|
86
|
+
dateValue,
|
|
87
|
+
categoryValue
|
|
88
|
+
].filter(Boolean).join(' · ');
|
|
89
|
+
/*
|
|
90
|
+
The rest of the line, WITHOUT the author (AGL-2519).
|
|
91
|
+
|
|
92
|
+
The row is one string everywhere else, which is what a `·`-joined byline
|
|
93
|
+
wants — but a link is an element, so the author has to come out of the
|
|
94
|
+
join to be one. Split rather than reassembled from parts, so the
|
|
95
|
+
separator, the order and the empty-field collapsing all stay in the one
|
|
96
|
+
expression above: the linked row and the plain row cannot render a
|
|
97
|
+
different sentence.
|
|
98
|
+
*/ const authorHrefRaw = metaValue(authorPageUrl, suppressNavigation);
|
|
99
|
+
const authorHref = linkAuthor !== false && SAFE_AUTHOR_HREF.test(authorHrefRaw) ? authorHrefRaw : '';
|
|
100
|
+
const trailingLine = [
|
|
101
|
+
dateValue,
|
|
102
|
+
categoryValue
|
|
103
|
+
].filter(Boolean).join(' · ');
|
|
104
|
+
// Nothing to show and nothing to route from: an editing surface previews
|
|
105
|
+
// the block's own markup at the author's own settings, and a published page
|
|
106
|
+
// renders nothing at all (AGL-2486). The switches are honoured here exactly
|
|
107
|
+
// as they are below, so a row with Show date off previews without one.
|
|
108
|
+
const sample = !filledLine && !tagList.length && !avatarSrc && suppressNavigation;
|
|
109
|
+
const line = sample ? [
|
|
110
|
+
showAuthor !== false ? ENTRY_SAMPLE_AUTHOR : '',
|
|
111
|
+
showDate !== false ? Aglyn.formatCollectionEntryDate(ENTRY_SAMPLE_PUBLISHED_AT, Aglyn.normalizeCollectionEntryDateFormat(_dateFormat)) : '',
|
|
112
|
+
showCategory !== false ? ENTRY_SAMPLE_CATEGORY : ''
|
|
113
|
+
].filter(Boolean).join(' · ') : filledLine;
|
|
114
|
+
const chips = sample ? showTags !== false ? ENTRY_SAMPLE_TAGS.split(',').map((tag)=>tag.trim()) : [] : tagList;
|
|
115
|
+
// The portrait an entry's own author record supplies arrives at compose
|
|
116
|
+
// time, so on the canvas there is none to resolve — the slot is drawn
|
|
117
|
+
// instead, which is what a byline's spacing is actually built around.
|
|
118
|
+
const samplePortrait = sample && showAvatar !== false;
|
|
119
|
+
if (!line && !chips.length && !avatarSrc && !samplePortrait) {
|
|
120
|
+
return /*#__PURE__*/ _jsx(Box, _extends({
|
|
121
|
+
ref: ref
|
|
122
|
+
}, rest));
|
|
123
|
+
}
|
|
124
|
+
return /*#__PURE__*/ _jsxs(MuiStack, _extends({
|
|
125
|
+
ref: ref,
|
|
126
|
+
direction: "row",
|
|
127
|
+
spacing: 1
|
|
128
|
+
}, rest, {
|
|
129
|
+
// MERGE, never replace (AGL-1450, same class as AGL-1284). `rest.sx`
|
|
130
|
+
// is the ARRAY `mergeSxProps` builds in leaf.tsx, so spreading it into
|
|
131
|
+
// an object produced `{0: …, 1: …, 2: …}` — numeric keys emotion emits
|
|
132
|
+
// as invalid selectors — and discarded EVERY authored property while
|
|
133
|
+
// these two defaults still applied. The block looked deliberately
|
|
134
|
+
// styled, so nothing suggested the value had been dropped. Defaults
|
|
135
|
+
// go first; the node's slice comes after and can override them.
|
|
136
|
+
sx: [
|
|
137
|
+
{
|
|
138
|
+
alignItems: 'center',
|
|
139
|
+
flexWrap: 'wrap'
|
|
140
|
+
},
|
|
141
|
+
...nodeSx
|
|
142
|
+
],
|
|
143
|
+
children: [
|
|
144
|
+
avatarSrc ? /*#__PURE__*/ _jsx(Box, _extends({
|
|
145
|
+
component: "img",
|
|
146
|
+
src: avatarSrc,
|
|
147
|
+
// Decorative: the byline names the author in text right beside it,
|
|
148
|
+
// so a screen reader announcing the mark again is noise.
|
|
149
|
+
alt: "",
|
|
150
|
+
sx: {
|
|
151
|
+
display: 'block',
|
|
152
|
+
width: ENTRY_AVATAR_SIZE,
|
|
153
|
+
height: ENTRY_AVATAR_SIZE,
|
|
154
|
+
borderRadius: '50%',
|
|
155
|
+
objectFit: 'cover'
|
|
156
|
+
}
|
|
157
|
+
}, Aglyn.DEFERRED_IMAGE_ATTRIBUTES)) : samplePortrait ? /*#__PURE__*/ _jsx(Box, {
|
|
158
|
+
"aria-hidden": true,
|
|
159
|
+
sx: samplePortraitSx(ENTRY_AVATAR_SIZE)
|
|
160
|
+
}) : null,
|
|
161
|
+
line ? /*#__PURE__*/ _jsx(Typography, {
|
|
162
|
+
variant: "caption",
|
|
163
|
+
sx: {
|
|
164
|
+
color: 'text.secondary'
|
|
165
|
+
},
|
|
166
|
+
children: // Linked only on the real byline, never on the canvas sample: a
|
|
167
|
+
// preview whose placeholder name navigates is a trap, and the
|
|
168
|
+
// sample author has no page to go to.
|
|
169
|
+
authorHref && authorValue && !sample ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
170
|
+
children: [
|
|
171
|
+
/*#__PURE__*/ _jsx(AppLink, {
|
|
172
|
+
href: authorHref,
|
|
173
|
+
sx: {
|
|
174
|
+
color: 'inherit'
|
|
175
|
+
},
|
|
176
|
+
underline: "hover",
|
|
177
|
+
children: authorValue
|
|
178
|
+
}),
|
|
179
|
+
trailingLine ? ` · ${trailingLine}` : ''
|
|
180
|
+
]
|
|
181
|
+
}) : line
|
|
182
|
+
}) : null,
|
|
183
|
+
chips.map((tag)=>/*#__PURE__*/ _jsx(Chip, {
|
|
184
|
+
label: tag,
|
|
185
|
+
size: "small",
|
|
186
|
+
variant: "outlined"
|
|
187
|
+
}, tag))
|
|
188
|
+
]
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
CollectionEntryMeta.displayName = 'AglynCollectionEntryMeta';
|
|
192
|
+
export const collectionEntryMetaSchema = {
|
|
193
|
+
$id: ENTRY_META_ID,
|
|
194
|
+
pluginId: BUNDLE_ID,
|
|
195
|
+
displayName: 'Entry Meta',
|
|
196
|
+
description: 'The byline row for an entry — author, date, category and tags.',
|
|
197
|
+
category: Aglyn.ComponentCategory.TEXT,
|
|
198
|
+
icon: {
|
|
199
|
+
path: mdiTagOutline.path,
|
|
200
|
+
sx: {
|
|
201
|
+
color: 'secondary.main'
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
flags: {
|
|
205
|
+
selfClosing: Aglyn.FEATURE_FLAG.ENABLED
|
|
206
|
+
},
|
|
207
|
+
attributes: [
|
|
208
|
+
{
|
|
209
|
+
name: 'date',
|
|
210
|
+
label: 'Date',
|
|
211
|
+
description: 'Blank shows the entry’s own published date on entry templates. ' + 'Type here (or bind {{entry.date}}) only to override it.',
|
|
212
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'dateFormat',
|
|
216
|
+
label: 'Date format',
|
|
217
|
+
description: 'How the published date reads. Site default is the format this ' + 'block has always used; it has no effect on a Date you typed in ' + 'yourself.',
|
|
218
|
+
component: Aglyn.FieldComponentType.SELECT,
|
|
219
|
+
// The formats the pure layer knows how to produce, so the list cannot
|
|
220
|
+
// offer a shape nothing renders. Every value is REAL — including the
|
|
221
|
+
// do-nothing one (AGL-1451/AGL-1453): `''` cannot survive a save, so
|
|
222
|
+
// an author who tried a format would have no route back.
|
|
223
|
+
options: [
|
|
224
|
+
...Aglyn.COLLECTION_ENTRY_DATE_FORMAT_OPTIONS
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: 'author',
|
|
229
|
+
label: 'Author',
|
|
230
|
+
description: 'Blank shows the entry’s own author. Type here (or bind ' + '{{entry.author}}) only to override it.',
|
|
231
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'category',
|
|
235
|
+
label: 'Category',
|
|
236
|
+
description: 'Blank shows the entry’s own category. Type here (or bind ' + '{{entry.category}}) only to override it.',
|
|
237
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
name: 'tags',
|
|
241
|
+
label: 'Tags',
|
|
242
|
+
description: 'Comma-separated. Blank shows the entry’s own tags; type here (or ' + 'bind {{entry.tags}}) only to override them.',
|
|
243
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: 'avatarImage',
|
|
247
|
+
label: 'Avatar',
|
|
248
|
+
description: 'Round image before the byline — your brand mark, or any image ' + 'from the media library. Blank shows no avatar.',
|
|
249
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
name: 'showDate',
|
|
253
|
+
label: 'Show date',
|
|
254
|
+
description: 'Off hides the published date from the line without clearing what ' + 'the Date field would have shown.',
|
|
255
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
256
|
+
// Unset means SHOWN in the renderer above, so the switch has to
|
|
257
|
+
// OPEN in that position or it lies about the block in front of
|
|
258
|
+
// the author — and the first click, which writes the `true` that
|
|
259
|
+
// was already in effect, changes nothing and reads as a dead
|
|
260
|
+
// control (AGL-2506).
|
|
261
|
+
initialValue: true
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: 'showCategory',
|
|
265
|
+
label: 'Show category',
|
|
266
|
+
description: 'Off drops the category from the line. The entry keeps its ' + 'category — this is about the byline, not the taxonomy.',
|
|
267
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
268
|
+
// Unset means SHOWN in the renderer above, so the switch has to
|
|
269
|
+
// OPEN in that position or it lies about the block in front of
|
|
270
|
+
// the author — and the first click, which writes the `true` that
|
|
271
|
+
// was already in effect, changes nothing and reads as a dead
|
|
272
|
+
// control (AGL-2506).
|
|
273
|
+
initialValue: true
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
name: 'showTags',
|
|
277
|
+
label: 'Show tags',
|
|
278
|
+
description: 'Off hides the tag chips below the line. Leave it on and the ' + 'other three off for a tags-only row.',
|
|
279
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
280
|
+
// Unset means SHOWN in the renderer above, so the switch has to
|
|
281
|
+
// OPEN in that position or it lies about the block in front of
|
|
282
|
+
// the author — and the first click, which writes the `true` that
|
|
283
|
+
// was already in effect, changes nothing and reads as a dead
|
|
284
|
+
// control (AGL-2506).
|
|
285
|
+
initialValue: true
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: 'authorPageUrl',
|
|
289
|
+
label: 'Author links to',
|
|
290
|
+
description: 'Blank sends the byline to the author’s page on this site. Type ' + 'here (or bind {{entry.authorPageUrl}}) only to override it.',
|
|
291
|
+
component: Aglyn.FieldComponentType.TEXT_FIELD
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: 'linkAuthor',
|
|
295
|
+
label: 'Link author',
|
|
296
|
+
description: 'Off leaves the byline as plain text even when the author has a ' + 'page. On, the name links there and the date and category beside ' + 'it do not.',
|
|
297
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
298
|
+
// Unset means LINKED in the renderer above, so the switch has to open
|
|
299
|
+
// in that position or it lies about the block in front of the author
|
|
300
|
+
// (AGL-2506).
|
|
301
|
+
initialValue: true
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: 'showAuthor',
|
|
305
|
+
label: 'Show author',
|
|
306
|
+
description: 'Off hides the byline. The avatar follows it: a block with no ' + 'author shown never fills in the author’s portrait.',
|
|
307
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
308
|
+
// Unset means SHOWN in the renderer above, so the switch has to
|
|
309
|
+
// OPEN in that position or it lies about the block in front of
|
|
310
|
+
// the author — and the first click, which writes the `true` that
|
|
311
|
+
// was already in effect, changes nothing and reads as a dead
|
|
312
|
+
// control (AGL-2506).
|
|
313
|
+
initialValue: true
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'showAvatar',
|
|
317
|
+
label: 'Show avatar',
|
|
318
|
+
description: 'Off hides the round image in front of the byline, including an ' + 'author’s own portrait.',
|
|
319
|
+
component: Aglyn.FieldComponentType.SWITCH,
|
|
320
|
+
// Unset means SHOWN in the renderer above, so the switch has to
|
|
321
|
+
// OPEN in that position or it lies about the block in front of
|
|
322
|
+
// the author — and the first click, which writes the `true` that
|
|
323
|
+
// was already in effect, changes nothing and reads as a dead
|
|
324
|
+
// control (AGL-2506).
|
|
325
|
+
initialValue: true
|
|
326
|
+
}
|
|
327
|
+
]
|
|
328
|
+
};
|
|
329
|
+
export { CollectionEntryMeta };
|
|
330
|
+
|
|
331
|
+
//# sourceMappingURL=collection-entry-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/mui/src/lib/components/collection-entry-meta.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Aglyn from '@aglyn/aglyn'\nimport { mdiTagOutline } from '@aglyn/shared-data-mdi'\nimport { AppLink } from '@aglyn/shared-ui-jsx'\nimport Box from '@mui/material/Box'\nimport Chip from '@mui/material/Chip'\nimport MuiStack, { type StackProps } from '@mui/material/Stack'\nimport Typography from '@mui/material/Typography'\nimport { forwardRef, useContext } from 'react'\nimport { BUNDLE_ID } from '../constants/bundle-common'\nimport {\n UNRESOLVED_TOKEN,\n ENTRY_SAMPLE_PUBLISHED_AT,\n ENTRY_SAMPLE_AUTHOR,\n ENTRY_SAMPLE_CATEGORY,\n ENTRY_SAMPLE_TAGS,\n samplePortraitSx,\n metaValue,\n SAFE_AUTHOR_HREF,\n} from './collection-common'\n\n// Persisted component id (AGL-551/582); the compose pipeline references it\n// through the @aglyn/aglyn constant. Never rename.\nexport const ENTRY_META_ID: Aglyn.ComponentId =\n Aglyn.COLLECTION_ENTRY_META_COMPONENT_ID\n\nexport interface CollectionEntryMetaProps extends StackProps {\n /**\n * Published date. Server-filled from the routed entry on entry templates\n * (`expandCollectionEntryMeta`, AGL-1385); set it — or bind\n * `{{entry.date}}` — only to override.\n */\n date?: string\n /**\n * How {@link date} reads when the server fills it in (AGL-1459) — a\n * COMPOSE-TIME prop, like Related Posts' `limit`: it is answered where the\n * timestamp still exists (`expandCollectionEntryMeta`) and never reaches the\n * DOM. Blank, or `default`, is the locale date the block has always emitted.\n */\n dateFormat?: Aglyn.CollectionEntryDateFormat\n /**\n * Byline (AGL-1459). Server-filled from the entry's own author on entry\n * templates, exactly like {@link date}; set it — or bind `{{entry.author}}`\n * — only to override.\n */\n author?: string\n /** Category; server-filled, or bind `{{entry.category}}` to override. */\n category?: string\n /** Comma-joined tags; server-filled, or bind `{{entry.tags}}`. */\n tags?: string\n /**\n * Round avatar shown before the byline (AGL-1459) — a media-picker target,\n * so it holds a media reference (AGL-1215) as well as any URL form.\n *\n * A block-level pick, deliberately, and NOT a per-author image: entries\n * carry an author NAME (`authorName`) and no portrait field, so a per-author\n * avatar would need a schema decision on the entry model plus an editor\n * field to fill it. Until then this is the site's brand mark, chosen once on\n * the template — which is what the article frame actually asks for. Left\n * unset it renders nothing at all, never a broken image.\n */\n avatarImage?: string\n showDate?: boolean\n showAuthor?: boolean\n /**\n * Where the byline's NAME links — the author's page on this site\n * (AGL-2519). Server-filled from the routed entry's author, like the\n * avatar beside it; blank renders the name as plain text.\n *\n * Distinct from the author's own `url`, which the Entry Author card offers\n * as a link row: this is \"everything they wrote here\", that is \"their\n * site\", and a byline that conflated them would send a reader off-site from\n * every article.\n */\n authorPageUrl?: string\n /** Off leaves the byline as plain text even when the author has a page. */\n linkAuthor?: boolean\n showCategory?: boolean\n showTags?: boolean\n showAvatar?: boolean\n}\n\n/** Byline avatar, from the article frame (Figma 170:190). */\nconst ENTRY_AVATAR_SIZE = 36\n\n/**\n * \"{{entry.date}} · {{entry.category}}\" meta line plus tag chips\n * (AGL-582). Values arrive through entry tokens on entry renders; on other\n * surfaces unresolved tokens collapse to nothing instead of leaking.\n *\n * On an entry template the tenant now also FILLS the three values from the\n * routed entry when nothing is bound (`expandCollectionEntryMeta`, AGL-1385).\n * Before that, a block dragged from the palette rather than dropped as the\n * preset had no values at all — three \"Show\" switches gating nothing — and\n * rendered as the empty `<Box>` below, at height 0.\n */\nconst CollectionEntryMeta = forwardRef<\n HTMLDivElement,\n CollectionEntryMetaProps\n>((props, ref) => {\n const {\n date,\n // Compose-time (AGL-1459): read by `expandCollectionEntryMeta`, which has\n // the timestamp. Destructured so it never reaches the DOM.\n dateFormat: _dateFormat,\n author,\n authorPageUrl,\n linkAuthor,\n category,\n tags,\n avatarImage,\n showDate,\n showAuthor,\n showCategory,\n showTags,\n showAvatar,\n ...rest\n } = props\n // Node styles ride the renderer-merged sx; recompose (stack.ts pattern).\n const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [props['sx']]\n const { suppressNavigation } = useContext(Aglyn.ScreenLinkContext)\n // The resolver every other surface shares (AGL-1215), so one media\n // reference keeps working across sites. A hook — before any early return.\n const { hostId } = Aglyn.useSite()\n const dateValue = showDate !== false ? metaValue(date, suppressNavigation) : ''\n const authorValue =\n showAuthor !== false ? metaValue(author, suppressNavigation) : ''\n const categoryValue =\n showCategory !== false ? metaValue(category, suppressNavigation) : ''\n const tagsValue = showTags !== false ? metaValue(tags, suppressNavigation) : ''\n const tagList = tagsValue\n .split(',')\n .map((tag) => tag.trim())\n .filter(Boolean)\n // An unresolved token empties on EVERY surface here, unlike the text\n // fields: a literal `{{…}}` in a src is a broken image in the canvas, and a\n // byline that renders a broken avatar on every post is worse than no\n // avatar at all.\n const avatarRaw = (avatarImage ?? '').trim()\n const avatarSrc =\n showAvatar !== false && avatarRaw && !UNRESOLVED_TOKEN.test(avatarRaw)\n ? Aglyn.resolveMediaSrc(avatarRaw, { hostId })\n : ''\n // Author leads, so the frame's \"The Aglyn Team · Jul 2026\" reads in that\n // order. With no author the join is character-for-character what it was.\n const filledLine = [authorValue, dateValue, categoryValue]\n .filter(Boolean)\n .join(' · ')\n /*\n The rest of the line, WITHOUT the author (AGL-2519).\n\n The row is one string everywhere else, which is what a `·`-joined byline\n wants — but a link is an element, so the author has to come out of the\n join to be one. Split rather than reassembled from parts, so the\n separator, the order and the empty-field collapsing all stay in the one\n expression above: the linked row and the plain row cannot render a\n different sentence.\n */\n const authorHrefRaw = metaValue(authorPageUrl, suppressNavigation)\n const authorHref =\n linkAuthor !== false && SAFE_AUTHOR_HREF.test(authorHrefRaw)\n ? authorHrefRaw\n : ''\n const trailingLine = [dateValue, categoryValue].filter(Boolean).join(' · ')\n // Nothing to show and nothing to route from: an editing surface previews\n // the block's own markup at the author's own settings, and a published page\n // renders nothing at all (AGL-2486). The switches are honoured here exactly\n // as they are below, so a row with Show date off previews without one.\n const sample = !filledLine && !tagList.length && !avatarSrc && suppressNavigation\n const line = sample\n ? [\n showAuthor !== false ? ENTRY_SAMPLE_AUTHOR : '',\n showDate !== false\n ? Aglyn.formatCollectionEntryDate(\n ENTRY_SAMPLE_PUBLISHED_AT,\n Aglyn.normalizeCollectionEntryDateFormat(_dateFormat),\n )\n : '',\n showCategory !== false ? ENTRY_SAMPLE_CATEGORY : '',\n ]\n .filter(Boolean)\n .join(' · ')\n : filledLine\n const chips = sample\n ? showTags !== false\n ? ENTRY_SAMPLE_TAGS.split(',').map((tag) => tag.trim())\n : []\n : tagList\n // The portrait an entry's own author record supplies arrives at compose\n // time, so on the canvas there is none to resolve — the slot is drawn\n // instead, which is what a byline's spacing is actually built around.\n const samplePortrait = sample && showAvatar !== false\n if (!line && !chips.length && !avatarSrc && !samplePortrait) {\n return <Box ref={ref} {...rest} />\n }\n return (\n <MuiStack\n ref={ref}\n direction=\"row\"\n spacing={1}\n {...rest}\n // MERGE, never replace (AGL-1450, same class as AGL-1284). `rest.sx`\n // is the ARRAY `mergeSxProps` builds in leaf.tsx, so spreading it into\n // an object produced `{0: …, 1: …, 2: …}` — numeric keys emotion emits\n // as invalid selectors — and discarded EVERY authored property while\n // these two defaults still applied. The block looked deliberately\n // styled, so nothing suggested the value had been dropped. Defaults\n // go first; the node's slice comes after and can override them.\n sx={[{ alignItems: 'center', flexWrap: 'wrap' }, ...nodeSx]}\n >\n {avatarSrc ? (\n <Box\n component=\"img\"\n src={avatarSrc}\n // Decorative: the byline names the author in text right beside it,\n // so a screen reader announcing the mark again is noise.\n alt=\"\"\n sx={{\n display: 'block',\n width: ENTRY_AVATAR_SIZE,\n height: ENTRY_AVATAR_SIZE,\n borderRadius: '50%',\n objectFit: 'cover',\n // No background plate: a brand mark with a transparent ground\n // would sit on a grey disc nobody asked for.\n }}\n // `lazy` alone, same as Related Posts' rail (AGL-2486). A\n // byline avatar is decorative and tiny; it has no business\n // outranking anything.\n {...Aglyn.DEFERRED_IMAGE_ATTRIBUTES}\n />\n ) : samplePortrait ? (\n <Box aria-hidden sx={samplePortraitSx(ENTRY_AVATAR_SIZE)} />\n ) : null}\n {line ? (\n <Typography variant=\"caption\" sx={{ color: 'text.secondary' }}>\n {\n // Linked only on the real byline, never on the canvas sample: a\n // preview whose placeholder name navigates is a trap, and the\n // sample author has no page to go to.\n authorHref && authorValue && !sample ? (\n <>\n <AppLink\n href={authorHref}\n sx={{ color: 'inherit' }}\n underline=\"hover\"\n >\n {authorValue}\n </AppLink>\n {trailingLine ? ` · ${trailingLine}` : ''}\n </>\n ) : (\n line\n )\n }\n </Typography>\n ) : null}\n {chips.map((tag) => (\n <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\" />\n ))}\n </MuiStack>\n )\n})\nCollectionEntryMeta.displayName = 'AglynCollectionEntryMeta'\n\nexport const collectionEntryMetaSchema: Aglyn.ComponentSchema<CollectionEntryMetaProps> =\n {\n $id: ENTRY_META_ID,\n pluginId: BUNDLE_ID,\n displayName: 'Entry Meta',\n description:\n 'The byline row for an entry — author, date, category and tags.',\n category: Aglyn.ComponentCategory.TEXT,\n icon: { path: mdiTagOutline.path, sx: { color: 'secondary.main' } },\n flags: { selfClosing: Aglyn.FEATURE_FLAG.ENABLED },\n attributes: [\n {\n name: 'date',\n label: 'Date',\n description:\n 'Blank shows the entry’s own published date on entry templates. ' +\n 'Type here (or bind {{entry.date}}) only to override it.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'dateFormat',\n label: 'Date format',\n description:\n 'How the published date reads. Site default is the format this ' +\n 'block has always used; it has no effect on a Date you typed in ' +\n 'yourself.',\n component: Aglyn.FieldComponentType.SELECT,\n // The formats the pure layer knows how to produce, so the list cannot\n // offer a shape nothing renders. Every value is REAL — including the\n // do-nothing one (AGL-1451/AGL-1453): `''` cannot survive a save, so\n // an author who tried a format would have no route back.\n options: [...Aglyn.COLLECTION_ENTRY_DATE_FORMAT_OPTIONS],\n },\n {\n name: 'author',\n label: 'Author',\n description:\n 'Blank shows the entry’s own author. Type here (or bind ' +\n '{{entry.author}}) only to override it.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'category',\n label: 'Category',\n description:\n 'Blank shows the entry’s own category. Type here (or bind ' +\n '{{entry.category}}) only to override it.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'tags',\n label: 'Tags',\n description:\n 'Comma-separated. Blank shows the entry’s own tags; type here (or ' +\n 'bind {{entry.tags}}) only to override them.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'avatarImage',\n label: 'Avatar',\n description:\n 'Round image before the byline — your brand mark, or any image ' +\n 'from the media library. Blank shows no avatar.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'showDate',\n label: 'Show date',\n description:\n 'Off hides the published date from the line without clearing what ' +\n 'the Date field would have shown.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means SHOWN in the renderer above, so the switch has to\n // OPEN in that position or it lies about the block in front of\n // the author — and the first click, which writes the `true` that\n // was already in effect, changes nothing and reads as a dead\n // control (AGL-2506).\n initialValue: true,\n },\n {\n name: 'showCategory',\n label: 'Show category',\n description:\n 'Off drops the category from the line. The entry keeps its ' +\n 'category — this is about the byline, not the taxonomy.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means SHOWN in the renderer above, so the switch has to\n // OPEN in that position or it lies about the block in front of\n // the author — and the first click, which writes the `true` that\n // was already in effect, changes nothing and reads as a dead\n // control (AGL-2506).\n initialValue: true,\n },\n {\n name: 'showTags',\n label: 'Show tags',\n description:\n 'Off hides the tag chips below the line. Leave it on and the ' +\n 'other three off for a tags-only row.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means SHOWN in the renderer above, so the switch has to\n // OPEN in that position or it lies about the block in front of\n // the author — and the first click, which writes the `true` that\n // was already in effect, changes nothing and reads as a dead\n // control (AGL-2506).\n initialValue: true,\n },\n {\n name: 'authorPageUrl',\n label: 'Author links to',\n description:\n 'Blank sends the byline to the author’s page on this site. Type ' +\n 'here (or bind {{entry.authorPageUrl}}) only to override it.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'linkAuthor',\n label: 'Link author',\n description:\n 'Off leaves the byline as plain text even when the author has a ' +\n 'page. On, the name links there and the date and category beside ' +\n 'it do not.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means LINKED in the renderer above, so the switch has to open\n // in that position or it lies about the block in front of the author\n // (AGL-2506).\n initialValue: true,\n },\n {\n name: 'showAuthor',\n label: 'Show author',\n description:\n 'Off hides the byline. The avatar follows it: a block with no ' +\n 'author shown never fills in the author’s portrait.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means SHOWN in the renderer above, so the switch has to\n // OPEN in that position or it lies about the block in front of\n // the author — and the first click, which writes the `true` that\n // was already in effect, changes nothing and reads as a dead\n // control (AGL-2506).\n initialValue: true,\n },\n {\n name: 'showAvatar',\n label: 'Show avatar',\n description:\n 'Off hides the round image in front of the byline, including an ' +\n 'author’s own portrait.',\n component: Aglyn.FieldComponentType.SWITCH,\n // Unset means SHOWN in the renderer above, so the switch has to\n // OPEN in that position or it lies about the block in front of\n // the author — and the first click, which writes the `true` that\n // was already in effect, changes nothing and reads as a dead\n // control (AGL-2506).\n initialValue: true,\n },\n ],\n }\n\nexport { CollectionEntryMeta }\n"],"names":["Aglyn","mdiTagOutline","AppLink","Box","Chip","MuiStack","Typography","forwardRef","useContext","BUNDLE_ID","UNRESOLVED_TOKEN","ENTRY_SAMPLE_PUBLISHED_AT","ENTRY_SAMPLE_AUTHOR","ENTRY_SAMPLE_CATEGORY","ENTRY_SAMPLE_TAGS","samplePortraitSx","metaValue","SAFE_AUTHOR_HREF","ENTRY_META_ID","COLLECTION_ENTRY_META_COMPONENT_ID","ENTRY_AVATAR_SIZE","CollectionEntryMeta","props","ref","date","dateFormat","_dateFormat","author","authorPageUrl","linkAuthor","category","tags","avatarImage","showDate","showAuthor","showCategory","showTags","showAvatar","rest","nodeSx","Array","isArray","suppressNavigation","ScreenLinkContext","hostId","useSite","dateValue","authorValue","categoryValue","tagsValue","tagList","split","map","tag","trim","filter","Boolean","avatarRaw","avatarSrc","test","resolveMediaSrc","filledLine","join","authorHrefRaw","authorHref","trailingLine","sample","length","line","formatCollectionEntryDate","normalizeCollectionEntryDateFormat","chips","samplePortrait","direction","spacing","sx","alignItems","flexWrap","component","src","alt","display","width","height","borderRadius","objectFit","DEFERRED_IMAGE_ATTRIBUTES","aria-hidden","variant","color","href","underline","label","size","displayName","collectionEntryMetaSchema","$id","pluginId","description","ComponentCategory","TEXT","icon","path","flags","selfClosing","FEATURE_FLAG","ENABLED","attributes","name","FieldComponentType","TEXT_FIELD","SELECT","options","COLLECTION_ENTRY_DATE_FORMAT_OPTIONS","SWITCH","initialValue"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
export declare const collectionPresets: Aglyn.PresetSchema[];
|