itmar-block-packages 1.10.1 → 2.0.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.
Files changed (157) hide show
  1. package/README.md +1445 -1369
  2. package/build/cjs/AnimationBlock.js +107 -0
  3. package/build/cjs/AnimationBlock.js.map +1 -0
  4. package/build/cjs/BlockEditWrapper.js +20 -0
  5. package/build/cjs/BlockEditWrapper.js.map +1 -0
  6. package/build/cjs/BlockPlace.js +509 -0
  7. package/build/cjs/BlockPlace.js.map +1 -0
  8. package/build/cjs/BrockInserter.js +204 -0
  9. package/build/cjs/BrockInserter.js.map +1 -0
  10. package/build/cjs/DateElm.js +321 -0
  11. package/build/cjs/DateElm.js.map +1 -0
  12. package/build/cjs/DraggableBox.js +143 -0
  13. package/build/cjs/DraggableBox.js.map +1 -0
  14. package/build/cjs/GridControls.js +421 -0
  15. package/build/cjs/GridControls.js.map +1 -0
  16. package/build/cjs/IconSelectControl.js +167 -0
  17. package/build/cjs/IconSelectControl.js.map +1 -0
  18. package/build/cjs/JapaneseHolidays.js +99 -0
  19. package/build/cjs/JapaneseHolidays.js.map +1 -0
  20. package/build/cjs/MasonryControl.js +124 -0
  21. package/build/cjs/MasonryControl.js.map +1 -0
  22. package/build/cjs/PseudoElm.js +66 -0
  23. package/build/cjs/PseudoElm.js.map +1 -0
  24. package/build/cjs/ShadowStyle.js +453 -0
  25. package/build/cjs/ShadowStyle.js.map +1 -0
  26. package/build/cjs/SwiperControl.js +267 -0
  27. package/build/cjs/SwiperControl.js.map +1 -0
  28. package/build/cjs/ToggleElement.js +17 -0
  29. package/build/cjs/ToggleElement.js.map +1 -0
  30. package/build/cjs/TypographyControls.js +151 -0
  31. package/build/cjs/TypographyControls.js.map +1 -0
  32. package/build/cjs/UpdateAllPostsBlockAttributes.js +137 -0
  33. package/build/cjs/UpdateAllPostsBlockAttributes.js.map +1 -0
  34. package/build/cjs/ZipAddress.js +34 -0
  35. package/build/cjs/ZipAddress.js.map +1 -0
  36. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +117 -0
  37. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  38. package/build/cjs/blockStore.js +65 -0
  39. package/build/cjs/blockStore.js.map +1 -0
  40. package/build/cjs/cssPropertes.js +157 -0
  41. package/build/cjs/cssPropertes.js.map +1 -0
  42. package/build/cjs/customFooks.js +300 -0
  43. package/build/cjs/customFooks.js.map +1 -0
  44. package/build/cjs/formatCreate.js +160 -0
  45. package/build/cjs/formatCreate.js.map +1 -0
  46. package/build/cjs/hslToRgb.js +133 -0
  47. package/build/cjs/hslToRgb.js.map +1 -0
  48. package/build/cjs/index.js +115 -0
  49. package/build/cjs/index.js.map +1 -0
  50. package/build/cjs/mediaUpload.js +182 -0
  51. package/build/cjs/mediaUpload.js.map +1 -0
  52. package/build/cjs/node_modules/nanoid/index.js +30 -0
  53. package/build/cjs/node_modules/nanoid/index.js.map +1 -0
  54. package/build/cjs/node_modules/nanoid/url-alphabet/index.js +7 -0
  55. package/build/cjs/node_modules/nanoid/url-alphabet/index.js.map +1 -0
  56. package/build/cjs/shopfiApi.js +188 -0
  57. package/build/cjs/shopfiApi.js.map +1 -0
  58. package/build/cjs/validationCheck.js +15 -0
  59. package/build/cjs/validationCheck.js.map +1 -0
  60. package/build/cjs/wordpressApi.js +631 -0
  61. package/build/cjs/wordpressApi.js.map +1 -0
  62. package/build/esm/AnimationBlock.js +102 -0
  63. package/build/esm/AnimationBlock.js.map +1 -0
  64. package/build/esm/BlockEditWrapper.js +16 -0
  65. package/build/esm/BlockEditWrapper.js.map +1 -0
  66. package/build/esm/BlockPlace.js +503 -0
  67. package/build/esm/BlockPlace.js.map +1 -0
  68. package/build/esm/BrockInserter.js +202 -0
  69. package/build/esm/BrockInserter.js.map +1 -0
  70. package/build/esm/DateElm.js +309 -0
  71. package/build/esm/DateElm.js.map +1 -0
  72. package/build/esm/DraggableBox.js +138 -0
  73. package/build/esm/DraggableBox.js.map +1 -0
  74. package/build/esm/GridControls.js +417 -0
  75. package/build/esm/GridControls.js.map +1 -0
  76. package/build/esm/IconSelectControl.js +163 -0
  77. package/build/esm/IconSelectControl.js.map +1 -0
  78. package/build/esm/JapaneseHolidays.js +97 -0
  79. package/build/esm/JapaneseHolidays.js.map +1 -0
  80. package/{src → build/esm}/MasonryControl.js +120 -125
  81. package/build/esm/MasonryControl.js.map +1 -0
  82. package/build/esm/PseudoElm.js +61 -0
  83. package/build/esm/PseudoElm.js.map +1 -0
  84. package/build/esm/ShadowStyle.js +448 -0
  85. package/build/esm/ShadowStyle.js.map +1 -0
  86. package/{src → build/esm}/SwiperControl.js +265 -265
  87. package/build/esm/SwiperControl.js.map +1 -0
  88. package/build/esm/ToggleElement.js +13 -0
  89. package/build/esm/ToggleElement.js.map +1 -0
  90. package/build/esm/TypographyControls.js +147 -0
  91. package/build/esm/TypographyControls.js.map +1 -0
  92. package/build/esm/UpdateAllPostsBlockAttributes.js +133 -0
  93. package/build/esm/UpdateAllPostsBlockAttributes.js.map +1 -0
  94. package/build/esm/ZipAddress.js +32 -0
  95. package/build/esm/ZipAddress.js.map +1 -0
  96. package/build/esm/_virtual/_rollupPluginBabelHelpers.js +107 -0
  97. package/build/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  98. package/build/esm/blockStore.js +60 -0
  99. package/build/esm/blockStore.js.map +1 -0
  100. package/build/esm/cssPropertes.js +144 -0
  101. package/build/esm/cssPropertes.js.map +1 -0
  102. package/{src → build/esm}/customFooks.js +290 -337
  103. package/build/esm/customFooks.js.map +1 -0
  104. package/build/esm/formatCreate.js +157 -0
  105. package/build/esm/formatCreate.js.map +1 -0
  106. package/build/esm/hslToRgb.js +129 -0
  107. package/build/esm/hslToRgb.js.map +1 -0
  108. package/build/esm/index.js +27 -0
  109. package/build/esm/index.js.map +1 -0
  110. package/build/esm/mediaUpload.js +176 -0
  111. package/build/esm/mediaUpload.js.map +1 -0
  112. package/build/esm/node_modules/nanoid/index.js +27 -0
  113. package/build/esm/node_modules/nanoid/index.js.map +1 -0
  114. package/build/esm/node_modules/nanoid/url-alphabet/index.js +5 -0
  115. package/build/esm/node_modules/nanoid/url-alphabet/index.js.map +1 -0
  116. package/build/esm/shopfiApi.js +184 -0
  117. package/build/esm/shopfiApi.js.map +1 -0
  118. package/build/esm/validationCheck.js +13 -0
  119. package/build/esm/validationCheck.js.map +1 -0
  120. package/build/esm/wordpressApi.js +618 -0
  121. package/build/esm/wordpressApi.js.map +1 -0
  122. package/package.json +22 -6
  123. package/build/index.asset.php +0 -1
  124. package/build/index.js +0 -25
  125. package/css/editor.css +0 -23
  126. package/css/editor.css.map +0 -1
  127. package/img/animation.png +0 -0
  128. package/img/blockplace.png +0 -0
  129. package/img/grid.png +0 -0
  130. package/img/iconControl.png +0 -0
  131. package/img/pseudo.png +0 -0
  132. package/img/shadow.png +0 -0
  133. package/img/typography.png +0 -0
  134. package/src/AnimationBlock.js +0 -112
  135. package/src/BlockEditWrapper.js +0 -11
  136. package/src/BlockPlace.js +0 -904
  137. package/src/BrockInserter.js +0 -247
  138. package/src/DateElm.js +0 -354
  139. package/src/DraggableBox.js +0 -143
  140. package/src/GridControls.js +0 -462
  141. package/src/IconSelectControl.js +0 -186
  142. package/src/PseudoElm.js +0 -54
  143. package/src/ShadowStyle.js +0 -520
  144. package/src/ToggleElement.js +0 -18
  145. package/src/TypographyControls.js +0 -145
  146. package/src/UpdateAllPostsBlockAttributes.js +0 -127
  147. package/src/ZipAddress.js +0 -35
  148. package/src/blockStore.js +0 -75
  149. package/src/cssPropertes.js +0 -212
  150. package/src/formatCreate.js +0 -179
  151. package/src/hslToRgb.js +0 -162
  152. package/src/index.js +0 -131
  153. package/src/mediaUpload.js +0 -178
  154. package/src/shopfiApi.js +0 -187
  155. package/src/validationCheck.js +0 -10
  156. package/src/wordpressApi.js +0 -707
  157. package/webpack.config.js +0 -10
@@ -1,143 +0,0 @@
1
- import { __ } from "@wordpress/i18n";
2
-
3
- import {
4
- Button,
5
- PanelBody,
6
- PanelRow,
7
- __experimentalUnitControl as UnitControl,
8
- } from "@wordpress/components";
9
-
10
- import { useEffect, useRef } from "@wordpress/element";
11
-
12
- export const useDraggingMove = (
13
- isMovable,
14
- blockRef,
15
- position,
16
- onPositionChange
17
- ) => {
18
- const elmposition = useRef({ x: 0, y: 0 });
19
- const isDragging = useRef(false);
20
- const mousePosition = useRef({ x: 0, y: 0 });
21
-
22
- useEffect(() => {
23
- const element = blockRef.current;
24
-
25
- if (!isMovable) {
26
- if (element) {
27
- element.classList.remove("itmar_isDraggable"); //移動カーソル表示クラス削除
28
- }
29
- return; // 移動許可がある場合のみ、後続のロジックを実行
30
- }
31
- //positionの変化に合わせて現在位置を変更
32
- const pos_value_x = position.x.match(/(-?\d+)([%a-zA-Z]+)/);
33
- const pos_value_y = position.y.match(/(-?\d+)([%a-zA-Z]+)/);
34
- elmposition.current = {
35
- x: parseInt(pos_value_x[1]),
36
- y: parseInt(pos_value_y[1]),
37
- };
38
-
39
- //イベントハンドラ
40
- const handleMouseDown = (event) => {
41
- // 移動カーソル表示クラス名を追加します。
42
- element.classList.add("itmar_isDraggable");
43
- //ドラッグの開始フラグオン
44
- isDragging.current = true;
45
- //ドラッグ開始の絶対位置
46
- mousePosition.current = { x: event.clientX, y: event.clientY };
47
- };
48
-
49
- const handleMouseMove = (event) => {
50
- if (!isDragging.current) return; //ドラッグ中でなければ処理を中止
51
- const dx = event.clientX - mousePosition.current.x;
52
- const dy = event.clientY - mousePosition.current.y;
53
- //ドラッグ後の位置を保存
54
- const newPosition = {
55
- x: elmposition.current.x + dx,
56
- y: elmposition.current.y + dy,
57
- };
58
- elmposition.current = newPosition;
59
- mousePosition.current = { x: event.clientX, y: event.clientY }; //マウス位置の保存
60
- //ドラッグによるブロックの一時的移動
61
- element.style.transform = `translate(${elmposition.current.x}px, ${elmposition.current.y}px)`;
62
- };
63
-
64
- const handleMouseUp = () => {
65
- isDragging.current = false;
66
- element.style.transform = null;
67
- //呼出しもとに要素の位置を返す
68
- onPositionChange({
69
- x: `${elmposition.current.x}px`,
70
- y: `${elmposition.current.y}px`,
71
- });
72
- };
73
- const handleMouseLeave = () => {
74
- isDragging.current = false;
75
- };
76
-
77
- if (element) {
78
- // クラス名を追加します。
79
- element.classList.add("itmar_isDraggable");
80
- }
81
- // イベントハンドラを追加します。
82
- element.addEventListener("mousedown", handleMouseDown);
83
- element.addEventListener("mousemove", handleMouseMove);
84
- element.addEventListener("mouseup", handleMouseUp);
85
- element.addEventListener("mouseleave", handleMouseLeave);
86
-
87
- // イベントリスナーを削除するクリーンアップ関数を返します。
88
- return () => {
89
- element.removeEventListener("mousedown", handleMouseDown);
90
- element.removeEventListener("mousemove", handleMouseMove);
91
- element.removeEventListener("mouseup", handleMouseUp);
92
- element.removeEventListener("mouseleave", handleMouseLeave);
93
- element.style.transform = null;
94
- };
95
- }, [isMovable, blockRef, position, onPositionChange]); // 依存配列に isMovable を含めます
96
- };
97
-
98
- export default function DraggableBox(props) {
99
- const position = props.attributes;
100
-
101
- //インスペクター内のコントロールからの移動操作
102
- const chagePosition = (value, cordinate) => {
103
- if (value) {
104
- const newPos = { ...position, [cordinate]: value };
105
- props.onPositionChange(newPos);
106
- }
107
- };
108
-
109
- //リセット
110
- const resetPos = () => {
111
- const newPos = { x: "0px", y: "0px" };
112
- props.onPositionChange(newPos);
113
- };
114
-
115
- return (
116
- <>
117
- <PanelBody
118
- title={__("Position Setting", "block-collections")}
119
- initialOpen={true}
120
- >
121
- <PanelRow className="distance_row">
122
- <UnitControl
123
- dragDirection="e"
124
- onChange={(value) => chagePosition(value, "x")}
125
- label={__("Vertical", "block-collections")}
126
- value={position?.x || 0}
127
- />
128
- <UnitControl
129
- dragDirection="e"
130
- onChange={(value) => chagePosition(value, "y")}
131
- label={__("Horizen", "block-collections")}
132
- value={position?.y || 0}
133
- />
134
- </PanelRow>
135
- <PanelRow className="reset_row">
136
- <Button variant="secondary" onClick={() => resetPos()}>
137
- {__("Reset", "block-collections")}
138
- </Button>
139
- </PanelRow>
140
- </PanelBody>
141
- </>
142
- );
143
- }
@@ -1,462 +0,0 @@
1
- import {
2
- Button,
3
- Icon,
4
- PanelRow,
5
- ComboboxControl,
6
- ToolbarDropdownMenu,
7
- __experimentalNumberControl as NumberControl,
8
- __experimentalUnitControl as UnitControl,
9
- __experimentalInputControl as InputControl,
10
- } from "@wordpress/components";
11
-
12
- import { useSelect, dispatch } from "@wordpress/data";
13
- import { useState, useEffect, useRef } from "@wordpress/element";
14
-
15
- import { __ } from "@wordpress/i18n";
16
- import { justifyCenter, justifyLeft, justifyRight } from "@wordpress/icons";
17
- //上よせアイコン
18
- const upper = <Icon icon={justifyLeft} className="rotate-icon" />;
19
- //中央よせのアイコン
20
- const middle = <Icon icon={justifyCenter} className="rotate-icon" />;
21
- //下よせのアイコン
22
- const lower = <Icon icon={justifyRight} className="rotate-icon" />;
23
- // アイコンと文字列キーのマッピングを作成
24
- const alignIconMap = {
25
- left: justifyLeft,
26
- center: justifyCenter,
27
- right: justifyRight,
28
- upper: upper,
29
- middle: middle,
30
- lower: lower,
31
- };
32
-
33
- const units = [
34
- { value: "px", label: "px" },
35
- { value: "em", label: "em" },
36
- { value: "rem", label: "rem" },
37
- ];
38
-
39
- const initializeUnitArray = (rowUnit, length) => {
40
- if (!Array.isArray(rowUnit)) {
41
- // rowUnit が配列ではない(undefined を含む)場合、全て "1fr" で埋めた配列を返す
42
- return Array(length).fill("1fr");
43
- }
44
-
45
- return Array.from({ length }, (_, i) => rowUnit[i] || "1fr");
46
- };
47
-
48
- //r,cで与えられた座標がgridElmsのどの要素に含まれているかを返す
49
- const findElementInGrid = (gridElms, r, c) => {
50
- for (let i = 0; i < gridElms.length; i++) {
51
- const { startCell, endCell } = gridElms[i];
52
- // 各座標の最小値と最大値を決定
53
- const minRow = Math.min(startCell?.rowInx, endCell?.rowInx);
54
- const maxRow = Math.max(startCell?.rowInx, endCell?.rowInx);
55
- const minCol = Math.min(startCell?.colInx, endCell?.colInx);
56
- const maxCol = Math.max(startCell?.colInx, endCell?.colInx);
57
-
58
- // 座標が範囲内にあるかどうかをチェック
59
- if (r >= minRow && r <= maxRow && c >= minCol && c <= maxCol) {
60
- return { index: i, elm: gridElms[i] };
61
- }
62
- }
63
- return null;
64
- };
65
-
66
- //親にイベントを伝播させないラッパー
67
- const StopPropagationWrapper = ({ children }) => {
68
- const handleClick = (event) => {
69
- // イベントの伝播を阻止
70
- event.stopPropagation();
71
- };
72
-
73
- return (
74
- <div className="itmar_event_stopper" onClick={handleClick}>
75
- {children}
76
- </div>
77
- );
78
- };
79
-
80
- const GridControls = ({ attributes, clientId, onChange }) => {
81
- const { gridElms, rowNum, colNum, rowGap, colGap, rowUnit, colUnit } =
82
- attributes;
83
-
84
- //コンポーネント内の行列情報
85
- const [rowCount, setRowCount] = useState(rowNum);
86
- const [colCount, setColCount] = useState(colNum);
87
-
88
- //マウント時検出用フラグ
89
- const firstFlgRef = useRef(true);
90
-
91
- //グリッドの配置指定用テーブル要素
92
- const renderRows = () => {
93
- //セルが埋まっているかどうかの判定配列
94
-
95
- const occupied = new Array(rowCount)
96
- .fill(0)
97
- .map(() => new Array(colCount).fill(false));
98
-
99
- let rows = [];
100
- // 列単位入力行を追加
101
- let headerCells = [<th key="header-corner"></th>]; // 左上の角の空白セル
102
- for (let c = 0; c < colCount; c++) {
103
- headerCells.push(
104
- <th key={`header-${c}`}>
105
- <InputControl
106
- value={colUnit ? colUnit[c] : ""}
107
- type="text"
108
- isPressEnterToChange={true}
109
- onChange={(newValue) => {
110
- const newArray = [
111
- ...colUnit.slice(0, c),
112
- newValue,
113
- ...colUnit.slice(c + 1),
114
- ];
115
- setUnitColArray(newArray);
116
- }}
117
- />
118
- </th>
119
- );
120
- }
121
- rows.push(<tr key="header-row">{headerCells}</tr>);
122
-
123
- // 各行とセルの生成
124
- for (let r = 0; r < rowCount; r++) {
125
- let cells = [];
126
- // 行行単位入力を追加
127
- cells.push(
128
- <th key={`row-header-${r}`}>
129
- <InputControl
130
- value={rowUnit ? rowUnit[r] : ""}
131
- type="text"
132
- isPressEnterToChange={true}
133
- onChange={(newValue) => {
134
- const newArray = [
135
- ...rowUnit.slice(0, r),
136
- newValue,
137
- ...rowUnit.slice(r + 1),
138
- ];
139
- setUnitRowArray(newArray);
140
- }}
141
- />
142
- </th>
143
- );
144
-
145
- // 各行に対するセルを生成
146
- for (let c = 0; c < colCount; c++) {
147
- if (occupied[r][c]) {
148
- continue; // このセルは既に占められているのでスキップ
149
- }
150
- //複数のセルを占める設定があればセルの結合オブジェクトを生成
151
- const setElm = findElementInGrid(gridElms, r, c);
152
- const rowSpanValue = setElm
153
- ? Math.abs(setElm.elm.startCell.rowInx - setElm.elm.endCell.rowInx)
154
- : 0;
155
- const colSpanValue = setElm
156
- ? Math.abs(setElm.elm.startCell.colInx - setElm.elm.endCell.colInx)
157
- : 0;
158
- const cellSpan = {
159
- ...(rowSpanValue !== 0 && { rowspan: rowSpanValue + 1 }),
160
- ...(colSpanValue !== 0 && { colspan: colSpanValue + 1 }),
161
- };
162
- // 占められるセルの位置を記録
163
- for (let i = 0; i <= rowSpanValue; i++) {
164
- for (let j = 0; j <= colSpanValue; j++) {
165
- if (r + i < rowCount && c + j < colCount) {
166
- occupied[r + i][c + j] = true;
167
- }
168
- }
169
- }
170
- //セルを生成
171
- cells.push(
172
- <td
173
- key={`cell-${r}-${c}`}
174
- {...cellSpan}
175
- className={isCellSelected(r, c) ? "selected" : ""}
176
- style={
177
- setElm
178
- ? {
179
- backgroundColor: `var(--wp--custom--color--area-${setElm.index})`,
180
- }
181
- : undefined
182
- }
183
- onClick={() => detectCellPosition(r, c)}
184
- >
185
- {setElm && (
186
- <StopPropagationWrapper>
187
- <ToolbarDropdownMenu
188
- label={__("Lateral Alignment", "block-collections")}
189
- icon={
190
- setElm.elm.latAlign
191
- ? alignIconMap[setElm.elm.latAlign]
192
- : alignIconMap["left"]
193
- }
194
- controls={["left", "center", "right"].map((align) => ({
195
- icon: alignIconMap[align],
196
- isActive: setElm.elm.latAlign === align,
197
- onClick: () =>
198
- updateAlignment(setElm.index, align, "latAlign"),
199
- }))}
200
- />
201
- <ToolbarDropdownMenu
202
- label={__("Vertical Alignment", "block-collections")}
203
- icon={
204
- setElm.elm.vertAlign
205
- ? alignIconMap[setElm.elm.vertAlign]
206
- : alignIconMap["upper"]
207
- }
208
- controls={["upper", "middle", "lower"].map((align) => ({
209
- icon: alignIconMap[align],
210
- isActive: setElm.elm.vertAlign === align,
211
- onClick: () =>
212
- updateAlignment(setElm.index, align, "vertAlign"),
213
- }))}
214
- />
215
- </StopPropagationWrapper>
216
- )}
217
- </td>
218
- );
219
- }
220
- // 行の追加
221
- rows.push(<tr key={`row-${r}`}>{cells}</tr>);
222
- }
223
- return rows;
224
- };
225
-
226
- //テーブルの位置選択関数
227
- const detectCellPosition = (rowIndex, colIndex) => {
228
- //インナーブロックの選択がなければリターン
229
- if (!selBlock) {
230
- dispatch("core/notices").createNotice(
231
- "error",
232
- __("No blocks selected.", "itmar_guest_contact_block"),
233
- { type: "snackbar", isDismissible: true }
234
- );
235
- return;
236
- }
237
- //選択済みのセルが選択されたときはリターン
238
- if (findElementInGrid(gridElms, rowIndex, colIndex)) {
239
- dispatch("core/notices").createNotice(
240
- "error",
241
- __(
242
- "That cell is already selected by another block.",
243
- "itmar_guest_contact_block"
244
- ),
245
- { type: "snackbar", isDismissible: true }
246
- );
247
- return;
248
- }
249
-
250
- //選択されたブロックのポジションを記録
251
- const newBlock = !selBlock.startCell
252
- ? {
253
- ...selBlock,
254
- startCell: { rowInx: rowIndex, colInx: colIndex },
255
- endCell: { rowInx: rowIndex, colInx: colIndex },
256
- }
257
- : { ...selBlock, endCell: { rowInx: rowIndex, colInx: colIndex } };
258
-
259
- setSelBlock(newBlock);
260
-
261
- //blockNamesの更新
262
- const index = gridElms?.findIndex(
263
- (block) => block.value === selBlock.value
264
- );
265
- const setAreaBlock = [
266
- ...blockNames.slice(0, index),
267
- newBlock,
268
- ...blockNames.slice(index + 1),
269
- ];
270
- setBlockNames(setAreaBlock);
271
- };
272
-
273
- // セルが選択されているか判断する関数
274
- const isCellSelected = (rowIndex, colIndex) => {
275
- if (selBlock) {
276
- // 各座標の最小値と最大値を決定
277
- const minRow = Math.min(
278
- selBlock.startCell?.rowInx,
279
- selBlock.endCell?.rowInx
280
- );
281
- const maxRow = Math.max(
282
- selBlock.startCell?.rowInx,
283
- selBlock.endCell?.rowInx
284
- );
285
- const minCol = Math.min(
286
- selBlock.startCell?.colInx,
287
- selBlock.endCell?.colInx
288
- );
289
- const maxCol = Math.max(
290
- selBlock.startCell?.colInx,
291
- selBlock.endCell?.colInx
292
- );
293
-
294
- // 座標が範囲内にあるかどうかをチェック
295
- return (
296
- rowIndex >= minRow &&
297
- rowIndex <= maxRow &&
298
- colIndex >= minCol &&
299
- colIndex <= maxCol
300
- );
301
- } else {
302
- return false;
303
- }
304
- };
305
-
306
- //コンテンツ位置設定
307
- const updateAlignment = (index, align, derection) => {
308
- const alignBlock = { ...blockNames[index], [derection]: align };
309
- const setAlignBlock = [
310
- ...blockNames.slice(0, index),
311
- alignBlock,
312
- ...blockNames.slice(index + 1),
313
- ];
314
- setBlockNames(setAlignBlock);
315
- };
316
-
317
- //選択したインナーブロック
318
- const [selBlock, setSelBlock] = useState(null);
319
-
320
- //インナーブロックを取得
321
- const parentBlocks = useSelect(
322
- (select) => {
323
- const innerBlocks = select("core/block-editor").getBlocks(clientId);
324
- //インナーブロック入れ替えの際は既に登録したブロックの位置情報があれば、それを付加する。
325
- const new_block_names = innerBlocks.map((block, index) =>
326
- gridElms.length > index
327
- ? {
328
- value: block.clientId,
329
- label: block.name,
330
- startCell: gridElms[index].startCell,
331
- endCell: gridElms[index].endCell,
332
- latAlign: gridElms[index].latAlign,
333
- vertAlign: gridElms[index].vertAlign,
334
- }
335
- : {
336
- value: block.clientId,
337
- label: block.name,
338
- }
339
- );
340
- return new_block_names;
341
- },
342
- [clientId]
343
- );
344
- const [blockNames, setBlockNames] = useState(parentBlocks);
345
-
346
- //グリッド配置のクリア
347
- const clear_placement = () => {
348
- //ブロックの配置情報削除
349
- const clear_block = blockNames.map((block) => ({
350
- value: block.value,
351
- label: block.label,
352
- }));
353
- setBlockNames(clear_block);
354
- };
355
-
356
- //単位配列の初期化
357
- const initRowUnitArray = initializeUnitArray(rowUnit, rowCount);
358
- const [unitRowArray, setUnitRowArray] = useState(initRowUnitArray);
359
- const initColUnitArray = initializeUnitArray(colUnit, colCount);
360
- const [unitColArray, setUnitColArray] = useState(initColUnitArray);
361
-
362
- //親ブロックへの書き戻し
363
- useEffect(() => {
364
- const gridStyle = {
365
- ...attributes,
366
- gridElms: blockNames,
367
- rowNum: rowCount,
368
- colNum: colCount,
369
- rowUnit: unitRowArray,
370
- colUnit: unitColArray,
371
- };
372
-
373
- onChange(gridStyle);
374
- }, [blockNames, unitRowArray, unitColArray]);
375
-
376
- //行と列の数を変えた場合は位置情報を削除・単位の再編成
377
- useEffect(() => {
378
- if (!firstFlgRef.current) {
379
- //マウント時は実行しない
380
- //ブロックの位置情報クリア
381
- clear_placement();
382
- //単位情報の再編成
383
- const newRowUnitArray = initializeUnitArray(rowUnit, rowCount);
384
- setUnitRowArray(newRowUnitArray);
385
- const newColUnitArray = initializeUnitArray(colUnit, colCount);
386
- setUnitColArray(newColUnitArray);
387
- } else {
388
- firstFlgRef.current = false;
389
- }
390
- }, [rowCount, colCount]);
391
-
392
- return (
393
- <>
394
- <PanelRow className="distance_row">
395
- <NumberControl
396
- onChange={(newValue) => {
397
- const input_val =
398
- typeof newValue === "number" ? newValue : Number(newValue);
399
- setRowCount(input_val);
400
- }}
401
- label={__("Number of Row ", "block-collections")}
402
- value={rowCount}
403
- min={2}
404
- />
405
- <NumberControl
406
- onChange={(newValue) => {
407
- const input_val =
408
- typeof newValue === "number" ? newValue : Number(newValue);
409
- setColCount(input_val);
410
- }}
411
- label={__("Number of Colum", "block-collections")}
412
- value={colCount}
413
- />
414
- </PanelRow>
415
- <PanelRow className="distance_row">
416
- <UnitControl
417
- onChange={(newValue) => {
418
- newValue = newValue != "" ? newValue : "0px";
419
- const newStyle = { ...attributes, rowGap: newValue };
420
- onChange(newStyle);
421
- }}
422
- label={__("Row Gap", "block-collections")}
423
- value={rowGap}
424
- units={units}
425
- />
426
- <UnitControl
427
- onChange={(newValue) => {
428
- newValue = newValue != "" ? newValue : "0px";
429
- const newStyle = { ...attributes, colGap: newValue };
430
- onChange(newStyle);
431
- }}
432
- label={__("Colum Gap", "block-collections")}
433
- value={colGap}
434
- units={units}
435
- />
436
- </PanelRow>
437
-
438
- <PanelRow className="distance_row">
439
- <p>{__("Element placement", "block-collections")}</p>
440
- <Button variant="secondary" onClick={clear_placement}>
441
- {__("Clear", "block-collections")}
442
- </Button>
443
- </PanelRow>
444
-
445
- <PanelRow className="grid_table">
446
- <table>{renderRows()}</table>
447
- </PanelRow>
448
- <ComboboxControl
449
- label={__("InnerBlock Name", "block-collections")}
450
- options={blockNames}
451
- value={selBlock ? selBlock.value : null}
452
- onChange={(sel_id) => {
453
- const matchedBlock = blockNames.find(
454
- (block) => block.value === sel_id
455
- );
456
- setSelBlock(matchedBlock);
457
- }}
458
- />
459
- </>
460
- );
461
- };
462
- export default GridControls;