@pipelex/mthds-form 0.24.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ export { StuffFile, StuffFileKind, collectStuffFiles } from './stuff-files.js';
6
6
  export { SaveFailure, SaveFile, SaveFileKind, SaveFiles, SavePlan, SavePlanOptions, SaveResult, UnavailableFile, planFileSave, planStuffSave } from './save-plan.js';
7
7
  export { DOCUMENT_FORMATS, FileFormat, IMAGE_FORMATS, acceptLabel, acceptMap, formatsForKind, isAcceptedFile } from './file-formats.js';
8
8
  export { narrowFileFormats } from './narrow-file-formats.js';
9
- export { CompositeMember, DataUrlView, DateContentView, DocumentContentView, HtmlContentView, ImageContentView, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, TYPED_SCALAR_MARKERS, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isViewableUrl, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, viewableUrl } from './native-content.js';
9
+ export { ChoiceContentView, CompositeMember, DataUrlView, DateContentView, DocumentContentView, HtmlContentView, ImageContentView, NATIVE_CHOICE_CONCEPT_REF, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, NATIVE_PAGE_CONCEPT_REF, NATIVE_RATING_CONCEPT_REF, NATIVE_YES_NO_CONCEPT_REF, PageContentView, RatingContentView, TYPED_SCALAR_MARKERS, YesNoContentView, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativePageNode, isViewableUrl, nativeVerdictOf, readChoiceContent, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, readPageContent, readRatingContent, readYesNoContent, viewableUrl } from './native-content.js';
10
10
  export { Readiness, anyOptionalStructureOpen, computeReadiness, fieldFilled, foldsBehindOptionalDisclosure, isFilled, isFoldedOptional, isOptionalStructure, mustBeFilled, optionalStructureOpen, shownAsOptional } from './readiness.js';
11
11
  export { closeOptionalStructures, openOptionalStructures, seedInputs, seedObjectValue } from './seed.js';
12
12
  export { InputPresence, buildPipeRef, getPipeIOContract, inputMustBeFilled, isFixedCountInput, isOptionalInput, isPluralInput } from './contracts.js';
@@ -1,11 +1,11 @@
1
- export { planFileSave, planStuffSave } from '../chunk-ICUEHNEH.js';
1
+ export { planFileSave, planStuffSave } from '../chunk-QWHUUMSB.js';
2
2
  export { closeOptionalStructures, openOptionalStructures, seedInputs, seedObjectValue } from '../chunk-VH5CDQDR.js';
3
3
  export { addChosenFiles, chosenFilesAdded, roomForChosenFiles, sourceFileValue } from '../chunk-NSHGLM6A.js';
4
- export { collectStuffFiles } from '../chunk-RRTI7AIR.js';
4
+ export { collectStuffFiles } from '../chunk-QINLJ5RM.js';
5
5
  export { describeValidationError, displayValue, valueAtProperty } from '../chunk-RPA7DNSK.js';
6
6
  export { apiInputsFromRunValues, fieldsForContract, inputDataFromWorkingMemory, outputsFromPipeOutput, rjsfDataFromRunValues, runValuesFromInputs, runValuesFromStore, sameRunValues, setValueAtPath, storeInputDataFromRunValues } from '../chunk-ZX52CQJ4.js';
7
7
  export { narrowFileFormats } from '../chunk-CAKQ5VFT.js';
8
- export { NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, TYPED_SCALAR_MARKERS, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isViewableUrl, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, viewableUrl } from '../chunk-CM4KVG53.js';
8
+ export { NATIVE_CHOICE_CONCEPT_REF, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, NATIVE_PAGE_CONCEPT_REF, NATIVE_RATING_CONCEPT_REF, NATIVE_YES_NO_CONCEPT_REF, TYPED_SCALAR_MARKERS, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativePageNode, isViewableUrl, nativeVerdictOf, readChoiceContent, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, readPageContent, readRatingContent, readYesNoContent, viewableUrl } from '../chunk-JSPF4BQP.js';
9
9
  export { getPipeOutputForm } from '../chunk-JIGRWJTV.js';
10
10
  export { buildResultField, buildRunFields, getPipeInputForm } from '../chunk-ZB4RYUKV.js';
11
11
  export { conceptCategory } from '../chunk-FABY3DEY.js';
@@ -108,6 +108,78 @@ declare function readHtmlContent(value: unknown): HtmlContentView | undefined;
108
108
  declare const NATIVE_HTML_CONCEPT_REF = "native.Html";
109
109
  declare const NATIVE_DATE_CONCEPT_REF = "native.Date";
110
110
  declare const NATIVE_COMPOSITE_CONCEPT_REF = "native.Composite";
111
+ declare const NATIVE_PAGE_CONCEPT_REF = "native.Page";
112
+ declare const NATIVE_YES_NO_CONCEPT_REF = "native.YesNo";
113
+ declare const NATIVE_RATING_CONCEPT_REF = "native.Rating";
114
+ declare const NATIVE_CHOICE_CONCEPT_REF = "native.Choice";
115
+ /**
116
+ * `native.Page`, read: what one page of an extracted document holds.
117
+ *
118
+ * The model is `{text_and_images: {text, images, raw_html}, page_view}`, where
119
+ * `text` is a `TextContent` (`{text}`) and the images and the page view are
120
+ * `ImageContent`s. A reader of a page wants its TEXT first, and the structural
121
+ * renderer never reached it: the descriptor states the page as an `object`
122
+ * over two members, and the text sits two levels down, under a member named
123
+ * `text` inside a member named `text_and_images`. Keyed by the concept, this
124
+ * reads the documented model and nothing else.
125
+ */
126
+ interface PageContentView {
127
+ /** The page's extracted text, as the extractor wrote it, when it wrote any. */
128
+ text?: string;
129
+ /** The images extracted from the page, each an `ImageContent`, unread. */
130
+ images: readonly unknown[];
131
+ /**
132
+ * The page's markup as the extractor fetched it, when it kept any. It is the
133
+ * page's content a second time when the page has text, and its only content
134
+ * when it has none, which is when a renderer shows it, framed, never injected.
135
+ */
136
+ rawHtml?: string;
137
+ /** The rendering of the whole page, an `ImageContent`, when one was made. */
138
+ pageView?: unknown;
139
+ }
140
+ /**
141
+ * Read a `native.Page` value. `undefined` for anything that is not a record,
142
+ * so the caller renders its own absence.
143
+ */
144
+ declare function readPageContent(value: unknown): PageContentView | undefined;
145
+ /** `native.YesNo`, read. */
146
+ interface YesNoContentView {
147
+ /** The answer: yes is `true`. */
148
+ yesNo: boolean;
149
+ /** The probability that the answer is yes, from 0 to 1, when the producer reported one. */
150
+ probability?: number;
151
+ }
152
+ /**
153
+ * Read a `native.YesNo` value: `{yes_no, probability}`, or the bare boolean a
154
+ * single-member YesNo is unwrapped to by its content key. Both are the model
155
+ * the concept states, so reading either is reading the standard.
156
+ */
157
+ declare function readYesNoContent(value: unknown): YesNoContentView | undefined;
158
+ /** `native.Rating`, read. */
159
+ interface RatingContentView {
160
+ /** The index of the selected level, 0 being the first level declared. */
161
+ level: number;
162
+ /** The name the scale gives the selected level, when it names its levels. */
163
+ label?: string;
164
+ /** The producer's confidence in the level, from 0 to 1, when it reported one. */
165
+ confidence?: number;
166
+ }
167
+ /** Read a `native.Rating` value. `undefined` when it carries no whole `level`. */
168
+ declare function readRatingContent(value: unknown): RatingContentView | undefined;
169
+ /** `native.Choice`, read. */
170
+ interface ChoiceContentView {
171
+ /** The key of the selected option, as the method declared it. */
172
+ choice: string;
173
+ /** The producer's confidence in the choice, from 0 to 1, when it reported one. */
174
+ confidence?: number;
175
+ }
176
+ /**
177
+ * Read a `native.Choice` value. `undefined` when it carries no `choice`, or an
178
+ * empty one: the content model types `choice` as any text, but a choice
179
+ * question's options are keyed by non-empty strings and its `Choice` names one
180
+ * of them, so an empty key names no option and leaves no answer to draw.
181
+ */
182
+ declare function readChoiceContent(value: unknown): ChoiceContentView | undefined;
111
183
  /** One member of a composite: the name it was composed under, and its content. */
112
184
  interface CompositeMember {
113
185
  name: string;
@@ -164,15 +236,40 @@ declare function isNativeDateNode(node: NativeNode): boolean;
164
236
  */
165
237
  declare function isNativeCompositeNode(node: NativeNode): boolean;
166
238
  /**
167
- * Whether a node is one of the three natives the kind vocabulary cannot name —
168
- * a date, a page, a composite — which a renderer reads by CONCEPT before it
169
- * reads the kind. A list of one answers no (the predicates refuse a `list`
170
- * node), and its item answers yes.
239
+ * Whether a node is a `native.Page`, or a concept refining it — one page of an
240
+ * extracted document.
241
+ *
242
+ * Its node is an `object` over `{text_and_images, page_view}`, which the
243
+ * structural renderer laid out as a record: in a list, a table whose
244
+ * "Text and images" column was named by the first `text` member it found,
245
+ * `raw_html`, which an extractor leaves empty, so a page holding a whole
246
+ * report read as a row of dashes. Keyed by concept, the result view reads the
247
+ * page's text instead. See `readPageContent`.
248
+ */
249
+ declare function isNativePageNode(node: NativeNode): boolean;
250
+ /**
251
+ * Whether a node is one of the verdicts a judge returns — a yes or no
252
+ * (`native.YesNo`), a rating (`native.Rating`) or a choice (`native.Choice`),
253
+ * or a concept refining one — and which.
254
+ *
255
+ * Their nodes are `object`s over the verdict and its measures (a `YesNo` from
256
+ * an older runtime, whose model had one member, is a `boolean` node unwrapped
257
+ * by its content key), so the structural renderer printed the measures as a
258
+ * record: "Yes no: Yes / Probability: 1". The concept is what says the record
259
+ * is a verdict, read off `concept_ref` and `refines` like every other native
260
+ * predicate here, never off which keys the value happens to hold.
261
+ */
262
+ declare function nativeVerdictOf(node: NativeNode): 'yes_no' | 'rating' | 'choice' | undefined;
263
+ /**
264
+ * Whether a node is one of the natives the kind vocabulary cannot name that a
265
+ * list draws one value per line — a date, an HTML page, a composite — which a
266
+ * renderer reads by CONCEPT before it reads the kind. A list of one answers no
267
+ * (the predicates refuse a `list` node), and its item answers yes.
171
268
  *
172
269
  * One answer, read twice: the result view renders a list whose item answers yes
173
270
  * one value per line rather than as a table, and the generative layer delegates
174
271
  * that list to the kernel, because no catalog component reads a native value.
175
- * Not re-exported: a host asks the three predicates it needs.
272
+ * Not re-exported: a host asks the predicates it needs.
176
273
  */
177
274
  declare function isNativeValueNode(node: NativeNode): boolean;
178
275
  /** What the native predicates read off a node: its stated kind and its concept. */
@@ -277,4 +374,4 @@ declare const TYPED_SCALAR_MARKERS: readonly ["__class__", "__module__"];
277
374
  /** Whether a record carries the typed-scalar markers. Informational. */
278
375
  declare function hasTypedScalarMarkers(value: unknown): boolean;
279
376
 
280
- export { type CompositeMember, type DataUrlView, type DateContentView, type DocumentContentView, type HtmlContentView, type ImageContentView, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, TYPED_SCALAR_MARKERS, dataUrlExtensions, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativeValueNode, isViewableUrl, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, viewableUrl };
377
+ export { type ChoiceContentView, type CompositeMember, type DataUrlView, type DateContentView, type DocumentContentView, type HtmlContentView, type ImageContentView, NATIVE_CHOICE_CONCEPT_REF, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, NATIVE_PAGE_CONCEPT_REF, NATIVE_RATING_CONCEPT_REF, NATIVE_YES_NO_CONCEPT_REF, type PageContentView, type RatingContentView, TYPED_SCALAR_MARKERS, type YesNoContentView, dataUrlExtensions, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativePageNode, isNativeValueNode, isViewableUrl, nativeVerdictOf, readChoiceContent, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, readPageContent, readRatingContent, readYesNoContent, viewableUrl };
@@ -1,4 +1,4 @@
1
- export { NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, TYPED_SCALAR_MARKERS, dataUrlExtensions, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativeValueNode, isViewableUrl, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, viewableUrl } from '../chunk-CM4KVG53.js';
1
+ export { NATIVE_CHOICE_CONCEPT_REF, NATIVE_COMPOSITE_CONCEPT_REF, NATIVE_DATE_CONCEPT_REF, NATIVE_HTML_CONCEPT_REF, NATIVE_PAGE_CONCEPT_REF, NATIVE_RATING_CONCEPT_REF, NATIVE_YES_NO_CONCEPT_REF, TYPED_SCALAR_MARKERS, dataUrlExtensions, formatDateContent, hasTypedScalarMarkers, isNativeCompositeNode, isNativeDateNode, isNativeHtmlNode, isNativePageNode, isNativeValueNode, isViewableUrl, nativeVerdictOf, readChoiceContent, readCompositeContent, readDataUrl, readDateContent, readDocumentContent, readHtmlContent, readImageContent, readPageContent, readRatingContent, readYesNoContent, viewableUrl } from '../chunk-JSPF4BQP.js';
2
2
  import '../chunk-V3OV2XQT.js';
3
3
  //# sourceMappingURL=native-content.js.map
4
4
  //# sourceMappingURL=native-content.js.map
@@ -1,6 +1,6 @@
1
- export { planFileSave, planStuffSave, splitFileName, typedFileStem } from '../chunk-ICUEHNEH.js';
2
- import '../chunk-RRTI7AIR.js';
3
- import '../chunk-CM4KVG53.js';
1
+ export { planFileSave, planStuffSave, splitFileName, typedFileStem } from '../chunk-QWHUUMSB.js';
2
+ import '../chunk-QINLJ5RM.js';
3
+ import '../chunk-JSPF4BQP.js';
4
4
  import '../chunk-V3OV2XQT.js';
5
5
  //# sourceMappingURL=save-plan.js.map
6
6
  //# sourceMappingURL=save-plan.js.map
@@ -1,5 +1,5 @@
1
- export { collectStuffFiles, readStuffFile } from '../chunk-RRTI7AIR.js';
2
- import '../chunk-CM4KVG53.js';
1
+ export { collectStuffFiles, readStuffFile } from '../chunk-QINLJ5RM.js';
2
+ import '../chunk-JSPF4BQP.js';
3
3
  import '../chunk-V3OV2XQT.js';
4
4
  //# sourceMappingURL=stuff-files.js.map
5
5
  //# sourceMappingURL=stuff-files.js.map
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { cn, checkedAccentClass, focusOutlineClass, linkTextClass, selectedBorderClass, selectedFillClass, fieldControlClass, ResultRoot, ResultField, FieldRenderer, ToggleGroup, ToggleGroupItem, selectedFillStrongClass, Switch, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '../chunk-UGKFWX7L.js';
3
- import '../chunk-ICUEHNEH.js';
2
+ import { cn, checkedAccentClass, focusOutlineClass, linkTextClass, selectedBorderClass, selectedFillClass, fieldControlClass, ResultRoot, ResultField, FieldRenderer, ToggleGroup, ToggleGroupItem, selectedFillStrongClass, Switch, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '../chunk-RSYOZZZF.js';
3
+ import '../chunk-QWHUUMSB.js';
4
4
  export { seedInputs } from '../chunk-VH5CDQDR.js';
5
5
  import '../chunk-NSHGLM6A.js';
6
- import '../chunk-RRTI7AIR.js';
6
+ import '../chunk-QINLJ5RM.js';
7
7
  import '../chunk-ZX52CQJ4.js';
8
- import { isNativeValueNode, readDateContent, formatDateContent, isNativeHtmlNode, isNativeDateNode, isNativeCompositeNode } from '../chunk-CM4KVG53.js';
8
+ import { isNativeValueNode, readDateContent, formatDateContent, isNativeHtmlNode, isNativeDateNode, isNativeCompositeNode } from '../chunk-JSPF4BQP.js';
9
9
  export { brandManifestSchema } from '../chunk-QFX332LE.js';
10
10
  import '../chunk-ZB4RYUKV.js';
11
11
  import '../chunk-FABY3DEY.js';
@@ -276,6 +276,14 @@ interface FieldStrings {
276
276
  preview: string;
277
277
  removeFileAria: string;
278
278
  previewUnavailablePdf: string;
279
+ /**
280
+ * Said in a result, in place of a PDF's frame, where the browser draws no PDF
281
+ * in a page (Android's browsers, a headless browser): above the actions that
282
+ * open the file in a new tab and save it.
283
+ */
284
+ pdfViewerUnavailable: string;
285
+ /** The link that opens a file in a new tab, where it cannot be shown in the page. */
286
+ openInNewTab: string;
279
287
  /**
280
288
  * What a result slot the run resolved as an absence SHOWS — a dash, not a
281
289
  * sentence. Beside forty values in a grid, "not provided" repeated is louder
@@ -355,6 +363,38 @@ interface FieldStrings {
355
363
  resultViewGroup: string;
356
364
  yes: string;
357
365
  no: string;
366
+ /**
367
+ * The line under a yes or no verdict, in `app`, given the probability its
368
+ * producer reported that the answer is yes, from 0 to 1. It states the
369
+ * probability of yes whichever way the verdict went, which is what the
370
+ * producer measured: a "no" decided against a threshold can still carry a
371
+ * probability of yes above a half.
372
+ */
373
+ yesProbability: (share: number) => string;
374
+ /** The line under a rating or a choice, in `app`, given the producer's confidence, from 0 to 1. */
375
+ verdictConfidence: (share: number) => string;
376
+ /**
377
+ * A rating's verdict when its scale names no levels, given the level's
378
+ * position counted from one: the payload's `level` is an index from zero.
379
+ */
380
+ ratingLevel: (position: number) => string;
381
+ /** The caption over each page of an extracted document with several, counted from one. */
382
+ pageNumber: (position: number) => string;
383
+ /** What names a table read out of an extracted page when the table has no caption of its own. */
384
+ extractedTable: string;
385
+ /**
386
+ * The accessible name of a result's picture, which opens it in the viewer,
387
+ * given the picture's name: a gallery's tile in `app` shows no name, so this
388
+ * is what tells one tile from the next to a screen reader.
389
+ */
390
+ viewImage: (name: string) => string;
391
+ /** Where the viewer stands in a list of pictures, counted from one: "3 of 6". */
392
+ imagePosition: (position: number, count: number) => string;
393
+ /** The viewer's two buttons that move to the picture before or after this one. */
394
+ previousImage: string;
395
+ nextImage: string;
396
+ /** The viewer's link that opens the whole picture in a tab of its own. */
397
+ openOriginal: string;
358
398
  /**
359
399
  * Shown when a picked file is not a format this slot accepts. Takes the
360
400
  * slot's own formats as the hint names them (`PNG, JPG`), after any narrowing
@@ -930,6 +970,68 @@ declare function resolveHtmlStorageUrls(markup: string, { resolveUrl, resolveUrl
930
970
  * filename.
931
971
  */
932
972
  type ResolveUrl = (url: string) => string | undefined;
973
+ /**
974
+ * What the view asks a host for when it draws a picture small: the width it
975
+ * would like the picture to be, in the picture's own pixels.
976
+ *
977
+ * It is the width that covers the box the view draws the picture in, at twice
978
+ * the box's CSS size, so the copy stays sharp on a high-density screen, and it
979
+ * follows the picture's shape when the payload states its `width` and
980
+ * `height`. A gallery's tile is a square narrower than 288 CSS pixels that
981
+ * the picture covers: `576` for a square or portrait picture, and `576` times
982
+ * the aspect ratio for a landscape one, which covers the square by its
983
+ * height. A table cell's thumbnail is 40 CSS pixels tall at the picture's own
984
+ * width: `80` times the aspect ratio, and never less than `256`. A picture of
985
+ * no stated shape is asked for at `576` in a tile and `256` in a cell. The
986
+ * view reads these from the shape rather than measuring each box, so a host
987
+ * that makes its copies on demand keeps few per picture, and may round a
988
+ * width up to the nearest copy it keeps.
989
+ */
990
+ interface RenditionRequest {
991
+ width: number;
992
+ }
993
+ /**
994
+ * The host's seam for a SMALLER copy of a picture, which the view draws where
995
+ * it shows the picture small: a gallery's tiles and a table cell's thumbnail.
996
+ *
997
+ * ## Why a result view needs one
998
+ *
999
+ * Without it every tile loads the whole picture: a generated image is around
1000
+ * a megabyte at 1024 pixels, drawn in a box of 150. A gallery of six spins for
1001
+ * seconds before a single tile shows, and a table with a picture per row loads
1002
+ * every original to draw a thumbnail 40 pixels tall. The kernel cannot make a
1003
+ * smaller copy itself, since it holds a reference and the host holds the file;
1004
+ * a host that can (a resizing route, copies made when the file was stored, an
1005
+ * image service in front of its storage) answers here.
1006
+ *
1007
+ * ## The contract
1008
+ *
1009
+ * Called with the picture's own `url` member, exactly as `resolveUrl` is (a
1010
+ * `pipelex-storage://` reference, or whatever `http(s):` or `data:` URL the
1011
+ * payload carries), and the {@link RenditionRequest}. Answer the URL of a copy
1012
+ * of that picture at least `width` pixels wide (or the original's own width,
1013
+ * where the original is narrower), keeping its aspect ratio, or `undefined`
1014
+ * to have the view draw the whole picture, which is exactly what it does with
1015
+ * no such function. Synchronous and pure, for the reasons `ResolveUrl` gives:
1016
+ * a host that presigns its copies resolves them in a batch before it renders
1017
+ * and closes over the result.
1018
+ *
1019
+ * - **The answer passes the URL gate**, as any resolver's does, and an answer
1020
+ * the gate refuses counts as none.
1021
+ * - **It only ever paints.** The copy is the `src` of that one small picture
1022
+ * and nothing else: the viewer the picture opens, its "open the original"
1023
+ * link, its copy control and every download keep the whole picture's URL,
1024
+ * chosen as before (`resolveUrl`, then `public_url`, then `url`). A copy
1025
+ * therefore never becomes the file a reader opens, saves or shares, and is
1026
+ * never framed.
1027
+ * - **It is asked only about a picture the view can already paint.** A copy
1028
+ * makes a picture lighter; it never makes one showable that is not, so a
1029
+ * stored reference neither `resolveUrl` nor the payload can paint is still
1030
+ * named rather than drawn.
1031
+ * - **A copy that does not load gives way to the whole picture**, so a
1032
+ * missing copy costs the reader the wait, never the picture.
1033
+ */
1034
+ type ResolveRendition = (url: string, request: RenditionRequest) => string | undefined;
933
1035
  /**
934
1036
  * How a stored reference becomes a URL that works OUTSIDE this page — pasted
935
1037
  * into another tab, another app, a colleague's message.
@@ -1069,6 +1171,13 @@ interface ResultEnv {
1069
1171
  * answer, so a page is never held back by it for good.
1070
1172
  */
1071
1173
  resolveUrls?: ResolveUrls;
1174
+ /**
1175
+ * A smaller copy of a picture, for the places the view draws one small: a
1176
+ * gallery's tiles and a table cell's thumbnail. Optional; unset, or for a
1177
+ * picture it does not answer, the whole picture is drawn. See
1178
+ * {@link ResolveRendition}.
1179
+ */
1180
+ resolveRendition?: ResolveRendition;
1072
1181
  resolveShareUrl?: ResolveShareUrl;
1073
1182
  proseImages?: ProseImages;
1074
1183
  /**
@@ -1118,7 +1227,7 @@ interface ResultEnv {
1118
1227
  */
1119
1228
  renderPdf?: RenderPdf;
1120
1229
  }
1121
- declare function ResultEnvProvider({ resolveUrl, resolveUrls, resolveShareUrl, proseImages, tableColumns, tableLayout, saveFiles, downloads, renderPdf, children, }: ResultEnv & {
1230
+ declare function ResultEnvProvider({ resolveUrl, resolveUrls, resolveRendition, resolveShareUrl, proseImages, tableColumns, tableLayout, saveFiles, downloads, renderPdf, children, }: ResultEnv & {
1122
1231
  children: ReactNode;
1123
1232
  }): react.JSX.Element;
1124
1233
  /**
@@ -1134,6 +1243,8 @@ declare function ResultEnvProvider({ resolveUrl, resolveUrls, resolveShareUrl, p
1134
1243
  declare function useResolvedUrl(url: string): string;
1135
1244
  /** For the non-React readers that need the same answer (previewability). */
1136
1245
  declare function useResolveUrl(): ResolveUrl | undefined;
1246
+ /** The host's smaller copies of a picture, when it supplies them. */
1247
+ declare function useResolveRendition(): ResolveRendition | undefined;
1137
1248
  /** The share-URL minter, when the host supplies one. */
1138
1249
  declare function useResolveShareUrl(): ResolveShareUrl | undefined;
1139
1250
  /** The prose-image policy, defaulted to the safe answer for a host that stated none. */
@@ -1196,8 +1307,11 @@ interface StuffViewerProps {
1196
1307
  *
1197
1308
  * So the name comes from the caller, because only the caller knows it: the
1198
1309
  * graph knows which node was opened, a run page knows which variable it is
1199
- * showing. Absent, the descriptor's own name stands, which keeps a host that
1200
- * has nothing better to say honest rather than blank.
1310
+ * showing. Absent, the descriptor's own name stands in `studio`, which keeps
1311
+ * a host that has nothing better to say honest rather than blank. In `app`
1312
+ * the panel draws a title only when this is given: "Output" tells a method
1313
+ * app's reader nothing, and a host that heads the result itself wants no
1314
+ * second heading under its own.
1201
1315
  *
1202
1316
  * It also supplies `downloadBaseName`'s default, so the file a reader saves
1203
1317
  * is named after the thing they were reading rather than `output.json`.
@@ -1604,4 +1718,4 @@ declare function FieldDomIdProvider({ prefix, children, }: {
1604
1718
  */
1605
1719
  declare function useFieldDomId(path: string): string;
1606
1720
 
1607
- export { BooleanField, ConceptPill, DEFAULT_FIELD_STRINGS, DateField, type DownloadDisplay, EN_FIELD_STRINGS, EnumField, ExampleSource, FIELD_STRINGS_BY_LOCALE, FR_FIELD_STRINGS, FieldDomIdProvider, FieldEnv, type FieldPresentation, FieldPresentationProvider, FieldShell, type FieldStrings, FieldStringsProvider, FilePickerSource, FillWithExample, type FillWithExampleProps, FormExample, type HtmlPdf, type HtmlPdfOptions, HtmlPreview, type HtmlPreviewProps, JsonView, ListField, Markdown, type MarkdownProps, type MarkupResolvers, MethodForm, type MethodFormController, type MethodFormProps, type MethodFormState, type MethodFormUploadContext, type MethodFormValues, NumberField, ObjectField, OptionalToggle, PdfDownloadButton, type PdfDownloadButtonProps, type PdfPage, ProseField, type ProseImages, type RenderPdf, type ResolveShareUrl, type ResolveUrl, type ResolveUrls, ResultEnvProvider, ResultField, type ResultFieldProps, RowMove, SUPPORTED_LOCALES, StuffViewer, type StuffViewerProps, type StuffViewerView, type TableLayout, TextField, UnknownField, UploadedFile, type UseMethodFormOptions, fieldControlClass, fieldStringsFor, humanizeFieldName, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveShareUrl, useResolveUrl, useResolvedUrl };
1721
+ export { BooleanField, ConceptPill, DEFAULT_FIELD_STRINGS, DateField, type DownloadDisplay, EN_FIELD_STRINGS, EnumField, ExampleSource, FIELD_STRINGS_BY_LOCALE, FR_FIELD_STRINGS, FieldDomIdProvider, FieldEnv, type FieldPresentation, FieldPresentationProvider, FieldShell, type FieldStrings, FieldStringsProvider, FilePickerSource, FillWithExample, type FillWithExampleProps, FormExample, type HtmlPdf, type HtmlPdfOptions, HtmlPreview, type HtmlPreviewProps, JsonView, ListField, Markdown, type MarkdownProps, type MarkupResolvers, MethodForm, type MethodFormController, type MethodFormProps, type MethodFormState, type MethodFormUploadContext, type MethodFormValues, NumberField, ObjectField, OptionalToggle, PdfDownloadButton, type PdfDownloadButtonProps, type PdfPage, ProseField, type ProseImages, type RenderPdf, type RenditionRequest, type ResolveRendition, type ResolveShareUrl, type ResolveUrl, type ResolveUrls, ResultEnvProvider, ResultField, type ResultFieldProps, RowMove, SUPPORTED_LOCALES, StuffViewer, type StuffViewerProps, type StuffViewerView, type TableLayout, TextField, UnknownField, UploadedFile, type UseMethodFormOptions, fieldControlClass, fieldStringsFor, humanizeFieldName, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveRendition, useResolveShareUrl, useResolveUrl, useResolvedUrl };
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- export { BooleanField, ConceptPill, DEFAULT_FIELD_STRINGS, DateField, DocumentField, EN_FIELD_STRINGS, EnumField, FIELD_STRINGS_BY_LOCALE, FR_FIELD_STRINGS, FieldDomIdProvider, FieldPresentationProvider, FieldRenderer, FieldShell, FieldStringsProvider, FilePicker, FilePickerEntry, FillWithExample, HtmlPreview, ImageField, JsonView, ListField, Markdown, MethodForm, NumberField, ObjectField, OptionalToggle, PdfDownloadButton, ProseField, ResultEnvProvider, ResultField, SUPPORTED_LOCALES, StuffViewer, TextField, UnknownField, fieldControlClass, fieldStringsFor, humanizeFieldName, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveShareUrl, useResolveUrl, useResolvedUrl } from '../chunk-UGKFWX7L.js';
3
- import '../chunk-ICUEHNEH.js';
2
+ export { BooleanField, ConceptPill, DEFAULT_FIELD_STRINGS, DateField, DocumentField, EN_FIELD_STRINGS, EnumField, FIELD_STRINGS_BY_LOCALE, FR_FIELD_STRINGS, FieldDomIdProvider, FieldPresentationProvider, FieldRenderer, FieldShell, FieldStringsProvider, FilePicker, FilePickerEntry, FillWithExample, HtmlPreview, ImageField, JsonView, ListField, Markdown, MethodForm, NumberField, ObjectField, OptionalToggle, PdfDownloadButton, ProseField, ResultEnvProvider, ResultField, SUPPORTED_LOCALES, StuffViewer, TextField, UnknownField, fieldControlClass, fieldStringsFor, humanizeFieldName, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveRendition, useResolveShareUrl, useResolveUrl, useResolvedUrl } from '../chunk-RSYOZZZF.js';
3
+ import '../chunk-QWHUUMSB.js';
4
4
  import '../chunk-VH5CDQDR.js';
5
5
  import '../chunk-NSHGLM6A.js';
6
- import '../chunk-RRTI7AIR.js';
6
+ import '../chunk-QINLJ5RM.js';
7
7
  import '../chunk-ZX52CQJ4.js';
8
- import '../chunk-CM4KVG53.js';
8
+ import '../chunk-JSPF4BQP.js';
9
9
  import '../chunk-ZB4RYUKV.js';
10
10
  import '../chunk-FABY3DEY.js';
11
11
  import '../chunk-XCO6GTEC.js';