@ptengine/inline-editor 0.1.5 → 0.1.7

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 (52) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/InlineEditor.d.ts +15 -1
  3. package/dist/InlineEditor.js +226 -52
  4. package/dist/canvas-ui/tree/TreePanel.d.ts +2 -1
  5. package/dist/canvas-ui/tree/TreePanel.js +79 -39
  6. package/dist/chrome/EditorChrome.d.ts +2 -0
  7. package/dist/chrome/EditorChrome.js +1 -1
  8. package/dist/chrome/VersionMenu.d.ts +3 -1
  9. package/dist/chrome/VersionMenu.js +24 -12
  10. package/dist/chrome/topbarPrimitives.d.ts +5 -52
  11. package/dist/chrome/topbarPrimitives.js +13 -31
  12. package/dist/dialogs/ClickActionDialog.js +4 -5
  13. package/dist/dialogs/CodeField.d.ts +4 -0
  14. package/dist/dialogs/CodeField.js +10 -0
  15. package/dist/dialogs/HtmlEditDialog.js +3 -2
  16. package/dist/dialogs/ImageEditDialog.js +53 -15
  17. package/dist/dialogs/ImageSettingDialog.js +3 -3
  18. package/dist/dialogs/InsertElementDialog.js +10 -6
  19. package/dist/dialogs/MediaPreview.d.ts +5 -0
  20. package/dist/dialogs/MediaPreview.js +34 -0
  21. package/dist/dialogs/ReplaceVideoDialog.js +8 -4
  22. package/dist/index.d.ts +1 -0
  23. package/dist/kernel/ai/aiInlineApply.d.ts +4 -3
  24. package/dist/kernel/blocks/BlockOverlay.js +1 -1
  25. package/dist/kernel/blocks/resolveBlocks.d.ts +16 -0
  26. package/dist/kernel/blocks/resolveBlocks.js +39 -6
  27. package/dist/kernel/changelist/ChangeListPanel.js +11 -9
  28. package/dist/kernel/changelist/useChangeList.d.ts +5 -0
  29. package/dist/kernel/changelist/useChangeList.js +85 -10
  30. package/dist/kernel/selection/SelectionOverlay.js +1 -1
  31. package/dist/kernel/selection/SelectionToolbar.js +26 -8
  32. package/dist/kernel/selection/buildRootShelf.d.ts +56 -2
  33. package/dist/kernel/selection/buildRootShelf.js +189 -41
  34. package/dist/kernel/selection/elementAiContext.d.ts +11 -3
  35. package/dist/kernel/selection/resolveAnchors.d.ts +17 -0
  36. package/dist/kernel/selection/resolveAnchors.js +59 -11
  37. package/dist/locales.d.ts +201 -48
  38. package/dist/locales.js +13 -9
  39. package/dist/panels/EditorStatus.d.ts +5 -0
  40. package/dist/panels/EditorStatus.js +4 -0
  41. package/dist/panels/MovePositionControls.d.ts +6 -0
  42. package/dist/panels/MovePositionControls.js +35 -0
  43. package/dist/panels/ScreenshotCard.d.ts +7 -0
  44. package/dist/panels/ScreenshotCard.js +57 -0
  45. package/dist/panels/StylePanel.d.ts +9 -1
  46. package/dist/panels/StylePanel.js +108 -12
  47. package/dist/reviewLocales.d.ts +149 -0
  48. package/dist/reviewLocales.js +143 -0
  49. package/dist/tree/LayersPanel.js +4 -2
  50. package/dist/useInlineEditor.d.ts +1 -0
  51. package/dist/useInlineEditor.js +40 -1
  52. package/package.json +2 -2
@@ -35,6 +35,15 @@ export interface InlinePlanAnchor {
35
35
  op?: string;
36
36
  mode?: string;
37
37
  placement?: string;
38
+ /**
39
+ * 只给 MOVE_ELEMENT:移到哪(`mode` 相对它:before / after / top / bottom)。移动的落点是**一对**
40
+ * (移谁 + 移到哪),只存 selector 的话首版只知道要挪、不知道挪到哪(2026-10-21 trace 973f6deb:
41
+ * 「新闻区挪到畅销榜后面」)。编辑器打开时与锚点一样在活页面上重新解析,命中的目标并进货架 ——
42
+ * 整页模式下 MOVE 的 target 只认货架行(`pageMoveTargetProblem`)。
43
+ */
44
+ targetSelector?: string;
45
+ /** 目标那一行的标题 / 首句 —— `targetSelector` 失效时按它找回来(与 `label` 同一套规则)。 */
46
+ targetLabel?: string;
38
47
  /**
39
48
  * 该区块(B{n})在活页面上的 member 容器 selector,外层优先。**只在内存里**(宿主从页面模型
40
49
  * 补进来),不落库、不与 backend 同形。
@@ -55,6 +64,14 @@ export interface ResolvedAnchor extends InlinePlanAnchor {
55
64
  resolved: boolean;
56
65
  /** 哪条路成功的。`label` = 原 selector 已失效(客户改版),值得让 agent 知道。 */
57
66
  via?: 'selector' | 'label';
67
+ /**
68
+ * MOVE 目标(`targetSelector`)的解析结果;锚点没有目标、或锚点自己没解析到时不写。
69
+ * `true` = 目标在活页面上唯一命中、且已作为一行并进货架与祖先表(agent 抄它就过得了 MOVE 的 target 闸)。
70
+ */
71
+ targetResolved?: boolean;
72
+ targetVia?: 'selector' | 'label';
73
+ /** 目标在活页面上的 selector。`targetVia: 'label'` 时与存下来的 `targetSelector` 不同 —— 宿主打印这一个。 */
74
+ resolvedTargetSelector?: string;
58
75
  }
59
76
  export interface AnchorShelfResult {
60
77
  /** 锚点容器行在前、其子树行在后,按锚点顺序。 */
@@ -64,6 +64,17 @@ export function withImageRows(shelf, anchorRowCount, images) {
64
64
  function normalizeLabel(s) {
65
65
  return s.replace(/\s+/g, ' ').trim().toLowerCase();
66
66
  }
67
+ function indexNodes(root) {
68
+ const map = new Map();
69
+ const walk = (n) => {
70
+ if (!map.has(n.selector))
71
+ map.set(n.selector, n);
72
+ for (const child of n.children)
73
+ walk(child);
74
+ };
75
+ walk(root);
76
+ return map;
77
+ }
67
78
  function indexAncestors(root) {
68
79
  const map = new Map();
69
80
  const walk = (n, ancestors) => {
@@ -117,6 +128,7 @@ export async function resolveInlinePlanAnchors(input) {
117
128
  const outcomes = [];
118
129
  const seen = new Set();
119
130
  const rootAncestors = indexAncestors(rootTree);
131
+ const rootNodes = indexNodes(rootTree);
120
132
  const rootInRow = rowPositions(rootTree);
121
133
  const push = (row, chain) => {
122
134
  if (seen.has(row.selector))
@@ -125,6 +137,37 @@ export async function resolveInlinePlanAnchors(input) {
125
137
  shelf.push(row);
126
138
  ancestorsOf.set(row.selector, chain);
127
139
  };
140
+ const resolveTarget = async (selector, label) => {
141
+ let found = null;
142
+ let targetVia;
143
+ try {
144
+ const probe = await resolveSelector(selector);
145
+ if (probe.matched && probe.matchCount === 1) {
146
+ found = selector;
147
+ targetVia = 'selector';
148
+ }
149
+ }
150
+ catch {
151
+ }
152
+ if (!found && label) {
153
+ const byLabel = findUniqueByLabel(rootTree, label);
154
+ if (byLabel) {
155
+ found = byLabel.selector;
156
+ targetVia = 'label';
157
+ }
158
+ }
159
+ if (!found)
160
+ return { targetResolved: false };
161
+ if (!seen.has(found)) {
162
+ const node = rootNodes.get(found);
163
+ if (!node)
164
+ return { targetResolved: false };
165
+ const inRow = rootInRow.get(found);
166
+ const row = rowOf(node);
167
+ push(inRow ? { ...row, inRow } : row, rootAncestors.get(found) ?? []);
168
+ }
169
+ return { targetResolved: true, targetVia, resolvedTargetSelector: found };
170
+ };
128
171
  for (const anchor of anchors) {
129
172
  let resolvedSelector = null;
130
173
  let via;
@@ -148,7 +191,8 @@ export async function resolveInlinePlanAnchors(input) {
148
191
  outcomes.push({ ...anchor, resolved: false });
149
192
  continue;
150
193
  }
151
- outcomes.push({ ...anchor, resolved: true, via });
194
+ const outcome = { ...anchor, resolved: true, via };
195
+ outcomes.push(outcome);
152
196
  const ownAncestors = rootAncestors.get(resolvedSelector) ?? [];
153
197
  const ownInRow = rootInRow.get(resolvedSelector);
154
198
  const withOwnInRow = (row) => ownInRow ? { ...row, inRow: ownInRow } : row;
@@ -160,17 +204,21 @@ export async function resolveInlinePlanAnchors(input) {
160
204
  }
161
205
  if (!subtree) {
162
206
  push(withOwnInRow({ selector: resolvedSelector, tag: '', text: '', hasChildren: true }), ownAncestors);
163
- continue;
164
207
  }
165
- const anchorSelector = subtree.selector || resolvedSelector;
166
- push(withOwnInRow(rowOf(subtree)), ownAncestors);
167
- const { shelf: rows, ancestorsOf: within } = buildDescendantShelfWithPaths(subtree, limitPerAnchor);
168
- for (const row of rows) {
169
- const chainWithin = within.get(row.selector) ?? [];
170
- const chain = chainWithin.includes(anchorSelector)
171
- ? [...chainWithin, ...ownAncestors]
172
- : [...chainWithin, anchorSelector, ...ownAncestors];
173
- push({ ...row, depth: (row.depth ?? 0) + 1 }, chain);
208
+ else {
209
+ const anchorSelector = subtree.selector || resolvedSelector;
210
+ push(withOwnInRow(rowOf(subtree)), ownAncestors);
211
+ const { shelf: rows, ancestorsOf: within } = buildDescendantShelfWithPaths(subtree, limitPerAnchor);
212
+ for (const row of rows) {
213
+ const chainWithin = within.get(row.selector) ?? [];
214
+ const chain = chainWithin.includes(anchorSelector)
215
+ ? [...chainWithin, ...ownAncestors]
216
+ : [...chainWithin, anchorSelector, ...ownAncestors];
217
+ push({ ...row, depth: (row.depth ?? 0) + 1 }, chain);
218
+ }
219
+ }
220
+ if (anchor.targetSelector) {
221
+ Object.assign(outcome, await resolveTarget(anchor.targetSelector, anchor.targetLabel));
174
222
  }
175
223
  }
176
224
  return { shelf, ancestorsOf, anchors: outcomes };
package/dist/locales.d.ts CHANGED
@@ -54,6 +54,7 @@ export declare const zhCN: {
54
54
  title: string;
55
55
  pickTarget: string;
56
56
  cancel: string;
57
+ confirm: string;
57
58
  position: string;
58
59
  top: string;
59
60
  bottom: string;
@@ -234,6 +235,7 @@ export declare const enUS: {
234
235
  title: string;
235
236
  pickTarget: string;
236
237
  cancel: string;
238
+ confirm: string;
237
239
  position: string;
238
240
  top: string;
239
241
  bottom: string;
@@ -414,6 +416,7 @@ export declare const jaJP: {
414
416
  title: string;
415
417
  pickTarget: string;
416
418
  cancel: string;
419
+ confirm: string;
417
420
  position: string;
418
421
  top: string;
419
422
  bottom: string;
@@ -551,8 +554,57 @@ export declare const jaJP: {
551
554
  };
552
555
  export declare const inlineEditorLocales: {
553
556
  readonly 'zh-CN': {
554
- inlineCanvas: {
555
- action: {
557
+ readonly inlineCanvas: {
558
+ readonly review: {
559
+ readonly pageLoadFailed: "目标页面无法加载";
560
+ readonly pageLoadHint: "请返回检查页面地址、网站访问权限和网络连接后重试。";
561
+ readonly backFromFailed: "返回修改";
562
+ readonly generating: "正在生成截图…";
563
+ readonly noLayers: "没有匹配的图层";
564
+ readonly clearSearch: "清除搜索";
565
+ readonly searchLayers: "搜索图层";
566
+ readonly linkCopied: "链接已复制";
567
+ readonly copyLinkManual: "复制失败,请从下方手动复制链接";
568
+ readonly uploadError: "上传失败,可重试;本地图片仍可下载";
569
+ readonly screenshot: "元素截图";
570
+ readonly enlarge: "放大预览";
571
+ readonly shotTruncated: "元素超出可视区,只截到可见部分";
572
+ readonly shotScale: "截图分辨率约为原图的 {{scale}}%";
573
+ readonly downloadImage: "下载图片";
574
+ readonly imageCopied: "图片已复制";
575
+ readonly copyError: "复制失败,请下载图片";
576
+ readonly copyImage: "复制图片";
577
+ readonly uploading: "正在上传…";
578
+ readonly copyLink: "复制链接";
579
+ readonly shotLink: "截图链接";
580
+ readonly reset: "清除覆盖";
581
+ readonly colorSwatch: "选择颜色";
582
+ readonly saveDraft: "保存草稿";
583
+ readonly versions: "版本管理";
584
+ readonly removeEmptyVersion: "移除空版本";
585
+ readonly versionLimit: "最多 4 个版本";
586
+ readonly imageLimit: "请选择不超过 10 MB 的图片";
587
+ readonly currentMedia: "当前媒体";
588
+ readonly uploadFile: "上传文件";
589
+ readonly useLink: "使用链接";
590
+ readonly replaceImage: "替换当前图片";
591
+ readonly replaceBackground: "替换背景图片";
592
+ readonly insertImage: "插入新图片";
593
+ readonly dropImage: "拖入图片或选择文件,支持图片格式,最大 10 MB。上传只准备素材,应用后才修改画布。";
594
+ readonly pendingMedia: "待应用媒体";
595
+ readonly altHelp: "替代文本用于描述图片内容。装饰图片可留空。";
596
+ readonly videoLinkHint: "支持视频文件链接和 YouTube 嵌入链接。加载就绪后应用到画布。";
597
+ readonly mediaPreview: "媒体预览";
598
+ readonly loading: "正在加载预览…";
599
+ readonly loadError: "预览加载失败";
600
+ readonly retry: "重试";
601
+ readonly ready: "媒体已就绪,应用后修改画布";
602
+ readonly align_left: "左对齐";
603
+ readonly align_center: "居中";
604
+ readonly align_right: "右对齐";
605
+ readonly align_justify: "两端对齐";
606
+ };
607
+ readonly action: {
556
608
  title: string;
557
609
  enable: string;
558
610
  type: string;
@@ -572,17 +624,17 @@ export declare const inlineEditorLocales: {
572
624
  fileUrl: string;
573
625
  code: string;
574
626
  };
575
- video: {
627
+ readonly video: {
576
628
  title: string;
577
629
  url: string;
578
630
  hint: string;
579
631
  };
580
- insert: {
632
+ readonly insert: {
581
633
  title: string;
582
634
  html: string;
583
635
  position: string;
584
636
  };
585
- image: {
637
+ readonly image: {
586
638
  replaceTitle: string;
587
639
  settingTitle: string;
588
640
  url: string;
@@ -591,17 +643,18 @@ export declare const inlineEditorLocales: {
591
643
  alt: string;
592
644
  insertPosition: string;
593
645
  };
594
- move: {
646
+ readonly move: {
595
647
  title: string;
596
648
  pickTarget: string;
597
649
  cancel: string;
650
+ confirm: string;
598
651
  position: string;
599
652
  top: string;
600
653
  bottom: string;
601
654
  before: string;
602
655
  after: string;
603
656
  };
604
- clipboard: {
657
+ readonly clipboard: {
605
658
  copied: string;
606
659
  nothingToPaste: string;
607
660
  pastePosition: string;
@@ -610,7 +663,7 @@ export declare const inlineEditorLocales: {
610
663
  before: string;
611
664
  after: string;
612
665
  };
613
- chrome: {
666
+ readonly chrome: {
614
667
  exit: string;
615
668
  close: string;
616
669
  save: string;
@@ -630,17 +683,17 @@ export declare const inlineEditorLocales: {
630
683
  pc: string;
631
684
  mobile: string;
632
685
  };
633
- version: {
686
+ readonly version: {
634
687
  switching: string;
635
688
  };
636
- preview: {
689
+ readonly preview: {
637
690
  loading: string;
638
691
  ready: string;
639
692
  failed: string;
640
693
  failedHint: string;
641
694
  blockCount: string;
642
695
  };
643
- html: {
696
+ readonly html: {
644
697
  title: string;
645
698
  tip: string;
646
699
  scriptStripped: string;
@@ -648,11 +701,11 @@ export declare const inlineEditorLocales: {
648
701
  errorNoElement: string;
649
702
  errorMultipleRoots: string;
650
703
  };
651
- text: {
704
+ readonly text: {
652
705
  title: string;
653
706
  tip: string;
654
707
  };
655
- style: {
708
+ readonly style: {
656
709
  footnote: string;
657
710
  size: string;
658
711
  width: string;
@@ -673,7 +726,7 @@ export declare const inlineEditorLocales: {
673
726
  borderAll: string;
674
727
  borderRadius: string;
675
728
  };
676
- toolbar: {
729
+ readonly toolbar: {
677
730
  screenshot: string;
678
731
  replaceVideo: string;
679
732
  insert: string;
@@ -689,11 +742,11 @@ export declare const inlineEditorLocales: {
689
742
  delete: string;
690
743
  askAi: string;
691
744
  };
692
- selectorPath: {
745
+ readonly selectorPath: {
693
746
  label: string;
694
747
  };
695
748
  };
696
- taginfo: {
749
+ readonly taginfo: {
697
750
  A: string;
698
751
  B: string;
699
752
  BODY: string;
@@ -731,8 +784,57 @@ export declare const inlineEditorLocales: {
731
784
  };
732
785
  };
733
786
  readonly 'en-US': {
734
- inlineCanvas: {
735
- action: {
787
+ readonly inlineCanvas: {
788
+ readonly review: {
789
+ readonly pageLoadFailed: "Unable to load the target page";
790
+ readonly pageLoadHint: "Go back to check the page URL, site permissions and network connection, then retry.";
791
+ readonly backFromFailed: "Go back";
792
+ readonly generating: "Generating screenshot…";
793
+ readonly noLayers: "No matching layers";
794
+ readonly clearSearch: "Clear search";
795
+ readonly searchLayers: "Search layers";
796
+ readonly linkCopied: "Link copied";
797
+ readonly copyLinkManual: "Copy failed. Copy the link below manually.";
798
+ readonly uploadError: "Upload failed. Retry or download the local image.";
799
+ readonly screenshot: "Element screenshot";
800
+ readonly enlarge: "Enlarge preview";
801
+ readonly shotTruncated: "Only the visible part of the element was captured.";
802
+ readonly shotScale: "Screenshot resolution is about {{scale}}% of the original.";
803
+ readonly downloadImage: "Download image";
804
+ readonly imageCopied: "Image copied";
805
+ readonly copyError: "Copy failed. Download the image instead.";
806
+ readonly copyImage: "Copy image";
807
+ readonly uploading: "Uploading…";
808
+ readonly copyLink: "Copy link";
809
+ readonly shotLink: "Screenshot link";
810
+ readonly reset: "Clear override";
811
+ readonly colorSwatch: "Choose color";
812
+ readonly saveDraft: "Save draft";
813
+ readonly versions: "Manage versions";
814
+ readonly removeEmptyVersion: "Remove empty version";
815
+ readonly versionLimit: "Maximum 4 versions";
816
+ readonly imageLimit: "Choose an image up to 10 MB.";
817
+ readonly currentMedia: "Current media";
818
+ readonly uploadFile: "Upload file";
819
+ readonly useLink: "Use link";
820
+ readonly replaceImage: "Replace current image";
821
+ readonly replaceBackground: "Replace background image";
822
+ readonly insertImage: "Insert new image";
823
+ readonly dropImage: "Drop an image or choose a file, up to 10 MB. Upload prepares the asset; Apply changes the canvas.";
824
+ readonly pendingMedia: "Media to apply";
825
+ readonly altHelp: "Describe the image for assistive technology. Leave blank for decorative images.";
826
+ readonly videoLinkHint: "Use a video file URL or YouTube embed link. Apply after the preview is ready.";
827
+ readonly mediaPreview: "Media preview";
828
+ readonly loading: "Loading preview…";
829
+ readonly loadError: "Preview failed to load";
830
+ readonly retry: "Retry";
831
+ readonly ready: "Ready. Apply to update the canvas.";
832
+ readonly align_left: "Align left";
833
+ readonly align_center: "Center";
834
+ readonly align_right: "Align right";
835
+ readonly align_justify: "Justify";
836
+ };
837
+ readonly action: {
736
838
  title: string;
737
839
  enable: string;
738
840
  type: string;
@@ -752,17 +854,17 @@ export declare const inlineEditorLocales: {
752
854
  fileUrl: string;
753
855
  code: string;
754
856
  };
755
- video: {
857
+ readonly video: {
756
858
  title: string;
757
859
  url: string;
758
860
  hint: string;
759
861
  };
760
- insert: {
862
+ readonly insert: {
761
863
  title: string;
762
864
  html: string;
763
865
  position: string;
764
866
  };
765
- image: {
867
+ readonly image: {
766
868
  replaceTitle: string;
767
869
  settingTitle: string;
768
870
  url: string;
@@ -771,17 +873,18 @@ export declare const inlineEditorLocales: {
771
873
  alt: string;
772
874
  insertPosition: string;
773
875
  };
774
- move: {
876
+ readonly move: {
775
877
  title: string;
776
878
  pickTarget: string;
777
879
  cancel: string;
880
+ confirm: string;
778
881
  position: string;
779
882
  top: string;
780
883
  bottom: string;
781
884
  before: string;
782
885
  after: string;
783
886
  };
784
- clipboard: {
887
+ readonly clipboard: {
785
888
  copied: string;
786
889
  nothingToPaste: string;
787
890
  pastePosition: string;
@@ -790,7 +893,7 @@ export declare const inlineEditorLocales: {
790
893
  before: string;
791
894
  after: string;
792
895
  };
793
- chrome: {
896
+ readonly chrome: {
794
897
  exit: string;
795
898
  close: string;
796
899
  save: string;
@@ -810,17 +913,17 @@ export declare const inlineEditorLocales: {
810
913
  pc: string;
811
914
  mobile: string;
812
915
  };
813
- version: {
916
+ readonly version: {
814
917
  switching: string;
815
918
  };
816
- preview: {
919
+ readonly preview: {
817
920
  loading: string;
818
921
  ready: string;
819
922
  failed: string;
820
923
  failedHint: string;
821
924
  blockCount: string;
822
925
  };
823
- html: {
926
+ readonly html: {
824
927
  title: string;
825
928
  tip: string;
826
929
  scriptStripped: string;
@@ -828,11 +931,11 @@ export declare const inlineEditorLocales: {
828
931
  errorNoElement: string;
829
932
  errorMultipleRoots: string;
830
933
  };
831
- text: {
934
+ readonly text: {
832
935
  title: string;
833
936
  tip: string;
834
937
  };
835
- style: {
938
+ readonly style: {
836
939
  footnote: string;
837
940
  size: string;
838
941
  width: string;
@@ -853,7 +956,7 @@ export declare const inlineEditorLocales: {
853
956
  borderAll: string;
854
957
  borderRadius: string;
855
958
  };
856
- toolbar: {
959
+ readonly toolbar: {
857
960
  screenshot: string;
858
961
  replaceVideo: string;
859
962
  insert: string;
@@ -869,11 +972,11 @@ export declare const inlineEditorLocales: {
869
972
  delete: string;
870
973
  askAi: string;
871
974
  };
872
- selectorPath: {
975
+ readonly selectorPath: {
873
976
  label: string;
874
977
  };
875
978
  };
876
- taginfo: {
979
+ readonly taginfo: {
877
980
  A: string;
878
981
  B: string;
879
982
  BODY: string;
@@ -911,8 +1014,57 @@ export declare const inlineEditorLocales: {
911
1014
  };
912
1015
  };
913
1016
  readonly 'ja-JP': {
914
- inlineCanvas: {
915
- action: {
1017
+ readonly inlineCanvas: {
1018
+ readonly review: {
1019
+ readonly pageLoadFailed: "対象ページを読み込めません";
1020
+ readonly pageLoadHint: "戻ってページ URL、サイトへのアクセス権限、ネットワーク接続を確認して再試行してください。";
1021
+ readonly backFromFailed: "戻って修正";
1022
+ readonly generating: "スクリーンショットを生成中…";
1023
+ readonly noLayers: "一致するレイヤーがありません";
1024
+ readonly clearSearch: "検索をクリア";
1025
+ readonly searchLayers: "レイヤーを検索";
1026
+ readonly linkCopied: "リンクをコピーしました";
1027
+ readonly copyLinkManual: "コピーできませんでした。下のリンクを手動でコピーしてください。";
1028
+ readonly uploadError: "アップロードできませんでした。再試行または画像をダウンロードしてください。";
1029
+ readonly screenshot: "要素のスクリーンショット";
1030
+ readonly enlarge: "プレビューを拡大";
1031
+ readonly shotTruncated: "表示されている部分のみ撮影しました。";
1032
+ readonly shotScale: "解像度は元の約 {{scale}}% です。";
1033
+ readonly downloadImage: "画像をダウンロード";
1034
+ readonly imageCopied: "画像をコピーしました";
1035
+ readonly copyError: "コピーできませんでした。画像をダウンロードしてください。";
1036
+ readonly copyImage: "画像をコピー";
1037
+ readonly uploading: "アップロード中…";
1038
+ readonly copyLink: "リンクをコピー";
1039
+ readonly shotLink: "スクリーンショットのリンク";
1040
+ readonly reset: "上書きを解除";
1041
+ readonly colorSwatch: "色を選択";
1042
+ readonly saveDraft: "下書きを保存";
1043
+ readonly versions: "バージョン管理";
1044
+ readonly removeEmptyVersion: "空のバージョンを削除";
1045
+ readonly versionLimit: "最大4バージョン";
1046
+ readonly imageLimit: "10 MB 以下の画像を選択してください。";
1047
+ readonly currentMedia: "現在のメディア";
1048
+ readonly uploadFile: "ファイルをアップロード";
1049
+ readonly useLink: "リンクを使用";
1050
+ readonly replaceImage: "現在の画像を置き換え";
1051
+ readonly replaceBackground: "背景画像を置き換え";
1052
+ readonly insertImage: "新しい画像を挿入";
1053
+ readonly dropImage: "画像をドロップするか選択してください(最大10 MB)。アップロードで素材を準備し、適用でキャンバスを変更します。";
1054
+ readonly pendingMedia: "適用するメディア";
1055
+ readonly altHelp: "画像の内容を説明してください。装飾用の画像は空欄にできます。";
1056
+ readonly videoLinkHint: "動画ファイルのURLまたはYouTube埋め込みリンクを入力し、読み込み後に適用してください。";
1057
+ readonly mediaPreview: "メディアプレビュー";
1058
+ readonly loading: "プレビューを読み込み中…";
1059
+ readonly loadError: "プレビューを読み込めませんでした";
1060
+ readonly retry: "再試行";
1061
+ readonly ready: "準備完了。適用するとキャンバスを変更します。";
1062
+ readonly align_left: "左揃え";
1063
+ readonly align_center: "中央揃え";
1064
+ readonly align_right: "右揃え";
1065
+ readonly align_justify: "両端揃え";
1066
+ };
1067
+ readonly action: {
916
1068
  title: string;
917
1069
  enable: string;
918
1070
  type: string;
@@ -932,17 +1084,17 @@ export declare const inlineEditorLocales: {
932
1084
  fileUrl: string;
933
1085
  code: string;
934
1086
  };
935
- video: {
1087
+ readonly video: {
936
1088
  title: string;
937
1089
  url: string;
938
1090
  hint: string;
939
1091
  };
940
- insert: {
1092
+ readonly insert: {
941
1093
  title: string;
942
1094
  html: string;
943
1095
  position: string;
944
1096
  };
945
- image: {
1097
+ readonly image: {
946
1098
  replaceTitle: string;
947
1099
  settingTitle: string;
948
1100
  url: string;
@@ -951,17 +1103,18 @@ export declare const inlineEditorLocales: {
951
1103
  alt: string;
952
1104
  insertPosition: string;
953
1105
  };
954
- move: {
1106
+ readonly move: {
955
1107
  title: string;
956
1108
  pickTarget: string;
957
1109
  cancel: string;
1110
+ confirm: string;
958
1111
  position: string;
959
1112
  top: string;
960
1113
  bottom: string;
961
1114
  before: string;
962
1115
  after: string;
963
1116
  };
964
- clipboard: {
1117
+ readonly clipboard: {
965
1118
  copied: string;
966
1119
  nothingToPaste: string;
967
1120
  pastePosition: string;
@@ -970,7 +1123,7 @@ export declare const inlineEditorLocales: {
970
1123
  before: string;
971
1124
  after: string;
972
1125
  };
973
- chrome: {
1126
+ readonly chrome: {
974
1127
  exit: string;
975
1128
  close: string;
976
1129
  save: string;
@@ -990,17 +1143,17 @@ export declare const inlineEditorLocales: {
990
1143
  pc: string;
991
1144
  mobile: string;
992
1145
  };
993
- version: {
1146
+ readonly version: {
994
1147
  switching: string;
995
1148
  };
996
- preview: {
1149
+ readonly preview: {
997
1150
  loading: string;
998
1151
  ready: string;
999
1152
  failed: string;
1000
1153
  failedHint: string;
1001
1154
  blockCount: string;
1002
1155
  };
1003
- html: {
1156
+ readonly html: {
1004
1157
  title: string;
1005
1158
  tip: string;
1006
1159
  scriptStripped: string;
@@ -1008,11 +1161,11 @@ export declare const inlineEditorLocales: {
1008
1161
  errorNoElement: string;
1009
1162
  errorMultipleRoots: string;
1010
1163
  };
1011
- text: {
1164
+ readonly text: {
1012
1165
  title: string;
1013
1166
  tip: string;
1014
1167
  };
1015
- style: {
1168
+ readonly style: {
1016
1169
  footnote: string;
1017
1170
  size: string;
1018
1171
  width: string;
@@ -1033,7 +1186,7 @@ export declare const inlineEditorLocales: {
1033
1186
  borderAll: string;
1034
1187
  borderRadius: string;
1035
1188
  };
1036
- toolbar: {
1189
+ readonly toolbar: {
1037
1190
  screenshot: string;
1038
1191
  replaceVideo: string;
1039
1192
  insert: string;
@@ -1049,11 +1202,11 @@ export declare const inlineEditorLocales: {
1049
1202
  delete: string;
1050
1203
  askAi: string;
1051
1204
  };
1052
- selectorPath: {
1205
+ readonly selectorPath: {
1053
1206
  label: string;
1054
1207
  };
1055
1208
  };
1056
- taginfo: {
1209
+ readonly taginfo: {
1057
1210
  A: string;
1058
1211
  B: string;
1059
1212
  BODY: string;