@tatamicks/core 0.0.2 → 0.1.1

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.
@@ -1,6 +1,9 @@
1
1
  import { default as default_2 } from 'react';
2
+ import { ForwardRefExoticComponent } from 'react';
2
3
  import { JSX as JSX_2 } from 'react/jsx-runtime';
3
4
  import { MemoExoticComponent } from 'react';
5
+ import { ReactNode } from 'react';
6
+ import { RefAttributes } from 'react';
4
7
 
5
8
  export declare const ACTUAL_UNITS: readonly ["mm", "cm", "pt", "inch", "px"];
6
9
 
@@ -57,6 +60,13 @@ export declare function assertPositive(value: number, name?: string): void;
57
60
  */
58
61
  export declare function assertRange(value: number, min: number, max: number, name?: string): void;
59
62
 
63
+ export declare const BackgroundPanel: default_2.FC<BackgroundPanelProps>;
64
+
65
+ export declare interface BackgroundPanelProps {
66
+ selectedBlocks: Block[];
67
+ onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
68
+ }
69
+
60
70
  export declare function binarySearch(num: number, arr: readonly number[]): number;
61
71
 
62
72
  /**
@@ -94,6 +104,55 @@ export declare interface BlockBehavior {
94
104
  readOnly?: boolean;
95
105
  }
96
106
 
107
+ /**
108
+ * BlockBorder
109
+ *
110
+ * ブロックの境界線を描画するコンポーネント
111
+ * - block.style?.borderで設定された枠線を描画
112
+ * - pointer-events: none (クリックイベント透過)
113
+ *
114
+ * @remarks
115
+ * - ユーザー設定の枠線を描画
116
+ * - BlockBaseBorderと構造は同じだが、用途とz-indexが異なる
117
+ * - BlockBaseBorder: ガイド線(GUIDE層)
118
+ * - BlockBorder: 実際の枠線(BORDER層)
119
+ */
120
+ export declare const BlockBorder: default_2.FC<BlockBorderProps>;
121
+
122
+ /**
123
+ * BlockBorderコンポーネントのProps
124
+ */
125
+ export declare interface BlockBorderProps {
126
+ blockSizePx: BlockSizePx;
127
+ borderStyle?: BorderStyle;
128
+ blockZIndex: number;
129
+ subZIndex?: number;
130
+ visible?: boolean;
131
+ dpi?: number;
132
+ className?: string;
133
+ }
134
+
135
+ /**
136
+ * BlockCanvas
137
+ *
138
+ * ブロック背景を描画するコンポーネント
139
+ * - z-index: ブロック基底値 + 0 (各ブロックの最下層)
140
+ * - pointer-events: none (クリックイベント透過)
141
+ * - 背景色のみを描画(境界線はBlockBaseBorderが担当)
142
+ */
143
+ export declare const BlockCanvas: default_2.FC<BlockCanvasProps>;
144
+
145
+ /**
146
+ * BlockCanvasコンポーネントのProps
147
+ */
148
+ export declare interface BlockCanvasProps {
149
+ blockSizePx: BlockSizePx;
150
+ blockZIndex: number;
151
+ subZIndex?: number;
152
+ backgroundColor?: string;
153
+ className?: string;
154
+ }
155
+
97
156
  export declare interface BlockChangeEvent {
98
157
  type: BlockChangeType;
99
158
  blockIds: string[];
@@ -118,6 +177,26 @@ export declare enum BlockChangeType {
118
177
  PASTE = "paste"
119
178
  }
120
179
 
180
+ export declare const BlockContainer: MemoExoticComponent<ForwardRefExoticComponent<BlockContainerProps & RefAttributes<BlockRef>>>;
181
+
182
+ export declare interface BlockContainerProps {
183
+ block: Block;
184
+ plugin: BlockPlugin;
185
+ blockRectPx: BlockRectPx;
186
+ blockZIndex: number;
187
+ mode: NoteMode;
188
+ value: Value;
189
+ onValueChange?: (val: Value) => void;
190
+ onValueBlur?: (val: Value) => void;
191
+ showGuides?: boolean;
192
+ showBorder?: boolean;
193
+ blockSubZIndex?: Record<string, number>;
194
+ defaultGuideBorder?: BorderStyle;
195
+ dpi?: number;
196
+ className?: string;
197
+ pointerEvents?: "auto" | "none";
198
+ }
199
+
121
200
  /**
122
201
  * ブロックコンテナスタイルのオプション
123
202
  */
@@ -128,6 +207,81 @@ export declare interface BlockContainerStyleOptions {
128
207
  pointerEvents?: "auto" | "none";
129
208
  }
130
209
 
210
+ /**
211
+ * BlockBaseBorder
212
+ *
213
+ * レイアウト編集時にブロックの境界を可視化するガイド線コンポーネント
214
+ * - formモードでのみ使用される
215
+ * - block.style?.borderが未設定のブロックに表示
216
+ * - pointer-events: none (クリックイベント透過)
217
+ *
218
+ * @remarks
219
+ * - 固定スタイル(薄いグレーの実線)でブロック境界を描画
220
+ * - ユーザー設定の枠線とは別の、編集補助用のガイド
221
+ * - BorderOverlayと構造は同じだが、用途と表示条件が異なる
222
+ */
223
+ export declare const BlockGuideBorder: default_2.FC<BlockGuideBorderProps>;
224
+
225
+ /**
226
+ * BlockBaseBorderコンポーネントのProps
227
+ */
228
+ export declare interface BlockGuideBorderProps {
229
+ blockSizePx: BlockSizePx;
230
+ blockZIndex: number;
231
+ subZIndex?: number;
232
+ borderStyle?: BorderStyle;
233
+ visible?: boolean;
234
+ dpi?: number;
235
+ className?: string;
236
+ }
237
+
238
+ export declare const BlockLayer: MemoExoticComponent<({ blocks, pluginRegistry, mode, values, selectedBlockIds, getBlockRectPx, onValueChange, onValueBlur, showGuides, showBorder, blockSubZIndex, defaultGuideBorder, dpi, className, }: BlockLayerProps) => JSX_2.Element>;
239
+
240
+ export declare interface BlockLayerProps {
241
+ blocks: Block[];
242
+ pluginRegistry: Record<string, BlockPlugin>;
243
+ mode: NoteMode;
244
+ values: Record<string, Value>;
245
+ selectedBlockIds?: string[];
246
+ getBlockRectPx: (block: Block) => BlockRectPx;
247
+ onValueChange?: OnChange;
248
+ onValueBlur?: OnBlur;
249
+ showGuides?: boolean;
250
+ showBorder?: boolean;
251
+ blockSubZIndex?: Record<string, number>;
252
+ defaultGuideBorder?: BorderStyle;
253
+ dpi?: number;
254
+ className?: string;
255
+ }
256
+
257
+ /**
258
+ * ブロックレイアウト(グリッド座標系)
259
+ */
260
+ export declare interface BlockLayout {
261
+ x: number;
262
+ y: number;
263
+ w: number;
264
+ h: number;
265
+ }
266
+
267
+ /**
268
+ * BlockOrderPanel
269
+ * ブロックの配列順序を変更するパネル
270
+ * UIでは上が最前面、下が最背面(一般的なデザインソフトと同じ)
271
+ * 内部配列では最後が最前面
272
+ */
273
+ export declare const BlockOrderPanel: {
274
+ ({ blocks, onBlocksChange, }: BlockOrderPanelProps): JSX_2.Element;
275
+ displayName: string;
276
+ };
277
+
278
+ export declare interface BlockOrderPanelProps {
279
+ /** ブロック一覧 */
280
+ blocks: Block[];
281
+ /** ブロック更新時のコールバック (blocks配列全体を更新) */
282
+ onBlocksChange: (blocks: Block[]) => void;
283
+ }
284
+
131
285
  /**
132
286
  * BlockPlugin 型定義
133
287
  *
@@ -187,7 +341,7 @@ export declare interface BlockPosPx {
187
341
  */
188
342
  export declare const BlockPropertyPanel: MemoExoticComponent<({ selectedBlocks, pluginRegistry, onUpdateBlocks, gridSize, className, }: BlockPropertyPanelProps) => JSX_2.Element>;
189
343
 
190
- declare interface BlockPropertyPanelProps {
344
+ export declare interface BlockPropertyPanelProps {
191
345
  selectedBlocks: Block[];
192
346
  pluginRegistry: Record<string, BlockPlugin>;
193
347
  onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
@@ -222,6 +376,43 @@ export declare interface BlockRef {
222
376
  focus: () => void;
223
377
  }
224
378
 
379
+ export declare const BlockRenderer: typeof ForwardedBlockRenderer;
380
+
381
+ /**
382
+ * BlockRendererコンポーネントのProps
383
+ *
384
+ * @template P - プラグイン固有プロパティ型
385
+ * @template V - プラグインが扱う値の型
386
+ */
387
+ export declare interface BlockRendererProps<P = Record<string, Value>, V = Value> {
388
+ /** ブロックID */
389
+ id: string;
390
+ /** プラグイン定義 */
391
+ plugin: BlockPlugin<P, V>;
392
+ /** プラグイン固有プロパティ */
393
+ props: P;
394
+ /** ブロックの現在値 */
395
+ value: V;
396
+ /** 値変更コールバック (オプション) */
397
+ onChange?: (value: V) => void;
398
+ /** 値確定コールバック (オプション) */
399
+ onBlur?: (value: V) => void;
400
+ /** 読み取り専用フラグ */
401
+ readOnly: boolean;
402
+ /** 現在のモード */
403
+ mode: NoteMode;
404
+ /** ブロックの位置とサイズ(ピクセル単位) */
405
+ blockSizePx: BlockSizePx;
406
+ /** ブロック基底z-index */
407
+ blockZIndex: number;
408
+ /** ブロック内でのレイヤーz-index (オプション) */
409
+ subZIndex?: number;
410
+ /** バリデーション状態 (オプション) */
411
+ validationState?: "valid" | "invalid" | "warning";
412
+ /** 追加のクラス名 */
413
+ className?: string;
414
+ }
415
+
225
416
  export declare interface BlockSize {
226
417
  w: number;
227
418
  h: number;
@@ -364,6 +555,13 @@ export declare interface BorderOverlayProps {
364
555
  className?: string;
365
556
  }
366
557
 
558
+ export declare const BorderPanel: default_2.FC<BorderPanelProps>;
559
+
560
+ export declare interface BorderPanelProps {
561
+ selectedBlocks: Block[];
562
+ onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
563
+ }
564
+
367
565
  export declare const BorderRenderer: MemoExoticComponent<({ width, height, border, dpi, className, }: BorderRendererProps) => JSX_2.Element | null>;
368
566
 
369
567
  export declare interface BorderRendererProps {
@@ -395,6 +593,52 @@ export declare type BorderUnit = (typeof BORDER_UNITS)[number];
395
593
  */
396
594
  export declare function calculateGridResize(dimensions: Dimension<GridUnit>[], index: number, deltaPx: number, totalContentPx: number): Dimension<GridUnit>[];
397
595
 
596
+ /**
597
+ * リサイズ後のレイアウトを計算
598
+ *
599
+ * @param params - リサイズパラメータ
600
+ * @returns 新しいレイアウト
601
+ *
602
+ * @remarks
603
+ * - 最小サイズは1x1
604
+ * - グリッド範囲外にははみ出さない
605
+ * - 左端・上端を超える場合は自動的にクランプ
606
+ *
607
+ * @example
608
+ * ```typescript
609
+ * const newLayout = calculateResizedLayout({
610
+ * layout: { x: 2, y: 2, w: 3, h: 3 },
611
+ * handle: ResizeHandle.SE,
612
+ * deltaCol: 2,
613
+ * deltaRow: 1,
614
+ * gridCols: 10,
615
+ * gridRows: 10,
616
+ * });
617
+ * // => { x: 2, y: 2, w: 5, h: 4 }
618
+ * ```
619
+ */
620
+ export declare function calculateResizedLayout({ layout, handle, deltaCol, deltaRow, gridCols, gridRows, }: ResizeParams): BlockLayout;
621
+
622
+ /**
623
+ * CanvasPanel
624
+ * キャンバス設定の統合パネル
625
+ * - PaperSizePanel: 用紙サイズ設定
626
+ * - MarginPanel: マージン設定
627
+ * - GridSizePanel: グリッドサイズ設定
628
+ * - BlockOrderPanel: ブロック順序設定
629
+ */
630
+ export declare const CanvasPanel: {
631
+ ({ schema, onSchemaChange }: CanvasPanelProps): JSX_2.Element;
632
+ displayName: string;
633
+ };
634
+
635
+ export declare interface CanvasPanelProps {
636
+ /** フォームスキーマ */
637
+ schema: FormSchema;
638
+ /** スキーマ変更時のコールバック */
639
+ onSchemaChange: (newSchema: FormSchema) => void;
640
+ }
641
+
398
642
  /**
399
643
  * チェックボックスコンポーネント
400
644
  */
@@ -403,7 +647,7 @@ export declare const Checkbox: {
403
647
  displayName: string;
404
648
  };
405
649
 
406
- declare interface CheckboxConfig {
650
+ export declare interface CheckboxConfig {
407
651
  label?: string;
408
652
  [key: string]: Value;
409
653
  }
@@ -417,6 +661,186 @@ export declare interface CheckboxProps extends PropertyComponentProps<boolean |
417
661
  config?: CheckboxConfig;
418
662
  }
419
663
 
664
+ /**
665
+ * @file clampBlock.ts
666
+ * @description ブロックをグリッド範囲内にクランプする共通ロジック
667
+ *
668
+ * @remarks
669
+ * 移動・挿入・リサイズ時のはみ出し防止処理を集約。
670
+ * DRY原則に従い、InteractionLayer内の重複コードを排除。
671
+ */
672
+ /**
673
+ * ブロックの位置をグリッド範囲内にクランプ
674
+ *
675
+ * @param position - ブロックの位置 (x, y)
676
+ * @param size - ブロックのサイズ (w, h)
677
+ * @param gridCols - グリッドの列数
678
+ * @param gridRows - グリッドの行数
679
+ * @returns クランプされた位置 { x, y }
680
+ *
681
+ * @remarks
682
+ * - x は 0 ~ (gridCols - w) の範囲にクランプ
683
+ * - y は 0 ~ (gridRows - h) の範囲にクランプ
684
+ * - ブロックがグリッドからはみ出さないことを保証
685
+ *
686
+ * @example
687
+ * ```typescript
688
+ * const clamped = clampBlockToGrid(
689
+ * { x: -1, y: 5 },
690
+ * { w: 2, h: 3 },
691
+ * 10, // gridCols
692
+ * 10 // gridRows
693
+ * );
694
+ * // => { x: 0, y: 5 }
695
+ * ```
696
+ */
697
+ export declare function clampBlockToGrid(position: {
698
+ x: number;
699
+ y: number;
700
+ }, size: {
701
+ w: number;
702
+ h: number;
703
+ }, gridCols: number, gridRows: number): {
704
+ x: number;
705
+ y: number;
706
+ };
707
+
708
+ export declare interface ClampedBlockPosition {
709
+ blockId: string;
710
+ x: number;
711
+ y: number;
712
+ }
713
+
714
+ /**
715
+ * 複数ブロックの移動をクランプ
716
+ * 全体のバウンディングボックスを計算し、グリッド範囲内に収めた上で
717
+ * 相対位置を保持したまま各ブロックの新しい座標を返す
718
+ *
719
+ * @param blocks - 移動対象のブロック配列
720
+ * @param deltaCol - 列方向の移動量
721
+ * @param deltaRow - 行方向の移動量
722
+ * @param gridCols - グリッドの列数
723
+ * @param gridRows - グリッドの行数
724
+ * @returns クランプ後の各ブロックの座標配列
725
+ */
726
+ export declare function clampMultipleBlocks(blocks: Block[], deltaCol: number, deltaRow: number, gridCols: number, gridRows: number): ClampedBlockPosition[];
727
+
728
+ /**
729
+ * 印刷後のクリーンアップ処理
730
+ */
731
+ export declare function cleanupPrint(options?: {
732
+ restoreScrollbars?: boolean;
733
+ }): void;
734
+
735
+ /**
736
+ * カラーパレット定義(30色)
737
+ */
738
+ export declare const COLOR_PALETTE: readonly [{
739
+ readonly label: "無色";
740
+ readonly value: string | undefined;
741
+ }, {
742
+ readonly label: "白";
743
+ readonly value: "#ffffff";
744
+ }, {
745
+ readonly label: "グレー1";
746
+ readonly value: "#efefef";
747
+ }, {
748
+ readonly label: "グレー2";
749
+ readonly value: "#d9d9d9";
750
+ }, {
751
+ readonly label: "グレー3";
752
+ readonly value: "#cccccc";
753
+ }, {
754
+ readonly label: "グレー4";
755
+ readonly value: "#b7b7b7";
756
+ }, {
757
+ readonly label: "グレー5";
758
+ readonly value: "#999999";
759
+ }, {
760
+ readonly label: "グレー6";
761
+ readonly value: "#666666";
762
+ }, {
763
+ readonly label: "グレー7";
764
+ readonly value: "#434343";
765
+ }, {
766
+ readonly label: "黒";
767
+ readonly value: "#000000";
768
+ }, {
769
+ readonly label: "薄茶";
770
+ readonly value: "#E6B8AF";
771
+ }, {
772
+ readonly label: "薄赤";
773
+ readonly value: "#F4CCCC";
774
+ }, {
775
+ readonly label: "薄橙";
776
+ readonly value: "#FCE5CD";
777
+ }, {
778
+ readonly label: "薄黄";
779
+ readonly value: "#FFF2CC";
780
+ }, {
781
+ readonly label: "薄緑";
782
+ readonly value: "#D9EAD3";
783
+ }, {
784
+ readonly label: "薄青緑";
785
+ readonly value: "#D0E0E3";
786
+ }, {
787
+ readonly label: "薄青";
788
+ readonly value: "#C9DAF8";
789
+ }, {
790
+ readonly label: "薄青紫";
791
+ readonly value: "#CFE2F3";
792
+ }, {
793
+ readonly label: "薄紫";
794
+ readonly value: "#D9D2E9";
795
+ }, {
796
+ readonly label: "薄赤紫";
797
+ readonly value: "#EAD1DC";
798
+ }, {
799
+ readonly label: "茶";
800
+ readonly value: "#DD7E6B";
801
+ }, {
802
+ readonly label: "赤";
803
+ readonly value: "#EA9999";
804
+ }, {
805
+ readonly label: "橙";
806
+ readonly value: "#F9CB9C";
807
+ }, {
808
+ readonly label: "黄";
809
+ readonly value: "#FFE599";
810
+ }, {
811
+ readonly label: "緑";
812
+ readonly value: "#B6D7A8";
813
+ }, {
814
+ readonly label: "青緑";
815
+ readonly value: "#A2C4C9";
816
+ }, {
817
+ readonly label: "青";
818
+ readonly value: "#A4C2F4";
819
+ }, {
820
+ readonly label: "青紫";
821
+ readonly value: "#9FC5E8";
822
+ }, {
823
+ readonly label: "紫";
824
+ readonly value: "#B4A7D6";
825
+ }, {
826
+ readonly label: "赤紫";
827
+ readonly value: "#D5A6BD";
828
+ }];
829
+
830
+ /**
831
+ * カラーパレットコンポーネント
832
+ */
833
+ export declare const ColorPalette: {
834
+ ({ onColorSelect, selectedColor, readOnly, }: ColorPaletteProps): default_2.ReactElement;
835
+ displayName: string;
836
+ };
837
+
838
+ export declare interface ColorPaletteProps {
839
+ onColorSelect: (color: string | undefined) => void;
840
+ selectedColor?: string;
841
+ readOnly?: boolean;
842
+ }
843
+
420
844
  /**
421
845
  * カラーピッカーコンポーネント
422
846
  */
@@ -429,13 +853,31 @@ export declare const ColorPicker: {
429
853
  * Config型定義
430
854
  * Record<string, Value> との互換性を持たせる
431
855
  */
432
- declare interface ColorPickerConfig {
856
+ export declare interface ColorPickerConfig {
433
857
  allowUndefined?: boolean;
434
858
  width?: number;
435
859
  height?: number;
436
860
  [key: string]: Value;
437
861
  }
438
862
 
863
+ /**
864
+ * カラーピッカーポップオーバーコンポーネント
865
+ */
866
+ export declare const ColorPickerPopover: {
867
+ ({ isOpen, onClose, rgba, onRgbaChange, onColorSelect, selectedColor, readOnly, }: ColorPickerPopoverProps): default_2.ReactElement | null;
868
+ displayName: string;
869
+ };
870
+
871
+ export declare interface ColorPickerPopoverProps {
872
+ isOpen: boolean;
873
+ onClose: () => void;
874
+ rgba: RGBA;
875
+ onRgbaChange: (channel: keyof RGBA, value: number | undefined) => void;
876
+ onColorSelect: (color: string | undefined) => void;
877
+ selectedColor?: string;
878
+ readOnly?: boolean;
879
+ }
880
+
439
881
  /**
440
882
  * ColorPicker固有のProps
441
883
  * T は string | undefined
@@ -495,8 +937,14 @@ export declare function createBlockId(kind: string): string;
495
937
  */
496
938
  export declare const createInitialProps: <P>(plugin: BlockPlugin<P>) => P;
497
939
 
940
+ export declare const DEFAULT_DPI = 96;
941
+
498
942
  export declare const DEFAULT_GRID: Grid;
499
943
 
944
+ export declare const DEFAULT_GUIDE_BORDER: BorderStyle;
945
+
946
+ export declare const DEFAULT_GUIDE_LINE: LineStyle;
947
+
500
948
  export declare const DEFAULT_PAPER: Paper;
501
949
 
502
950
  export declare const DEFAULT_PAPER_MARGIN: PaperMargin;
@@ -542,7 +990,7 @@ export declare interface Dimension<U extends Unit = Unit> {
542
990
 
543
991
  export declare const DimensionInput: <U extends Unit>(props: DimensionInputProps<U>) => default_2.ReactElement;
544
992
 
545
- declare interface DimensionInputConfig<U extends Unit> {
993
+ export declare interface DimensionInputConfig<U extends Unit> {
546
994
  allowedUnits?: readonly U[];
547
995
  min?: number;
548
996
  max?: number;
@@ -599,6 +1047,59 @@ export declare function dimensionToString<U extends Unit>(dim: Dimension<U>): st
599
1047
  */
600
1048
  export declare function distributeRemainder(floatPixels: number[]): number[];
601
1049
 
1050
+ /**
1051
+ * ドラッグ状態の詳細情報
1052
+ */
1053
+ export declare interface DraggingState {
1054
+ /** ドラッグ種別 */
1055
+ type: DragType;
1056
+ /** ドラッグ対象のブロックID群 */
1057
+ blockIds: string[];
1058
+ /** 開始グリッド座標 */
1059
+ startGrid: {
1060
+ col: number;
1061
+ row: number;
1062
+ };
1063
+ /** 現在のグリッド座標 */
1064
+ currentGrid: {
1065
+ col: number;
1066
+ row: number;
1067
+ };
1068
+ /** 現在のマウス座標 (px, キャンバス相対) - キャンバス外でのゴースト表示用 */
1069
+ currentMousePx?: {
1070
+ x: number;
1071
+ y: number;
1072
+ };
1073
+ /** リサイズ用: ハンドル位置 */
1074
+ handle?: ResizeHandle;
1075
+ /** 挿入用: プラグイン種別 */
1076
+ pluginKind?: string;
1077
+ /** 挿入用: デフォルトサイズ */
1078
+ defaultSize?: {
1079
+ w: number;
1080
+ h: number;
1081
+ };
1082
+ /** キャンバス外フラグ (true: 範囲外でドロップすると削除) */
1083
+ isOutside?: boolean;
1084
+ }
1085
+
1086
+ export declare const DragLayer: MemoExoticComponent<({ blocks, pluginRegistry, gridLength, draggingState, getBlockRectPx, selectionStyle, ghostZIndex, selectBorderZIndex, blockHandlesZIndex, }: DragLayerProps) => JSX_2.Element | null>;
1087
+
1088
+ export declare interface DragLayerProps {
1089
+ blocks: Block[];
1090
+ pluginRegistry: Record<string, BlockPlugin>;
1091
+ gridLength: {
1092
+ cols: number;
1093
+ rows: number;
1094
+ };
1095
+ draggingState: DraggingState | undefined;
1096
+ getBlockRectPx: (block: Block) => BlockRectPx;
1097
+ selectionStyle?: BorderStyle;
1098
+ ghostZIndex?: number;
1099
+ selectBorderZIndex?: number;
1100
+ blockHandlesZIndex?: number;
1101
+ }
1102
+
602
1103
  /**
603
1104
  * GlobalDragStore
604
1105
  *
@@ -647,6 +1148,55 @@ export declare type DragState = {
647
1148
  };
648
1149
  } | null;
649
1150
 
1151
+ /**
1152
+ * ドラッグ種別
1153
+ *
1154
+ * @remarks
1155
+ * ドラッグ操作の種類を型安全に扱うための列挙型
1156
+ */
1157
+ export declare enum DragType {
1158
+ /** ブロックの移動 */
1159
+ MOVE = "move",
1160
+ /** ブロックのリサイズ */
1161
+ RESIZE = "resize",
1162
+ /** 新規ブロックの挿入 */
1163
+ INSERT = "insert"
1164
+ }
1165
+
1166
+ export declare const EditingBlock: typeof ForwardedEditingBlock;
1167
+
1168
+ export declare interface EditingBlockProps<P = Record<string, Value>, V = Value> {
1169
+ /** ブロックID */
1170
+ id: string;
1171
+ /** プラグイン定義 */
1172
+ plugin: BlockPlugin<P, V>;
1173
+ /** プラグイン固有プロパティ */
1174
+ props: P;
1175
+ /** ブロックの現在値 */
1176
+ value: V;
1177
+ /** 値変更コールバック */
1178
+ onChange: (value: V) => void;
1179
+ /** 値確定コールバック (オプション) */
1180
+ onBlur?: (value: V) => void;
1181
+ /** ブロックの位置とサイズ(ピクセル単位) */
1182
+ blockRectPx: BlockRectPx;
1183
+ /** z-index (オプション、デフォルト: Z_INDEX.EDIT_BLOCK) */
1184
+ zIndex?: number;
1185
+ /** バリデーション状態 (オプション) */
1186
+ validationState?: "valid" | "invalid" | "warning";
1187
+ /** 追加のクラス名 */
1188
+ className?: string;
1189
+ }
1190
+
1191
+ /**
1192
+ * 印刷を実行(準備 + 印刷 + クリーンアップ)
1193
+ */
1194
+ export declare function executePrint(options?: {
1195
+ title?: string;
1196
+ onBeforePrint?: () => void;
1197
+ onAfterPrint?: () => void;
1198
+ }): void;
1199
+
650
1200
  /**
651
1201
  * 機能プラグイン (将来の拡張用)
652
1202
  *
@@ -658,6 +1208,19 @@ export declare interface FeaturePlugin {
658
1208
  kind: string;
659
1209
  }
660
1210
 
1211
+ /**
1212
+ * 指定された座標にあるブロックを検索します
1213
+ *
1214
+ * @param point - 検索対象の座標 (Client/Offset座標ではなく、InteractionLayer内の相対座標)
1215
+ * @param blocks - ブロックのリスト
1216
+ * @param getBlockRectPx - ブロックからピクセル矩形を計算する関数 (useGridCalc由来)
1217
+ * @returns 見つかったブロックのID。見つからない場合は null
1218
+ */
1219
+ export declare function findBlockAtPoint(point: {
1220
+ x: number;
1221
+ y: number;
1222
+ }, blocks: Block[], getBlockRectPx: (block: Block) => BlockRectPx): string | null;
1223
+
661
1224
  export declare function findGridIndex(starts: readonly number[], maxStep: number, windowPx: number): (px: number) => number;
662
1225
 
663
1226
  export declare const FONT_UNITS: readonly ["px", "pt", "mm"];
@@ -687,6 +1250,14 @@ export declare interface FormSchema {
687
1250
  metaData?: Record<string, Value>;
688
1251
  }
689
1252
 
1253
+ declare const ForwardedBlockRenderer: <P extends Record<string, Value> = Record<string, Value>, V extends Value = Value>(props: BlockRendererProps<P, V> & {
1254
+ ref?: default_2.Ref<BlockRef>;
1255
+ }) => default_2.ReactElement;
1256
+
1257
+ declare const ForwardedEditingBlock: <P extends Record<string, Value>, V extends Value>(props: EditingBlockProps<P, V> & {
1258
+ ref?: default_2.ForwardedRef<BlockRef>;
1259
+ }) => default_2.ReactElement;
1260
+
690
1261
  /**
691
1262
  * ブロックコンテナの共通スタイルを生成
692
1263
  *
@@ -723,6 +1294,28 @@ export declare function getBlockContainerStyle(blockRectPx: BlockRectPx, options
723
1294
  */
724
1295
  export declare function getBlockZIndex(index: number): number;
725
1296
 
1297
+ /**
1298
+ * 選択中のブロックから共通の値を取得する
1299
+ * 値がバラバラの場合は undefined を返す
1300
+ *
1301
+ * @param blocks 選択中のブロック配列
1302
+ * @param path プロパティへのパス (例: "props.text", "layout.x", "style.backgroundColor")
1303
+ * @returns 全ブロックで共通の値、または値が異なる場合は undefined
1304
+ *
1305
+ * @example
1306
+ * ```ts
1307
+ * // propsの値を取得
1308
+ * const textValue = getCommonValue(blocks, "props.text");
1309
+ *
1310
+ * // layoutの値を取得
1311
+ * const xPos = getCommonValue<number>(blocks, "layout.x");
1312
+ *
1313
+ * // styleの値を取得
1314
+ * const bgColor = getCommonValue(blocks, "style.backgroundColor");
1315
+ * ```
1316
+ */
1317
+ export declare function getCommonValue<T = Value>(blocks: Block[], path: string): T | undefined;
1318
+
726
1319
  /**
727
1320
  * サポートされる最大ブロック数を取得
728
1321
  *
@@ -740,6 +1333,14 @@ export declare function getMaxStep(starts: number[]): {
740
1333
  readonly windowPx: number;
741
1334
  };
742
1335
 
1336
+ /**
1337
+ * 用紙サイズの寸法を取得(mm単位)
1338
+ */
1339
+ export declare function getPaperSize(paperSize: PrintPaperSize, orientation: Orientation): {
1340
+ width: number;
1341
+ height: number;
1342
+ };
1343
+
743
1344
  export declare const getStrokeDasharray: (lineStyle?: LineStyle) => string | undefined;
744
1345
 
745
1346
  /**
@@ -845,6 +1446,37 @@ export declare interface GridChangeEvent {
845
1446
 
846
1447
  export declare type GridChangeType = "resize" | "insert" | "delete" | "equalize";
847
1448
 
1449
+ /**
1450
+ * GridDimensionLabel - グリッド線間の寸法表示
1451
+ *
1452
+ * グリッド線と線の間に寸法(値と単位)を表示します。
1453
+ * ダブルクリックで単位編集UIを表示します。
1454
+ */
1455
+ export declare const GridDimensionLabel: MemoExoticComponent<({ direction, index, dimension, position, currentPxSize, marginLeftPx, marginTopPx, isNearCursor, resizingPxSize, onDimensionChange, }: GridDimensionLabelProps) => JSX_2.Element | null>;
1456
+
1457
+ export declare interface GridDimensionLabelProps {
1458
+ /** ラベルの方向 ('column' or 'row') */
1459
+ direction: "column" | "row";
1460
+ /** 次元のインデックス(配列のインデックス) */
1461
+ index: number;
1462
+ /** 寸法の値(Dimensionオブジェクト) */
1463
+ dimension: Dimension<GridUnit>;
1464
+ /** ラベルの位置 (px) - 中央座標 */
1465
+ position: number;
1466
+ /** 現在のpxサイズ(単位変換用) */
1467
+ currentPxSize: number;
1468
+ /** 印刷可能領域の左マージン (px) */
1469
+ marginLeftPx: number;
1470
+ /** 印刷可能領域の上マージン (px) */
1471
+ marginTopPx: number;
1472
+ /** カーソルが近い場合にのみ表示 */
1473
+ isNearCursor: boolean;
1474
+ /** リサイズ中のプレビューサイズ(px) - 指定時は単位変換して表示 */
1475
+ resizingPxSize?: number;
1476
+ /** 寸法更新時のコールバック */
1477
+ onDimensionChange?: (direction: "column" | "row", index: number, dimension: Dimension<GridUnit>) => void;
1478
+ }
1479
+
848
1480
  /**
849
1481
  * GridLayer - グリッドシステムの統合コンポーネント
850
1482
  *
@@ -935,6 +1567,54 @@ export declare interface GridPosPx {
935
1567
  rows: number[];
936
1568
  }
937
1569
 
1570
+ /**
1571
+ * GridResizeHandle - グリッドリサイズ用のハンドル
1572
+ *
1573
+ * グリッド線の両端にハンドルを配置し、ドラッグでリサイズ可能にします。
1574
+ * 設計文書に従い、「グリッド線そのもののドラッグは禁止」し、
1575
+ * 「グリッド線の両端ハンドル」のみをドラッグ可能とします。
1576
+ */
1577
+ export declare const GridResizeHandle: MemoExoticComponent<({ direction, index, position, marginLeftPx, marginTopPx, onResizeStart, onResize, onResizeEnd, }: GridResizeHandleProps) => JSX_2.Element>;
1578
+
1579
+ /**
1580
+ * @file GridResizeHandle.tsx
1581
+ * @description グリッドリサイズ用のハンドルコンポーネント
1582
+ */
1583
+ export declare interface GridResizeHandleProps {
1584
+ /** ハンドルの方向 ('column' or 'row') */
1585
+ direction: "column" | "row";
1586
+ /** グリッドのインデックス (列なら列番号、行なら行番号) */
1587
+ index: number;
1588
+ /** ハンドルの位置 (px) - グリッド線の位置 */
1589
+ position: number;
1590
+ /** 印刷可能領域の左マージン (px) */
1591
+ marginLeftPx: number;
1592
+ /** 印刷可能領域の上マージン (px) */
1593
+ marginTopPx: number;
1594
+ /** リサイズ開始時のコールバック */
1595
+ onResizeStart?: (direction: "column" | "row", index: number) => void;
1596
+ /** リサイズ中のコールバック */
1597
+ onResize?: (direction: "column" | "row", index: number, delta: number) => void;
1598
+ /** リサイズ終了時のコールバック */
1599
+ onResizeEnd?: (direction: "column" | "row", index: number, delta: number) => void;
1600
+ }
1601
+
1602
+ /**
1603
+ * GridSizePanel
1604
+ * 行・列数を変更するパネル
1605
+ */
1606
+ export declare const GridSizePanel: {
1607
+ ({ grid, onGridChange }: GridSizePanelProps): JSX_2.Element;
1608
+ displayName: string;
1609
+ };
1610
+
1611
+ export declare interface GridSizePanelProps {
1612
+ /** グリッド設定 */
1613
+ grid: Grid;
1614
+ /** グリッド変更時のコールバック */
1615
+ onGridChange: (grid: Grid) => void;
1616
+ }
1617
+
938
1618
  export declare function gridToMms(dims: Dimension<GridUnit>[], contentSizeMm: number): number[];
939
1619
 
940
1620
  export declare function gridToPxs(dims: Dimension<GridUnit>[], contentSizeMm: number, dpi: number): number[];
@@ -968,6 +1648,256 @@ export declare interface ImageSchema {
968
1648
  alt?: string;
969
1649
  }
970
1650
 
1651
+ /**
1652
+ * ImportExportPanel
1653
+ * スキーマと値のインポート/エクスポート機能を提供
1654
+ */
1655
+ export declare const ImportExportPanel: {
1656
+ ({ schema, values, onSchemaChange, onValuesChange, }: ImportExportPanelProps): JSX_2.Element;
1657
+ displayName: string;
1658
+ };
1659
+
1660
+ export declare interface ImportExportPanelProps {
1661
+ /** スキーマ */
1662
+ schema: FormSchema;
1663
+ /** 値 */
1664
+ values: Record<string, Value>;
1665
+ /** スキーマ変更時のコールバック */
1666
+ onSchemaChange: (schema: FormSchema) => void;
1667
+ /** 値変更時のコールバック */
1668
+ onValuesChange: (values: Record<string, Value>) => void;
1669
+ }
1670
+
1671
+ export declare const InsertGhost: MemoExoticComponent<({ pluginRegistry, gridLength, getBlockRectPx, currentGrid, currentMousePx, pluginKind, defaultSize, isOutside, selectionStyle, ghostZIndex, selectBorderZIndex, blockHandlesZIndex, }: InsertGhostProps) => JSX_2.Element | null>;
1672
+
1673
+ export declare interface InsertGhostProps {
1674
+ pluginRegistry: Record<string, BlockPlugin>;
1675
+ gridLength: {
1676
+ cols: number;
1677
+ rows: number;
1678
+ };
1679
+ getBlockRectPx: (block: Block) => BlockRectPx;
1680
+ currentGrid: {
1681
+ col: number;
1682
+ row: number;
1683
+ };
1684
+ currentMousePx?: {
1685
+ x: number;
1686
+ y: number;
1687
+ };
1688
+ pluginKind: string;
1689
+ defaultSize: {
1690
+ w: number;
1691
+ h: number;
1692
+ };
1693
+ isOutside: boolean;
1694
+ selectionStyle: BorderStyle;
1695
+ ghostZIndex?: number;
1696
+ selectBorderZIndex?: number;
1697
+ blockHandlesZIndex?: number;
1698
+ }
1699
+
1700
+ export declare const InteractionBlock: default_2.MemoExoticComponent<({ block, rect, showHandles, onResizeStart, activeHandle, selectionStyle, handleStyle, selectBorderZIndex, blockHandlesZIndex, }: InteractionBlockProps) => JSX_2.Element>;
1701
+
1702
+ export declare interface InteractionBlockProps {
1703
+ block: Block;
1704
+ rect: BlockRectPx;
1705
+ showHandles?: boolean;
1706
+ onResizeStart?: (e: default_2.PointerEvent, handle: ResizeHandle) => void;
1707
+ activeHandle?: ResizeHandle | null;
1708
+ selectionStyle?: BorderStyle;
1709
+ handleStyle?: typeof RESIZE_HANDLE_STYLE;
1710
+ /** 選択枠のz-index (デフォルト: interactionZIndexs.select_border) */
1711
+ selectBorderZIndex?: number;
1712
+ /** リサイズハンドルのz-index (デフォルト: interactionZIndexs.block_handles) */
1713
+ blockHandlesZIndex?: number;
1714
+ }
1715
+
1716
+ /**
1717
+ * インタラクション変更イベント
1718
+ *
1719
+ * @remarks
1720
+ * OnBlockChangeと同じパターン (type付きUnion型)
1721
+ * 全ての操作をこのイベントで表現する
1722
+ */
1723
+ export declare type InteractionChangeEvent = {
1724
+ type: InteractionEventType.SELECT;
1725
+ blockIds: string[];
1726
+ shiftKey?: boolean;
1727
+ } | {
1728
+ type: InteractionEventType.DESELECT;
1729
+ } | {
1730
+ type: InteractionEventType.START_PRESS;
1731
+ blockId: string;
1732
+ startGrid: {
1733
+ col: number;
1734
+ row: number;
1735
+ };
1736
+ selectedBlockIds?: string[];
1737
+ } | {
1738
+ type: InteractionEventType.UPDATE_DRAG;
1739
+ currentGrid: {
1740
+ col: number;
1741
+ row: number;
1742
+ };
1743
+ currentMousePx: {
1744
+ x: number;
1745
+ y: number;
1746
+ };
1747
+ isOutside?: boolean;
1748
+ } | {
1749
+ type: InteractionEventType.END_DRAG;
1750
+ } | {
1751
+ type: InteractionEventType.CANCEL_DRAG;
1752
+ } | {
1753
+ type: InteractionEventType.EDIT;
1754
+ blockId: string;
1755
+ } | {
1756
+ type: InteractionEventType.END_EDIT;
1757
+ } | {
1758
+ type: InteractionEventType.START_INSERT;
1759
+ pluginKind: string;
1760
+ defaultSize: {
1761
+ w: number;
1762
+ h: number;
1763
+ };
1764
+ } | {
1765
+ type: InteractionEventType.CANCEL_INSERT;
1766
+ } | {
1767
+ type: InteractionEventType.START_RESIZE;
1768
+ blockId: string;
1769
+ handle: ResizeHandle;
1770
+ startGrid: {
1771
+ col: number;
1772
+ row: number;
1773
+ };
1774
+ };
1775
+
1776
+ /**
1777
+ * インタラクション変更イベント種別
1778
+ *
1779
+ * @remarks
1780
+ * インタラクション変更イベントの種類を型安全に扱うための列挙型
1781
+ */
1782
+ export declare enum InteractionEventType {
1783
+ /** ブロックを選択 */
1784
+ SELECT = "select",
1785
+ /** 選択を解除 */
1786
+ DESELECT = "deselect",
1787
+ /** プレス開始(ドラッグ判定前) */
1788
+ START_PRESS = "startPress",
1789
+ /** ドラッグ更新 */
1790
+ UPDATE_DRAG = "updateDrag",
1791
+ /** ドラッグ終了 */
1792
+ END_DRAG = "endDrag",
1793
+ /** ドラッグキャンセル */
1794
+ CANCEL_DRAG = "cancelDrag",
1795
+ /** 編集開始 */
1796
+ EDIT = "edit",
1797
+ /** 編集終了 */
1798
+ END_EDIT = "endEdit",
1799
+ /** 挿入開始 */
1800
+ START_INSERT = "startInsert",
1801
+ /** 挿入キャンセル */
1802
+ CANCEL_INSERT = "cancelInsert",
1803
+ /** リサイズ開始 */
1804
+ START_RESIZE = "startResize"
1805
+ }
1806
+
1807
+ export declare const InteractionLayer: MemoExoticComponent<({ blocks, pluginRegistry, gridLength, getBlockRectPx, getColIndex, getRowIndex, state, onChange, onBlockChange, scale, className, selectionStyle, handleStyle, editBlockZIndex, selectBorderZIndex, blockHandlesZIndex, dragGhostZIndex, }: InteractionLayerProps) => JSX_2.Element>;
1808
+
1809
+ /**
1810
+ * InteractionLayerProps
1811
+ */
1812
+ export declare interface InteractionLayerProps {
1813
+ blocks: Block[];
1814
+ pluginRegistry: Record<string, BlockPlugin>;
1815
+ gridLength: {
1816
+ cols: number;
1817
+ rows: number;
1818
+ };
1819
+ getBlockRectPx: (block: Block) => BlockRectPx;
1820
+ getColIndex: (px: number) => number;
1821
+ getRowIndex: (px: number) => number;
1822
+ state: InteractionState;
1823
+ onChange: OnInteractionChange;
1824
+ onBlockChange?: OnBlockChange;
1825
+ scale?: number;
1826
+ className?: string;
1827
+ selectionStyle?: BorderStyle;
1828
+ handleStyle?: typeof RESIZE_HANDLE_STYLE;
1829
+ editBlockZIndex?: number;
1830
+ selectBorderZIndex?: number;
1831
+ blockHandlesZIndex?: number;
1832
+ dragGhostZIndex?: number;
1833
+ }
1834
+
1835
+ /**
1836
+ * インタラクションモード
1837
+ *
1838
+ * @remarks
1839
+ * インタラクション操作の状態を型安全に扱うための列挙型
1840
+ */
1841
+ export declare enum InteractionMode {
1842
+ /** 待機状態 */
1843
+ IDLE = "idle",
1844
+ /** マウスダウン中(クリックかドラッグか判定前) */
1845
+ PRESSING = "pressing",
1846
+ /** ドラッグ確定 */
1847
+ DRAGGING = "dragging",
1848
+ /** 編集中 */
1849
+ EDITING = "editing"
1850
+ }
1851
+
1852
+ /**
1853
+ * インタラクション状態 (単一オブジェクト)
1854
+ *
1855
+ * @remarks
1856
+ * Pluginの `value` に相当する統合状態
1857
+ * 全ての操作状態をこのオブジェクト1つで管理する
1858
+ */
1859
+ export declare interface InteractionState {
1860
+ /** 現在のモード */
1861
+ mode: InteractionMode;
1862
+ /** 選択中のブロックID群 */
1863
+ selectedBlockIds: string[];
1864
+ /** 編集中のブロックID (nullの場合は編集モードではない) */
1865
+ editingBlockId: string | null;
1866
+ /** ドラッグ中の状態 (ドラッグ中のみ有効) */
1867
+ dragging?: DraggingState;
1868
+ }
1869
+
1870
+ export declare const interactionZIndexs: {
1871
+ readonly base: 2100000;
1872
+ readonly select_block: 2000000;
1873
+ readonly block_ghost: 2200000;
1874
+ readonly hover_outline: 2300000;
1875
+ readonly edit_block: 2400000;
1876
+ readonly grid_ghost: 2700000;
1877
+ readonly grid_handles: 2800000;
1878
+ readonly select_border: 2500000;
1879
+ readonly block_handles: 2600000;
1880
+ readonly rubber_band: 2900000;
1881
+ };
1882
+
1883
+ /**
1884
+ * Hex カラー文字列の妥当性をチェック
1885
+ * @param hex チェックする文字列
1886
+ * @returns 妥当な Hex カラー文字列かどうか
1887
+ */
1888
+ export declare function isValidHex(hex: string): boolean;
1889
+
1890
+ export declare const LayoutPanel: default_2.FC<LayoutPanelProps>;
1891
+
1892
+ export declare interface LayoutPanelProps {
1893
+ selectedBlocks: Block[];
1894
+ onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
1895
+ gridSize?: {
1896
+ cols: number;
1897
+ rows: number;
1898
+ };
1899
+ }
1900
+
971
1901
  export declare interface LineStyle {
972
1902
  color: string;
973
1903
  width: Dimension<BorderUnit>;
@@ -1006,8 +1936,55 @@ export declare interface MarginOverlayProps {
1006
1936
  className?: string;
1007
1937
  }
1008
1938
 
1939
+ /**
1940
+ * MarginPanel
1941
+ * マージンを変更するパネル
1942
+ */
1943
+ export declare const MarginPanel: {
1944
+ ({ paper, onPaperChange }: MarginPanelProps): JSX_2.Element;
1945
+ displayName: string;
1946
+ };
1947
+
1948
+ export declare interface MarginPanelProps {
1949
+ /** 用紙設定 */
1950
+ paper: Paper;
1951
+ /** 用紙変更時のコールバック */
1952
+ onPaperChange: (paper: Paper) => void;
1953
+ }
1954
+
1955
+ export declare const MetaPanel: default_2.FC<MetaPanelProps>;
1956
+
1957
+ export declare interface MetaPanelProps {
1958
+ selectedBlocks: Block[];
1959
+ onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
1960
+ }
1961
+
1009
1962
  export declare function mmsToPxs(mms: number[], dpi?: number): number[];
1010
1963
 
1964
+ export declare const MovingGhost: MemoExoticComponent<({ blocks, pluginRegistry, gridLength, getBlockRectPx, selectedBlockIds, deltaCol, deltaRow, isOutside, currentMousePx, selectionStyle, ghostZIndex, selectBorderZIndex, blockHandlesZIndex, }: MovingGhostProps) => JSX_2.Element>;
1965
+
1966
+ export declare interface MovingGhostProps {
1967
+ blocks: Block[];
1968
+ pluginRegistry: Record<string, BlockPlugin>;
1969
+ gridLength: {
1970
+ cols: number;
1971
+ rows: number;
1972
+ };
1973
+ getBlockRectPx: (block: Block) => BlockRectPx;
1974
+ selectedBlockIds: string[];
1975
+ deltaCol: number;
1976
+ deltaRow: number;
1977
+ isOutside: boolean;
1978
+ currentMousePx?: {
1979
+ x: number;
1980
+ y: number;
1981
+ };
1982
+ selectionStyle: BorderStyle;
1983
+ ghostZIndex?: number;
1984
+ selectBorderZIndex?: number;
1985
+ blockHandlesZIndex?: number;
1986
+ }
1987
+
1011
1988
  export declare const multilineDefinition: PluginProperties<MultilineSchema>;
1012
1989
 
1013
1990
  export declare interface MultilineSchema {
@@ -1072,7 +2049,17 @@ export declare enum NoteMode {
1072
2049
  VIEW = "View"
1073
2050
  }
1074
2051
 
1075
- export declare const NoteView: MemoExoticComponent<({ schema, values, pluginRegistry, scale, className, }: NoteViewProps) => JSX_2.Element>;
2052
+ export declare const NoteView: MemoExoticComponent<ForwardRefExoticComponent<NoteViewProps & RefAttributes<NoteViewPrintRef>>>;
2053
+
2054
+ /**
2055
+ * NoteView の ref に公開する印刷メソッド
2056
+ */
2057
+ export declare interface NoteViewPrintRef {
2058
+ /** 印刷ダイアログを開く */
2059
+ print: () => void;
2060
+ /** 印刷プレビューを開く(ブラウザの印刷ダイアログ) */
2061
+ openPrintPreview: () => void;
2062
+ }
1076
2063
 
1077
2064
  export declare interface NoteViewProps {
1078
2065
  schema: FormSchema;
@@ -1080,6 +2067,10 @@ export declare interface NoteViewProps {
1080
2067
  pluginRegistry: Record<string, BlockPlugin>;
1081
2068
  scale?: number;
1082
2069
  className?: string;
2070
+ /** 印刷モード(印刷時に自動的にtrueになる) */
2071
+ printMode?: boolean;
2072
+ /** 印刷設定 */
2073
+ printSettings?: PrintSettings;
1083
2074
  }
1084
2075
 
1085
2076
  export declare const NumberInput: {
@@ -1087,7 +2078,7 @@ export declare const NumberInput: {
1087
2078
  displayName: string;
1088
2079
  };
1089
2080
 
1090
- declare interface NumberInputConfig {
2081
+ export declare interface NumberInputConfig {
1091
2082
  min?: number;
1092
2083
  max?: number;
1093
2084
  step?: number;
@@ -1122,6 +2113,15 @@ export declare type OnError = (error: Error, context?: string) => void;
1122
2113
 
1123
2114
  export declare type OnGridChange = (event: GridChangeEvent) => void;
1124
2115
 
2116
+ /**
2117
+ * インタラクション変更コールバック
2118
+ *
2119
+ * @remarks
2120
+ * Pluginの `onChange` に相当
2121
+ * 全ての操作変更をこの1つのコールバックで処理する
2122
+ */
2123
+ export declare type OnInteractionChange = (event: InteractionChangeEvent) => void;
2124
+
1125
2125
  export declare type OnPaperChange = (event: PaperChangeEvent) => void;
1126
2126
 
1127
2127
  export declare type OnSchemaChange = (schema: FormSchema) => void;
@@ -1132,6 +2132,32 @@ export declare type OnValidationError = (errors: Record<string, ValidationError[
1132
2132
 
1133
2133
  export declare type OnValuesChange = (values: Record<string, Value>) => void;
1134
2134
 
2135
+ /**
2136
+ * 用紙の向き
2137
+ */
2138
+ export declare type Orientation = "portrait" | "landscape";
2139
+
2140
+ /**
2141
+ * OtherPanel
2142
+ * その他の設定の統合パネル
2143
+ * - ImportExportPanel: スキーマ・値のインポート/エクスポート
2144
+ */
2145
+ export declare const OtherPanel: {
2146
+ ({ schema, values, onSchemaChange, onValuesChange, }: OtherPanelProps): JSX_2.Element;
2147
+ displayName: string;
2148
+ };
2149
+
2150
+ export declare interface OtherPanelProps {
2151
+ /** フォームスキーマ */
2152
+ schema: FormSchema;
2153
+ /** 入力データ */
2154
+ values: Record<string, Value>;
2155
+ /** スキーマ変更時のコールバック */
2156
+ onSchemaChange: (newSchema: FormSchema) => void;
2157
+ /** 入力データ変更時のコールバック */
2158
+ onValuesChange: (newValues: Record<string, Value>) => void;
2159
+ }
2160
+
1135
2161
  export declare const PADDING_UNITS: readonly ["mm", "pt", "px", "%"];
1136
2162
 
1137
2163
  /**
@@ -1162,7 +2188,7 @@ export declare const PalettePanel: {
1162
2188
  displayName: string;
1163
2189
  };
1164
2190
 
1165
- declare interface PalettePanelProps {
2191
+ export declare interface PalettePanelProps {
1166
2192
  /** 利用可能なプラグイン一覧 */
1167
2193
  plugins: BlockPlugin[];
1168
2194
  /** カスタムクラス名 */
@@ -1219,6 +2245,22 @@ export declare interface PaperSize {
1219
2245
  height: Dimension<PaperUnit>;
1220
2246
  }
1221
2247
 
2248
+ /**
2249
+ * PaperSizePanel
2250
+ * 用紙サイズを変更するパネル
2251
+ */
2252
+ export declare const PaperSizePanel: {
2253
+ ({ paper, onPaperChange, }: PaperSizePanelProps): JSX_2.Element;
2254
+ displayName: string;
2255
+ };
2256
+
2257
+ export declare interface PaperSizePanelProps {
2258
+ /** 用紙設定 */
2259
+ paper: Paper;
2260
+ /** 用紙変更時のコールバック */
2261
+ onPaperChange: (paper: Paper) => void;
2262
+ }
2263
+
1222
2264
  export declare enum PaperSizePreset {
1223
2265
  A4 = "A4",
1224
2266
  B5 = "B5",
@@ -1230,6 +2272,13 @@ export declare enum PaperSizePreset {
1230
2272
 
1231
2273
  export declare type PaperUnit = (typeof PAPER_UNITS)[number];
1232
2274
 
2275
+ /**
2276
+ * カラー文字列を RGBA オブジェクトに変換
2277
+ * @param value カラー文字列 (#RRGGBB, #RRGGBBAA, rgba(r,g,b,a), undefined)
2278
+ * @returns RGBA オブジェクト、または null(変換失敗時)
2279
+ */
2280
+ export declare function parseColor(value: string | undefined): RGBA | null;
2281
+
1233
2282
  /**
1234
2283
  * PlaceholderSchema の実体定義
1235
2284
  */
@@ -1253,10 +2302,57 @@ export declare interface PluginIconProps {
1253
2302
  style?: default_2.CSSProperties;
1254
2303
  }
1255
2304
 
2305
+ export declare const PluginPanels: React.FC<PluginPanelsProps>;
2306
+
2307
+ export declare interface PluginPanelsProps {
2308
+ selectedBlocks: Block[];
2309
+ pluginRegistry: Record<string, BlockPlugin>;
2310
+ onUpdateBlocks: (updates: Record<string, Partial<Block>>) => void;
2311
+ }
2312
+
1256
2313
  export declare type PluginProperties<P> = {
1257
2314
  [K in keyof P]-?: PropertyConfig<P[K], P>;
1258
2315
  };
1259
2316
 
2317
+ /**
2318
+ * 印刷前の準備処理
2319
+ */
2320
+ export declare function preparePrint(options?: {
2321
+ title?: string;
2322
+ removeScrollbars?: boolean;
2323
+ }): void;
2324
+
2325
+ /**
2326
+ * 印刷時の余白設定
2327
+ */
2328
+ export declare interface PrintMargin {
2329
+ top?: string;
2330
+ right?: string;
2331
+ bottom?: string;
2332
+ left?: string;
2333
+ }
2334
+
2335
+ /**
2336
+ * @file types/print/index.ts
2337
+ * @description 印刷機能関連の型定義
2338
+ */
2339
+ /**
2340
+ * 印刷用の用紙サイズ
2341
+ */
2342
+ export declare type PrintPaperSize = "A4" | "A3" | "B4" | "B5" | "Letter" | "Legal";
2343
+
2344
+ /**
2345
+ * 印刷設定
2346
+ */
2347
+ export declare interface PrintSettings {
2348
+ /** 用紙サイズ */
2349
+ paperSize?: PrintPaperSize;
2350
+ /** 用紙の向き */
2351
+ orientation?: Orientation;
2352
+ /** 余白 */
2353
+ margin?: PrintMargin;
2354
+ }
2355
+
1260
2356
  /**
1261
2357
  * PropertiesPanel Props
1262
2358
  *
@@ -1294,6 +2390,15 @@ declare interface PropertyDefinition_2<T, Context = Record<string, Value>> {
1294
2390
  }
1295
2391
  export { PropertyDefinition_2 as PropertyDefinition }
1296
2392
 
2393
+ export declare const PropertyField: MemoExoticComponent<({ propertyKey, definition, selectedBlocks, onChange, }: PropertyFieldProps) => JSX_2.Element | null>;
2394
+
2395
+ export declare interface PropertyFieldProps {
2396
+ propertyKey: string;
2397
+ definition: PropertyDefinition_2<Value, Record<string, Value>>;
2398
+ selectedBlocks: Block[];
2399
+ onChange: (key: string, val: Value) => void;
2400
+ }
2401
+
1297
2402
  /**
1298
2403
  * @file objectUtils.ts
1299
2404
  * @description オブジェクト操作のユーティリティ関数
@@ -1325,6 +2430,113 @@ export declare interface RendererProps<P = Record<string, Value>, V = Value> {
1325
2430
  validationState?: "valid" | "invalid" | "warning";
1326
2431
  }
1327
2432
 
2433
+ export declare const RESIZE_HANDLE_STYLE: ResizeHandleStyle;
2434
+
2435
+ export declare const ResizeGhost: MemoExoticComponent<({ blocks, pluginRegistry, gridLength, getBlockRectPx, blockId, handle, deltaCol, deltaRow, isOutside, selectionStyle, ghostZIndex, selectBorderZIndex, blockHandlesZIndex, }: ResizeGhostProps) => JSX_2.Element | null>;
2436
+
2437
+ export declare interface ResizeGhostProps {
2438
+ blocks: Block[];
2439
+ pluginRegistry: Record<string, BlockPlugin>;
2440
+ gridLength: {
2441
+ cols: number;
2442
+ rows: number;
2443
+ };
2444
+ getBlockRectPx: (block: Block) => BlockRectPx;
2445
+ blockId: string;
2446
+ handle: ResizeHandle;
2447
+ deltaCol: number;
2448
+ deltaRow: number;
2449
+ isOutside: boolean;
2450
+ selectionStyle: BorderStyle;
2451
+ ghostZIndex?: number;
2452
+ selectBorderZIndex?: number;
2453
+ blockHandlesZIndex?: number;
2454
+ }
2455
+
2456
+ /**
2457
+ * リサイズハンドル方向
2458
+ *
2459
+ * @remarks
2460
+ * 8方向のリサイズハンドルを型安全に扱うための列挙型
2461
+ */
2462
+ export declare enum ResizeHandle {
2463
+ /** 北(上) */
2464
+ N = "n",
2465
+ /** 北東(右上) */
2466
+ NE = "ne",
2467
+ /** 東(右) */
2468
+ E = "e",
2469
+ /** 南東(右下) */
2470
+ SE = "se",
2471
+ /** 南(下) */
2472
+ S = "s",
2473
+ /** 南西(左下) */
2474
+ SW = "sw",
2475
+ /** 西(左) */
2476
+ W = "w",
2477
+ /** 北西(左上) */
2478
+ NW = "nw"
2479
+ }
2480
+
2481
+ export declare const ResizeHandles: default_2.MemoExoticComponent<({ onResizeStart, activeHandle, handleStyle, zIndex, }: ResizeHandlesProps) => JSX_2.Element>;
2482
+
2483
+ export declare interface ResizeHandlesProps {
2484
+ onResizeStart: (e: default_2.PointerEvent, handle: ResizeHandle) => void;
2485
+ activeHandle?: ResizeHandle | null;
2486
+ handleStyle?: ResizeHandleStyle;
2487
+ zIndex?: number;
2488
+ }
2489
+
2490
+ export declare interface ResizeHandleStyle {
2491
+ size: number;
2492
+ backgroundColor: string;
2493
+ borderColor: string;
2494
+ borderWidth: number;
2495
+ borderRadius: string;
2496
+ }
2497
+
2498
+ /**
2499
+ * リサイズ計算パラメータ
2500
+ */
2501
+ export declare interface ResizeParams {
2502
+ /** 現在のレイアウト */
2503
+ layout: BlockLayout;
2504
+ /** リサイズハンドル */
2505
+ handle: ResizeHandle;
2506
+ /** 列方向の移動量 */
2507
+ deltaCol: number;
2508
+ /** 行方向の移動量 */
2509
+ deltaRow: number;
2510
+ /** グリッドの列数 */
2511
+ gridCols: number;
2512
+ /** グリッドの行数 */
2513
+ gridRows: number;
2514
+ }
2515
+
2516
+ /**
2517
+ * RGBA カラー型定義
2518
+ */
2519
+ export declare interface RGBA {
2520
+ r: number;
2521
+ g: number;
2522
+ b: number;
2523
+ a: number;
2524
+ }
2525
+
2526
+ /**
2527
+ * RGBA入力コンポーネント
2528
+ */
2529
+ export declare const RGBAInputs: {
2530
+ ({ rgba, onChange, readOnly, }: RGBAInputsProps): default_2.ReactElement;
2531
+ displayName: string;
2532
+ };
2533
+
2534
+ export declare interface RGBAInputsProps {
2535
+ rgba: RGBA;
2536
+ onChange: (channel: keyof RGBA, value: number | undefined) => void;
2537
+ readOnly?: boolean;
2538
+ }
2539
+
1328
2540
  /**
1329
2541
  * ドロップダウン選択コンポーネント
1330
2542
  */
@@ -1336,7 +2548,7 @@ export declare const Select: {
1336
2548
  /**
1337
2549
  * Config型定義
1338
2550
  */
1339
- declare interface SelectConfig {
2551
+ export declare interface SelectConfig {
1340
2552
  options?: readonly SelectOption[];
1341
2553
  placeholder?: string;
1342
2554
  width?: number;
@@ -1344,6 +2556,34 @@ declare interface SelectConfig {
1344
2556
  [key: string]: Value;
1345
2557
  }
1346
2558
 
2559
+ export declare const SELECTION_STYLE: BorderStyle;
2560
+
2561
+ export declare const SelectionBorder: MemoExoticComponent<({ width, height, zIndex, borderStyle, }: SelectionBorderProps) => JSX_2.Element>;
2562
+
2563
+ declare interface SelectionBorderProps {
2564
+ width: number;
2565
+ height: number;
2566
+ zIndex?: number;
2567
+ borderStyle?: BorderStyle;
2568
+ }
2569
+
2570
+ export declare const SelectionLayer: default_2.MemoExoticComponent<({ blocks, selectedBlockIds, isDragging, draggingState, getBlockRectPx, onResizeStart, selectionStyle, handleStyle, selectBorderZIndex, blockHandlesZIndex, }: SelectionLayerProps) => JSX_2.Element | null>;
2571
+
2572
+ export declare interface SelectionLayerProps {
2573
+ blocks: Block[];
2574
+ selectedBlockIds: string[];
2575
+ isDragging: boolean;
2576
+ draggingState?: DraggingState;
2577
+ getBlockRectPx: (block: Block) => BlockRectPx;
2578
+ onResizeStart: (e: default_2.PointerEvent, handle: ResizeHandle, blockId: string) => void;
2579
+ selectionStyle?: BorderStyle;
2580
+ handleStyle?: typeof RESIZE_HANDLE_STYLE;
2581
+ /** 選択枠のz-index (デフォルト: interactionZIndexs.select_border) */
2582
+ selectBorderZIndex?: number;
2583
+ /** リサイズハンドルのz-index (デフォルト: interactionZIndexs.block_handles) */
2584
+ blockHandlesZIndex?: number;
2585
+ }
2586
+
1347
2587
  /**
1348
2588
  * 選択肢の型
1349
2589
  */
@@ -1419,7 +2659,7 @@ export declare const Sidebar: {
1419
2659
  displayName: string;
1420
2660
  };
1421
2661
 
1422
- declare interface SidebarProps {
2662
+ export declare interface SidebarProps {
1423
2663
  /** 全ブロック */
1424
2664
  blocks: Block[];
1425
2665
  /** 選択中のブロックID一覧 */
@@ -1466,6 +2706,21 @@ export declare function stringsToDimensions<U extends Unit>(strs: string[], allo
1466
2706
 
1467
2707
  export declare function stringToDimension<U extends Unit>(str: string, allowedUnits: readonly U[]): Dimension<U>;
1468
2708
 
2709
+ /**
2710
+ * TabPanel
2711
+ * タブコンテンツの共通ラッパー
2712
+ */
2713
+ export declare const TabPanel: ({ children, emptyMessage, className, }: TabPanelProps) => JSX_2.Element;
2714
+
2715
+ export declare interface TabPanelProps {
2716
+ /** パネルの内容 */
2717
+ children: ReactNode;
2718
+ /** 空状態のメッセージ(childrenがない場合に表示) */
2719
+ emptyMessage?: string;
2720
+ /** カスタムクラス名 */
2721
+ className?: string;
2722
+ }
2723
+
1469
2724
  export declare const Tabs: default_2.FC<TabsProps>;
1470
2725
 
1471
2726
  export declare const TabsContent: default_2.FC<TabsContentProps>;
@@ -1519,7 +2774,7 @@ export declare const TextInput: {
1519
2774
  * Config型定義
1520
2775
  * Record<string, Value> との互換性を持たせる
1521
2776
  */
1522
- declare interface TextInputConfig {
2777
+ export declare interface TextInputConfig {
1523
2778
  placeholder?: string;
1524
2779
  maxLength?: number;
1525
2780
  multiline?: boolean;
@@ -1544,6 +2799,13 @@ export declare interface TextInputProps extends PropertyComponentProps<string |
1544
2799
  onBlur?: () => void;
1545
2800
  }
1546
2801
 
2802
+ /**
2803
+ * RGBA オブジェクトを Hex 文字列に変換
2804
+ * @param rgba RGBA オブジェクト
2805
+ * @returns #RRGGBB または #RRGGBBAA 形式の文字列、透明の場合は undefined
2806
+ */
2807
+ export declare function toHex(rgba: RGBA): string | undefined;
2808
+
1547
2809
  export declare const toMm: {
1548
2810
  fromCm(cm: number): number;
1549
2811
  fromInch(inch: number): number;
@@ -1562,6 +2824,13 @@ export declare const toPx: {
1562
2824
  fromDim<U extends Unit>(dim: Dimension<U>, dpi?: number, baseSizePx?: number): number;
1563
2825
  };
1564
2826
 
2827
+ /**
2828
+ * RGBA オブジェクトを rgba() 文字列に変換
2829
+ * @param rgba RGBA オブジェクト
2830
+ * @returns rgba(r, g, b, a) 形式の文字列、透明の場合は undefined
2831
+ */
2832
+ export declare function toRgbaString(rgba: RGBA): string | undefined;
2833
+
1565
2834
  export declare type Unit = (typeof ALL_UNITS)[number];
1566
2835
 
1567
2836
  /**
@@ -1605,6 +2874,43 @@ export declare const universalProperties: {
1605
2874
  readonly alignItems: PropertyConfig<VerticalAlign | undefined, AlignmentSchema>;
1606
2875
  };
1607
2876
 
2877
+ export declare function useGridCalc(paper: Paper, grid: Grid, dpi?: number): {
2878
+ paperPx: PaperPx;
2879
+ gridPosPx: GridPosPx;
2880
+ getColIndex: (px: number) => number;
2881
+ getRowIndex: (px: number) => number;
2882
+ getBlockRectPx: (block: Block) => BlockRectPx;
2883
+ };
2884
+
2885
+ /**
2886
+ * インタラクション状態管理Hook
2887
+ *
2888
+ * @remarks
2889
+ * Reducer的なロジックを内包、外部からはシンプルなAPIのみ公開
2890
+ *
2891
+ * **核心機能**: グリッド変化判定によるドラッグ確定
2892
+ * - `mode: 'pressing'` でグリッドをまたいだら → `mode: 'dragging'` に遷移
2893
+ * - ピクセル閾値 (5px) は使わない
2894
+ *
2895
+ * @param initialState - 初期状態 (オプション)
2896
+ * @returns [state, handleChange] - 状態とコールバック
2897
+ *
2898
+ * @example
2899
+ * ```tsx
2900
+ * const [state, onChange] = useInteractionState();
2901
+ *
2902
+ * // ブロックをクリック
2903
+ * onChange({ type: InteractionEventType.SELECT, blockIds: ['block-1'] });
2904
+ *
2905
+ * // ドラッグ開始 (まだpressing)
2906
+ * onChange({ type: InteractionEventType.START_PRESS, blockId: 'block-1', startGrid: { col: 0, row: 0 } });
2907
+ *
2908
+ * // グリッドをまたぐ (自動的にdraggingへ遷移)
2909
+ * onChange({ type: InteractionEventType.UPDATE_DRAG, currentGrid: { col: 1, row: 0 } });
2910
+ * ```
2911
+ */
2912
+ export declare function useInteractionState(initialState?: Partial<InteractionState>): readonly [InteractionState, (event: InteractionChangeEvent) => void];
2913
+
1608
2914
  /**
1609
2915
  * 未知の値がFormSchemaかどうかをバリデーションし、型安全に変換
1610
2916
  *