@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.
@@ -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
- if (presentation !== "app") return asWritten;
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] font-semibold text-foreground", className),
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 use8 = () => {
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: use8,
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
- return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
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 rounded-lg border bg-card/40 p-4",
2243
- error ? "border-destructive/50" : "border-border"
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] font-semibold text-foreground", className),
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] font-medium", children: s.fileNameTitle }),
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
- "inline-flex shrink-0 items-center gap-1.5 rounded-md px-2 py-1 text-[12px] font-medium disabled:opacity-70",
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] font-medium", children: picture.name }),
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] font-semibold",
5676
- 2: "text-[14.5px] font-semibold",
5677
- 3: "text-[13.5px] font-semibold",
5678
- 4: "text-[13px] font-semibold",
5679
- 5: "text-[13px] font-semibold",
5680
- 6: "text-[13px] font-semibold"
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 BLANK_LINE = /\n[ \t]*\n/g;
6401
+ var BLANK_LINE2 = /\n[ \t]*\n/g;
6385
6402
  function codeSpanEnd(text, start) {
6386
6403
  const open = backtickRun(text, start);
6387
- BLANK_LINE.lastIndex = start;
6388
- const blank = BLANK_LINE.exec(text);
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({ field, describe = false }) {
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) return "never";
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(--expand-column,2rem))]",
7405
- 3: "[--fit-share:calc((72cqw_-_4.5rem_-_var(--expand-column,2rem))/2)]",
7406
- 4: "[--fit-share:calc((72cqw_-_6rem_-_var(--expand-column,2rem))/3)]",
7407
- 5: "[--fit-share:calc((72cqw_-_7.5rem_-_var(--expand-column,2rem))/4)]",
7408
- 6: "[--fit-share:calc((72cqw_-_9rem_-_var(--expand-column,2rem))/5)]"
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(--expand-column,2rem))]",
7412
- 2: "[--fit-share:calc((100cqw_-_3rem_-_var(--expand-column,2rem))/2)]",
7413
- 3: "[--fit-share:calc((100cqw_-_4.5rem_-_var(--expand-column,2rem))/3)]",
7414
- 4: "[--fit-share:calc((100cqw_-_6rem_-_var(--expand-column,2rem))/4)]",
7415
- 5: "[--fit-share:calc((100cqw_-_7.5rem_-_var(--expand-column,2rem))/5)]",
7416
- 6: "[--fit-share:calc((100cqw_-_9rem_-_var(--expand-column,2rem))/6)]"
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: nothing scrolls, so the stop would have
7500
- // nothing to do. It still clips to its rounded border, and should anything
7501
- // ever overflow it, the a11y gate names the scroll a keyboard cannot reach.
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("w-full min-w-full border-collapse text-[13px]", stacked?.table, fitShare),
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 wrapped anywhere so a header is never what
7529
- // widens a table that has to fit its box. See `FIT_CELL`.
7530
- fits ? "wrap-anywhere" : "whitespace-nowrap",
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
- return /* @__PURE__ */ jsxs("div", { className: field.kind === "image" ? "space-y-1.5" : "space-y-0.5", children: [
8246
- copyText === void 0 ? header : /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
8247
- /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: header }),
8248
- /* @__PURE__ */ jsx(CopyButton, { value: copyText, label: s.copyText })
8249
- ] }),
8250
- isApp && field.kind === "text" && isLongText(unwrapped) ? /* @__PURE__ */ jsx(Markdown, { text: unwrapped }) : field.kind === "document" && whole ? /* @__PURE__ */ jsx(DocumentValue, { value: unwrapped, whole: true }) : /* @__PURE__ */ jsx(LeafValue, { field, value })
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
- typeof navigator !== "undefined" && navigator.clipboard && /* @__PURE__ */ jsx(
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
- "absolute right-2 top-2 rounded border border-border bg-card p-1 text-muted-foreground hover:text-foreground",
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("pre", { className: "overflow-x-auto rounded-lg border border-border bg-card/40 px-3.5 py-3 pr-12 font-mono text-[12px] leading-relaxed", children: highlight(text) })
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 titled = presentation !== "app" || name !== void 0 && name !== "" && !page;
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 headerShown = titled || downloadShown || switchShown || page && pdfName !== void 0;
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
- downloadShown && /* @__PURE__ */ jsxs(
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
- "rounded px-2 py-0.5 text-[12px]",
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
- downloadShown && /* @__PURE__ */ jsx(
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, humanizeFieldName, linkTextClass, renderHtmlPdf, resolveHtmlStorageUrls, saveInBrowser, selectedBorderClass, selectedFillClass, selectedFillStrongClass, useFieldDomId, useFieldPresentation, useFieldStrings, useMethodForm, useProseImages, useResolveRendition, useResolveShareUrl, useResolveUrl, useResolvedUrl };
8512
- //# sourceMappingURL=chunk-II5TOORN.js.map
8513
- //# sourceMappingURL=chunk-II5TOORN.js.map
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