@godxjp/ui 31.13.0 → 31.15.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.
Files changed (36) hide show
  1. package/agent/START-HERE.md +4 -4
  2. package/agent/components/Image.json +18 -2
  3. package/agent/components/Timeline.json +4 -3
  4. package/agent/components/Tree.json +22 -1
  5. package/agent/components-index.json +2 -2
  6. package/agent/components.json +44 -6
  7. package/agent/index.json +4 -4
  8. package/agent/llms.txt +5 -5
  9. package/agent/tokens.json +18 -0
  10. package/dist/components/data-display/image.d.ts +6 -1
  11. package/dist/components/data-display/image.js +90 -49
  12. package/dist/components/data-display/index.d.ts +1 -1
  13. package/dist/components/data-display/timeline.d.ts +12 -2
  14. package/dist/components/data-display/timeline.js +6 -2
  15. package/dist/components/data-display/tree.d.ts +1 -1
  16. package/dist/components/data-display/tree.js +147 -0
  17. package/dist/contracts/measurement.json +1 -1
  18. package/dist/i18n/messages/en.json +6 -1
  19. package/dist/i18n/messages/ja.json +6 -1
  20. package/dist/i18n/messages/vi.json +6 -1
  21. package/dist/props/components/data-display.prop.d.ts +67 -1
  22. package/dist/props/registry.d.ts +69 -0
  23. package/dist/props/registry.js +71 -0
  24. package/dist/styles/data-display-layout.css +92 -1
  25. package/dist/styles/layers.json +1 -1
  26. package/dist/tokens/components/data-display.css +1 -0
  27. package/dist/tokens/components/tree.css +3 -0
  28. package/docs/DESIGN-AUTHORITY.md +6 -0
  29. package/docs/FRAME-COVERAGE-REPORT.md +1 -1
  30. package/docs/data-display/image.tsx +40 -0
  31. package/docs/data-display/timeline.tsx +28 -0
  32. package/docs/data-display/tree.tsx +82 -0
  33. package/docs/i18n/messages/en.json +24 -0
  34. package/docs/i18n/messages/ja.json +24 -0
  35. package/docs/i18n/messages/vi.json +24 -0
  36. package/package.json +2 -2
@@ -5,7 +5,9 @@ import { Check, CheckCircle2, Plane } from "lucide-react";
5
5
  const SR_PREFIX_KEY = {
6
6
  done: "dataDisplay.timeline.statusDone",
7
7
  current: "dataDisplay.timeline.statusCurrent",
8
- pending: "dataDisplay.timeline.statusPending"
8
+ pending: "dataDisplay.timeline.statusPending",
9
+ // A log entry carries no status semantics (antd's items have no prefix at all), gh#1092.
10
+ log: null
9
11
  };
10
12
  function resolveStatus(item) {
11
13
  if (item.status) {
@@ -27,6 +29,8 @@ function Timeline({ items, variant = "icon", density = "default" }) {
27
29
  if (item.icon) {
28
30
  const Icon = item.icon;
29
31
  glyph = /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true" });
32
+ } else if (status === "log" && variant !== "ordinal") {
33
+ glyph = /* @__PURE__ */ jsx("span", { className: "ui-timeline-pip", "aria-hidden": "true" });
30
34
  } else if (variant === "ordinal") {
31
35
  glyph = /* @__PURE__ */ jsx("span", { className: "ui-timeline-ordinal", children: ordinal });
32
36
  } else if (variant === "status") {
@@ -69,7 +73,7 @@ function Timeline({ items, variant = "icon", density = "default" }) {
69
73
  /* @__PURE__ */ jsxs("div", { className: "ui-timeline-body", children: [
70
74
  /* @__PURE__ */ jsxs("div", { className: "ui-timeline-head", children: [
71
75
  /* @__PURE__ */ jsxs("span", { className: "ui-timeline-title", "data-current": isCurrent ? "true" : void 0, children: [
72
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: t(SR_PREFIX_KEY[status]) }),
76
+ SR_PREFIX_KEY[status] ? /* @__PURE__ */ jsx("span", { className: "sr-only", children: t(SR_PREFIX_KEY[status]) }) : null,
73
77
  item.title
74
78
  ] }),
75
79
  item.time ? /* @__PURE__ */ jsx("span", { className: "ui-timeline-time", children: item.time }) : null
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import type { TreeProp } from "../../props/components/data-display.prop.js";
3
- export type { TreeNodeProp, TreeProp, TreeProp as TreeProps, } from "../../props/components/data-display.prop.js";
3
+ export type { TreeAllowDropInfoProp, TreeDropInfoProp, TreeDropPositionProp, TreeNodeProp, TreeProp, TreeProp as TreeProps, } from "../../props/components/data-display.prop.js";
4
4
  /**
5
5
  * `ref` reaches the `role="tree"` container — the element a page scrolls to, measures, or
6
6
  * focus-manages. Every unknown prop (`aria-*`, `data-*`) rides `...ariaProps` onto the same node.
@@ -71,6 +71,10 @@ function TreeRoot({
71
71
  showLine = false,
72
72
  showIcon = false,
73
73
  divided = false,
74
+ draggable = false,
75
+ allowDrag,
76
+ allowDrop,
77
+ onDrop,
74
78
  variant = "default",
75
79
  size = "md",
76
80
  disabled = false,
@@ -82,6 +86,7 @@ function TreeRoot({
82
86
  const { t } = useTranslation();
83
87
  const reactId = React.useId();
84
88
  const treeId = id ?? `${reactId}-tree`;
89
+ const dragHintId = `${treeId}-drag-hint`;
85
90
  const options = React.useMemo(
86
91
  () => normalizeTreeOptions(treeData, fieldNames),
87
92
  [treeData, fieldNames]
@@ -166,6 +171,92 @@ function TreeRoot({
166
171
  if (node) requestLoadRef.current(node);
167
172
  }
168
173
  }, [expandedSet, loadData, nodesByValue, requestLoadRef]);
174
+ const parentOf = React.useMemo(() => {
175
+ const map = /* @__PURE__ */ new Map();
176
+ const walk = (list, parent) => {
177
+ for (const node of list) {
178
+ map.set(node.value, parent);
179
+ if (node.children?.length) walk(node.children, node);
180
+ }
181
+ };
182
+ walk(options, null);
183
+ return map;
184
+ }, [options]);
185
+ const isDraggable = draggable && !disabled;
186
+ const canDrag = (node) => isDraggable && !node.disabled && (allowDrag ? allowDrag(node) : true);
187
+ const canDrop = (dragNode, dropNode, dropPosition) => {
188
+ for (let cursor = dropNode; cursor; ) {
189
+ if (cursor.value === dragNode.value) return false;
190
+ cursor = parentOf.get(cursor.value);
191
+ }
192
+ return allowDrop ? allowDrop({
193
+ dragNode,
194
+ dropNode,
195
+ dropPosition
196
+ }) : true;
197
+ };
198
+ const dragRef = React.useRef(null);
199
+ const [dragValue, setDragValue] = React.useState(null);
200
+ const [dropTarget, setDropTarget] = React.useState(null);
201
+ const [moveAnnouncement, setMoveAnnouncement] = React.useState("");
202
+ const commitDrop = (dragNode, dropNode, dropPosition) => {
203
+ onDrop?.({
204
+ dragNode,
205
+ node: dropNode,
206
+ dropPosition,
207
+ dropToGap: dropPosition !== 0
208
+ });
209
+ const key = dropPosition === -1 ? "dataDisplay.tree.movedBefore" : dropPosition === 1 ? "dataDisplay.tree.movedAfter" : "dataDisplay.tree.movedInside";
210
+ setMoveAnnouncement(
211
+ t(key, { node: reactNodeText(dragNode.label), target: reactNodeText(dropNode.label) })
212
+ );
213
+ };
214
+ const dropPositionAt = (event) => {
215
+ const rect = event.currentTarget.getBoundingClientRect();
216
+ if (rect.height <= 0) return 0;
217
+ const offset = (event.clientY - rect.top) / rect.height;
218
+ if (offset < 0.25) return -1;
219
+ if (offset > 0.75) return 1;
220
+ return 0;
221
+ };
222
+ const clearDrag = () => {
223
+ dragRef.current = null;
224
+ setDragValue(null);
225
+ setDropTarget(null);
226
+ };
227
+ const keyboardMove = (node, direction) => {
228
+ const parent = parentOf.get(node.value) ?? null;
229
+ const siblings = parent ? parent.children ?? [] : options;
230
+ const position = siblings.findIndex((entry) => entry.value === node.value);
231
+ let target;
232
+ let dropPosition;
233
+ if (direction === "up") {
234
+ target = siblings[position - 1];
235
+ dropPosition = -1;
236
+ } else if (direction === "down") {
237
+ target = siblings[position + 1];
238
+ dropPosition = 1;
239
+ } else if (direction === "out") {
240
+ target = parent;
241
+ dropPosition = 1;
242
+ } else {
243
+ const previous = siblings[position - 1];
244
+ const lastChild = previous?.children?.[previous.children.length - 1];
245
+ target = lastChild ?? previous;
246
+ dropPosition = lastChild ? 1 : 0;
247
+ }
248
+ if (!target || !canDrag(node) || !canDrop(node, target, dropPosition)) {
249
+ setMoveAnnouncement(t("dataDisplay.tree.moveRefused", { node: reactNodeText(node.label) }));
250
+ return;
251
+ }
252
+ if (direction === "in") {
253
+ const host = dropPosition === 0 ? target : siblings[position - 1];
254
+ if (host && !expandedSet.has(host.value)) commitExpanded([...expanded, host.value]);
255
+ }
256
+ commitDrop(node, target, dropPosition);
257
+ setActiveValue(node.value);
258
+ pendingFocus.current = node.value;
259
+ };
169
260
  const visible = flattenVisibleTree(options, expandedSet);
170
261
  const visibleIndex = new Map(visible.map((entry, index) => [entry.node.value, index]));
171
262
  const [activeValue, setActiveValue] = React.useState(null);
@@ -300,6 +391,14 @@ function TreeRoot({
300
391
  const rtl = isRtl(event.currentTarget);
301
392
  const inward = rtl ? "ArrowLeft" : "ArrowRight";
302
393
  const outward = rtl ? "ArrowRight" : "ArrowLeft";
394
+ if (isDraggable && event.altKey && (event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === inward || event.key === outward)) {
395
+ event.preventDefault();
396
+ keyboardMove(
397
+ node,
398
+ event.key === "ArrowUp" ? "up" : event.key === "ArrowDown" ? "down" : event.key === inward ? "in" : "out"
399
+ );
400
+ return;
401
+ }
303
402
  if (event.key === "ArrowDown") {
304
403
  event.preventDefault();
305
404
  moveTo(index + 1);
@@ -366,6 +465,8 @@ function TreeRoot({
366
465
  const checkState = checkableProp ? checkStateOf(node) : "unchecked";
367
466
  const nodeDisabled = disabled || Boolean(node.disabled);
368
467
  const labelId = `${treeId}-${node.value}-label`;
468
+ const nodeDraggable = canDrag(node);
469
+ const dropHere = dropTarget?.value === node.value ? dropTarget.position : void 0;
369
470
  const glyph = node.icon ?? (variant === "directory" ? hasChildren ? isOpen ? /* @__PURE__ */ jsx(FolderOpen, {}) : /* @__PURE__ */ jsx(Folder, {}) : /* @__PURE__ */ jsx(FileIcon, {}) : null);
370
471
  return /* @__PURE__ */ jsxs(
371
472
  "div",
@@ -395,6 +496,47 @@ function TreeRoot({
395
496
  "data-selected": isSelected ? "true" : void 0,
396
497
  "data-disabled": nodeDisabled ? "" : void 0,
397
498
  "data-filter-node": isFilterMatch ? "true" : void 0,
499
+ draggable: nodeDraggable || void 0,
500
+ "data-dragging": dragValue === node.value ? "true" : void 0,
501
+ "data-drop-position": dropHere === void 0 ? void 0 : dropHere === -1 ? "before" : dropHere === 1 ? "after" : "inside",
502
+ onDragStart: isDraggable ? (event) => {
503
+ if (!nodeDraggable) {
504
+ event.preventDefault();
505
+ return;
506
+ }
507
+ event.dataTransfer.effectAllowed = "move";
508
+ event.dataTransfer.setData("text/plain", node.value);
509
+ dragRef.current = node.value;
510
+ setDragValue(node.value);
511
+ } : void 0,
512
+ onDragOver: isDraggable ? (event) => {
513
+ const dragged = dragRef.current === null ? void 0 : nodesByValue.get(dragRef.current);
514
+ if (!dragged) return;
515
+ const position = dropPositionAt(event);
516
+ if (!canDrop(dragged, node, position)) {
517
+ if (dropTarget) setDropTarget(null);
518
+ return;
519
+ }
520
+ event.preventDefault();
521
+ event.dataTransfer.dropEffect = "move";
522
+ if (dropTarget?.value !== node.value || dropTarget.position !== position) {
523
+ setDropTarget({ value: node.value, position });
524
+ }
525
+ } : void 0,
526
+ onDragLeave: isDraggable ? (event) => {
527
+ if (event.currentTarget.contains(event.relatedTarget)) return;
528
+ if (dropTarget?.value === node.value) setDropTarget(null);
529
+ } : void 0,
530
+ onDrop: isDraggable ? (event) => {
531
+ event.preventDefault();
532
+ const dragged = dragRef.current === null ? void 0 : nodesByValue.get(dragRef.current);
533
+ const position = dropPositionAt(event);
534
+ if (dragged && canDrop(dragged, node, position)) {
535
+ commitDrop(dragged, node, position);
536
+ }
537
+ clearDrag();
538
+ } : void 0,
539
+ onDragEnd: isDraggable ? clearDrag : void 0,
398
540
  className: "ui-tree-node ui-focus-ring",
399
541
  style: { "--tree-node-level": depth },
400
542
  children: [
@@ -549,6 +691,7 @@ function TreeRoot({
549
691
  "div",
550
692
  {
551
693
  ...ariaProps,
694
+ "aria-describedby": isDraggable ? [ariaProps["aria-describedby"], dragHintId].filter(Boolean).join(" ") : ariaProps["aria-describedby"],
552
695
  ref: mergeRefs(forwardedRef, treeRef),
553
696
  id: treeId,
554
697
  role: "tree",
@@ -602,6 +745,10 @@ function TreeRoot({
602
745
  ]
603
746
  }
604
747
  ),
748
+ isDraggable ? /* @__PURE__ */ jsxs(Fragment, { children: [
749
+ /* @__PURE__ */ jsx("span", { id: dragHintId, className: "sr-only", children: t("dataDisplay.tree.dragHint") }),
750
+ /* @__PURE__ */ jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: moveAnnouncement })
751
+ ] }) : null,
605
752
  isEmpty ? /* @__PURE__ */ jsx("p", { role: "status", className: "ui-tree-empty", children: t("dataDisplay.tree.empty") }) : null
606
753
  ] });
607
754
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$comment": "AUTO-GENERATED by scripts/gen-measurement-contract.mjs — do not edit. Read this instead of guessing: docs/MEASUREMENT-CONTRACT.md.",
3
- "version": "31.13.0",
3
+ "version": "31.15.0",
4
4
  "targetSize": {
5
5
  "standard": "WCAG 2.2 SC 2.5.8 Target Size (Minimum), level AA — 24×24 CSS px",
6
6
  "min": 24,
@@ -364,7 +364,12 @@
364
364
  "loading": "Loading child nodes…",
365
365
  "empty": "Nothing to show",
366
366
  "selected": "Selected",
367
- "filterMatch": "Matches the filter"
367
+ "filterMatch": "Matches the filter",
368
+ "dragHint": "Alt plus arrow keys move the focused item: up and down past a sibling, left to outdent, right to indent.",
369
+ "movedBefore": "{node} moved before {target}",
370
+ "movedAfter": "{node} moved after {target}",
371
+ "movedInside": "{node} moved into {target}",
372
+ "moveRefused": "{node} cannot move there"
368
373
  },
369
374
  "thoughtChain": {
370
375
  "label": "Reasoning steps",
@@ -357,7 +357,12 @@
357
357
  "loading": "子ノードを読み込み中…",
358
358
  "empty": "表示する項目がありません",
359
359
  "selected": "選択中",
360
- "filterMatch": "フィルターに一致"
360
+ "filterMatch": "フィルターに一致",
361
+ "dragHint": "Alt キーと矢印キーでフォーカス中の項目を移動します。上下で兄弟の前後へ、左で階層を上げ、右で階層を下げます。",
362
+ "movedBefore": "{node} を {target} の前に移動しました",
363
+ "movedAfter": "{node} を {target} の後に移動しました",
364
+ "movedInside": "{node} を {target} の中に移動しました",
365
+ "moveRefused": "{node} はそこへ移動できません"
361
366
  },
362
367
  "thoughtChain": {
363
368
  "label": "思考の手順",
@@ -358,7 +358,12 @@
358
358
  "loading": "Đang tải nút con…",
359
359
  "empty": "Không có gì để hiển thị",
360
360
  "selected": "Đã chọn",
361
- "filterMatch": "Khớp bộ lọc"
361
+ "filterMatch": "Khớp bộ lọc",
362
+ "dragHint": "Alt cùng phím mũi tên di chuyển mục đang chọn: lên và xuống qua mục ngang hàng, trái để lùi cấp, phải để thụt cấp.",
363
+ "movedBefore": "Đã chuyển {node} lên trước {target}",
364
+ "movedAfter": "Đã chuyển {node} xuống sau {target}",
365
+ "movedInside": "Đã chuyển {node} vào trong {target}",
366
+ "moveRefused": "Không thể chuyển {node} tới đó"
362
367
  },
363
368
  "thoughtChain": {
364
369
  "label": "Các bước suy luận",
@@ -711,6 +711,29 @@ export type TreeNodeProp = TreeOptionProp & {
711
711
  * `checkedValues`/`defaultCheckedValues`/`onCheckedValuesChange`.
712
712
  * @see docs/roadmap/tree-components.md §3
713
713
  */
714
+ /**
715
+ * Where a drop lands relative to `node` (gh#1093): `-1` in the gap BEFORE it, `0` INSIDE it (the
716
+ * dragged node becomes its child), `1` in the gap AFTER it. antd's `onDrop` reports an absolute
717
+ * index and every antd demo subtracts the node's position back out to get exactly this number, so
718
+ * the relative form is what a consumer needs.
719
+ */
720
+ export type TreeDropPositionProp = -1 | 0 | 1;
721
+ /** `allowDrop` argument (antd `allowDrop({ dragNode, dropNode, dropPosition })`). */
722
+ export type TreeAllowDropInfoProp = {
723
+ dragNode: TreeNodeProp;
724
+ dropNode: TreeNodeProp;
725
+ dropPosition: TreeDropPositionProp;
726
+ };
727
+ /** `onDrop` argument (antd `onDrop({ dragNode, node, dropPosition, dropToGap })`). */
728
+ export type TreeDropInfoProp = {
729
+ /** The node being moved. */
730
+ dragNode: TreeNodeProp;
731
+ /** The node it was dropped on or beside. */
732
+ node: TreeNodeProp;
733
+ dropPosition: TreeDropPositionProp;
734
+ /** `true` when it lands in a gap (becomes a SIBLING of `node`), `false` when it lands inside. */
735
+ dropToGap: boolean;
736
+ };
714
737
  export type TreeProp = {
715
738
  /** The hierarchy (antd `treeData`). Use `fieldNames` to remap keys off an API response. */
716
739
  treeData: readonly TreeNodeProp[];
@@ -781,6 +804,21 @@ export type TreeProp = {
781
804
  * capability; see docs/DESIGN-AUTHORITY.md.
782
805
  */
783
806
  divided?: boolean;
807
+ /**
808
+ * Let the reader move nodes by dragging (antd `draggable`, gh#1093): drop on the upper or lower
809
+ * quarter of a row to land in the gap before / after it, on the middle to file it inside. The
810
+ * tree never mutates `treeData` — it reports the move through `onDrop` and the consumer persists
811
+ * it. Keyboard equivalent (WCAG 2.5.7): Alt+↑ / Alt+↓ move past the previous / next sibling,
812
+ * Alt+← outdents (after its parent), Alt+→ indents (into the previous sibling); each move is
813
+ * announced through a live region. A node is never dropped into itself or its own subtree.
814
+ */
815
+ draggable?: boolean;
816
+ /** Per-node drag gate (antd `draggable.nodeDraggable`). Disabled nodes never drag. */
817
+ allowDrag?: (node: TreeNodeProp) => boolean;
818
+ /** Per-target drop gate (antd `allowDrop`). Asked for pointer AND keyboard moves. */
819
+ allowDrop?: (info: TreeAllowDropInfoProp) => boolean;
820
+ /** A move the reader committed (antd `onDrop`). Update `treeData` here. */
821
+ onDrop?: (info: TreeDropInfoProp) => void;
784
822
  /** Draw each node's `icon` (antd `showIcon`). `variant="directory"` supplies folder/file glyphs. */
785
823
  showIcon?: boolean;
786
824
  /** `directory` is antd's `<DirectoryTree>`: folder/file glyphs and a full-row selected band. */
@@ -793,7 +831,8 @@ export type TreeProp = {
793
831
  id?: IdProp;
794
832
  /** Accessible name of the `role="tree"` container. Required unless `aria-labelledby` is given. */
795
833
  "aria-label"?: string;
796
- "aria-labelledby"?: string;
834
+ "aria-labelledby"?: string; /** Extra description ids; a `draggable` tree appends its own keyboard-move hint. */
835
+ "aria-describedby"?: string;
797
836
  };
798
837
  /**
799
838
  * @see ChatBubble — which side of the conversation the message sits on. LOGICAL, not physical:
@@ -1251,8 +1290,35 @@ export type ImageProp = Omit<React.ImgHTMLAttributes<HTMLImageElement>, "alt" |
1251
1290
  placeholder?: React.ReactNode | boolean;
1252
1291
  /** `false` = a plain picture, not clickable, not in its group. Default `true`. */
1253
1292
  preview?: boolean | ImagePreviewConfigProp;
1293
+ /**
1294
+ * antd Image `width`: the frame's inline size (number = px, or any CSS length). The picture
1295
+ * fills it; with no `height` its block size follows the picture's ratio. Also set on the `<img>`.
1296
+ */
1297
+ width?: number | string;
1298
+ /**
1299
+ * antd Image `height`: the frame's block size (number = px, or any CSS length). A fixed height
1300
+ * crops the picture to fill (`fit` defaults to `cover`). Also set on the `<img>`.
1301
+ */
1302
+ height?: number | string;
1303
+ /**
1304
+ * A thumbnail frame on the `Thumbnail` height scale (`--thumbnail-block-size-sm`, `…-size`,
1305
+ * `…-size-lg`: 64 / 96 / 160px) at `--thumbnail-width-ratio` (4 / 3). godx extension — antd has only
1306
+ * `width`/`height`, which override the preset's side they name.
1307
+ */
1308
+ size?: ImageSizeProp;
1309
+ /** How the picture fills a fixed frame (`object-fit`). Default `cover` once the height is fixed. */
1310
+ fit?: ImageFitProp;
1311
+ /**
1312
+ * Text under the picture, held to the picture's width, so a long file name truncates instead of
1313
+ * widening the tile. Renders a `<figure>` with a `<figcaption>`. godx extension.
1314
+ */
1315
+ caption?: React.ReactNode;
1254
1316
  className?: ClassNameProp;
1255
1317
  };
1318
+ /** `Image` thumbnail frame preset — the `Thumbnail` height scale. */
1319
+ export type ImageSizeProp = Extract<SizeProp, "sm" | "md" | "lg">;
1320
+ /** `Image` `fit` — the picture's `object-fit` inside a fixed frame. */
1321
+ export type ImageFitProp = "cover" | "contain";
1256
1322
  /**
1257
1323
  * @see ImagePreviewGroup — pages the preview across a set of pictures (antd `Image.PreviewGroup`).
1258
1324
  *
@@ -3165,6 +3165,49 @@ export declare const COMPONENT_PROP_REGISTRY: {
3165
3165
  readonly reason: "The node's own child nodes — the hierarchy itself, not a slot.";
3166
3166
  }];
3167
3167
  };
3168
+ readonly TreeDropPositionProp: {
3169
+ readonly group: "data-display";
3170
+ readonly file: "components/data-display.prop.ts";
3171
+ readonly vocabulary: readonly [];
3172
+ };
3173
+ readonly TreeAllowDropInfoProp: {
3174
+ readonly group: "data-display";
3175
+ readonly file: "components/data-display.prop.ts";
3176
+ readonly vocabulary: readonly [{
3177
+ readonly field: "dragNode";
3178
+ readonly local: true;
3179
+ readonly reason: "antd `allowDrop` argument: the node being moved (gh#1093).";
3180
+ }, {
3181
+ readonly field: "dropNode";
3182
+ readonly local: true;
3183
+ readonly reason: "antd `allowDrop` argument: the node it would land on or beside.";
3184
+ }, {
3185
+ readonly field: "dropPosition";
3186
+ readonly local: true;
3187
+ readonly reason: "antd `allowDrop` argument: -1 before, 0 inside, 1 after.";
3188
+ }];
3189
+ };
3190
+ readonly TreeDropInfoProp: {
3191
+ readonly group: "data-display";
3192
+ readonly file: "components/data-display.prop.ts";
3193
+ readonly vocabulary: readonly [{
3194
+ readonly field: "dragNode";
3195
+ readonly local: true;
3196
+ readonly reason: "antd `onDrop` info: the node being moved (gh#1093).";
3197
+ }, {
3198
+ readonly field: "node";
3199
+ readonly local: true;
3200
+ readonly reason: "antd `onDrop` info: the node it landed on or beside.";
3201
+ }, {
3202
+ readonly field: "dropPosition";
3203
+ readonly local: true;
3204
+ readonly reason: "antd `onDrop` info, relative: -1 before, 0 inside, 1 after.";
3205
+ }, {
3206
+ readonly field: "dropToGap";
3207
+ readonly local: true;
3208
+ readonly reason: "antd `onDrop` info: true when it lands as a sibling, false inside.";
3209
+ }];
3210
+ };
3168
3211
  readonly TreeProp: {
3169
3212
  readonly group: "data-display";
3170
3213
  readonly file: "components/data-display.prop.ts";
@@ -4065,6 +4108,16 @@ export declare const COMPONENT_PROP_REGISTRY: {
4065
4108
  readonly reason: "antd PreviewGroup `preview.onChange(current, prevCurrent)`, kept verbatim.";
4066
4109
  }];
4067
4110
  };
4111
+ readonly ImageSizeProp: {
4112
+ readonly group: "data-display";
4113
+ readonly file: "components/data-display.prop.ts";
4114
+ readonly vocabulary: readonly ["SizeProp"];
4115
+ };
4116
+ readonly ImageFitProp: {
4117
+ readonly group: "data-display";
4118
+ readonly file: "components/data-display.prop.ts";
4119
+ readonly vocabulary: readonly [];
4120
+ };
4068
4121
  readonly ImageProp: {
4069
4122
  readonly group: "data-display";
4070
4123
  readonly file: "components/data-display.prop.ts";
@@ -4084,6 +4137,22 @@ export declare const COMPONENT_PROP_REGISTRY: {
4084
4137
  readonly field: "preview";
4085
4138
  readonly local: true;
4086
4139
  readonly reason: "antd Image `preview: boolean | PreviewType` — opt-out or configure the preview.";
4140
+ }, "SizeProp", {
4141
+ readonly field: "width";
4142
+ readonly local: true;
4143
+ readonly reason: "antd Image `width` — the frame's inline size.";
4144
+ }, {
4145
+ readonly field: "height";
4146
+ readonly local: true;
4147
+ readonly reason: "antd Image `height` — the frame's block size.";
4148
+ }, {
4149
+ readonly field: "fit";
4150
+ readonly local: true;
4151
+ readonly reason: "CSS `object-fit` of the picture in a fixed frame.";
4152
+ }, {
4153
+ readonly field: "caption";
4154
+ readonly local: true;
4155
+ readonly reason: "A figcaption held to the picture's width (godx extension).";
4087
4156
  }];
4088
4157
  };
4089
4158
  readonly ImagePreviewGroupProp: {
@@ -3751,6 +3751,58 @@ const COMPONENT_PROP_REGISTRY = {
3751
3751
  }
3752
3752
  ]
3753
3753
  },
3754
+ TreeDropPositionProp: {
3755
+ group: "data-display",
3756
+ file: "components/data-display.prop.ts",
3757
+ vocabulary: []
3758
+ },
3759
+ TreeAllowDropInfoProp: {
3760
+ group: "data-display",
3761
+ file: "components/data-display.prop.ts",
3762
+ vocabulary: [
3763
+ {
3764
+ field: "dragNode",
3765
+ local: true,
3766
+ reason: "antd `allowDrop` argument: the node being moved (gh#1093)."
3767
+ },
3768
+ {
3769
+ field: "dropNode",
3770
+ local: true,
3771
+ reason: "antd `allowDrop` argument: the node it would land on or beside."
3772
+ },
3773
+ {
3774
+ field: "dropPosition",
3775
+ local: true,
3776
+ reason: "antd `allowDrop` argument: -1 before, 0 inside, 1 after."
3777
+ }
3778
+ ]
3779
+ },
3780
+ TreeDropInfoProp: {
3781
+ group: "data-display",
3782
+ file: "components/data-display.prop.ts",
3783
+ vocabulary: [
3784
+ {
3785
+ field: "dragNode",
3786
+ local: true,
3787
+ reason: "antd `onDrop` info: the node being moved (gh#1093)."
3788
+ },
3789
+ {
3790
+ field: "node",
3791
+ local: true,
3792
+ reason: "antd `onDrop` info: the node it landed on or beside."
3793
+ },
3794
+ {
3795
+ field: "dropPosition",
3796
+ local: true,
3797
+ reason: "antd `onDrop` info, relative: -1 before, 0 inside, 1 after."
3798
+ },
3799
+ {
3800
+ field: "dropToGap",
3801
+ local: true,
3802
+ reason: "antd `onDrop` info: true when it lands as a sibling, false inside."
3803
+ }
3804
+ ]
3805
+ },
3754
3806
  TreeProp: {
3755
3807
  group: "data-display",
3756
3808
  file: "components/data-display.prop.ts",
@@ -4920,6 +4972,16 @@ const COMPONENT_PROP_REGISTRY = {
4920
4972
  }
4921
4973
  ]
4922
4974
  },
4975
+ ImageSizeProp: {
4976
+ group: "data-display",
4977
+ file: "components/data-display.prop.ts",
4978
+ vocabulary: ["SizeProp"]
4979
+ },
4980
+ ImageFitProp: {
4981
+ group: "data-display",
4982
+ file: "components/data-display.prop.ts",
4983
+ vocabulary: []
4984
+ },
4923
4985
  ImageProp: {
4924
4986
  group: "data-display",
4925
4987
  file: "components/data-display.prop.ts",
@@ -4937,6 +4999,15 @@ const COMPONENT_PROP_REGISTRY = {
4937
4999
  field: "preview",
4938
5000
  local: true,
4939
5001
  reason: "antd Image `preview: boolean | PreviewType` \u2014 opt-out or configure the preview."
5002
+ },
5003
+ "SizeProp",
5004
+ { field: "width", local: true, reason: "antd Image `width` \u2014 the frame's inline size." },
5005
+ { field: "height", local: true, reason: "antd Image `height` \u2014 the frame's block size." },
5006
+ { field: "fit", local: true, reason: "CSS `object-fit` of the picture in a fixed frame." },
5007
+ {
5008
+ field: "caption",
5009
+ local: true,
5010
+ reason: "A figcaption held to the picture's width (godx extension)."
4940
5011
  }
4941
5012
  ]
4942
5013
  },