@pipelex/mthds-form 0.28.0 → 0.30.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.
- package/dist/brand/index.d.ts +170 -5
- package/dist/brand/index.js +274 -11
- package/dist/brand/index.js.map +1 -1
- package/dist/chunk-GHVVULHY.js +42 -0
- package/dist/chunk-GHVVULHY.js.map +1 -0
- package/dist/{chunk-4DPYGNJ3.js → chunk-IBBAJXIO.js} +3 -3
- package/dist/{chunk-4DPYGNJ3.js.map → chunk-IBBAJXIO.js.map} +1 -1
- package/dist/{chunk-II5TOORN.js → chunk-JCFALTTY.js} +285 -142
- package/dist/chunk-JCFALTTY.js.map +1 -0
- package/dist/core/gate.js +2 -2
- package/dist/core/humanize.d.ts +77 -0
- package/dist/core/humanize.js +3 -0
- package/dist/core/humanize.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +3 -2
- package/dist/generative/index.js +73 -35
- package/dist/generative/index.js.map +1 -1
- package/dist/react/index.d.ts +16 -18
- package/dist/react/index.js +2 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-II5TOORN.js.map +0 -1
|
@@ -3,6 +3,7 @@ import { seedInputs, closeOptionalStructures, openOptionalStructures } from './c
|
|
|
3
3
|
import { sourceFileValue, roomForChosenFiles, roomForDroppedFiles, addChosenFiles, placeDroppedFiles, chosenFilesAdded } from './chunk-L23R3JNQ.js';
|
|
4
4
|
import { readStuffFile } from './chunk-56WECFBD.js';
|
|
5
5
|
import { apiInputsFromRunValues, sameRunValues, runValuesFromInputs, setValueAtPath } from './chunk-ZX52CQJ4.js';
|
|
6
|
+
import { enumValueLabeler, humanizeFieldName, humanizeEnumValue } from './chunk-GHVVULHY.js';
|
|
6
7
|
import { TYPED_SCALAR_MARKERS, viewableUrl, splitCitations, webHref, isNativeDateNode, isNativeHtmlNode, readHtmlContent, isNativeCompositeNode, readCompositeContent, isNativePageNode, nativeVerdictOf, isNativeSearchResultNode, readSearchResultContent, isNativeValueNode, readDateContent, formatDateContent, readPageContent, readYesNoContent, readRatingContent, readChoiceContent, readDocumentContent, readImageContent, readDataUrl, citedSource } from './chunk-QQK6Y55E.js';
|
|
7
8
|
import { buildRunFields } from './chunk-ZB4RYUKV.js';
|
|
8
9
|
import { conceptCategory } from './chunk-FABY3DEY.js';
|
|
@@ -73,44 +74,12 @@ function FieldPresentationProvider({
|
|
|
73
74
|
function useFieldPresentation() {
|
|
74
75
|
return use(FieldPresentationContext);
|
|
75
76
|
}
|
|
76
|
-
function humanizeFieldName(name) {
|
|
77
|
-
const words = name.replace(/[_-]+/g, " ").trim();
|
|
78
|
-
if (words === "") return name;
|
|
79
|
-
return words.charAt(0).toUpperCase() + words.slice(1);
|
|
80
|
-
}
|
|
81
|
-
function humanizeEnumValue(code) {
|
|
82
|
-
if (!ENUM_CODE.test(code)) return code;
|
|
83
|
-
const allCaps = code === code.toUpperCase() && code !== code.toLowerCase();
|
|
84
|
-
if (!allCaps) return humanizeFieldName(code);
|
|
85
|
-
return CODE_SEPARATOR.test(code) ? humanizeFieldName(code.toLowerCase()) : code;
|
|
86
|
-
}
|
|
87
|
-
var ENUM_CODE = /^\p{L}[\p{L}\p{N}_-]*$/u;
|
|
88
|
-
var CODE_SEPARATOR = /[_-]/;
|
|
89
77
|
function enumLabeler(options, presentation) {
|
|
90
|
-
|
|
91
|
-
let labeler = APP_LABELERS.get(options);
|
|
92
|
-
if (labeler === void 0) {
|
|
93
|
-
labeler = wordsOrCodes(options);
|
|
94
|
-
APP_LABELERS.set(options, labeler);
|
|
95
|
-
}
|
|
96
|
-
return labeler;
|
|
78
|
+
return presentation === "app" ? enumValueLabeler(options) : asWritten;
|
|
97
79
|
}
|
|
98
80
|
function asWritten(value) {
|
|
99
81
|
return value;
|
|
100
82
|
}
|
|
101
|
-
function wordsOrCodes(options) {
|
|
102
|
-
const labels = /* @__PURE__ */ new Map();
|
|
103
|
-
const owners = /* @__PURE__ */ new Map();
|
|
104
|
-
for (const option of options) {
|
|
105
|
-
const label = humanizeEnumValue(option);
|
|
106
|
-
const owner = owners.get(label);
|
|
107
|
-
if (owner !== void 0 && owner !== option) return asWritten;
|
|
108
|
-
owners.set(label, option);
|
|
109
|
-
labels.set(option, label);
|
|
110
|
-
}
|
|
111
|
-
return (value) => labels.get(value) ?? value;
|
|
112
|
-
}
|
|
113
|
-
var APP_LABELERS = /* @__PURE__ */ new WeakMap();
|
|
114
83
|
function fieldLabel(title, name, presentation) {
|
|
115
84
|
if (title !== void 0) return title;
|
|
116
85
|
return presentation === "app" ? humanizeFieldName(name) : name;
|
|
@@ -852,6 +821,27 @@ function MoreFooter({ pages }) {
|
|
|
852
821
|
if (!pages.hasMore) return null;
|
|
853
822
|
return /* @__PURE__ */ jsx("div", { className: "flex justify-center px-4 py-4", children: /* @__PURE__ */ jsx(ListAction, { onClick: pages.loadMore, children: s.showMore }) });
|
|
854
823
|
}
|
|
824
|
+
|
|
825
|
+
// src/react/style-tokens.ts
|
|
826
|
+
var headingFaceClass = "[font-family:var(--font-heading,revert-layer)]";
|
|
827
|
+
var headingTrackingClass = "[letter-spacing:var(--heading-tracking,revert-layer)]";
|
|
828
|
+
var headingTrackingTightClass = "[letter-spacing:var(--heading-tracking,-0.025em)]";
|
|
829
|
+
var headingWeightClass = {
|
|
830
|
+
500: "[font-weight:var(--heading-weight,500)]",
|
|
831
|
+
600: "[font-weight:var(--heading-weight,600)]",
|
|
832
|
+
700: "[font-weight:var(--heading-weight,700)]"
|
|
833
|
+
};
|
|
834
|
+
function headingClass(weight, tight = false) {
|
|
835
|
+
return [
|
|
836
|
+
headingFaceClass,
|
|
837
|
+
headingWeightClass[weight],
|
|
838
|
+
tight ? headingTrackingTightClass : headingTrackingClass
|
|
839
|
+
].join(" ");
|
|
840
|
+
}
|
|
841
|
+
var panelSurfaceClass = "[border-style:solid] [border-width:var(--panel-edge-width,1px)] [border-color:var(--panel-edge,var(--border,hsl(240_5.9%_90%)))] [background-color:var(--panel-fill,var(--card,hsl(0_0%_100%)))]";
|
|
842
|
+
var panelRaisedShadowClass = "[box-shadow:var(--panel-shadow,0_20px_25px_-5px_rgb(0_0_0/0.1),0_8px_10px_-6px_rgb(0_0_0/0.1))]";
|
|
843
|
+
var panelFlatShadowClass = "[box-shadow:var(--panel-shadow,none)]";
|
|
844
|
+
var actionShadowClass = "[box-shadow:var(--action-shadow,0_0_28px_color-mix(in_oklab,var(--primary,hsl(240_5.9%_10%))_35%,transparent))] hover:[box-shadow:var(--action-shadow,0_0_44px_color-mix(in_oklab,var(--primary,hsl(240_5.9%_10%))_50%,transparent))]";
|
|
855
845
|
var Dialog = DialogPrimitive.Root;
|
|
856
846
|
var DialogClose = DialogPrimitive.Close;
|
|
857
847
|
function closeAutoFocus(onCloseAutoFocus, returnFocus) {
|
|
@@ -902,7 +892,7 @@ var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
902
892
|
DialogPrimitive.Title,
|
|
903
893
|
{
|
|
904
894
|
ref,
|
|
905
|
-
className: cn("text-[16px]
|
|
895
|
+
className: cn("text-[16px] text-foreground", headingClass(600), className),
|
|
906
896
|
...props
|
|
907
897
|
}
|
|
908
898
|
));
|
|
@@ -1072,7 +1062,7 @@ function FilePickerBody({
|
|
|
1072
1062
|
return next;
|
|
1073
1063
|
});
|
|
1074
1064
|
const choices = [...chosen.values()];
|
|
1075
|
-
const
|
|
1065
|
+
const use9 = () => {
|
|
1076
1066
|
if (choices.length === 0) return;
|
|
1077
1067
|
onUse(choices);
|
|
1078
1068
|
onClose();
|
|
@@ -1177,7 +1167,7 @@ function FilePickerBody({
|
|
|
1177
1167
|
"button",
|
|
1178
1168
|
{
|
|
1179
1169
|
type: "button",
|
|
1180
|
-
onClick:
|
|
1170
|
+
onClick: use9,
|
|
1181
1171
|
disabled: choices.length === 0,
|
|
1182
1172
|
className: cn(
|
|
1183
1173
|
"flex h-12 w-full items-center justify-center rounded-md bg-primary px-4 text-[16px] font-medium text-primary-foreground transition-colors hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-50",
|
|
@@ -2009,7 +1999,7 @@ function EnumField({ field, value, onChange, id, error, disabled }) {
|
|
|
2009
1999
|
value: option,
|
|
2010
2000
|
variant: "outline",
|
|
2011
2001
|
className: cn(
|
|
2012
|
-
"h-9 min-w-0 gap-1.5 border-border bg-input px-3 text-[13px] text-muted-foreground hover:bg-muted hover:text-foreground data-[state=on]:font-medium",
|
|
2002
|
+
"h-9 min-w-0 gap-1.5 border-border bg-input px-3 text-[13px] text-muted-foreground hover:bg-muted hover:text-foreground data-[state=on]:font-medium max-sm:h-11 max-sm:min-w-11",
|
|
2013
2003
|
selectedStateBorderClass
|
|
2014
2004
|
),
|
|
2015
2005
|
children: [
|
|
@@ -2201,11 +2191,27 @@ function OptionalToggle({ count, expanded, onToggle, noun = "field" }) {
|
|
|
2201
2191
|
}
|
|
2202
2192
|
);
|
|
2203
2193
|
}
|
|
2194
|
+
var StructureDepthContext = createContext(0);
|
|
2195
|
+
function structureGrouping(depth, labelled) {
|
|
2196
|
+
if (!labelled) return "none";
|
|
2197
|
+
return depth === 0 ? "box" : "rule";
|
|
2198
|
+
}
|
|
2199
|
+
function structureNameClass(isApp, depth) {
|
|
2200
|
+
if (!isApp) return "font-mono text-[13px] font-medium leading-none";
|
|
2201
|
+
return cn(
|
|
2202
|
+
depth === 0 ? "text-[16px] font-semibold leading-snug" : "text-[14.5px] font-semibold leading-snug",
|
|
2203
|
+
headingFaceClass
|
|
2204
|
+
);
|
|
2205
|
+
}
|
|
2204
2206
|
function ObjectField({ field, value, onChange, id, error, env }) {
|
|
2205
2207
|
const [showOptional, setShowOptional] = useState(false);
|
|
2206
2208
|
const presentation = useFieldPresentation();
|
|
2207
2209
|
const isApp = presentation === "app";
|
|
2210
|
+
const depth = use(StructureDepthContext);
|
|
2208
2211
|
const data = value ?? {};
|
|
2212
|
+
const label = fieldLabel(field.title, field.name, presentation);
|
|
2213
|
+
const grouping = structureGrouping(depth, label.trim() !== "");
|
|
2214
|
+
const domId = useFieldDomId(id);
|
|
2209
2215
|
const setChild = (name, childValue) => onChange({ ...data, [name]: childValue });
|
|
2210
2216
|
const folded = field.fields.filter((f) => isFoldedOptional(f, ownProp(data, f.name)));
|
|
2211
2217
|
const structureOpen = anyOptionalStructureOpen(field.fields, data);
|
|
@@ -2220,30 +2226,31 @@ function ObjectField({ field, value, onChange, id, error, env }) {
|
|
|
2220
2226
|
);
|
|
2221
2227
|
}
|
|
2222
2228
|
};
|
|
2223
|
-
|
|
2229
|
+
const nameId = `${domId}--name`;
|
|
2230
|
+
const descriptionId = `${domId}--description`;
|
|
2231
|
+
const group = grouping === "none" ? {} : {
|
|
2232
|
+
role: "group",
|
|
2233
|
+
"aria-labelledby": nameId,
|
|
2234
|
+
"aria-describedby": field.description ? descriptionId : void 0
|
|
2235
|
+
};
|
|
2236
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-2", ...group, children: [
|
|
2224
2237
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline gap-x-2 gap-y-1", children: [
|
|
2225
|
-
/* @__PURE__ */ jsx(
|
|
2226
|
-
"span",
|
|
2227
|
-
{
|
|
2228
|
-
className: cn(
|
|
2229
|
-
"text-[13px] font-medium leading-none text-foreground",
|
|
2230
|
-
isApp ? "text-[13.5px]" : "font-mono"
|
|
2231
|
-
),
|
|
2232
|
-
children: fieldLabel(field.title, field.name, presentation)
|
|
2233
|
-
}
|
|
2234
|
-
),
|
|
2238
|
+
/* @__PURE__ */ jsx("span", { id: nameId, className: cn("text-foreground", structureNameClass(isApp, depth)), children: label }),
|
|
2235
2239
|
!isApp && /* @__PURE__ */ jsx(ConceptPill, { conceptRef: field.conceptRef, category: "structured" })
|
|
2236
2240
|
] }),
|
|
2237
|
-
field.description && /* @__PURE__ */ jsx("p", { className: "text-[12px] leading-relaxed text-muted-foreground", children: field.description }),
|
|
2241
|
+
field.description && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "text-[12px] leading-relaxed text-muted-foreground", children: field.description }),
|
|
2238
2242
|
/* @__PURE__ */ jsxs(
|
|
2239
2243
|
"div",
|
|
2240
2244
|
{
|
|
2245
|
+
"data-structure-group": grouping,
|
|
2241
2246
|
className: cn(
|
|
2242
|
-
"space-y-4
|
|
2243
|
-
|
|
2247
|
+
"space-y-4",
|
|
2248
|
+
grouping === "box" && "rounded-lg border bg-card/40 p-4 max-sm:p-3",
|
|
2249
|
+
grouping === "rule" && "border-l-2 pl-4 max-sm:pl-3",
|
|
2250
|
+
grouping !== "none" && (error ? "border-destructive/50" : "border-border")
|
|
2244
2251
|
),
|
|
2245
2252
|
children: [
|
|
2246
|
-
visible.map((child) => /* @__PURE__ */ jsx(
|
|
2253
|
+
/* @__PURE__ */ jsx(StructureDepthContext, { value: depth + 1, children: visible.map((child) => /* @__PURE__ */ jsx(
|
|
2247
2254
|
FieldRenderer,
|
|
2248
2255
|
{
|
|
2249
2256
|
field: child,
|
|
@@ -2253,7 +2260,7 @@ function ObjectField({ field, value, onChange, id, error, env }) {
|
|
|
2253
2260
|
env
|
|
2254
2261
|
},
|
|
2255
2262
|
child.name
|
|
2256
|
-
)),
|
|
2263
|
+
)) }),
|
|
2257
2264
|
(folded.length > 0 || structureOpen) && /* @__PURE__ */ jsx(
|
|
2258
2265
|
OptionalToggle,
|
|
2259
2266
|
{
|
|
@@ -2952,7 +2959,7 @@ var AlertDialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
2952
2959
|
AlertDialogPrimitive.Title,
|
|
2953
2960
|
{
|
|
2954
2961
|
ref,
|
|
2955
|
-
className: cn("text-[16px]
|
|
2962
|
+
className: cn("text-[16px] text-foreground", headingClass(600), className),
|
|
2956
2963
|
...props
|
|
2957
2964
|
}
|
|
2958
2965
|
));
|
|
@@ -4556,7 +4563,7 @@ function FileNameDialog({ stem: stem2, extension, onConfirm, onCancel }) {
|
|
|
4556
4563
|
onKeyDown,
|
|
4557
4564
|
className: "w-full max-w-sm space-y-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",
|
|
4558
4565
|
children: [
|
|
4559
|
-
/* @__PURE__ */ jsx("h2", { id: titleId, className: "text-[14px]
|
|
4566
|
+
/* @__PURE__ */ jsx("h2", { id: titleId, className: cn("text-[14px]", headingClass(500)), children: s.fileNameTitle }),
|
|
4560
4567
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center rounded-md border border-border bg-input focus-within:outline-solid focus-within:outline-2 focus-within:outline-offset-1 focus-within:outline-ring", children: [
|
|
4561
4568
|
/* @__PURE__ */ jsx(
|
|
4562
4569
|
"input",
|
|
@@ -5235,7 +5242,8 @@ function PdfDownloadButton({
|
|
|
5235
5242
|
title: failed ? s.downloadPdfFailed : name,
|
|
5236
5243
|
...failed ? { "aria-describedby": statusId } : {},
|
|
5237
5244
|
className: cn(
|
|
5238
|
-
|
|
5245
|
+
// 44 pixels tall below `sm`, as every control a finger hits is.
|
|
5246
|
+
"inline-flex shrink-0 items-center gap-1.5 rounded-md px-2 py-1 text-[12px] font-medium disabled:opacity-70 max-sm:min-h-11 max-sm:px-3",
|
|
5239
5247
|
focusOutlineClass,
|
|
5240
5248
|
primary ? "bg-primary text-primary-foreground hover:bg-primary/90" : "border border-border text-muted-foreground hover:text-foreground",
|
|
5241
5249
|
failed && (primary ? "bg-destructive text-white hover:bg-destructive/90" : "text-destructive"),
|
|
@@ -5508,7 +5516,7 @@ function ImageViewer({
|
|
|
5508
5516
|
children: [
|
|
5509
5517
|
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border py-1.5 pr-1.5 pl-4", children: [
|
|
5510
5518
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
5511
|
-
/* @__PURE__ */ jsx(DialogTitle, { className: "truncate text-[14px]
|
|
5519
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: cn("truncate text-[14px]", headingWeightClass[500]), children: picture.name }),
|
|
5512
5520
|
several && // A live region from the moment the viewer opens, so each move
|
|
5513
5521
|
// is announced: one inserted with its text already in it is not.
|
|
5514
5522
|
/* @__PURE__ */ jsx(
|
|
@@ -5669,15 +5677,24 @@ function Markdown({ text, className, proseImages, citations }) {
|
|
|
5669
5677
|
const mode = proseImages ?? fromEnv;
|
|
5670
5678
|
return /* @__PURE__ */ jsx(ProseImagesContext, { value: mode, children: /* @__PURE__ */ jsx(CitationsContext, { value: citations, children: /* @__PURE__ */ jsx("div", { className: cn("space-y-2 text-[13px] leading-relaxed text-foreground", className), children: /* @__PURE__ */ jsx(Blocks, { tokens }) }) }) });
|
|
5671
5679
|
}
|
|
5680
|
+
function opensWithHeading(text) {
|
|
5681
|
+
const body = text.slice(LEADING_BLANK_LINES.exec(text)?.[0].length ?? 0);
|
|
5682
|
+
const end = body.search(BLANK_LINE);
|
|
5683
|
+
const opening = end === -1 ? body : body.slice(0, end);
|
|
5684
|
+
const first = marked.lexer(opening, LEX_OPTIONS).find((token) => token.type !== "space");
|
|
5685
|
+
return first?.type === "heading";
|
|
5686
|
+
}
|
|
5687
|
+
var LEADING_BLANK_LINES = /^(?:[ \t]*\r?\n)*/;
|
|
5688
|
+
var BLANK_LINE = /\r?\n[ \t]*\r?\n/;
|
|
5672
5689
|
var ProseImagesContext = React9.createContext("link");
|
|
5673
5690
|
var CitationsContext = React9.createContext(void 0);
|
|
5674
5691
|
var HEADING_CLASS = {
|
|
5675
|
-
1: "text-[16px]
|
|
5676
|
-
2: "text-[14.5px]
|
|
5677
|
-
3: "text-[13.5px]
|
|
5678
|
-
4: "text-[13px]
|
|
5679
|
-
5: "text-[13px]
|
|
5680
|
-
6: "text-[13px]
|
|
5692
|
+
1: cn("text-[16px]", headingClass(600)),
|
|
5693
|
+
2: cn("text-[14.5px]", headingClass(600)),
|
|
5694
|
+
3: cn("text-[13.5px]", headingClass(600)),
|
|
5695
|
+
4: cn("text-[13px]", headingClass(600)),
|
|
5696
|
+
5: cn("text-[13px]", headingClass(600)),
|
|
5697
|
+
6: cn("text-[13px]", headingClass(600))
|
|
5681
5698
|
};
|
|
5682
5699
|
function Blocks({ tokens }) {
|
|
5683
5700
|
return /* @__PURE__ */ jsx(Fragment, { children: tokens.map((token, index) => /* @__PURE__ */ jsx(Block, { token }, index)) });
|
|
@@ -6381,11 +6398,11 @@ function fencedBlockEnd(text, start) {
|
|
|
6381
6398
|
}
|
|
6382
6399
|
return text.length;
|
|
6383
6400
|
}
|
|
6384
|
-
var
|
|
6401
|
+
var BLANK_LINE2 = /\n[ \t]*\n/g;
|
|
6385
6402
|
function codeSpanEnd(text, start) {
|
|
6386
6403
|
const open = backtickRun(text, start);
|
|
6387
|
-
|
|
6388
|
-
const blank =
|
|
6404
|
+
BLANK_LINE2.lastIndex = start;
|
|
6405
|
+
const blank = BLANK_LINE2.exec(text);
|
|
6389
6406
|
const limit = blank ? blank.index : text.length;
|
|
6390
6407
|
let cursor = start + open;
|
|
6391
6408
|
for (; ; ) {
|
|
@@ -6634,13 +6651,21 @@ function Described({ description, children }) {
|
|
|
6634
6651
|
/* @__PURE__ */ jsx(TooltipContent, { children: description })
|
|
6635
6652
|
] }) });
|
|
6636
6653
|
}
|
|
6637
|
-
function ResultHeader({ field }) {
|
|
6638
|
-
return /* @__PURE__ */ jsx(Label2, { field, describe: true });
|
|
6654
|
+
function ResultHeader({ field, unseen = false }) {
|
|
6655
|
+
return /* @__PURE__ */ jsx(Label2, { field, describe: true, unseen });
|
|
6639
6656
|
}
|
|
6640
|
-
function Label2({
|
|
6657
|
+
function Label2({
|
|
6658
|
+
field,
|
|
6659
|
+
describe = false,
|
|
6660
|
+
unseen = false
|
|
6661
|
+
}) {
|
|
6641
6662
|
const presentation = useFieldPresentation();
|
|
6642
6663
|
const isApp = presentation === "app";
|
|
6643
6664
|
const labelText = fieldLabel(field.title, field.name, presentation);
|
|
6665
|
+
if (unseen) {
|
|
6666
|
+
if (labelText.trim() === "") return null;
|
|
6667
|
+
return /* @__PURE__ */ jsx("span", { className: "sr-only", children: describe && field.description ? `${labelText}: ${field.description}` : labelText });
|
|
6668
|
+
}
|
|
6644
6669
|
if (labelText.trim() === "") {
|
|
6645
6670
|
return /* @__PURE__ */ jsx(ConceptPill, { conceptRef: field.conceptRef, category: conceptCategory(field) });
|
|
6646
6671
|
}
|
|
@@ -7367,11 +7392,25 @@ var TOGGLE = cn(
|
|
|
7367
7392
|
);
|
|
7368
7393
|
var STACK_NEVER_UP_TO = 3;
|
|
7369
7394
|
var STACK_ALWAYS_BEYOND = 6;
|
|
7370
|
-
function stackingFor(columns) {
|
|
7371
|
-
if (columns <= STACK_NEVER_UP_TO)
|
|
7395
|
+
function stackingFor(columns, rowsOpen) {
|
|
7396
|
+
if (columns <= STACK_NEVER_UP_TO) {
|
|
7397
|
+
return columns === STACK_NEVER_UP_TO && rowsOpen ? "phone" : "never";
|
|
7398
|
+
}
|
|
7372
7399
|
return columns > STACK_ALWAYS_BEYOND ? "always" : "narrow";
|
|
7373
7400
|
}
|
|
7374
7401
|
var STACKED = {
|
|
7402
|
+
phone: {
|
|
7403
|
+
table: "max-sm:block",
|
|
7404
|
+
head: "max-sm:hidden",
|
|
7405
|
+
body: "max-sm:block",
|
|
7406
|
+
row: "max-sm:relative max-sm:block max-sm:px-3 max-sm:py-2",
|
|
7407
|
+
rowWithToggle: "max-sm:pl-12",
|
|
7408
|
+
toggle: "max-sm:absolute max-sm:top-0 max-sm:left-0 max-sm:p-0",
|
|
7409
|
+
cell: "max-sm:grid max-sm:grid-cols-[minmax(0,min(40%,10rem))_minmax(0,1fr)] max-sm:items-baseline max-sm:gap-x-3 max-sm:px-0 max-sm:py-0.5 max-sm:after:hidden",
|
|
7410
|
+
label: "max-sm:block",
|
|
7411
|
+
detail: "max-sm:block",
|
|
7412
|
+
detailInner: "max-sm:px-0 max-sm:py-1"
|
|
7413
|
+
},
|
|
7375
7414
|
narrow: {
|
|
7376
7415
|
table: "@max-[640px]:block",
|
|
7377
7416
|
head: "@max-[640px]:hidden",
|
|
@@ -7400,21 +7439,34 @@ var STACKED = {
|
|
|
7400
7439
|
var FIT_CELL = "min-w-[min(8ch,14cqw)] wrap-anywhere [&>span]:whitespace-normal";
|
|
7401
7440
|
var FIT_NAME = "min-w-[min(16ch,28cqw)] wrap-anywhere [&>span]:whitespace-normal";
|
|
7402
7441
|
var WORD_FLOOR = "after:block after:h-0 after:max-w-[var(--fit-share,0px)] after:overflow-hidden after:invisible after:wrap-normal after:content-[attr(data-fit)]";
|
|
7442
|
+
var FIT_CHEVRON = "[--fit-chevron:var(--expand-column,2rem)]";
|
|
7443
|
+
var FIT_NO_CHEVRON = "[--fit-chevron:0px]";
|
|
7403
7444
|
var FIT_SHARE_BESIDE_NAME = {
|
|
7404
|
-
2: "[--fit-share:calc(72cqw_-_3rem_-_var(--
|
|
7405
|
-
3: "[--fit-share:calc((72cqw_-_4.5rem_-_var(--
|
|
7406
|
-
4: "[--fit-share:calc((72cqw_-_6rem_-_var(--
|
|
7407
|
-
5: "[--fit-share:calc((72cqw_-_7.5rem_-_var(--
|
|
7408
|
-
6: "[--fit-share:calc((72cqw_-_9rem_-_var(--
|
|
7445
|
+
2: "[--fit-share:calc(72cqw_-_3rem_-_var(--fit-chevron,0px))]",
|
|
7446
|
+
3: "[--fit-share:calc((72cqw_-_4.5rem_-_var(--fit-chevron,0px))/2)]",
|
|
7447
|
+
4: "[--fit-share:calc((72cqw_-_6rem_-_var(--fit-chevron,0px))/3)]",
|
|
7448
|
+
5: "[--fit-share:calc((72cqw_-_7.5rem_-_var(--fit-chevron,0px))/4)]",
|
|
7449
|
+
6: "[--fit-share:calc((72cqw_-_9rem_-_var(--fit-chevron,0px))/5)]"
|
|
7409
7450
|
};
|
|
7410
7451
|
var FIT_SHARE_WITHOUT_NAME = {
|
|
7411
|
-
1: "[--fit-share:calc(100cqw_-_1.5rem_-_var(--
|
|
7412
|
-
2: "[--fit-share:calc((100cqw_-_3rem_-_var(--
|
|
7413
|
-
3: "[--fit-share:calc((100cqw_-_4.5rem_-_var(--
|
|
7414
|
-
4: "[--fit-share:calc((100cqw_-_6rem_-_var(--
|
|
7415
|
-
5: "[--fit-share:calc((100cqw_-_7.5rem_-_var(--
|
|
7416
|
-
6: "[--fit-share:calc((100cqw_-_9rem_-_var(--
|
|
7452
|
+
1: "[--fit-share:calc(100cqw_-_1.5rem_-_var(--fit-chevron,0px))]",
|
|
7453
|
+
2: "[--fit-share:calc((100cqw_-_3rem_-_var(--fit-chevron,0px))/2)]",
|
|
7454
|
+
3: "[--fit-share:calc((100cqw_-_4.5rem_-_var(--fit-chevron,0px))/3)]",
|
|
7455
|
+
4: "[--fit-share:calc((100cqw_-_6rem_-_var(--fit-chevron,0px))/4)]",
|
|
7456
|
+
5: "[--fit-share:calc((100cqw_-_7.5rem_-_var(--fit-chevron,0px))/5)]",
|
|
7457
|
+
6: "[--fit-share:calc((100cqw_-_9rem_-_var(--fit-chevron,0px))/6)]"
|
|
7417
7458
|
};
|
|
7459
|
+
function identifierWords(label) {
|
|
7460
|
+
const words = label.split("_");
|
|
7461
|
+
if (words.length === 1) return label;
|
|
7462
|
+
return words.map(
|
|
7463
|
+
(word, index) => index === words.length - 1 ? word : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
7464
|
+
word,
|
|
7465
|
+
"_",
|
|
7466
|
+
/* @__PURE__ */ jsx("wbr", {})
|
|
7467
|
+
] }, index)
|
|
7468
|
+
);
|
|
7469
|
+
}
|
|
7418
7470
|
function cellWords(column, cell, presentation) {
|
|
7419
7471
|
return typeof cell === "string" || typeof cell === "number" ? cellTitle(column, cell, presentation) : void 0;
|
|
7420
7472
|
}
|
|
@@ -7455,7 +7507,7 @@ function ObjectTable({
|
|
|
7455
7507
|
const { shown, hidden, name } = chooseColumns(columns, budget);
|
|
7456
7508
|
const canExpand = hidden > 0 || shown.some((column) => column !== name && !fitsACellWhole(column));
|
|
7457
7509
|
const fits = layout === "stack";
|
|
7458
|
-
const stacking = fits ? stackingFor(shown.length) : "never";
|
|
7510
|
+
const stacking = fits ? stackingFor(shown.length, canExpand) : "never";
|
|
7459
7511
|
const stacked = stacking === "never" ? void 0 : STACKED[stacking];
|
|
7460
7512
|
const nameShown = name !== void 0 && shown.includes(name);
|
|
7461
7513
|
const fitShare = fits ? (nameShown ? FIT_SHARE_BESIDE_NAME : FIT_SHARE_WITHOUT_NAME)[shown.length] : void 0;
|
|
@@ -7470,6 +7522,19 @@ function ObjectTable({
|
|
|
7470
7522
|
observer.observe(scroller);
|
|
7471
7523
|
return () => observer.disconnect();
|
|
7472
7524
|
}, [fits]);
|
|
7525
|
+
const [overflows, setOverflows] = useState(false);
|
|
7526
|
+
useEffect(() => {
|
|
7527
|
+
const scroller = scrollerRef.current;
|
|
7528
|
+
if (!scroller || !fits) return;
|
|
7529
|
+
const measure = () => setOverflows(scroller.scrollWidth > scroller.clientWidth);
|
|
7530
|
+
measure();
|
|
7531
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
7532
|
+
const observer = new ResizeObserver(measure);
|
|
7533
|
+
observer.observe(scroller);
|
|
7534
|
+
const content = scroller.firstElementChild;
|
|
7535
|
+
if (content) observer.observe(content);
|
|
7536
|
+
return () => observer.disconnect();
|
|
7537
|
+
}, [fits]);
|
|
7473
7538
|
const toggle = (index) => setExpanded((current) => {
|
|
7474
7539
|
const next = new Set(current);
|
|
7475
7540
|
if (!next.delete(index)) next.add(index);
|
|
@@ -7496,16 +7561,16 @@ function ObjectTable({
|
|
|
7496
7561
|
//
|
|
7497
7562
|
// Under `tableLayout="stack"` the box is the SIZE CONTAINER its stacking
|
|
7498
7563
|
// rules query, so the table answers to its own width rather than the
|
|
7499
|
-
// viewport's, and it takes no focus
|
|
7500
|
-
// nothing to do. It still clips to its rounded border, and
|
|
7501
|
-
//
|
|
7564
|
+
// viewport's, and it takes no focus while nothing scrolls, since the stop
|
|
7565
|
+
// would have nothing to do. It still clips to its rounded border, and takes
|
|
7566
|
+
// focus again only while its headers' words make it overflow (`overflows`).
|
|
7502
7567
|
/* @__PURE__ */ jsx(
|
|
7503
7568
|
"div",
|
|
7504
7569
|
{
|
|
7505
7570
|
ref: scrollerRef,
|
|
7506
7571
|
role: "group",
|
|
7507
7572
|
"aria-label": label,
|
|
7508
|
-
...fits ? {} : { tabIndex: 0 },
|
|
7573
|
+
...fits && !overflows ? {} : { tabIndex: 0 },
|
|
7509
7574
|
className: cn(
|
|
7510
7575
|
"overflow-x-auto rounded-lg border border-border",
|
|
7511
7576
|
focusOutlineInsetClass,
|
|
@@ -7515,7 +7580,12 @@ function ObjectTable({
|
|
|
7515
7580
|
children: /* @__PURE__ */ jsxs(
|
|
7516
7581
|
"table",
|
|
7517
7582
|
{
|
|
7518
|
-
className: cn(
|
|
7583
|
+
className: cn(
|
|
7584
|
+
"w-full min-w-full border-collapse text-[13px]",
|
|
7585
|
+
stacked?.table,
|
|
7586
|
+
fitShare,
|
|
7587
|
+
fitShare !== void 0 && (canExpand ? FIT_CHEVRON : FIT_NO_CHEVRON)
|
|
7588
|
+
),
|
|
7519
7589
|
children: [
|
|
7520
7590
|
/* @__PURE__ */ jsx("thead", { className: stacked?.head, children: /* @__PURE__ */ jsxs("tr", { className: "border-b border-border bg-muted text-left", children: [
|
|
7521
7591
|
canExpand && /* @__PURE__ */ jsx("th", { scope: "col", style: { width: EXPAND_COLUMN }, className: "px-1", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: s.rowDetailsColumn }) }),
|
|
@@ -7523,16 +7593,20 @@ function ObjectTable({
|
|
|
7523
7593
|
"th",
|
|
7524
7594
|
{
|
|
7525
7595
|
scope: "col",
|
|
7526
|
-
...floorsWords(column) ? { "data-fit": fieldLabel(column.title, column.name, presentation) } : {},
|
|
7527
7596
|
className: cn(
|
|
7528
|
-
// One line, or
|
|
7529
|
-
//
|
|
7530
|
-
|
|
7597
|
+
// One line, or, in a table that fits its box, wrapped between
|
|
7598
|
+
// words and never inside one: "Quantity" over three digits is
|
|
7599
|
+
// a header, "Quantit" over "y" is damage. So a header's
|
|
7600
|
+
// longest word is its column's floor, with no share capping
|
|
7601
|
+
// it, as a value's is capped: a header's words are the label
|
|
7602
|
+
// the descriptor states, not a payload's token of any length.
|
|
7603
|
+
// Where the box cannot hold every header's longest word, the
|
|
7604
|
+
// table scrolls inside it (see `overflows`).
|
|
7605
|
+
fits ? "wrap-normal" : "whitespace-nowrap",
|
|
7531
7606
|
"px-3 py-2 text-[12px] font-semibold text-foreground",
|
|
7532
|
-
presentation === "app" ? void 0 : "font-mono"
|
|
7533
|
-
floorsWords(column) && WORD_FLOOR
|
|
7607
|
+
presentation === "app" ? void 0 : "font-mono"
|
|
7534
7608
|
),
|
|
7535
|
-
children: /* @__PURE__ */ jsx(Described, { description: column.description, children: fieldLabel(column.title, column.name, presentation) })
|
|
7609
|
+
children: /* @__PURE__ */ jsx(Described, { description: column.description, children: presentation === "studio" ? identifierWords(fieldLabel(column.title, column.name, presentation)) : fieldLabel(column.title, column.name, presentation) })
|
|
7536
7610
|
},
|
|
7537
7611
|
column.name
|
|
7538
7612
|
))
|
|
@@ -7635,13 +7709,16 @@ function CompositeValue({ members }) {
|
|
|
7635
7709
|
const isApp = presentation === "app";
|
|
7636
7710
|
return /* @__PURE__ */ jsx("div", { className: "space-y-3", children: members.map((member) => {
|
|
7637
7711
|
const label = isApp ? humanizeFieldName(member.name) : member.name;
|
|
7712
|
+
const text = memberText(member.value);
|
|
7713
|
+
const headed = isApp && text !== void 0 && opensWithHeading(text);
|
|
7638
7714
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
7639
7715
|
/* @__PURE__ */ jsx(
|
|
7640
7716
|
"span",
|
|
7641
7717
|
{
|
|
7642
7718
|
className: cn(
|
|
7643
7719
|
"font-semibold text-foreground",
|
|
7644
|
-
isApp ? "text-[13.5px]" : "font-mono text-[12px]"
|
|
7720
|
+
isApp ? "text-[13.5px]" : "font-mono text-[12px]",
|
|
7721
|
+
headed && "sr-only"
|
|
7645
7722
|
),
|
|
7646
7723
|
children: label
|
|
7647
7724
|
}
|
|
@@ -7680,6 +7757,12 @@ function NativeValue({ value, label }) {
|
|
|
7680
7757
|
return /* @__PURE__ */ jsx(RawValue, { value, compact: false });
|
|
7681
7758
|
}
|
|
7682
7759
|
}
|
|
7760
|
+
function memberText(value) {
|
|
7761
|
+
if (typeof value === "string") return value === "" ? void 0 : value;
|
|
7762
|
+
if (!isRecord(value)) return void 0;
|
|
7763
|
+
const content = readMemberContent(value);
|
|
7764
|
+
return content?.model === "text" && content.text !== "" ? content.text : void 0;
|
|
7765
|
+
}
|
|
7683
7766
|
function NativeList({ items, label }) {
|
|
7684
7767
|
if (items.length === 0) return /* @__PURE__ */ jsx(Absent, {});
|
|
7685
7768
|
if (items.every(isPlainRecord)) return /* @__PURE__ */ jsx(RecordsTable, { items, label });
|
|
@@ -8012,6 +8095,18 @@ function SearchSource({ source }) {
|
|
|
8012
8095
|
function isLongText(value) {
|
|
8013
8096
|
return typeof value === "string" && (value.includes("\n") || value.length > CELL_LENGTH_LIMIT);
|
|
8014
8097
|
}
|
|
8098
|
+
function typesetText(field, value, isApp) {
|
|
8099
|
+
if (typeof value !== "string" || value === "") return void 0;
|
|
8100
|
+
if (field.kind === "prose") return value;
|
|
8101
|
+
return isApp && field.kind === "text" && isLongText(value) ? value : void 0;
|
|
8102
|
+
}
|
|
8103
|
+
function namesItself(field, value, isApp) {
|
|
8104
|
+
const typeset = typesetText(field, value, isApp);
|
|
8105
|
+
return isApp && typeset !== void 0 && opensWithHeading(typeset);
|
|
8106
|
+
}
|
|
8107
|
+
function resultHeadsItself(field, value, presentation) {
|
|
8108
|
+
return namesItself(field, unwrap(field, value), presentation === "app");
|
|
8109
|
+
}
|
|
8015
8110
|
var PanelResultContext = createContext(null);
|
|
8016
8111
|
var TITLED_PANEL = { hostHeaded: false };
|
|
8017
8112
|
var HOST_HEADED_PANEL = { hostHeaded: true };
|
|
@@ -8241,14 +8336,35 @@ function ResultNode({
|
|
|
8241
8336
|
case "prose":
|
|
8242
8337
|
case "number":
|
|
8243
8338
|
case "enum":
|
|
8244
|
-
case "unknown":
|
|
8245
|
-
|
|
8246
|
-
|
|
8247
|
-
|
|
8248
|
-
|
|
8249
|
-
|
|
8250
|
-
|
|
8251
|
-
|
|
8339
|
+
case "unknown": {
|
|
8340
|
+
const typeset = typesetText(field, unwrapped, isApp);
|
|
8341
|
+
const headed = !hideLabel && namesItself(field, unwrapped, isApp);
|
|
8342
|
+
const labelDrawn = !hideLabel && !headed;
|
|
8343
|
+
return /* @__PURE__ */ jsxs(
|
|
8344
|
+
"div",
|
|
8345
|
+
{
|
|
8346
|
+
className: cn(
|
|
8347
|
+
field.kind === "image" ? "space-y-1.5" : "space-y-0.5",
|
|
8348
|
+
// Holds the copy control's float, when it floats.
|
|
8349
|
+
copyText !== void 0 && !labelDrawn && "flow-root"
|
|
8350
|
+
),
|
|
8351
|
+
children: [
|
|
8352
|
+
copyText === void 0 ? (
|
|
8353
|
+
// A text that heads itself always has something to copy, so this
|
|
8354
|
+
// arm draws the label exactly when it is not hidden.
|
|
8355
|
+
header
|
|
8356
|
+
) : labelDrawn ? /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
|
|
8357
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: header }),
|
|
8358
|
+
/* @__PURE__ */ jsx(CopyButton, { value: copyText, label: s.copyText })
|
|
8359
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8360
|
+
headed && /* @__PURE__ */ jsx(Label2, { field, describe: true, unseen: true }),
|
|
8361
|
+
/* @__PURE__ */ jsx("div", { className: "float-right ml-2", children: /* @__PURE__ */ jsx(CopyButton, { value: copyText, label: s.copyText }) })
|
|
8362
|
+
] }),
|
|
8363
|
+
typeset !== void 0 ? /* @__PURE__ */ jsx(Markdown, { text: typeset }) : field.kind === "document" && whole ? /* @__PURE__ */ jsx(DocumentValue, { value: unwrapped, whole: true }) : /* @__PURE__ */ jsx(LeafValue, { field, value })
|
|
8364
|
+
]
|
|
8365
|
+
}
|
|
8366
|
+
);
|
|
8367
|
+
}
|
|
8252
8368
|
}
|
|
8253
8369
|
return null;
|
|
8254
8370
|
}
|
|
@@ -8288,9 +8404,13 @@ function highlight(json) {
|
|
|
8288
8404
|
}
|
|
8289
8405
|
return out;
|
|
8290
8406
|
}
|
|
8407
|
+
var noSubscription = () => () => {
|
|
8408
|
+
};
|
|
8409
|
+
var hasClipboard = () => typeof navigator !== "undefined" && Boolean(navigator.clipboard);
|
|
8291
8410
|
function JsonView({ value }) {
|
|
8292
8411
|
const s = useFieldStrings();
|
|
8293
8412
|
const [copied, setCopied] = useState(false);
|
|
8413
|
+
const canCopy = useSyncExternalStore(noSubscription, hasClipboard, () => false);
|
|
8294
8414
|
useEffect(() => {
|
|
8295
8415
|
if (!copied) return;
|
|
8296
8416
|
const timer = window.setTimeout(() => setCopied(false), 1500);
|
|
@@ -8301,7 +8421,7 @@ function JsonView({ value }) {
|
|
|
8301
8421
|
return /* @__PURE__ */ jsx(Absent, {});
|
|
8302
8422
|
}
|
|
8303
8423
|
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
8304
|
-
|
|
8424
|
+
canCopy && /* @__PURE__ */ jsx(
|
|
8305
8425
|
"button",
|
|
8306
8426
|
{
|
|
8307
8427
|
type: "button",
|
|
@@ -8310,13 +8430,27 @@ function JsonView({ value }) {
|
|
|
8310
8430
|
},
|
|
8311
8431
|
"aria-label": s.copyJson,
|
|
8312
8432
|
className: cn(
|
|
8313
|
-
|
|
8433
|
+
// 44 by 44 on a phone, like every control a finger taps.
|
|
8434
|
+
"absolute right-2 top-2 inline-flex items-center justify-center rounded border border-border bg-card p-1 text-muted-foreground hover:text-foreground max-sm:size-11",
|
|
8314
8435
|
focusOutlineClass
|
|
8315
8436
|
),
|
|
8316
8437
|
children: copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-3.5" }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": true, className: "size-3.5" })
|
|
8317
8438
|
}
|
|
8318
8439
|
),
|
|
8319
|
-
/* @__PURE__ */ jsx(
|
|
8440
|
+
/* @__PURE__ */ jsx(
|
|
8441
|
+
"pre",
|
|
8442
|
+
{
|
|
8443
|
+
role: "group",
|
|
8444
|
+
"aria-label": s.viewJson,
|
|
8445
|
+
tabIndex: 0,
|
|
8446
|
+
className: cn(
|
|
8447
|
+
"overflow-x-auto rounded-lg border border-border bg-card/40 px-3.5 py-3 pr-12 font-mono text-[12px] leading-relaxed",
|
|
8448
|
+
canCopy && "max-sm:min-h-[60px] max-sm:pr-14",
|
|
8449
|
+
focusOutlineClass
|
|
8450
|
+
),
|
|
8451
|
+
children: highlight(text)
|
|
8452
|
+
}
|
|
8453
|
+
)
|
|
8320
8454
|
] });
|
|
8321
8455
|
}
|
|
8322
8456
|
function isShownResult(attempt, field, baseName, value) {
|
|
@@ -8409,9 +8543,38 @@ function StuffPanel({
|
|
|
8409
8543
|
const labels = { rendered: s.viewRendered, json: s.viewJson };
|
|
8410
8544
|
const pdfName = page && pdfShown ? pdfFileName(field, value, baseName) : void 0;
|
|
8411
8545
|
const pageView = page !== void 0 && view !== "json";
|
|
8412
|
-
const
|
|
8546
|
+
const headsItself = !page && resultHeadsItself(field, value, presentation);
|
|
8547
|
+
const hostNamed = name !== void 0 && name !== "";
|
|
8548
|
+
const titled = presentation !== "app" || hostNamed && !page && !headsItself;
|
|
8413
8549
|
const switchShown = offered.length > 1;
|
|
8414
|
-
const
|
|
8550
|
+
const downloadAtFoot = downloadShown && !titled && !switchShown && !page;
|
|
8551
|
+
const headerShown = titled || downloadShown && !downloadAtFoot || switchShown || page && pdfName !== void 0;
|
|
8552
|
+
const downloadButton = downloadShown && /* @__PURE__ */ jsxs(
|
|
8553
|
+
"button",
|
|
8554
|
+
{
|
|
8555
|
+
type: "button",
|
|
8556
|
+
onClick: () => void handleDownload(),
|
|
8557
|
+
disabled: savingShown,
|
|
8558
|
+
"aria-label": page ? s.downloadHtml : s.download,
|
|
8559
|
+
className: cn(
|
|
8560
|
+
// 44 pixels tall below `sm`, as every control a finger hits is.
|
|
8561
|
+
"inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-[12px] text-muted-foreground hover:text-foreground disabled:opacity-60 max-sm:min-h-11 max-sm:px-3",
|
|
8562
|
+
focusOutlineClass
|
|
8563
|
+
),
|
|
8564
|
+
children: [
|
|
8565
|
+
savingShown ? /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ jsx(Download, { className: "h-3.5 w-3.5" }),
|
|
8566
|
+
savingShown ? s.downloading : page ? s.downloadHtml : s.download
|
|
8567
|
+
]
|
|
8568
|
+
}
|
|
8569
|
+
);
|
|
8570
|
+
const missedStatus = downloadShown && /* @__PURE__ */ jsx(
|
|
8571
|
+
"p",
|
|
8572
|
+
{
|
|
8573
|
+
role: "status",
|
|
8574
|
+
className: cn("shrink-0 text-[12px] text-destructive", missedShown.length === 0 && "sr-only"),
|
|
8575
|
+
children: missedShown.length > 0 ? s.downloadIncomplete(missedShown) : ""
|
|
8576
|
+
}
|
|
8577
|
+
);
|
|
8415
8578
|
return /* @__PURE__ */ jsxs(
|
|
8416
8579
|
"div",
|
|
8417
8580
|
{
|
|
@@ -8427,6 +8590,7 @@ function StuffPanel({
|
|
|
8427
8590
|
),
|
|
8428
8591
|
children: [
|
|
8429
8592
|
dialog,
|
|
8593
|
+
hostNamed && headsItself && /* @__PURE__ */ jsx(ResultHeader, { field: named, unseen: true }),
|
|
8430
8594
|
headerShown && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-wrap items-center justify-between gap-x-4 gap-y-1", children: [
|
|
8431
8595
|
titled ? /* @__PURE__ */ jsx("div", { className: "min-w-0 space-y-1", children: /* @__PURE__ */ jsx(ResultHeader, { field: named }) }) : /* @__PURE__ */ jsx("div", {}),
|
|
8432
8596
|
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
@@ -8439,23 +8603,7 @@ function StuffPanel({
|
|
|
8439
8603
|
...pdfName ? { fileName: pdfName } : {}
|
|
8440
8604
|
}
|
|
8441
8605
|
),
|
|
8442
|
-
|
|
8443
|
-
"button",
|
|
8444
|
-
{
|
|
8445
|
-
type: "button",
|
|
8446
|
-
onClick: () => void handleDownload(),
|
|
8447
|
-
disabled: savingShown,
|
|
8448
|
-
"aria-label": page ? s.downloadHtml : s.download,
|
|
8449
|
-
className: cn(
|
|
8450
|
-
"inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-[12px] text-muted-foreground hover:text-foreground disabled:opacity-60",
|
|
8451
|
-
focusOutlineClass
|
|
8452
|
-
),
|
|
8453
|
-
children: [
|
|
8454
|
-
savingShown ? /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ jsx(Download, { className: "h-3.5 w-3.5" }),
|
|
8455
|
-
savingShown ? s.downloading : page ? s.downloadHtml : s.download
|
|
8456
|
-
]
|
|
8457
|
-
}
|
|
8458
|
-
),
|
|
8606
|
+
!downloadAtFoot && downloadButton,
|
|
8459
8607
|
switchShown && /* @__PURE__ */ jsx(
|
|
8460
8608
|
"div",
|
|
8461
8609
|
{
|
|
@@ -8469,7 +8617,8 @@ function StuffPanel({
|
|
|
8469
8617
|
onClick: () => setView(id),
|
|
8470
8618
|
"aria-pressed": view === id,
|
|
8471
8619
|
className: cn(
|
|
8472
|
-
|
|
8620
|
+
// 44 by 44 below `sm`, as every control a finger hits is.
|
|
8621
|
+
"rounded px-2 py-0.5 text-[12px] max-sm:min-h-11 max-sm:min-w-11 max-sm:px-3",
|
|
8473
8622
|
focusOutlineClass,
|
|
8474
8623
|
view === id ? "bg-card font-medium text-foreground" : "text-muted-foreground hover:text-foreground"
|
|
8475
8624
|
),
|
|
@@ -8481,23 +8630,17 @@ function StuffPanel({
|
|
|
8481
8630
|
)
|
|
8482
8631
|
] })
|
|
8483
8632
|
] }),
|
|
8484
|
-
|
|
8485
|
-
"p",
|
|
8486
|
-
{
|
|
8487
|
-
role: "status",
|
|
8488
|
-
className: cn(
|
|
8489
|
-
"shrink-0 text-[12px] text-destructive",
|
|
8490
|
-
missedShown.length === 0 && "sr-only"
|
|
8491
|
-
),
|
|
8492
|
-
children: missedShown.length > 0 ? s.downloadIncomplete(missedShown) : ""
|
|
8493
|
-
}
|
|
8494
|
-
),
|
|
8633
|
+
!downloadAtFoot && missedStatus,
|
|
8495
8634
|
view === "json" ? /* @__PURE__ */ jsx(JsonView, { value }) : page ? (
|
|
8496
8635
|
// The page is the panel's main view: drawn here rather than through
|
|
8497
8636
|
// `ResultField`, whose page arm would add a second control row saving
|
|
8498
8637
|
// the same file, and with no box around it.
|
|
8499
8638
|
/* @__PURE__ */ jsx(HtmlPreview, { content: page, downloadPdf: false, bare: true, fill: true })
|
|
8500
|
-
) : /* @__PURE__ */ jsx(ResultRoot, { baseName, path: [field.name], children: /* @__PURE__ */ jsx(PanelResult, { hostHeaded: !titled, children: /* @__PURE__ */ jsx(ResultField, { field, value, hideLabel: true }) }) })
|
|
8639
|
+
) : /* @__PURE__ */ jsx(ResultRoot, { baseName, path: [field.name], children: /* @__PURE__ */ jsx(PanelResult, { hostHeaded: !titled, children: /* @__PURE__ */ jsx(ResultField, { field, value, hideLabel: true }) }) }),
|
|
8640
|
+
downloadAtFoot && /* @__PURE__ */ jsxs("div", { className: "space-y-1 pt-2", children: [
|
|
8641
|
+
downloadButton,
|
|
8642
|
+
missedStatus
|
|
8643
|
+
] })
|
|
8501
8644
|
]
|
|
8502
8645
|
}
|
|
8503
8646
|
);
|
|
@@ -8508,6 +8651,6 @@ function pdfFileName(field, value, baseName) {
|
|
|
8508
8651
|
return name === void 0 ? "" : name.replace(/\.[^.]+$/, "");
|
|
8509
8652
|
}
|
|
8510
8653
|
|
|
8511
|
-
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, ResultRoot, SUPPORTED_LOCALES, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StuffViewer, Switch, TextField, ToggleGroup, ToggleGroupItem, UnknownField, checkedAccentClass, cn, fieldControlClass, fieldStringsFor, focusOutlineClass,
|
|
8512
|
-
//# sourceMappingURL=chunk-
|
|
8513
|
-
//# sourceMappingURL=chunk-
|
|
8654
|
+
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, ResultRoot, SUPPORTED_LOCALES, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StuffViewer, Switch, TextField, ToggleGroup, ToggleGroupItem, UnknownField, actionShadowClass, checkedAccentClass, cn, enumLabeler, fieldControlClass, fieldStringsFor, focusOutlineClass, headingClass, linkTextClass, panelFlatShadowClass, panelRaisedShadowClass, panelSurfaceClass, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, selectedBorderClass, selectedFillClass, selectedFillStrongClass, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveRendition, useResolveShareUrl, useResolveUrl, useResolvedUrl };
|
|
8655
|
+
//# sourceMappingURL=chunk-JCFALTTY.js.map
|
|
8656
|
+
//# sourceMappingURL=chunk-JCFALTTY.js.map
|