itmar-block-packages 2.0.0 → 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 (58) hide show
  1. package/README.md +1445 -1445
  2. package/build/cjs/BlockEditWrapper.js.map +1 -1
  3. package/build/cjs/BlockPlace.js.map +1 -1
  4. package/build/cjs/BrockInserter.js.map +1 -1
  5. package/build/cjs/DateElm.js +2 -2
  6. package/build/cjs/DateElm.js.map +1 -1
  7. package/build/cjs/GridControls.js.map +1 -1
  8. package/build/cjs/IconSelectControl.js.map +1 -1
  9. package/build/cjs/JapaneseHolidays.js.map +1 -1
  10. package/build/cjs/MasonryControl.js +12 -12
  11. package/build/cjs/MasonryControl.js.map +1 -1
  12. package/build/cjs/PseudoElm.js.map +1 -1
  13. package/build/cjs/ShadowStyle.js.map +1 -1
  14. package/build/cjs/SwiperControl.js.map +1 -1
  15. package/build/cjs/ToggleElement.js.map +1 -1
  16. package/build/cjs/TypographyControls.js.map +1 -1
  17. package/build/cjs/UpdateAllPostsBlockAttributes.js.map +1 -1
  18. package/build/cjs/ZipAddress.js.map +1 -1
  19. package/build/cjs/blockStore.js.map +1 -1
  20. package/build/cjs/cssPropertes.js.map +1 -1
  21. package/build/cjs/customFooks.js.map +1 -1
  22. package/build/cjs/formatCreate.js.map +1 -1
  23. package/build/cjs/hslToRgb.js.map +1 -1
  24. package/build/cjs/mediaUpload.js.map +1 -1
  25. package/build/cjs/shopfiApi.js +4 -4
  26. package/build/cjs/shopfiApi.js.map +1 -1
  27. package/build/cjs/validationCheck.js.map +1 -1
  28. package/build/cjs/wordpressApi.js +7 -7
  29. package/build/cjs/wordpressApi.js.map +1 -1
  30. package/build/esm/BlockEditWrapper.js.map +1 -1
  31. package/build/esm/BlockPlace.js.map +1 -1
  32. package/build/esm/BrockInserter.js.map +1 -1
  33. package/build/esm/DateElm.js +2 -2
  34. package/build/esm/DateElm.js.map +1 -1
  35. package/build/esm/GridControls.js.map +1 -1
  36. package/build/esm/IconSelectControl.js.map +1 -1
  37. package/build/esm/JapaneseHolidays.js.map +1 -1
  38. package/build/esm/MasonryControl.js +12 -12
  39. package/build/esm/MasonryControl.js.map +1 -1
  40. package/build/esm/PseudoElm.js.map +1 -1
  41. package/build/esm/ShadowStyle.js.map +1 -1
  42. package/build/esm/SwiperControl.js.map +1 -1
  43. package/build/esm/ToggleElement.js.map +1 -1
  44. package/build/esm/TypographyControls.js.map +1 -1
  45. package/build/esm/UpdateAllPostsBlockAttributes.js.map +1 -1
  46. package/build/esm/ZipAddress.js.map +1 -1
  47. package/build/esm/blockStore.js.map +1 -1
  48. package/build/esm/cssPropertes.js.map +1 -1
  49. package/build/esm/customFooks.js.map +1 -1
  50. package/build/esm/formatCreate.js.map +1 -1
  51. package/build/esm/hslToRgb.js.map +1 -1
  52. package/build/esm/mediaUpload.js.map +1 -1
  53. package/build/esm/shopfiApi.js +4 -4
  54. package/build/esm/shopfiApi.js.map +1 -1
  55. package/build/esm/validationCheck.js.map +1 -1
  56. package/build/esm/wordpressApi.js +7 -7
  57. package/build/esm/wordpressApi.js.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -1,1445 +1,1445 @@
1
- # 概要
2
- WordPressのカスタムブロックを作成するためのプラグインで活用するパッケージです。複数のプラグインで共通に使用する機能をパッケージにまとめました。
3
-
4
- # 使用方法
5
- ```
6
- import {関数名又はコンポーネント名} from "itmar-block-packages"
7
- ```
8
- 名前付きインポートでお願いします。
9
-
10
- ## 必要条件
11
- このパッケージは WordPress ブロック開発のビルド環境(`@wordpress/scripts`)での利用を前提としています。
12
- このパッケージを使用するには、`@wordpress/scripts`のバージョン^27.6.0以上を推奨します。以下のコマンドを実行して、`@wordpress/scripts`を更新してください:
13
-
14
- npm i @wordpress/scripts@^27.6.0 --save-dev
15
-
16
- ## 更新履歴
17
- = 2.0.0 =
18
- - ビルド方式を Rollup に変更(ESM 出力を優先し、未使用コードがバンドルされにくい構成に改善)
19
- - build 出力を ESM/CJS に分離(tree-shaking の効率と将来互換性を向上)
20
- - package.json の exports を整備(利用側の bundler が最適な形式を選べるよう改善)
21
- - 破壊的変更: 配布物の構成を build/index.js から build/esm・build/cjs に変更(インポート方法は従来通り)
22
-
23
- = 1.11.1 =
24
- - generateMonthCalendarで祝日判定に誤りがあったところを修正
25
-
26
- = 1.11.0 =
27
- - PostSelectControlを新設
28
-
29
- = 1.10.1 =
30
- - PageSelectControlで固定ページの選択肢が10個しか表示されないという不具合を解消
31
-
32
- = 1.10.0 =
33
- - useRebuildChangeFieldを新設。
34
- - FieldChoiceControlについてacfフィールドの付加情報をフィールド選択項目として表示されていたものを表示しないように修正。また、gallaryについては画像を個別に選択するのではなく全体を選択するように修正
35
- - FieldChoiceControlについて、指定された投稿タイプに紐づかないフィールドが選択項目に含まれる場合、それを除外する機能を備えた。
36
-
37
- = 1.9.0 =
38
- - shopfiApi.jsを新設。
39
-
40
- = 1.8.0 =
41
- - formatCreate.jsを新設。Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数を含みます。
42
-
43
- = 1.7.1 =
44
- - serializeBlockTree,createBlockTreeをblockStore.jsに加えた。
45
- - BlockPlace.jsでdesign-groupがフレックス要素の場合は主軸の大きさの設定がflex-grow,flex-shrink,flex-basisとなるよう修正した加えた。
46
-
47
- = 1.7.0 =
48
- - バリデーションチェック用の関数を集めるためのvalidationCheck.jsを新設し、URLの形式をチェックするisValidUrlWithUrlApiを加えた。
49
-
50
- = 1.6.3 =
51
- - IconSelectControlに設定できるアイコンをFontAwesomeに加え、画像、アバターを選択できるようにした
52
-
53
- = 1.6.0 =
54
- - fetchZipToAddressを新設
55
-
56
- = 1.5.0 =
57
- - useTargetBlocksを新設
58
-
59
- = 1.4.3 =
60
- - UpdateAllPostsBlockAttributesコンポーネントのRestAPIによる更新の不具合を修正
61
-
62
- = 1.4.2 =
63
- - UpdateAllPostsBlockAttributesコンポーネントにonProcessStartのコールバック関数の処理を付加
64
- - parse, serializeのimport漏れを修正
65
- - 最初の100投稿までの処理しか対応できなかったものをページング処理で上限なしに改良
66
-
67
- = 1.4.1 =
68
- - UpdateAllPostsBlockAttributesコンポーネントの宣言の誤りを修正
69
-
70
- = 1.4.0 =
71
- - 指定した投稿タイプの投稿に含まれる特定のブロックの属性を書き換えるコンポーネントであるUpdateAllPostsBlockAttributesコンポーネントを追加
72
-
73
- = 1.3.21 =
74
- - FieldChoiceControlで先頭の投稿にアイキャッチ画像が設定されていないとき、フィールド選択のトグルボタンが表示されないという不具合を修正
75
-
76
- = 1.3.20 =
77
- - PageSelectControlでhomeUrlをエディタのホームURLに固定しないようにした。
78
-
79
- = 1.3.19 =
80
- - FieldChoiceControlの選択可能フィールドにlinkを加えて、個別投稿ページへのリンク設定を可能にした。
81
- - BlockPlaceのフレックスボックスの配置に交差軸の配置を加えた。
82
- - TermChoiceControlでタームの表示をするか否かの選択を設定できるようにした。
83
-
84
- = 1.3.18 =
85
- - WordPress RestAPIのエンドポイントを文字列で受けて、その結果を返すrestFetchDataを新設
86
- - TermChoiceControlでonChangeコールバックで返す引数にterm.nameを加えた。
87
- - BlockPlaceコンポーネントのフレックススタイルに折り返しを設定できるように機能追加
88
- - BlockPlaceコンポーネント内のブロック幅とブロック高の設定をBlockWidthとBlockHeightの各コンポーネントを利用するように変更
89
- - BlockWidthに幅と最大幅を別々に設定できるように機能追加
90
- - BlockPlaceコンポーネント内の横方向ブロック配置をフレックス、グリッドスタイルでも設定できるように修正
91
-
92
- = 1.3.17 =
93
- - restFieldesをインポートするため、エクスポート項目に加えた。
94
-
95
- = 1.3.16 =
96
- - インスペクターの表示の国際化されていない部分を国際化した。
97
-
98
- = 1.3.15 =
99
- - BlockPlaceのプロプスに視差効果のフラグを与え、そのフラグがtrueの時は中央揃えのセットができないように制御するようにした
100
-
101
- = 1.3.14 =
102
- - position_prmの中央揃えがセットされていない場合にnullが出力されるという不具合を修正
103
-
104
- = 1.3.13 =
105
- - BlockWidthのラベル表示が誤っていたのを修正
106
-
107
- = 1.3.12 =
108
- - BlockPlaceの配置タイプが絶対位置の場合に縦横の中央揃えが設定できる機能を追加
109
- - 中央揃えができるようにしたために、position_prmにそれに対応するCSSプロパティを返す機能を追加
110
-
111
- = 1.3.11 =
112
- - BlockPlace、BlockWidth、BlockHeightのfreeサイズにpx以外の単位を設定できるように修正
113
- - freeサイズにpx以外の単位を設定できるようにしたことから、max_width_prm、width_prm、height_prmがそれに対応できるように修正
114
-
115
- = 1.3.10 =
116
- - useDuplicateBlockRemoveの不具合を修正。
117
- - ブロックの幅、高さを設定するためのコンポーネントとしてBlockWidth、BlockHeightを追加
118
-
119
- = 1.3.9 =
120
- - カスタムフックとしてuseDuplicateBlockRemoveを追加。このフックはインナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入されたブロックを削除する。
121
-
122
- = 1.3.8 =
123
- - WordPressのデータをRest APIを通して取得する関数等のFieldChoiceControlの機能として、choiceFieldsに登録されるフィールド名がmetaによるカスタムフィールドかacfによるカスタムフィールドかを峻別できるようにフィールド名にmeta_又はacf_という接頭辞を付加するようにした。
124
- - カスタムフックとしてuseBlockAttributeChangesを追加。このフックはitmar/design-group内のブロックで、指定のブロック名とクラス名のブロックの属性に変化があったとき、その変化の内容を通知する機能をもつ。同一のブロック名とクラス名をもつブロックに対して、変化した属性を自動的に設定する機能もある。
125
-
126
- = 1.3.4 =
127
- - BlockPlaceコンポーネントの高さにフリーサイズを追加し、デスクトップとモバイルでそれぞれ設定を可能うにした。それに伴ってcssPropertesのheight_prmのシグニチャーを変更。
128
-
129
- = 1.3.2 =
130
- - BlockPlaceコンポーネントのインナーブロックの方向で縦方向又は横方向を選択したとき反転の設定ができるようにした。
131
-
132
- = 1.3.1 =
133
- - edit.scssおよびstyle.scssの共通スタイルについては機能しないことが判明したので削除した。
134
-
135
- = 1.3.0 =
136
- - WordPressのデータをRest APIを通して取得する関数等に、次の関数とReactコンポーネントを追加した
137
- - restTaxonomies
138
- - TermChoiceControl
139
- - edit.scssおよびstyle.scssを配置し、これをトランスパイルして、複数のプラグインから共通のスタイルとして使用できるようにした
140
-
141
-
142
- # 各コンポーネント・関数の機能
143
- ## カスタムフック
144
- ### useIsIframeMobile
145
- WordPressのエディタ(ブロックエディタ、サイトエディタ)の大きさを監視し、幅が767ピクセル以下であればtrueを返します。
146
- ```
147
- const is_mobile=useIsIframeMobile();
148
- ```
149
-
150
- ### useElementBackgroundColor
151
- ブロックの背景色を返します。ユーザー設定で指定されていれば、その色を返し、指定されていないか、カスタムプロパティ(--wpで始まるプロパティ)であれば、getComputedStyleで実際にレンダリングされた色を取得します。
152
- #### 引数
153
- - `blockRef`
154
- ブロックへの参照。useRefで取得
155
- - `style`
156
- ブロックに設定されているスタイル。useBlockPropsで取得
157
- ```
158
- //ブロックの参照
159
- const blockRef = useRef(null);
160
- //blockPropsの参照
161
- const blockProps = useBlockProps({
162
- ref: blockRef, // ここで参照を blockProps に渡しています
163
- });
164
-
165
- //背景色の取得
166
- const baseColor = useElementBackgroundColor(blockRef, blockProps.style);
167
- ```
168
-
169
- ### useElementWidth
170
-
171
- ### useIsMobile
172
- ViewPortの大きさの大きさを監視し、幅が767ピクセル以下であればtrueを返します。
173
- ```
174
- const is_mobile=useIsMobile();
175
- ```
176
- ### useDeepCompareEffect
177
- たくさんの要素をもつオブジェクトや配列の内容の変化で発火するuseEffect
178
- #### 引数
179
- - `callback` func
180
- 発火させたい関数
181
- - `dependencies` array
182
- 依存変数にしたい配列
183
- ```
184
- useDeepCompareEffect(() => {
185
- ・・・
186
- },
187
- [attributes])
188
-
189
- ```
190
- ### useFontawesomeIframe
191
- iframeにfontawesomeを読み込むカスタムフック
192
-
193
- ### useBlockAttributeChanges
194
- 特定のブロックの属性が変更されたとき、その変更内容を返すカスタムフック。引数に指定されたブロック名のブロックで指定されたクラス名をもつブロックの属性の変更内容を返す。第3引数のフラグにtrueを指定すると同じブロック名で同じクラス名をもつブロックの属性を変更されたブロックの属性で自動的に更新する。ただし、変更内容については、指定された属性名の属性を変更及び比較の対象からはずすことができる。
195
-
196
- #### 引数
197
- - `clientId` string
198
- 変更されたことを監視する範囲となるitmar/design-groupブロックのclientId
199
- - `blockName` string
200
- 変更の監視対象となるブロック名
201
- - `className` string
202
- 変更の監視対象となるブロックが有するクラス名
203
- - `modFlg` boolean
204
- 同種ブロックを更新するかどうかのフラグ。デフォルトはfalse
205
- - `excludeAttributes` object
206
- 自動更新の対象から除外する属性をオブジェクトで指定する。オブジェクトは属性名をキーとし、値を適宜のデフォルト値とする。ここで指定された属性は更新チェックの対象からも除外される。使わないときは指定しない。
207
- ```
208
- //clientIdで指定されたブロックの属性変更の内容を返す
209
- const changedAttributes = useBlockAttributeChanges(
210
- clientId,
211
- "itmar/design-checkbox",
212
- "itmar_filter_checkbox",
213
- );
214
-
215
- //clientIdで指定されたブロックの属性変更の内容でitmar/design-checkboxという名前のブロックで
216
- //itmar_filter_checkboxというクラス名をもつブロックの属性を自動更新する。
217
- //ただし、labelContentという属性とinputValueという属性については更新対象から除外する
218
- useBlockAttributeChanges(
219
- clientId,
220
- "itmar/design-checkbox",
221
- "itmar_filter_checkbox",
222
- true,
223
- { labelContent: "", inputValue: false },
224
- );
225
-
226
- ```
227
-
228
- ### useDuplicateBlockRemove
229
- インナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入したブロックを削除する。ユーザーに重複したブロックを挿入させたくないときや特定のブロックが存在するとき、ブロックを挿入させないようにするときに活用する。
230
-
231
- #### 引数
232
- - `clientId` string
233
- インナーブロックの監視する対象となるブロックのclientId
234
- - `blockNames` array
235
- 存在をチェックするブロック名。文字列を配列で指定する。
236
-
237
- ```
238
- useDuplicateBlockRemove(clientId, ["itmar/pickup-posts"]);
239
-
240
- ```
241
-
242
- ## styled-componet用のcssプロパティ生成関数
243
- styled-componetのcssヘルパー関数内で使用するcssのパラメーターやプロパティを返します。
244
- ### radius_prm
245
- border-radiusに設定するプロパティを文字列で返します。
246
- #### 引数
247
- - `radius` object
248
- topLeft,topRight,bottomRight,bottomLeftをキーとしてもつオブジェクト
249
-
250
-
251
- ### space_prm
252
- marginやpaddingに設定するプロパティを文字列で返します。
253
- #### 引数
254
- - `space` object
255
- top,right,bottom,leftをキーとしてもつオブジェクト
256
-
257
- ### position_prm
258
- 絶対位置のポジションに関するCSSを返します。
259
- #### 引数
260
- - `pos` object,boolean
261
- 次の形式のオブジェクト又はboolean
262
- ```
263
- "posValue": {
264
- "vertBase": "top",
265
- "horBase": "left",
266
- "vertValue": "3em",
267
- "horValue": "3em",
268
- "isVertCenter": false,
269
- "isHorCenter": false
270
- },
271
- ```
272
-
273
- - `type` string
274
- staic, relative,absolute,fixed,stickyのいづれか
275
-
276
- #### 戻り値
277
- - typeがabsolute,fixed,stickyのときposの値に応じてtop,buttom,left,rightのcssプロパティを返す。 pos内の中央揃えのフラグがオンならtransformのcssプロパティも返す。
278
- - posがtrueのとき`top:50%;left: 50%;transform: translate(-50%, -50%);`を返す。
279
-
280
-
281
- ### max_width_prm
282
- 最大幅を設定するためのCSSを返します。
283
- #### 引数
284
- - `width` string
285
- wideSize,contentSize,free,fullの文字列
286
- - `free_val` string
287
- px値
288
- #### 戻り値
289
- - wideSizeのとき`width: 100%; max-width: var(--wp--style--global--wide-size);`
290
- - contentSizeのとき`width: 100%; max-width: var(--wp--style--global--content-size);`
291
- - freeのとき`width: 100%; max-width: ${free_val};`
292
- - fullのとき`width: 100%; max-width: 100%;`
293
- - その他の文字列`width: fit-content;`
294
-
295
-
296
- ### width_prm
297
- widthのCSSを返します。
298
- #### 引数
299
- - `width` string
300
- wideSize,contentSize,freeの文字列
301
- - `free_val` string
302
- px値
303
- #### 戻り値
304
- - wideSizeのとき`width: var(--wp--style--global--wide-size);`
305
- - contentSizeのとき`width: var(--wp--style--global--content-size);`
306
- - freeのとき`width: ${free_val};`
307
- - その他の文字列`width: fit-content;`
308
-
309
-
310
- ### height_prm
311
- heightのCSSを返します。
312
- #### 引数
313
- - `height` string
314
- fit, full, freeの文字列
315
- - `free_val` string
316
- px値
317
- #### 戻り値
318
- - fitのとき`height: fit-content;`
319
- - freeのとき`height: ${free_val};`
320
- - その他の文字列`height: 100%;`
321
-
322
-
323
- ### align_prm
324
- marginによる横方向の配置のためのCSSを返します。
325
- また、camelFlgを設定することで、インナースタイル用のオブジェクトを返します。
326
- #### 引数
327
- - `align` string
328
- - `camelFLg` boolean
329
- center,rightの文字列
330
- #### 戻り値
331
- camelFLgがfalse又は設定されていないとき
332
- - centerのとき`margin-left: auto; margin-right: auto;`
333
- - rightのとき`margin-left: auto; margin-right: 0`
334
- - その他の文字列`margin-right: auto; margin-left: 0`
335
- camelFLgがtrueのとき
336
- - centerのとき` { marginLeft: "auto", marginRight: "auto" }`
337
- - rightのとき` { marginLeft: "auto" }`
338
- - その他の文字列`{}`
339
-
340
-
341
- ### convertToScss
342
- キャメルケースで与えられたstyleオブジェクトをscssの文字列に変換します。
343
- #### 引数
344
- - `styleObject` object
345
- ブロックに設定されたスタイルオブジェクト
346
-
347
- ```
348
- const str_scss = convertToScss(styleObject)
349
- ```
350
-
351
-
352
- ### borderProperty
353
- WordPressのBorderBoxControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
354
- #### 引数
355
- - `borderObj` object
356
- WordPressのBorderBoxControlコンポーネントが返すオブジェクト
357
-
358
- ```
359
- const css_obj = borderProperty(borderObj)
360
- ```
361
-
362
-
363
- ### radiusProperty
364
- WordPressのBorderRadiusControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
365
- #### 引数
366
- - `radiusObj` object
367
- WordPressのBorderRadiusControlコンポーネントが返すオブジェクト
368
-
369
- ```
370
- const css_obj = radiusProperty(radiusObj)
371
- ```
372
-
373
-
374
- ### marginProperty
375
- marginのcssを返します。
376
- #### 引数
377
- - `marginObj` object
378
- top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
379
-
380
-
381
- ### paddingProperty
382
- paddingのcssを返します。
383
- #### 引数
384
- - `paddingObj` object
385
- top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
386
-
387
-
388
- ## ボックスシャドーを設定するコントロール
389
- ### ShadowStyle
390
- WordPressのブロックエディタのサイドバーにbox-shadowを設定するためのコントロールを表示させるReactコンポーネント。
391
- ```
392
- <ShadowStyle
393
- shadowStyle={{ ...shadow_element }}
394
- onChange={(newStyle, newState) => {
395
- setAttributes({ shadow_result: newStyle.style });
396
- setAttributes({ shadow_element: newState });
397
- }}
398
- />
399
- ```
400
-
401
- <img src="./img/shadow.png" alt="ShadowStyleのスクリーンショット" width="500" height="500">
402
-
403
-
404
- ### ShadowElm
405
- 設定されたbox-shadowをスタイルオブジェクトとして返します。
406
- #### 引数
407
- - `shadowState` object
408
- ShadowStyleコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
409
-
410
-
411
- ## 疑似要素を設定するコントロール
412
- ### PseudoElm
413
- WordPressのブロックエディタのサイドバーに疑似要素を設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンでは上下左右の矢印表示の設定のみが可能です。
414
- ```
415
- <PseudoElm
416
- element="Arrow"
417
- direction={pseudoInfo.option}
418
- onChange={(direction) => {
419
- setAttributes({
420
- pseudoInfo: { ...pseudoInfo, option: direction },
421
- });
422
- }}
423
- />
424
- ```
425
- <img src="./img/pseudo.png" alt="PseudoElmのスクリーンショット" width="200" height="100">
426
-
427
- ### Arrow
428
- 矢印を表示させる疑似要素を生成してscssの文字列で返します。
429
- ```
430
- const arrow = Arrow(direction);
431
-
432
- ```
433
- #### 引数
434
- - `direction` object
435
- キーをdirection、値をupper,left,right,underのいずれかとするオブジェクト
436
-
437
-
438
-
439
- ## メディアライブラリから画像を選択するコントロール
440
- ### SingleImageSelect
441
- メディアライブラリ選択画面を開き、ブロックの属性にmediaとmedia.idをセットします。
442
- ```
443
- <SingleImageSelect
444
- attributes={attributes}
445
- onSelectChange={(media) => {
446
- setAttributes({ media: media, mediaID: media.id });
447
- }}
448
- />
449
- ```
450
- ### MultiImageSelect
451
- メディアライブラリ選択画面を開き、複数の画像を選択して、ブロックの属性にmediaとmedia.idをセットします。
452
- ```
453
- <MultiImageSelect
454
- attributes={attributes}
455
- label=__("Selected Images", "text-domain")
456
- onSelectChange={(media) => {
457
- // media から map で id プロパティの配列を生成
458
- const media_ID = media.map((image) => image.id);
459
- setAttributes({
460
- mobile_val: { ...mobile_val, mediaID: media_ID, media: media },
461
- });
462
-
463
- }}
464
- onAllDelete={() => {
465
- setAttributes({
466
- mobile_val: { ...mobile_val, mediaID: [], media: [] },
467
- });
468
- }}
469
- />
470
- ```
471
-
472
-
473
- ## ブロックのドラッガブルを設定するコントロール
474
- ### DraggableBox
475
- ブロックを移動させる移動量を設定するコントロールをサイドバーに表示させます。
476
- ```
477
- <DraggableBox
478
- attributes={position}
479
- onPositionChange={(position) =>
480
- setAttributes({ position: position })
481
- }
482
- />
483
- ```
484
-
485
-
486
- ### useDraggingMove
487
- 参照したブロックを可能とするためのカスタムフックを設定します。
488
- ```
489
- useDraggingMove(
490
- isMovable,
491
- blockRef,
492
- position,
493
- onPositionChange
494
- )
495
- ```
496
- #### 引数
497
- - `isMovable` boolean
498
- 移動を可とするかどうかのフラグ
499
- - `blockRef` useRef
500
- 移動させるブロックへの参照
501
- - `position` object
502
- 移動量を決定するためのx,yのキーをもつオブジェクト
503
- - `onPositionChange` function
504
- 移動量が変化したときに属性値を記録するためのコールバック関数
505
-
506
-
507
- ## ブロックをlazy Loadさせるためのラッパーモジュール
508
- ## BlockEditWrapper
509
- registerBlockTypeの第2引数内にあるeditオブジェクトに、以下の使用例で生成したBlockEditを渡してやることで、ブロックの読み込みをレンダリングの時まで遅らせます。
510
-
511
- ```
512
- const LazyEditComponent = React.lazy(() => import("./edit"));
513
- const BlockEdit = (props) => {
514
- return <BlockEditWrapper lazyComponent={LazyEditComponent} {...props} />;
515
- };
516
- ```
517
- ## ブロックにアニメーション効果をあたえるためのコントロール
518
- ### AnimationBlock
519
- WordPressのブロックエディタのサイドバーにアニメーションを設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンではflipDown,fadeUp,fadeLeft,fadeRightのアニメーション設定が可能です
520
- ```
521
- <AnimationBlock
522
- attributes={attributes}
523
- onChange={(newValue) => setAttributes(newValue)}
524
- />
525
- ```
526
- <img src="./img/animation.png" alt="AnimationBlockのスクリーンショット" width="100" height="200">
527
-
528
- ### anime_comp
529
- 設定されたアニメーションのパラメータをオブジェクトとして渡すことで、SCSSの文字列に変換して返します。
530
- #### 引数
531
- - `anime_prm` object
532
- AnimationBlockコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
533
-
534
-
535
- ## Typographyを設定するコントロール
536
- ### TypographyControls
537
- WordPressのブロックエディタのサイドバーにTypographyを設定するためのコントロールを表示させるReactコンポーネント。
538
- ```
539
- <TypographyControls
540
- title={__("Typography", "text-domain")}
541
- fontStyle=
542
- {
543
- default_fontSize: "16px",
544
- mobile_fontSize: "12px",
545
- fontFamily: "Arial, sans-serif",
546
- fontWeight: "500",
547
- isItalic: false,
548
- }
549
- initialOpen={false}
550
- isMobile={isMobile}
551
- onChange={(newStyle) => {
552
- setAttributes({ font_style_input: newStyle });
553
- }}
554
- />
555
- ```
556
- <img src="./img/typography.png" alt="Typographyのスクリーンショット" width="100" height="200">
557
-
558
- ## WordPressのデータをRest APIを通して取得する関数等
559
- ### fetchPagesOptions
560
- 固定ページの情報を取得して配列で返します。
561
- #### 引数
562
- - `homeUrl` string
563
- サイトのホームURL
564
-
565
- #### 戻り値
566
- 次のようなキーを持つオブジェクトの配列を返します。
567
- `value` 固定ページのid。ただし、サイトのホームについては-1をかえす。
568
- `slug` 固定ページのスラッグ
569
- `link` 固定ページのURL
570
- `label` 固定ページの名称
571
-
572
- ### fetchArchiveOptions
573
- カスタム投稿タイプ(ビルトインを含む)の情報を取得して配列で返します。
574
- #### 引数
575
- - `homeUrl` string
576
- サイトのホームURL
577
-
578
- #### 戻り値
579
- 次のようなキーを持つオブジェクトの配列を返します。
580
- `value` 0から始まる通し番号
581
- `slug` ポストタイプのスラッグ
582
- `link` アーカイブページのURL
583
- `label` ポストタイプの名称
584
-
585
- ### restFetchData
586
- RestAPIのエンドポイントを文字列で受けて、その結果を返す
587
- #### 引数
588
- - `path` string
589
- エンドポイント
590
-
591
- #### 戻り値
592
- エンドポイントに対応したレスポンスがPromiseで返る
593
-
594
- ### restTaxonomies
595
- 投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
596
- #### 引数
597
- - `post_type` string
598
- 投稿タイプのスラッグ
599
-
600
- #### 戻り値
601
- 次のようなキーを持つオブジェクトの配列を返します。
602
- `slug` タクソノミーのスラッグ
603
- `name` タクソノミーの名称
604
- `rest_base` タクソノミーのREST_APIの名称
605
- `terms` ターム情報オブジェクトの配列
606
-
607
- ### restFields
608
- 投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
609
- #### 引数
610
- - `rest_base` string
611
- 投稿タイプのRestAPI用スラッグ
612
-
613
- #### 戻り値
614
- "title","date","excerpt","featured_media","meta","acf"の各フィールドの値を投稿タイプの最新データ1件分を返す。この結果で投稿タイプがどのフィールドをサポートしているか、また、どのようなカスタムフィールドが設定されているかの情報を取得することができる。
615
-
616
- ### PageSelectControl
617
- 固定ページを選択できるコンボボックス表示し、固定ページの情報を返します。
618
- #### プロプス
619
- - `selectedSlug` string
620
- 選択済みの固定ページのスラッグ
621
- - `label` string
622
- コンボボックスのラベル
623
- - `homeUrl` string
624
- サイトのホームURL
625
- - `onChange` func
626
- コンボボックスの内容が変化したとき発生するコールバック関数。引数には`fetchPagesOptions`の戻り値が入る。
627
-
628
- ```
629
- <PageSelectControl
630
- selectedSlug={selectedSlug}
631
- label={__("Select Post Type", "post-blocks")}
632
- homeUrl={post_blocks.home_url}
633
- onChange={(postInfo) => {
634
- setAttributes({ selectedSlug: postInfo.slug });
635
- }}
636
- />
637
- ```
638
-
639
- ### ArchiveSelectControl
640
- 投稿タイプ名を選択できるコンボボックス表示し、投稿タイプの情報を返します。
641
- #### プロプス
642
- - `selectedSlug` string
643
- 選択済みの投稿タイプのスラッグ
644
- - `label` string
645
- コンボボックスのラベル
646
- - `homeUrl` string
647
- サイトのホームURL
648
- - `onChange` func
649
- コンボボックスの内容が変化したとき発生するコールバック関数。引数には`fetchArchiveOptions`の戻り値が入る。
650
-
651
- ```
652
- <ArchiveSelectControl
653
- selectedSlug={selectedSlug}
654
- label={__("Select Post Type", "post-blocks")}
655
- homeUrl={post_blocks.home_url}
656
- onChange={(postInfo) => {
657
- setAttributes({ selectedSlug: postInfo.slug });
658
- }}
659
- />
660
- ```
661
-
662
- ### PostSelectControl
663
- 投稿(カスタム投稿タイプを含む)のタイトルを選択できるコンボボックスを表示し、選択した投稿の情報を返します。
664
-
665
- #### プロプス
666
- - `selectedSlug` string
667
- 選択済みの投稿スラッグ
668
-
669
- - `label` string
670
- コンボボックスのラベル
671
-
672
- - `homeUrl` string
673
- サイトのホームURL
674
-
675
- - `restBase` string
676
- 取得対象の REST Base(例:`posts` / `pages` / `itmar_resource` など)
677
- ※ `/wp/v2/{restBase}` を呼び出して投稿一覧を取得します。
678
-
679
- - `status` string (optional)
680
- 取得する投稿ステータス(デフォルト:`publish`)
681
- 例:`any` を指定すると下書き等も含めて取得できます。
682
-
683
- - `perPage` number (optional)
684
- 1ページあたりの取得件数(最大100 / デフォルト:100)
685
-
686
- - `orderby` string (optional)
687
- 並び順のキー(デフォルト:`title`)
688
-
689
- - `order` string (optional)
690
- 並び順(デフォルト:`asc`)
691
-
692
- - `search` string (optional)
693
- 検索キーワード(指定した場合、RESTの `search` パラメータで絞り込みます)
694
-
695
- - `onChange` func
696
- コンボボックスの内容が変化したとき発生するコールバック関数。
697
- 引数には `fetchPostOptions` の戻り値(options配列の要素)が入ります。
698
-
699
- #### 返却される情報(onChange の引数例)
700
- - `value` number(投稿ID)
701
- - `label` string(投稿タイトル)
702
- - `slug` string(投稿スラッグ)
703
- - `link` string(投稿のパーマリンク)
704
- - `rest_base` string(使用した restBase)
705
- - `post_id` number(投稿ID)
706
-
707
- #### 使用例
708
- ```
709
- <PostSelectControl
710
- label={__("Resource Name", "itmaroon-booking-block")}
711
- homeUrl={itmar_option.home_url}
712
- restBase={selectedRest || "itmar_resource"}
713
- selectedSlug={selectedPostSlug || ""}
714
- onChange={(info) => {
715
- if (info) {
716
- setAttributes({
717
- resourceId: info.post_id,
718
- resourceSlug: info.slug,
719
- resourceRest: info.rest_base,
720
- });
721
- }
722
- }}
723
- />
724
- ```
725
-
726
- ### TermChoiceControl
727
- 投稿タイプに紐づけられている全てのタクソノミー(カテゴリ、タグを含む。)に登録されたタームを選択できるチェックボックス表示し、コールバック関数に選択されたタームの情報を返します。
728
- #### プロプス
729
- - `selectedSlug` string
730
- 選択済みの投稿タイプのスラッグ
731
- - `choiceTerms` array
732
- 選択済みのタームの情報。配列の要素は次の形式のオブジェクトであること。
733
- { taxonomy: タクソノミーのスラッグ, term: タームのスラッグ }
734
- - `dispTaxonomies` array
735
- 選択済みのタクソノミの情報。配列の要素はタクソノミーのスラッグ
736
- - `type` string
737
- 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"taxonomy"とセットすること。
738
- - `label` string
739
-
740
- - `onChange` func
741
- チェックボックスの内容が変化したとき発生するコールバック関数。引数には{ taxonomy: タクソノミーのスラッグ, term:{ id: term.id, slug: term.slug, name: term.name } }という形式のオブジェクトを要素とする配列が入る。
742
- - `onSetDispTax` func
743
- トグルコントロールの内容が変化したとき発生するコールバック関数。引数にはタクソノミーのスラッグを要素とする配列が入る。
744
-
745
- ```
746
- <TermChoiceControl
747
- selectedSlug={selectedSlug}
748
- choiceTerms={choiceTerms}
749
- dispTaxonomies={dispTaxonomies}
750
- type="taxonomy"
751
- label={__("Choice Taxsonomy", "post-blocks")}
752
- onChange={(newChoiceTerms) =>
753
- setAttributes({ choiceTerms: newChoiceTerms })
754
- }
755
- onSetDispTax={(newChoiceTerms) => {
756
- setAttributes({ dispTaxonomies: newChoiceTerms });
757
- }}
758
- />
759
- ```
760
-
761
- ### FieldChoiceControl
762
- タイトル、日付、抜粋、アイキャッチ画像、リンクの各フィールドと投稿タイプに紐づけられている全てのカスタムフィールドを選択できるチェックボックス表示し、コールバック関数に選択されたフィールドの情報を返します。
763
- また、各フィールドがどのブロックでレンダリングされるかの設定機能も含みます。
764
- #### プロプス
765
- - `selectedSlug` string
766
- 選択済みの投稿タイプのスラッグ (Restタイプ)
767
- - `choiceItems` array
768
- 選択済みのフィールドの情報。配列の要素はフィールドのスラッグ(文字列)。
769
- - `type` string
770
- 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"field"とセットすること。
771
- - `blockMap` object
772
- フィールド名とブロック名を対にしたオブジェクト
773
- ```
774
- {
775
- "title":"itmar/design-title",
776
- "date":"itmar/design-title",
777
- "excerpt":"core/paragraph",
778
- "featured_media":"core/image",
779
- "link":"itmar/design-button"
780
- }
781
- ```
782
- - `textDomain` string
783
- 使用するブロックのテキストドメイン
784
-
785
- - `onChange` func
786
- チェックボックスの内容が変化したとき発生するコールバック関数。引数には選択されたフィールドのフィールド名を要素とする配列が入る。
787
-
788
- ```
789
-
790
- - `onBlockMapChange` func
791
- コンボボックスの内容が変化したとき発生するコールバック関数。引数には設定されたフィールド名とブロック名を対にしたオブジェクトが入る。
792
-
793
- ```
794
- <FieldChoiceControl
795
- type="field"
796
- selectedSlug={selectedRest}
797
- choiceItems={choiceFields}
798
- blockMap={blockMap}
799
- textDomain="post-blocks"
800
- onChange={(newChoiceFields) => {
801
- setAttributes({ choiceFields: newChoiceFields });
802
- }}
803
- onBlockMapChange={(newBlockMap) => {
804
- setAttributes({ blockMap: newBlockMap });
805
- }}
806
- />
807
- ```
808
-
809
- ## Font awesom のアイコンを選択するためのコントロール
810
- ### IconSelectControl
811
- WordPressのブロックエディタのサイドバーにFont awesomのアイコンを選択するためのコントロールを表示させるReactコンポーネント。
812
- ```
813
- <IconSelectControl
814
- iconStyle={
815
- icon_type: "awesome",
816
- icon_url: "",
817
- icon_name: "f030",
818
- icon_pos: "left",
819
- icon_size: "24px",
820
- icon_color: "var(--wp--preset--color--content)",
821
- icon_space: "5px",
822
- icon_family: "Font Awesome 6 Free",
823
-
824
- }
825
- setPosition={true}
826
- onChange={(newValue) => {
827
- setAttributes({icon_style: newValue})
828
- }}
829
- />
830
- ```
831
-
832
- iconStyleオブジェクトを再設定します。
833
- setPositionプロプスをtrueにするとicon_posとicon_spaceの各オブジェクトを設定するコントロールが表示されます。
834
-
835
- <img src="./img/iconControl.png" alt="IconSelectControlのスクリーンショット" width="100" height="200">
836
-
837
- ## DOM要素をラップしてレンダリングを変化させるReactコンポーネント
838
- ### ToggleElement
839
- DOM要素をdiv要素でラップし、flgの値によって、その要素にopenというクラス名を付加します。呼び出し側でflgの値を変更することで、DOM要素の表示・非表示を操作するときに使用します。
840
-
841
- ```
842
- <ToggleElement
843
- onToggle={handleHambergerToggle}
844
- className="itmar_hamberger_btn"
845
- openFlg={flg}
846
- >
847
- <span></span>
848
- <span></span>
849
- <span></span>
850
- </ToggleElement>
851
- ```
852
-
853
- ## グリッドスタイルの各種設定を行うためのコントロール
854
- ### GridControls
855
- CSSでdisplay : grid が設定されたブロックに対し、gridの各種設定を行うため、モーダルウインドウを表示させるReactコンポーネント。
856
- ```
857
- <GridControls
858
- attributes={props.grid_info}
859
- clientId={clientId}
860
- onChange={(newValue) => {
861
- props.onGridChange(newValue)
862
- }}
863
- />
864
- ```
865
-
866
- <img src="./img/grid.png" alt="GridControlsのスクリーンショット" width="200" height="200">
867
-
868
- ## ブロックの配置に関する各種設定を行うためのコントロール
869
- ### BlockPlace
870
- WordPressのブロックエディタのサイドバーにブロックの配置に関する設定のためのコントロールを表示させるReactコンポーネント。
871
- ```
872
- <BlockPlace
873
- attributes={attributes}
874
- clientId={clientId}
875
- blockRef={blockRef}
876
- isMobile={isMobile}
877
- isSubmenu={is_submenu}
878
- isParallax={true}
879
- onDirectionChange={(position) => {
880
- setAttributes({direction: position });
881
- }}
882
- onReverseChange={(checked) => {
883
- setAttributes({reverse: checked });
884
- }}
885
- onFlexChange={(position,axis) => {
886
- setAttributes({[axis]: position });
887
- }}
888
- onAlignChange={(position) => {
889
- setAttributes({outer_align: position });
890
- }}
891
- onVerticalChange={(position) => {
892
- setAttributes({outer_vertical: position });
893
- }}
894
- onWidthChange={(position) => {
895
- setAttributes({width_val: position });
896
- }}
897
- onHeightChange={(value) => {
898
- setAttributes({ height_val: value });
899
- }}
900
- onFreeWidthChange={(value) => {
901
- setAttributes({free_width: position });
902
- }}
903
- onFreeHeightChange={(value) => {
904
- setAttributes({free_height: position });
905
- }}
906
- onGridChange={(value) => {
907
- setAttributes({grid_info: position });
908
- }}
909
- onPositionChange={(value) => {
910
- setAttributes({ positionType: value });
911
- }}
912
- onPosValueChange={(value) => {
913
- setAttributes({posValue: position });
914
- }}
915
- />
916
- ```
917
-
918
-
919
- <img src="./img/blockplace.png" alt="BlockPlaceのスクリーンショット" width="100" height="300">
920
-
921
- ### BlockWidth
922
- ブロックコンポーネントの幅を設定する
923
- #### 引数
924
- - `attributes` object
925
- ブロックの属性オブジェクト
926
- - `isMobile` boolean
927
- スクリーン幅が767px以下かどうかのフラグ
928
- - `isSubmenu` boolean
929
- trueの場合はmax-widthを合わせて設定する
930
- - `onWidthChange` function
931
- widthの種別を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはwidth_valまたはmax_valという文字列でwidthValはfit,full,wideSize,contentSize,freeのいずれか
932
- - `onFreeWidthChange` function
933
- widthの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはfree_widthまたはmax_free_widthという文字列でvalueは単位付きの文字列
934
-
935
- ```
936
- <BlockWidth
937
- attributes={attributes}
938
- isMobile={isMobile}
939
- isSubmenu={isFront}
940
- onWidthChange={(key,value) => {
941
- setAttributes(
942
- !isMobile
943
- ? { default_val: { ...default_val, [key]: value } }
944
- : { mobile_val: { ...mobile_val, [key]: value } },
945
- );
946
- }}
947
- onFreeWidthChange={(key,value) => {
948
- setAttributes(
949
- !isMobile
950
- ? { default_val: { ...default_val, [key]: value } }
951
- : { mobile_val: { ...mobile_val, [key]: value } },
952
- );
953
- }}
954
- />
955
- ```
956
-
957
- ### BlockHeight
958
- ブロックコンポーネントの高さを設定する
959
- #### 引数
960
- - `attributes` object
961
- ブロックの属性オブジェクト
962
- - `isMobile` boolean
963
- スクリーン幅が767px以下かどうかのフラグ
964
- - `onHeightChange` function
965
- heightの種別を設定するためのコールバック関数。返ってくる引数はfit,full,free
966
- - `onFreeHeightChange` function
967
- heightの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数は単位付きの文字列
968
-
969
- ```
970
- <BlockHeight
971
- attributes={attributes}
972
- isMobile={isMobile}
973
- onHeightChange={(value) => {
974
- setAttributes(
975
- !isMobile
976
- ? { default_val: { ...default_val, height_val: value } }
977
- : { mobile_val: { ...mobile_val, height_val: value } },
978
- );
979
- }}
980
- onFreeHeightChange={(value) => {
981
- setAttributes(
982
- !isMobile
983
- ? { default_val: { ...default_val, free_height: value } }
984
- : { mobile_val: { ...mobile_val, free_height: value } },
985
- );
986
- }}
987
- />
988
- ```
989
-
990
- ## 色コードを変換する関数
991
- ### hslToRgb16
992
- Hslオブジェクトの値を与えると#000000型のRGB表記に変換するためのユーティリティ関数です。
993
- #### 引数
994
- - `hue` number
995
- Hslオブジェクトのhueの値
996
- - `saturation` number
997
- Hslオブジェクトのsaturationの値
998
- - `lightness` number
999
- Hslオブジェクトのlightnessの値
1000
-
1001
- ### rgb16ToHsl
1002
- 16進数のRGB表記を受け取り、それをHslオブジェクトに変換するためのユーティリティ関数です。
1003
- #### 引数
1004
- - `strRgb16` string
1005
- #000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
1006
-   
1007
-
1008
- ### HexToRGB
1009
- 16進数のRGB表記を受け取り、それを10進数のRGBオブジェクトに変換するためのユーティリティ関数です。
1010
- #### 引数
1011
- - `strRgb16` string
1012
- #000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
1013
-
1014
- ## 指定した投稿タイプの投稿に含まれる特定のブロックの属性を書き換えるコンポーネント
1015
- ### UpdateAllPostsBlockAttributes
1016
- #### 引数
1017
- - `postType` string
1018
- WordPressのRestAPIで使用するrest_baseに相当する文字列
1019
- - `blockName` string
1020
- ブロックの名称。投稿本文に含まれるブロックの名前を指定
1021
- - `newAttributes` object
1022
- 新しいブロックの属性をオブジェクトで指定
1023
- - `onProcessStart` function
1024
- 処理が完了したときに実行するコールバック関数
1025
- - `onProcessEnd` function
1026
- 処理が完了したときに実行するコールバック関数
1027
- - `onProcessCancel` function
1028
- 処理が中断されたときに実行するコールバック関数
1029
- ```
1030
- <UpdateAllPostsBlockAttributes
1031
- postType={rest_base}
1032
- blockName="itmar/markdown-block"
1033
- newAttributes={{
1034
- element_style_obj: element_style_obj,
1035
- backgroundColor: backgroundColor,
1036
- backgroundGradient: backgroundGradient,
1037
- default_val: default_val,
1038
- mobile_val: mobile_val,
1039
- radius_value: radius_value,
1040
- border_value: border_value,
1041
- }}
1042
- onProcessStart={startProgress}
1043
- onProcessEnd={closeProgress}
1044
- onProcessCancel={() => {
1045
- dispatch("core/notices").createNotice(
1046
- "error",
1047
- __("Processing was interrupted.", "markdown-block"),
1048
- { type: "snackbar" },
1049
- );
1050
- }}
1051
- />
1052
- ```
1053
-
1054
- ## インナーブロックを取得・操作する関数
1055
- ### `useTargetBlocks`
1056
-
1057
- `useTargetBlocks` は、**Gutenberg ブロックエディタ上で同じ親ブロック内にある特定の名前・属性を持つブロックを取得する React フック**です。
1058
- ネストされたブロックの検索にも対応しています。
1059
-
1060
-
1061
-
1062
- #### 🧩 概要
1063
-
1064
- このカスタムフックは、次のような用途に使えます:
1065
-
1066
- - 同じ親ブロックの中から特定のブロックを配列で取得
1067
- - 属性値でフィルタして一致する **1件のブロック**を取得
1068
- - ネストされたブロックも含めて取得(オプション)
1069
-
1070
- ---
1071
-
1072
- #### ✅ 使い方
1073
-
1074
- ##### 基本構文
1075
-
1076
- ```js
1077
- const result = useTargetBlocks(clientId, blockName, attributeFilter?, includeNested?);
1078
- ```
1079
-
1080
- | 引数 | 型 | 説明 |
1081
- |------|----|------|
1082
- | `clientId` | `string` | 呼び出し元(自分自身)の `clientId`。`useBlockEditContext()` などで取得 |
1083
- | `blockName` | `string` | 対象ブロック名(例: `'itmar/design-text-ctrl'`) |
1084
- | `attributeFilter` | `object|null` | オプション:指定した属性に一致するブロックを1件だけ取得(例: `{ inputName: 'address' }`) |
1085
- | `includeNested` | `boolean` | オプション:`true` でネストされたブロックも対象に含める(デフォルト: `false`) |
1086
-
1087
- ---
1088
-
1089
- #### 🧪 使用例
1090
-
1091
- ##### 1. 全ての `itmar/design-text-ctrl` ブロックを取得(自分を除く)
1092
-
1093
- ```js
1094
- import { useBlockEditContext } from '@wordpress/block-editor';
1095
- import { useTargetBlocks } from '@your-scope/use-target-blocks';
1096
-
1097
- const MyComponent = () => {
1098
- const { clientId } = useBlockEditContext();
1099
-
1100
- const blocks = useTargetBlocks(clientId, 'itmar/design-text-ctrl');
1101
-
1102
- return <div>対象ブロック数: {blocks.length}</div>;
1103
- };
1104
- ```
1105
-
1106
- ---
1107
-
1108
- ##### 2. `inputName: 'address'` を持つブロックを1件だけ取得
1109
-
1110
- ```js
1111
- const targetBlock = useTargetBlocks(clientId, 'itmar/design-text-ctrl', {
1112
- inputName: 'address',
1113
- });
1114
-
1115
- if (targetBlock) {
1116
- console.log('Address block found:', targetBlock.clientId);
1117
- }
1118
- ```
1119
-
1120
- ---
1121
-
1122
- ##### 3. ネストされたブロックも含めて検索
1123
-
1124
- ```js
1125
- const nestedBlock = useTargetBlocks(
1126
- clientId,
1127
- 'itmar/design-text-ctrl',
1128
- { inputName: 'address' },
1129
- true // ネスト含める
1130
- );
1131
- ```
1132
-
1133
- ---
1134
-
1135
- #### 📁 内部で使用しているもの
1136
-
1137
- - `@wordpress/data`
1138
- - `@wordpress/block-editor`
1139
- - `useSelect`, `getBlockRootClientId`, `getBlock`, `getBlocks`
1140
-
1141
- ---
1142
-
1143
- #### 🔁 補助関数:`flattenBlocks`
1144
-
1145
- ネストされたブロックを平坦化するためのユーティリティも内蔵:
1146
-
1147
- ```js
1148
- const flattenBlocks = (blocks) => {
1149
- return blocks.reduce((acc, block) => {
1150
- acc.push(block);
1151
- if (block.innerBlocks?.length > 0) {
1152
- acc.push(...flattenBlocks(block.innerBlocks));
1153
- }
1154
- return acc;
1155
- }, []);
1156
- };
1157
- ```
1158
-
1159
- ---
1160
-
1161
- #### 🛡️ 注意事項
1162
-
1163
- - このフックは **Gutenberg ブロックエディタ内でのみ使用可能**です。
1164
- - `useTargetBlocks()` は **React フック**です。関数やイベントハンドラ内部では直接呼び出せません。
1165
-
1166
- ---
1167
-
1168
- ### `serializeBlockTree`
1169
-
1170
- 指定された Gutenberg ブロックオブジェクトを、**ネスト構造を保ったままプレーンな JSON 形式に変換(保存用)**します。
1171
-
1172
- #### ✅ 使い方
1173
-
1174
- ```js
1175
- import { serializeBlockTree } from '@your-scope/block-tree-utils';
1176
-
1177
- const json = serializeBlockTree(block);
1178
- ```
1179
-
1180
- #### 📥 入力
1181
-
1182
- - `block`: Gutenberg ブロックオブジェクト(`name`, `attributes`, `innerBlocks` を含む)
1183
-
1184
- #### 📤 出力
1185
-
1186
- ```json
1187
- {
1188
- "blockName": "core/group",
1189
- "attributes": { ... },
1190
- "innerBlocks": [
1191
- {
1192
- "blockName": "core/paragraph",
1193
- "attributes": { ... },
1194
- "innerBlocks": []
1195
- }
1196
- ]
1197
- }
1198
- ```
1199
-
1200
- ---
1201
-
1202
- ### `createBlockTree`
1203
-
1204
- `serializeBlockTree` によって得られた JSON 構造を、**`createBlock()` に渡せる Gutenberg ブロックオブジェクトに再構築**します。
1205
-
1206
- #### ✅ 使い方
1207
-
1208
- ```js
1209
- import { createBlockTree } from '@your-scope/block-tree-utils';
1210
- import { createBlock } from '@wordpress/blocks';
1211
-
1212
- const wpBlock = createBlockTree(savedJson);
1213
- ```
1214
-
1215
- #### 📥 入力
1216
-
1217
- - `savedJson`: `serializeBlockTree` で生成されたブロックデータ
1218
-
1219
- #### 📤 出力
1220
-
1221
- - `createBlock(name, attributes, innerBlocks)` の形で再帰的に構成された WP ブロックオブジェクト
1222
-
1223
- ---
1224
-
1225
- ### `flattenBlocks`
1226
-
1227
- Gutenberg のネストされたブロック配列を、**1階層の配列としてフラットに展開**します。
1228
- ブロック構成内にあるすべてのブロック(ネスト含む)を一括走査する際に便利です。
1229
-
1230
- #### ✅ 使い方
1231
-
1232
- ```js
1233
- import { flattenBlocks } from '@your-scope/block-tree-utils';
1234
-
1235
- const flat = flattenBlocks(innerBlocks);
1236
- ```
1237
-
1238
- #### 📥 入力
1239
-
1240
- - `innerBlocks`: Gutenberg のブロック配列(`innerBlocks` を含む構造)
1241
-
1242
- #### 📤 出力
1243
-
1244
- - 平坦化されたブロック配列(元の構造は保持しない)
1245
-
1246
- ---
1247
-
1248
- ## 🧪 使用例
1249
-
1250
- ```js
1251
- import {
1252
- serializeBlockTree,
1253
- createBlockTree,
1254
- flattenBlocks,
1255
- } from '@your-scope/block-tree-utils';
1256
-
1257
- const savedData = blocks.map(serializeBlockTree);
1258
- const restored = savedData.map(createBlockTree);
1259
- const flatList = flattenBlocks(restored);
1260
- ```
1261
-
1262
- ---
1263
-
1264
-
1265
- ## 日本郵便番号から住所を取得するユーティリティ関数
1266
- ### `fetchZipToAddress`
1267
- `fetchZipToAddress` は、[zipcloud](https://zipcloud.ibsnet.co.jp) API を使用して、日本の郵便番号から都道府県・市区町村・町域の住所を非同期で取得する JavaScript 関数です。
1268
- Gutenberg ブロック開発やフロントエンドフォーム処理において、郵便番号による住所補完機能を簡単に実装できます。
1269
-
1270
-
1271
- #### 使用例(React / jQuery 共通)
1272
-
1273
- ```js
1274
- const addressObj = await fetchZipToAddress("1600022");
1275
- if (addressObj) {
1276
- const fullAddress = addressObj.address1 + addressObj.address2 + addressObj.address3;
1277
- console.log(fullAddress); // 例: 東京都新宿区新宿
1278
- }
1279
- ```
1280
-
1281
- ---
1282
-
1283
- #### 🔐 バリデーション仕様
1284
-
1285
- - 郵便番号は「**ハイフンなしの7桁の数字**」形式のみ許可されます(例: `1234567`)。
1286
- - 無効な形式や一致しない郵便番号、通信エラー時には `null` を返します。
1287
- - エラーはすべて `alert()` によってユーザーに通知されます。
1288
-
1289
- ---
1290
-
1291
- #### 🔁 返り値の形式(成功時)
1292
-
1293
- ```json
1294
- {
1295
- "zipcode": "1600022",
1296
- "prefcode": "13",
1297
- "address1": "東京都",
1298
- "address2": "新宿区",
1299
- "address3": "新宿",
1300
- ...
1301
- }
1302
- ```
1303
-
1304
- ---
1305
-
1306
- #### 🌐 使用API
1307
-
1308
- 本ライブラリは以下の外部APIを使用しています:
1309
-
1310
- - **zipcloud(日本郵便公式APIラッパー)**
1311
- - URL: [https://zipcloud.ibsnet.co.jp](https://zipcloud.ibsnet.co.jp)
1312
- - ドキュメント: [https://zipcloud.ibsnet.co.jp/doc/api](https://zipcloud.ibsnet.co.jp/doc/api)
1313
-
1314
- #### ⚠️ ご注意
1315
-
1316
- - この API は外部サービス(zipcloud)に依存しており、アクセス過多による制限や仕様変更の可能性があります。
1317
- - 本ライブラリを利用する場合は、[zipcloud利用規約](https://zipcloud.ibsnet.co.jp/doc/rule) を必ずご確認・順守してください。
1318
-
1319
- ---
1320
-
1321
- #### 🧩 WordPress / Gutenberg との統合例
1322
-
1323
- ```js
1324
- const handleZipSearch = async () => {
1325
- const result = await fetchZipToAddress(zipValue);
1326
- if (result) {
1327
- setAttributes({ inputValue: result.address1 + result.address2 + result.address3 });
1328
- }
1329
- };
1330
- ```
1331
-
1332
- ## バリデーションチェックを行う関数
1333
- ### `isValidUrlWithUrlApi`
1334
- `isValidUrlWithUrlApi` は、引数で与えた文字列がURLの形式であるかどうかのバリデーションチェックをします。
1335
-
1336
-
1337
- #### 使用例
1338
- ```
1339
- if (isValidUrlWithUrlApi(headingContent)) {
1340
- setAttributes({ selectedPageUrl: headingContent });
1341
- }
1342
- ```
1343
-
1344
- ## データのフォーマットを設定、表示するコンポーネント
1345
-
1346
- Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数です。
1347
-
1348
- ---
1349
-
1350
- ### 概要
1351
-
1352
- このライブラリは、以下の2つの機能を提供します:
1353
-
1354
- 1. **`<FormatSelectControl />`**
1355
- ブロックエディターの「インスペクター設定」内で、表示形式を選択する UI コンポーネント。
1356
-
1357
- 2. **`displayFormated()`**
1358
- 保存された設定に基づき、日付・数値・自由文字列の値を整形する表示用関数。
1359
-
1360
- ---
1361
-
1362
- ### `FormatSelectControl`
1363
-
1364
- #### 説明
1365
-
1366
- ブロック編集画面で「日付」「数値」「自由文字列」のいずれかの表示形式を選択・設定可能にする `PanelBody` コンポーネントです。
1367
-
1368
- #### 引数
1369
-
1370
- | 名前 | 型 | 必須 | 説明 |
1371
- |------|----|------|------|
1372
- | `titleType` | `"date"` \| `"plaine"` \| `"user"` | ✅ | フォーマット対象の種類を指定します。 |
1373
- | `userFormat` | `string` | ✅ | 現在選択中のフォーマットのキー(例: `"num_comma"`)。 |
1374
- | `freeStrFormat` | `string` | ✅ | 自由書式入力時の書式文字列(例: `"¥%s円"`)。 |
1375
- | `decimal` | `number` | ✅ | 数値の小数点以下の桁数(0〜5) |
1376
- | `onFormatChange` | `(info: FormatSettings) => void` | ✅ | 各設定項目の更新を通知するコールバック |
1377
-
1378
- #### フォーマットオプション例(SelectControlで使用)
1379
-
1380
- - 日付形式:`Y-m-d H:i:s`、`Y年n月j日 (l)` など
1381
- - 数値形式:カンマ区切りあり/なし、金額表示など
1382
- - 自由書式:`"%s"` を含む文字列で、実際の値が置換されます
1383
-
1384
- ---
1385
-
1386
- ### `displayFormated(content, userFormat, freeStrFormat, decimal)`
1387
-
1388
- #### 説明
1389
-
1390
- 指定されたフォーマットに従って、値を整形して文字列として返します。
1391
-
1392
- #### 引数
1393
-
1394
- | 名前 | 型 | 説明 |
1395
- |------|----|------|
1396
- | `content` | `string` \| `number` | 整形対象の生の値 |
1397
- | `userFormat` | `string` | 日付または数値のフォーマットキー(例: `"num_comma"`、`"Y-m-d"`) |
1398
- | `freeStrFormat` | `string` | `"%s"` を含む自由書式文字列 |
1399
- | `decimal` | `number` | 小数点以下の桁数指定(`0` なら整数扱い) |
1400
-
1401
- #### 戻り値
1402
-
1403
- 整形後の文字列(`string`)
1404
-
1405
- ---
1406
-
1407
- ### 使用例
1408
-
1409
- #### 1. コンポーネントの設置例
1410
-
1411
- ```jsx
1412
- <FormatSelectControl
1413
- titleType="plaine"
1414
- userFormat={attributes.userFormat}
1415
- freeStrFormat={attributes.freeStrFormat}
1416
- decimal={attributes.decimal}
1417
- onFormatChange={(newSettings) => setAttributes(newSettings)}
1418
- />
1419
- ```
1420
- #### 2. 表示用フォーマット関数の使用例
1421
- ```
1422
- const display = displayFormated(
1423
- 1234567.89,
1424
- attributes.userFormat,
1425
- attributes.freeStrFormat,
1426
- attributes.decimal
1427
- );
1428
- // → "1,234,567.89"(例: num_comma + decimal: 2 の場合)
1429
- ```
1430
-
1431
- ### 注意事項・ルール
1432
- ✅ 自由書式(freeStrFormat)について
1433
- - %s を含まない文字列は 置換せず、値をそのまま返します
1434
- - 例:"¥%s" → "¥1234"、"Total: " → "1234"(%s なし)
1435
-
1436
- ✅ 日付フォーマットの安全性
1437
- - userFormat が dateFormats に存在しない限り format() は呼び出されません(安全)
1438
- - Gutenberg 標準の PHP形式に準拠(例:Y-m-d, F j, Y)
1439
-
1440
- ✅ 数値フォーマットの条件
1441
- - decimal が 1 以上のときは minimumFractionDigits / maximumFractionDigits が指定され、常に小数点以下を表示
1442
- - decimal = 0 の場合は整数として表示
1443
-
1444
-
1445
-
1
+ # 概要
2
+ WordPressのカスタムブロックを作成するためのプラグインで活用するパッケージです。複数のプラグインで共通に使用する機能をパッケージにまとめました。
3
+
4
+ # 使用方法
5
+ ```
6
+ import {関数名又はコンポーネント名} from "itmar-block-packages"
7
+ ```
8
+ 名前付きインポートでお願いします。
9
+
10
+ ## 必要条件
11
+ このパッケージは WordPress ブロック開発のビルド環境(`@wordpress/scripts`)での利用を前提としています。
12
+ このパッケージを使用するには、`@wordpress/scripts`のバージョン^27.6.0以上を推奨します。以下のコマンドを実行して、`@wordpress/scripts`を更新してください:
13
+
14
+ npm i @wordpress/scripts@^27.6.0 --save-dev
15
+
16
+ ## 更新履歴
17
+ = 2.0.0 =
18
+ - ビルド方式を Rollup に変更(ESM 出力を優先し、未使用コードがバンドルされにくい構成に改善)
19
+ - build 出力を ESM/CJS に分離(tree-shaking の効率と将来互換性を向上)
20
+ - package.json の exports を整備(利用側の bundler が最適な形式を選べるよう改善)
21
+ - 破壊的変更: 配布物の構成を build/index.js から build/esm・build/cjs に変更(インポート方法は従来通り)
22
+
23
+ = 1.11.1 =
24
+ - generateMonthCalendarで祝日判定に誤りがあったところを修正
25
+
26
+ = 1.11.0 =
27
+ - PostSelectControlを新設
28
+
29
+ = 1.10.1 =
30
+ - PageSelectControlで固定ページの選択肢が10個しか表示されないという不具合を解消
31
+
32
+ = 1.10.0 =
33
+ - useRebuildChangeFieldを新設。
34
+ - FieldChoiceControlについてacfフィールドの付加情報をフィールド選択項目として表示されていたものを表示しないように修正。また、gallaryについては画像を個別に選択するのではなく全体を選択するように修正
35
+ - FieldChoiceControlについて、指定された投稿タイプに紐づかないフィールドが選択項目に含まれる場合、それを除外する機能を備えた。
36
+
37
+ = 1.9.0 =
38
+ - shopfiApi.jsを新設。
39
+
40
+ = 1.8.0 =
41
+ - formatCreate.jsを新設。Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数を含みます。
42
+
43
+ = 1.7.1 =
44
+ - serializeBlockTree,createBlockTreeをblockStore.jsに加えた。
45
+ - BlockPlace.jsでdesign-groupがフレックス要素の場合は主軸の大きさの設定がflex-grow,flex-shrink,flex-basisとなるよう修正した加えた。
46
+
47
+ = 1.7.0 =
48
+ - バリデーションチェック用の関数を集めるためのvalidationCheck.jsを新設し、URLの形式をチェックするisValidUrlWithUrlApiを加えた。
49
+
50
+ = 1.6.3 =
51
+ - IconSelectControlに設定できるアイコンをFontAwesomeに加え、画像、アバターを選択できるようにした
52
+
53
+ = 1.6.0 =
54
+ - fetchZipToAddressを新設
55
+
56
+ = 1.5.0 =
57
+ - useTargetBlocksを新設
58
+
59
+ = 1.4.3 =
60
+ - UpdateAllPostsBlockAttributesコンポーネントのRestAPIによる更新の不具合を修正
61
+
62
+ = 1.4.2 =
63
+ - UpdateAllPostsBlockAttributesコンポーネントにonProcessStartのコールバック関数の処理を付加
64
+ - parse, serializeのimport漏れを修正
65
+ - 最初の100投稿までの処理しか対応できなかったものをページング処理で上限なしに改良
66
+
67
+ = 1.4.1 =
68
+ - UpdateAllPostsBlockAttributesコンポーネントの宣言の誤りを修正
69
+
70
+ = 1.4.0 =
71
+ - 指定した投稿タイプの投稿に含まれる特定のブロックの属性を書き換えるコンポーネントであるUpdateAllPostsBlockAttributesコンポーネントを追加
72
+
73
+ = 1.3.21 =
74
+ - FieldChoiceControlで先頭の投稿にアイキャッチ画像が設定されていないとき、フィールド選択のトグルボタンが表示されないという不具合を修正
75
+
76
+ = 1.3.20 =
77
+ - PageSelectControlでhomeUrlをエディタのホームURLに固定しないようにした。
78
+
79
+ = 1.3.19 =
80
+ - FieldChoiceControlの選択可能フィールドにlinkを加えて、個別投稿ページへのリンク設定を可能にした。
81
+ - BlockPlaceのフレックスボックスの配置に交差軸の配置を加えた。
82
+ - TermChoiceControlでタームの表示をするか否かの選択を設定できるようにした。
83
+
84
+ = 1.3.18 =
85
+ - WordPress RestAPIのエンドポイントを文字列で受けて、その結果を返すrestFetchDataを新設
86
+ - TermChoiceControlでonChangeコールバックで返す引数にterm.nameを加えた。
87
+ - BlockPlaceコンポーネントのフレックススタイルに折り返しを設定できるように機能追加
88
+ - BlockPlaceコンポーネント内のブロック幅とブロック高の設定をBlockWidthとBlockHeightの各コンポーネントを利用するように変更
89
+ - BlockWidthに幅と最大幅を別々に設定できるように機能追加
90
+ - BlockPlaceコンポーネント内の横方向ブロック配置をフレックス、グリッドスタイルでも設定できるように修正
91
+
92
+ = 1.3.17 =
93
+ - restFieldesをインポートするため、エクスポート項目に加えた。
94
+
95
+ = 1.3.16 =
96
+ - インスペクターの表示の国際化されていない部分を国際化した。
97
+
98
+ = 1.3.15 =
99
+ - BlockPlaceのプロプスに視差効果のフラグを与え、そのフラグがtrueの時は中央揃えのセットができないように制御するようにした
100
+
101
+ = 1.3.14 =
102
+ - position_prmの中央揃えがセットされていない場合にnullが出力されるという不具合を修正
103
+
104
+ = 1.3.13 =
105
+ - BlockWidthのラベル表示が誤っていたのを修正
106
+
107
+ = 1.3.12 =
108
+ - BlockPlaceの配置タイプが絶対位置の場合に縦横の中央揃えが設定できる機能を追加
109
+ - 中央揃えができるようにしたために、position_prmにそれに対応するCSSプロパティを返す機能を追加
110
+
111
+ = 1.3.11 =
112
+ - BlockPlace、BlockWidth、BlockHeightのfreeサイズにpx以外の単位を設定できるように修正
113
+ - freeサイズにpx以外の単位を設定できるようにしたことから、max_width_prm、width_prm、height_prmがそれに対応できるように修正
114
+
115
+ = 1.3.10 =
116
+ - useDuplicateBlockRemoveの不具合を修正。
117
+ - ブロックの幅、高さを設定するためのコンポーネントとしてBlockWidth、BlockHeightを追加
118
+
119
+ = 1.3.9 =
120
+ - カスタムフックとしてuseDuplicateBlockRemoveを追加。このフックはインナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入されたブロックを削除する。
121
+
122
+ = 1.3.8 =
123
+ - WordPressのデータをRest APIを通して取得する関数等のFieldChoiceControlの機能として、choiceFieldsに登録されるフィールド名がmetaによるカスタムフィールドかacfによるカスタムフィールドかを峻別できるようにフィールド名にmeta_又はacf_という接頭辞を付加するようにした。
124
+ - カスタムフックとしてuseBlockAttributeChangesを追加。このフックはitmar/design-group内のブロックで、指定のブロック名とクラス名のブロックの属性に変化があったとき、その変化の内容を通知する機能をもつ。同一のブロック名とクラス名をもつブロックに対して、変化した属性を自動的に設定する機能もある。
125
+
126
+ = 1.3.4 =
127
+ - BlockPlaceコンポーネントの高さにフリーサイズを追加し、デスクトップとモバイルでそれぞれ設定を可能うにした。それに伴ってcssPropertesのheight_prmのシグニチャーを変更。
128
+
129
+ = 1.3.2 =
130
+ - BlockPlaceコンポーネントのインナーブロックの方向で縦方向又は横方向を選択したとき反転の設定ができるようにした。
131
+
132
+ = 1.3.1 =
133
+ - edit.scssおよびstyle.scssの共通スタイルについては機能しないことが判明したので削除した。
134
+
135
+ = 1.3.0 =
136
+ - WordPressのデータをRest APIを通して取得する関数等に、次の関数とReactコンポーネントを追加した
137
+ - restTaxonomies
138
+ - TermChoiceControl
139
+ - edit.scssおよびstyle.scssを配置し、これをトランスパイルして、複数のプラグインから共通のスタイルとして使用できるようにした
140
+
141
+
142
+ # 各コンポーネント・関数の機能
143
+ ## カスタムフック
144
+ ### useIsIframeMobile
145
+ WordPressのエディタ(ブロックエディタ、サイトエディタ)の大きさを監視し、幅が767ピクセル以下であればtrueを返します。
146
+ ```
147
+ const is_mobile=useIsIframeMobile();
148
+ ```
149
+
150
+ ### useElementBackgroundColor
151
+ ブロックの背景色を返します。ユーザー設定で指定されていれば、その色を返し、指定されていないか、カスタムプロパティ(--wpで始まるプロパティ)であれば、getComputedStyleで実際にレンダリングされた色を取得します。
152
+ #### 引数
153
+ - `blockRef`
154
+ ブロックへの参照。useRefで取得
155
+ - `style`
156
+ ブロックに設定されているスタイル。useBlockPropsで取得
157
+ ```
158
+ //ブロックの参照
159
+ const blockRef = useRef(null);
160
+ //blockPropsの参照
161
+ const blockProps = useBlockProps({
162
+ ref: blockRef, // ここで参照を blockProps に渡しています
163
+ });
164
+
165
+ //背景色の取得
166
+ const baseColor = useElementBackgroundColor(blockRef, blockProps.style);
167
+ ```
168
+
169
+ ### useElementWidth
170
+
171
+ ### useIsMobile
172
+ ViewPortの大きさの大きさを監視し、幅が767ピクセル以下であればtrueを返します。
173
+ ```
174
+ const is_mobile=useIsMobile();
175
+ ```
176
+ ### useDeepCompareEffect
177
+ たくさんの要素をもつオブジェクトや配列の内容の変化で発火するuseEffect
178
+ #### 引数
179
+ - `callback` func
180
+ 発火させたい関数
181
+ - `dependencies` array
182
+ 依存変数にしたい配列
183
+ ```
184
+ useDeepCompareEffect(() => {
185
+ ・・・
186
+ },
187
+ [attributes])
188
+
189
+ ```
190
+ ### useFontawesomeIframe
191
+ iframeにfontawesomeを読み込むカスタムフック
192
+
193
+ ### useBlockAttributeChanges
194
+ 特定のブロックの属性が変更されたとき、その変更内容を返すカスタムフック。引数に指定されたブロック名のブロックで指定されたクラス名をもつブロックの属性の変更内容を返す。第3引数のフラグにtrueを指定すると同じブロック名で同じクラス名をもつブロックの属性を変更されたブロックの属性で自動的に更新する。ただし、変更内容については、指定された属性名の属性を変更及び比較の対象からはずすことができる。
195
+
196
+ #### 引数
197
+ - `clientId` string
198
+ 変更されたことを監視する範囲となるitmar/design-groupブロックのclientId
199
+ - `blockName` string
200
+ 変更の監視対象となるブロック名
201
+ - `className` string
202
+ 変更の監視対象となるブロックが有するクラス名
203
+ - `modFlg` boolean
204
+ 同種ブロックを更新するかどうかのフラグ。デフォルトはfalse
205
+ - `excludeAttributes` object
206
+ 自動更新の対象から除外する属性をオブジェクトで指定する。オブジェクトは属性名をキーとし、値を適宜のデフォルト値とする。ここで指定された属性は更新チェックの対象からも除外される。使わないときは指定しない。
207
+ ```
208
+ //clientIdで指定されたブロックの属性変更の内容を返す
209
+ const changedAttributes = useBlockAttributeChanges(
210
+ clientId,
211
+ "itmar/design-checkbox",
212
+ "itmar_filter_checkbox",
213
+ );
214
+
215
+ //clientIdで指定されたブロックの属性変更の内容でitmar/design-checkboxという名前のブロックで
216
+ //itmar_filter_checkboxというクラス名をもつブロックの属性を自動更新する。
217
+ //ただし、labelContentという属性とinputValueという属性については更新対象から除外する
218
+ useBlockAttributeChanges(
219
+ clientId,
220
+ "itmar/design-checkbox",
221
+ "itmar_filter_checkbox",
222
+ true,
223
+ { labelContent: "", inputValue: false },
224
+ );
225
+
226
+ ```
227
+
228
+ ### useDuplicateBlockRemove
229
+ インナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入したブロックを削除する。ユーザーに重複したブロックを挿入させたくないときや特定のブロックが存在するとき、ブロックを挿入させないようにするときに活用する。
230
+
231
+ #### 引数
232
+ - `clientId` string
233
+ インナーブロックの監視する対象となるブロックのclientId
234
+ - `blockNames` array
235
+ 存在をチェックするブロック名。文字列を配列で指定する。
236
+
237
+ ```
238
+ useDuplicateBlockRemove(clientId, ["itmar/pickup-posts"]);
239
+
240
+ ```
241
+
242
+ ## styled-componet用のcssプロパティ生成関数
243
+ styled-componetのcssヘルパー関数内で使用するcssのパラメーターやプロパティを返します。
244
+ ### radius_prm
245
+ border-radiusに設定するプロパティを文字列で返します。
246
+ #### 引数
247
+ - `radius` object
248
+ topLeft,topRight,bottomRight,bottomLeftをキーとしてもつオブジェクト
249
+
250
+
251
+ ### space_prm
252
+ marginやpaddingに設定するプロパティを文字列で返します。
253
+ #### 引数
254
+ - `space` object
255
+ top,right,bottom,leftをキーとしてもつオブジェクト
256
+
257
+ ### position_prm
258
+ 絶対位置のポジションに関するCSSを返します。
259
+ #### 引数
260
+ - `pos` object,boolean
261
+ 次の形式のオブジェクト又はboolean
262
+ ```
263
+ "posValue": {
264
+ "vertBase": "top",
265
+ "horBase": "left",
266
+ "vertValue": "3em",
267
+ "horValue": "3em",
268
+ "isVertCenter": false,
269
+ "isHorCenter": false
270
+ },
271
+ ```
272
+
273
+ - `type` string
274
+ staic, relative,absolute,fixed,stickyのいづれか
275
+
276
+ #### 戻り値
277
+ - typeがabsolute,fixed,stickyのときposの値に応じてtop,buttom,left,rightのcssプロパティを返す。 pos内の中央揃えのフラグがオンならtransformのcssプロパティも返す。
278
+ - posがtrueのとき`top:50%;left: 50%;transform: translate(-50%, -50%);`を返す。
279
+
280
+
281
+ ### max_width_prm
282
+ 最大幅を設定するためのCSSを返します。
283
+ #### 引数
284
+ - `width` string
285
+ wideSize,contentSize,free,fullの文字列
286
+ - `free_val` string
287
+ px値
288
+ #### 戻り値
289
+ - wideSizeのとき`width: 100%; max-width: var(--wp--style--global--wide-size);`
290
+ - contentSizeのとき`width: 100%; max-width: var(--wp--style--global--content-size);`
291
+ - freeのとき`width: 100%; max-width: ${free_val};`
292
+ - fullのとき`width: 100%; max-width: 100%;`
293
+ - その他の文字列`width: fit-content;`
294
+
295
+
296
+ ### width_prm
297
+ widthのCSSを返します。
298
+ #### 引数
299
+ - `width` string
300
+ wideSize,contentSize,freeの文字列
301
+ - `free_val` string
302
+ px値
303
+ #### 戻り値
304
+ - wideSizeのとき`width: var(--wp--style--global--wide-size);`
305
+ - contentSizeのとき`width: var(--wp--style--global--content-size);`
306
+ - freeのとき`width: ${free_val};`
307
+ - その他の文字列`width: fit-content;`
308
+
309
+
310
+ ### height_prm
311
+ heightのCSSを返します。
312
+ #### 引数
313
+ - `height` string
314
+ fit, full, freeの文字列
315
+ - `free_val` string
316
+ px値
317
+ #### 戻り値
318
+ - fitのとき`height: fit-content;`
319
+ - freeのとき`height: ${free_val};`
320
+ - その他の文字列`height: 100%;`
321
+
322
+
323
+ ### align_prm
324
+ marginによる横方向の配置のためのCSSを返します。
325
+ また、camelFlgを設定することで、インナースタイル用のオブジェクトを返します。
326
+ #### 引数
327
+ - `align` string
328
+ - `camelFLg` boolean
329
+ center,rightの文字列
330
+ #### 戻り値
331
+ camelFLgがfalse又は設定されていないとき
332
+ - centerのとき`margin-left: auto; margin-right: auto;`
333
+ - rightのとき`margin-left: auto; margin-right: 0`
334
+ - その他の文字列`margin-right: auto; margin-left: 0`
335
+ camelFLgがtrueのとき
336
+ - centerのとき` { marginLeft: "auto", marginRight: "auto" }`
337
+ - rightのとき` { marginLeft: "auto" }`
338
+ - その他の文字列`{}`
339
+
340
+
341
+ ### convertToScss
342
+ キャメルケースで与えられたstyleオブジェクトをscssの文字列に変換します。
343
+ #### 引数
344
+ - `styleObject` object
345
+ ブロックに設定されたスタイルオブジェクト
346
+
347
+ ```
348
+ const str_scss = convertToScss(styleObject)
349
+ ```
350
+
351
+
352
+ ### borderProperty
353
+ WordPressのBorderBoxControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
354
+ #### 引数
355
+ - `borderObj` object
356
+ WordPressのBorderBoxControlコンポーネントが返すオブジェクト
357
+
358
+ ```
359
+ const css_obj = borderProperty(borderObj)
360
+ ```
361
+
362
+
363
+ ### radiusProperty
364
+ WordPressのBorderRadiusControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
365
+ #### 引数
366
+ - `radiusObj` object
367
+ WordPressのBorderRadiusControlコンポーネントが返すオブジェクト
368
+
369
+ ```
370
+ const css_obj = radiusProperty(radiusObj)
371
+ ```
372
+
373
+
374
+ ### marginProperty
375
+ marginのcssを返します。
376
+ #### 引数
377
+ - `marginObj` object
378
+ top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
379
+
380
+
381
+ ### paddingProperty
382
+ paddingのcssを返します。
383
+ #### 引数
384
+ - `paddingObj` object
385
+ top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
386
+
387
+
388
+ ## ボックスシャドーを設定するコントロール
389
+ ### ShadowStyle
390
+ WordPressのブロックエディタのサイドバーにbox-shadowを設定するためのコントロールを表示させるReactコンポーネント。
391
+ ```
392
+ <ShadowStyle
393
+ shadowStyle={{ ...shadow_element }}
394
+ onChange={(newStyle, newState) => {
395
+ setAttributes({ shadow_result: newStyle.style });
396
+ setAttributes({ shadow_element: newState });
397
+ }}
398
+ />
399
+ ```
400
+
401
+ <img src="./img/shadow.png" alt="ShadowStyleのスクリーンショット" width="500" height="500">
402
+
403
+
404
+ ### ShadowElm
405
+ 設定されたbox-shadowをスタイルオブジェクトとして返します。
406
+ #### 引数
407
+ - `shadowState` object
408
+ ShadowStyleコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
409
+
410
+
411
+ ## 疑似要素を設定するコントロール
412
+ ### PseudoElm
413
+ WordPressのブロックエディタのサイドバーに疑似要素を設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンでは上下左右の矢印表示の設定のみが可能です。
414
+ ```
415
+ <PseudoElm
416
+ element="Arrow"
417
+ direction={pseudoInfo.option}
418
+ onChange={(direction) => {
419
+ setAttributes({
420
+ pseudoInfo: { ...pseudoInfo, option: direction },
421
+ });
422
+ }}
423
+ />
424
+ ```
425
+ <img src="./img/pseudo.png" alt="PseudoElmのスクリーンショット" width="200" height="100">
426
+
427
+ ### Arrow
428
+ 矢印を表示させる疑似要素を生成してscssの文字列で返します。
429
+ ```
430
+ const arrow = Arrow(direction);
431
+
432
+ ```
433
+ #### 引数
434
+ - `direction` object
435
+ キーをdirection、値をupper,left,right,underのいずれかとするオブジェクト
436
+
437
+
438
+
439
+ ## メディアライブラリから画像を選択するコントロール
440
+ ### SingleImageSelect
441
+ メディアライブラリ選択画面を開き、ブロックの属性にmediaとmedia.idをセットします。
442
+ ```
443
+ <SingleImageSelect
444
+ attributes={attributes}
445
+ onSelectChange={(media) => {
446
+ setAttributes({ media: media, mediaID: media.id });
447
+ }}
448
+ />
449
+ ```
450
+ ### MultiImageSelect
451
+ メディアライブラリ選択画面を開き、複数の画像を選択して、ブロックの属性にmediaとmedia.idをセットします。
452
+ ```
453
+ <MultiImageSelect
454
+ attributes={attributes}
455
+ label=__("Selected Images", "text-domain")
456
+ onSelectChange={(media) => {
457
+ // media から map で id プロパティの配列を生成
458
+ const media_ID = media.map((image) => image.id);
459
+ setAttributes({
460
+ mobile_val: { ...mobile_val, mediaID: media_ID, media: media },
461
+ });
462
+
463
+ }}
464
+ onAllDelete={() => {
465
+ setAttributes({
466
+ mobile_val: { ...mobile_val, mediaID: [], media: [] },
467
+ });
468
+ }}
469
+ />
470
+ ```
471
+
472
+
473
+ ## ブロックのドラッガブルを設定するコントロール
474
+ ### DraggableBox
475
+ ブロックを移動させる移動量を設定するコントロールをサイドバーに表示させます。
476
+ ```
477
+ <DraggableBox
478
+ attributes={position}
479
+ onPositionChange={(position) =>
480
+ setAttributes({ position: position })
481
+ }
482
+ />
483
+ ```
484
+
485
+
486
+ ### useDraggingMove
487
+ 参照したブロックを可能とするためのカスタムフックを設定します。
488
+ ```
489
+ useDraggingMove(
490
+ isMovable,
491
+ blockRef,
492
+ position,
493
+ onPositionChange
494
+ )
495
+ ```
496
+ #### 引数
497
+ - `isMovable` boolean
498
+ 移動を可とするかどうかのフラグ
499
+ - `blockRef` useRef
500
+ 移動させるブロックへの参照
501
+ - `position` object
502
+ 移動量を決定するためのx,yのキーをもつオブジェクト
503
+ - `onPositionChange` function
504
+ 移動量が変化したときに属性値を記録するためのコールバック関数
505
+
506
+
507
+ ## ブロックをlazy Loadさせるためのラッパーモジュール
508
+ ## BlockEditWrapper
509
+ registerBlockTypeの第2引数内にあるeditオブジェクトに、以下の使用例で生成したBlockEditを渡してやることで、ブロックの読み込みをレンダリングの時まで遅らせます。
510
+
511
+ ```
512
+ const LazyEditComponent = React.lazy(() => import("./edit"));
513
+ const BlockEdit = (props) => {
514
+ return <BlockEditWrapper lazyComponent={LazyEditComponent} {...props} />;
515
+ };
516
+ ```
517
+ ## ブロックにアニメーション効果をあたえるためのコントロール
518
+ ### AnimationBlock
519
+ WordPressのブロックエディタのサイドバーにアニメーションを設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンではflipDown,fadeUp,fadeLeft,fadeRightのアニメーション設定が可能です
520
+ ```
521
+ <AnimationBlock
522
+ attributes={attributes}
523
+ onChange={(newValue) => setAttributes(newValue)}
524
+ />
525
+ ```
526
+ <img src="./img/animation.png" alt="AnimationBlockのスクリーンショット" width="100" height="200">
527
+
528
+ ### anime_comp
529
+ 設定されたアニメーションのパラメータをオブジェクトとして渡すことで、SCSSの文字列に変換して返します。
530
+ #### 引数
531
+ - `anime_prm` object
532
+ AnimationBlockコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
533
+
534
+
535
+ ## Typographyを設定するコントロール
536
+ ### TypographyControls
537
+ WordPressのブロックエディタのサイドバーにTypographyを設定するためのコントロールを表示させるReactコンポーネント。
538
+ ```
539
+ <TypographyControls
540
+ title={__("Typography", "text-domain")}
541
+ fontStyle=
542
+ {
543
+ default_fontSize: "16px",
544
+ mobile_fontSize: "12px",
545
+ fontFamily: "Arial, sans-serif",
546
+ fontWeight: "500",
547
+ isItalic: false,
548
+ }
549
+ initialOpen={false}
550
+ isMobile={isMobile}
551
+ onChange={(newStyle) => {
552
+ setAttributes({ font_style_input: newStyle });
553
+ }}
554
+ />
555
+ ```
556
+ <img src="./img/typography.png" alt="Typographyのスクリーンショット" width="100" height="200">
557
+
558
+ ## WordPressのデータをRest APIを通して取得する関数等
559
+ ### fetchPagesOptions
560
+ 固定ページの情報を取得して配列で返します。
561
+ #### 引数
562
+ - `homeUrl` string
563
+ サイトのホームURL
564
+
565
+ #### 戻り値
566
+ 次のようなキーを持つオブジェクトの配列を返します。
567
+ `value` 固定ページのid。ただし、サイトのホームについては-1をかえす。
568
+ `slug` 固定ページのスラッグ
569
+ `link` 固定ページのURL
570
+ `label` 固定ページの名称
571
+
572
+ ### fetchArchiveOptions
573
+ カスタム投稿タイプ(ビルトインを含む)の情報を取得して配列で返します。
574
+ #### 引数
575
+ - `homeUrl` string
576
+ サイトのホームURL
577
+
578
+ #### 戻り値
579
+ 次のようなキーを持つオブジェクトの配列を返します。
580
+ `value` 0から始まる通し番号
581
+ `slug` ポストタイプのスラッグ
582
+ `link` アーカイブページのURL
583
+ `label` ポストタイプの名称
584
+
585
+ ### restFetchData
586
+ RestAPIのエンドポイントを文字列で受けて、その結果を返す
587
+ #### 引数
588
+ - `path` string
589
+ エンドポイント
590
+
591
+ #### 戻り値
592
+ エンドポイントに対応したレスポンスがPromiseで返る
593
+
594
+ ### restTaxonomies
595
+ 投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
596
+ #### 引数
597
+ - `post_type` string
598
+ 投稿タイプのスラッグ
599
+
600
+ #### 戻り値
601
+ 次のようなキーを持つオブジェクトの配列を返します。
602
+ `slug` タクソノミーのスラッグ
603
+ `name` タクソノミーの名称
604
+ `rest_base` タクソノミーのREST_APIの名称
605
+ `terms` ターム情報オブジェクトの配列
606
+
607
+ ### restFields
608
+ 投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
609
+ #### 引数
610
+ - `rest_base` string
611
+ 投稿タイプのRestAPI用スラッグ
612
+
613
+ #### 戻り値
614
+ "title","date","excerpt","featured_media","meta","acf"の各フィールドの値を投稿タイプの最新データ1件分を返す。この結果で投稿タイプがどのフィールドをサポートしているか、また、どのようなカスタムフィールドが設定されているかの情報を取得することができる。
615
+
616
+ ### PageSelectControl
617
+ 固定ページを選択できるコンボボックス表示し、固定ページの情報を返します。
618
+ #### プロプス
619
+ - `selectedSlug` string
620
+ 選択済みの固定ページのスラッグ
621
+ - `label` string
622
+ コンボボックスのラベル
623
+ - `homeUrl` string
624
+ サイトのホームURL
625
+ - `onChange` func
626
+ コンボボックスの内容が変化したとき発生するコールバック関数。引数には`fetchPagesOptions`の戻り値が入る。
627
+
628
+ ```
629
+ <PageSelectControl
630
+ selectedSlug={selectedSlug}
631
+ label={__("Select Post Type", "post-blocks")}
632
+ homeUrl={post_blocks.home_url}
633
+ onChange={(postInfo) => {
634
+ setAttributes({ selectedSlug: postInfo.slug });
635
+ }}
636
+ />
637
+ ```
638
+
639
+ ### ArchiveSelectControl
640
+ 投稿タイプ名を選択できるコンボボックス表示し、投稿タイプの情報を返します。
641
+ #### プロプス
642
+ - `selectedSlug` string
643
+ 選択済みの投稿タイプのスラッグ
644
+ - `label` string
645
+ コンボボックスのラベル
646
+ - `homeUrl` string
647
+ サイトのホームURL
648
+ - `onChange` func
649
+ コンボボックスの内容が変化したとき発生するコールバック関数。引数には`fetchArchiveOptions`の戻り値が入る。
650
+
651
+ ```
652
+ <ArchiveSelectControl
653
+ selectedSlug={selectedSlug}
654
+ label={__("Select Post Type", "post-blocks")}
655
+ homeUrl={post_blocks.home_url}
656
+ onChange={(postInfo) => {
657
+ setAttributes({ selectedSlug: postInfo.slug });
658
+ }}
659
+ />
660
+ ```
661
+
662
+ ### PostSelectControl
663
+ 投稿(カスタム投稿タイプを含む)のタイトルを選択できるコンボボックスを表示し、選択した投稿の情報を返します。
664
+
665
+ #### プロプス
666
+ - `selectedSlug` string
667
+ 選択済みの投稿スラッグ
668
+
669
+ - `label` string
670
+ コンボボックスのラベル
671
+
672
+ - `homeUrl` string
673
+ サイトのホームURL
674
+
675
+ - `restBase` string
676
+ 取得対象の REST Base(例:`posts` / `pages` / `itmar_resource` など)
677
+ ※ `/wp/v2/{restBase}` を呼び出して投稿一覧を取得します。
678
+
679
+ - `status` string (optional)
680
+ 取得する投稿ステータス(デフォルト:`publish`)
681
+ 例:`any` を指定すると下書き等も含めて取得できます。
682
+
683
+ - `perPage` number (optional)
684
+ 1ページあたりの取得件数(最大100 / デフォルト:100)
685
+
686
+ - `orderby` string (optional)
687
+ 並び順のキー(デフォルト:`title`)
688
+
689
+ - `order` string (optional)
690
+ 並び順(デフォルト:`asc`)
691
+
692
+ - `search` string (optional)
693
+ 検索キーワード(指定した場合、RESTの `search` パラメータで絞り込みます)
694
+
695
+ - `onChange` func
696
+ コンボボックスの内容が変化したとき発生するコールバック関数。
697
+ 引数には `fetchPostOptions` の戻り値(options配列の要素)が入ります。
698
+
699
+ #### 返却される情報(onChange の引数例)
700
+ - `value` number(投稿ID)
701
+ - `label` string(投稿タイトル)
702
+ - `slug` string(投稿スラッグ)
703
+ - `link` string(投稿のパーマリンク)
704
+ - `rest_base` string(使用した restBase)
705
+ - `post_id` number(投稿ID)
706
+
707
+ #### 使用例
708
+ ```
709
+ <PostSelectControl
710
+ label={__("Resource Name", "itmaroon-booking-block")}
711
+ homeUrl={itmar_option.home_url}
712
+ restBase={selectedRest || "itmar_resource"}
713
+ selectedSlug={selectedPostSlug || ""}
714
+ onChange={(info) => {
715
+ if (info) {
716
+ setAttributes({
717
+ resourceId: info.post_id,
718
+ resourceSlug: info.slug,
719
+ resourceRest: info.rest_base,
720
+ });
721
+ }
722
+ }}
723
+ />
724
+ ```
725
+
726
+ ### TermChoiceControl
727
+ 投稿タイプに紐づけられている全てのタクソノミー(カテゴリ、タグを含む。)に登録されたタームを選択できるチェックボックス表示し、コールバック関数に選択されたタームの情報を返します。
728
+ #### プロプス
729
+ - `selectedSlug` string
730
+ 選択済みの投稿タイプのスラッグ
731
+ - `choiceTerms` array
732
+ 選択済みのタームの情報。配列の要素は次の形式のオブジェクトであること。
733
+ { taxonomy: タクソノミーのスラッグ, term: タームのスラッグ }
734
+ - `dispTaxonomies` array
735
+ 選択済みのタクソノミの情報。配列の要素はタクソノミーのスラッグ
736
+ - `type` string
737
+ 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"taxonomy"とセットすること。
738
+ - `label` string
739
+
740
+ - `onChange` func
741
+ チェックボックスの内容が変化したとき発生するコールバック関数。引数には{ taxonomy: タクソノミーのスラッグ, term:{ id: term.id, slug: term.slug, name: term.name } }という形式のオブジェクトを要素とする配列が入る。
742
+ - `onSetDispTax` func
743
+ トグルコントロールの内容が変化したとき発生するコールバック関数。引数にはタクソノミーのスラッグを要素とする配列が入る。
744
+
745
+ ```
746
+ <TermChoiceControl
747
+ selectedSlug={selectedSlug}
748
+ choiceTerms={choiceTerms}
749
+ dispTaxonomies={dispTaxonomies}
750
+ type="taxonomy"
751
+ label={__("Choice Taxsonomy", "post-blocks")}
752
+ onChange={(newChoiceTerms) =>
753
+ setAttributes({ choiceTerms: newChoiceTerms })
754
+ }
755
+ onSetDispTax={(newChoiceTerms) => {
756
+ setAttributes({ dispTaxonomies: newChoiceTerms });
757
+ }}
758
+ />
759
+ ```
760
+
761
+ ### FieldChoiceControl
762
+ タイトル、日付、抜粋、アイキャッチ画像、リンクの各フィールドと投稿タイプに紐づけられている全てのカスタムフィールドを選択できるチェックボックス表示し、コールバック関数に選択されたフィールドの情報を返します。
763
+ また、各フィールドがどのブロックでレンダリングされるかの設定機能も含みます。
764
+ #### プロプス
765
+ - `selectedSlug` string
766
+ 選択済みの投稿タイプのスラッグ (Restタイプ)
767
+ - `choiceItems` array
768
+ 選択済みのフィールドの情報。配列の要素はフィールドのスラッグ(文字列)。
769
+ - `type` string
770
+ 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"field"とセットすること。
771
+ - `blockMap` object
772
+ フィールド名とブロック名を対にしたオブジェクト
773
+ ```
774
+ {
775
+ "title":"itmar/design-title",
776
+ "date":"itmar/design-title",
777
+ "excerpt":"core/paragraph",
778
+ "featured_media":"core/image",
779
+ "link":"itmar/design-button"
780
+ }
781
+ ```
782
+ - `textDomain` string
783
+ 使用するブロックのテキストドメイン
784
+
785
+ - `onChange` func
786
+ チェックボックスの内容が変化したとき発生するコールバック関数。引数には選択されたフィールドのフィールド名を要素とする配列が入る。
787
+
788
+ ```
789
+
790
+ - `onBlockMapChange` func
791
+ コンボボックスの内容が変化したとき発生するコールバック関数。引数には設定されたフィールド名とブロック名を対にしたオブジェクトが入る。
792
+
793
+ ```
794
+ <FieldChoiceControl
795
+ type="field"
796
+ selectedSlug={selectedRest}
797
+ choiceItems={choiceFields}
798
+ blockMap={blockMap}
799
+ textDomain="post-blocks"
800
+ onChange={(newChoiceFields) => {
801
+ setAttributes({ choiceFields: newChoiceFields });
802
+ }}
803
+ onBlockMapChange={(newBlockMap) => {
804
+ setAttributes({ blockMap: newBlockMap });
805
+ }}
806
+ />
807
+ ```
808
+
809
+ ## Font awesom のアイコンを選択するためのコントロール
810
+ ### IconSelectControl
811
+ WordPressのブロックエディタのサイドバーにFont awesomのアイコンを選択するためのコントロールを表示させるReactコンポーネント。
812
+ ```
813
+ <IconSelectControl
814
+ iconStyle={
815
+ icon_type: "awesome",
816
+ icon_url: "",
817
+ icon_name: "f030",
818
+ icon_pos: "left",
819
+ icon_size: "24px",
820
+ icon_color: "var(--wp--preset--color--content)",
821
+ icon_space: "5px",
822
+ icon_family: "Font Awesome 6 Free",
823
+
824
+ }
825
+ setPosition={true}
826
+ onChange={(newValue) => {
827
+ setAttributes({icon_style: newValue})
828
+ }}
829
+ />
830
+ ```
831
+
832
+ iconStyleオブジェクトを再設定します。
833
+ setPositionプロプスをtrueにするとicon_posとicon_spaceの各オブジェクトを設定するコントロールが表示されます。
834
+
835
+ <img src="./img/iconControl.png" alt="IconSelectControlのスクリーンショット" width="100" height="200">
836
+
837
+ ## DOM要素をラップしてレンダリングを変化させるReactコンポーネント
838
+ ### ToggleElement
839
+ DOM要素をdiv要素でラップし、flgの値によって、その要素にopenというクラス名を付加します。呼び出し側でflgの値を変更することで、DOM要素の表示・非表示を操作するときに使用します。
840
+
841
+ ```
842
+ <ToggleElement
843
+ onToggle={handleHambergerToggle}
844
+ className="itmar_hamberger_btn"
845
+ openFlg={flg}
846
+ >
847
+ <span></span>
848
+ <span></span>
849
+ <span></span>
850
+ </ToggleElement>
851
+ ```
852
+
853
+ ## グリッドスタイルの各種設定を行うためのコントロール
854
+ ### GridControls
855
+ CSSでdisplay : grid が設定されたブロックに対し、gridの各種設定を行うため、モーダルウインドウを表示させるReactコンポーネント。
856
+ ```
857
+ <GridControls
858
+ attributes={props.grid_info}
859
+ clientId={clientId}
860
+ onChange={(newValue) => {
861
+ props.onGridChange(newValue)
862
+ }}
863
+ />
864
+ ```
865
+
866
+ <img src="./img/grid.png" alt="GridControlsのスクリーンショット" width="200" height="200">
867
+
868
+ ## ブロックの配置に関する各種設定を行うためのコントロール
869
+ ### BlockPlace
870
+ WordPressのブロックエディタのサイドバーにブロックの配置に関する設定のためのコントロールを表示させるReactコンポーネント。
871
+ ```
872
+ <BlockPlace
873
+ attributes={attributes}
874
+ clientId={clientId}
875
+ blockRef={blockRef}
876
+ isMobile={isMobile}
877
+ isSubmenu={is_submenu}
878
+ isParallax={true}
879
+ onDirectionChange={(position) => {
880
+ setAttributes({direction: position });
881
+ }}
882
+ onReverseChange={(checked) => {
883
+ setAttributes({reverse: checked });
884
+ }}
885
+ onFlexChange={(position,axis) => {
886
+ setAttributes({[axis]: position });
887
+ }}
888
+ onAlignChange={(position) => {
889
+ setAttributes({outer_align: position });
890
+ }}
891
+ onVerticalChange={(position) => {
892
+ setAttributes({outer_vertical: position });
893
+ }}
894
+ onWidthChange={(position) => {
895
+ setAttributes({width_val: position });
896
+ }}
897
+ onHeightChange={(value) => {
898
+ setAttributes({ height_val: value });
899
+ }}
900
+ onFreeWidthChange={(value) => {
901
+ setAttributes({free_width: position });
902
+ }}
903
+ onFreeHeightChange={(value) => {
904
+ setAttributes({free_height: position });
905
+ }}
906
+ onGridChange={(value) => {
907
+ setAttributes({grid_info: position });
908
+ }}
909
+ onPositionChange={(value) => {
910
+ setAttributes({ positionType: value });
911
+ }}
912
+ onPosValueChange={(value) => {
913
+ setAttributes({posValue: position });
914
+ }}
915
+ />
916
+ ```
917
+
918
+
919
+ <img src="./img/blockplace.png" alt="BlockPlaceのスクリーンショット" width="100" height="300">
920
+
921
+ ### BlockWidth
922
+ ブロックコンポーネントの幅を設定する
923
+ #### 引数
924
+ - `attributes` object
925
+ ブロックの属性オブジェクト
926
+ - `isMobile` boolean
927
+ スクリーン幅が767px以下かどうかのフラグ
928
+ - `isSubmenu` boolean
929
+ trueの場合はmax-widthを合わせて設定する
930
+ - `onWidthChange` function
931
+ widthの種別を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはwidth_valまたはmax_valという文字列でwidthValはfit,full,wideSize,contentSize,freeのいずれか
932
+ - `onFreeWidthChange` function
933
+ widthの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはfree_widthまたはmax_free_widthという文字列でvalueは単位付きの文字列
934
+
935
+ ```
936
+ <BlockWidth
937
+ attributes={attributes}
938
+ isMobile={isMobile}
939
+ isSubmenu={isFront}
940
+ onWidthChange={(key,value) => {
941
+ setAttributes(
942
+ !isMobile
943
+ ? { default_val: { ...default_val, [key]: value } }
944
+ : { mobile_val: { ...mobile_val, [key]: value } },
945
+ );
946
+ }}
947
+ onFreeWidthChange={(key,value) => {
948
+ setAttributes(
949
+ !isMobile
950
+ ? { default_val: { ...default_val, [key]: value } }
951
+ : { mobile_val: { ...mobile_val, [key]: value } },
952
+ );
953
+ }}
954
+ />
955
+ ```
956
+
957
+ ### BlockHeight
958
+ ブロックコンポーネントの高さを設定する
959
+ #### 引数
960
+ - `attributes` object
961
+ ブロックの属性オブジェクト
962
+ - `isMobile` boolean
963
+ スクリーン幅が767px以下かどうかのフラグ
964
+ - `onHeightChange` function
965
+ heightの種別を設定するためのコールバック関数。返ってくる引数はfit,full,free
966
+ - `onFreeHeightChange` function
967
+ heightの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数は単位付きの文字列
968
+
969
+ ```
970
+ <BlockHeight
971
+ attributes={attributes}
972
+ isMobile={isMobile}
973
+ onHeightChange={(value) => {
974
+ setAttributes(
975
+ !isMobile
976
+ ? { default_val: { ...default_val, height_val: value } }
977
+ : { mobile_val: { ...mobile_val, height_val: value } },
978
+ );
979
+ }}
980
+ onFreeHeightChange={(value) => {
981
+ setAttributes(
982
+ !isMobile
983
+ ? { default_val: { ...default_val, free_height: value } }
984
+ : { mobile_val: { ...mobile_val, free_height: value } },
985
+ );
986
+ }}
987
+ />
988
+ ```
989
+
990
+ ## 色コードを変換する関数
991
+ ### hslToRgb16
992
+ Hslオブジェクトの値を与えると#000000型のRGB表記に変換するためのユーティリティ関数です。
993
+ #### 引数
994
+ - `hue` number
995
+ Hslオブジェクトのhueの値
996
+ - `saturation` number
997
+ Hslオブジェクトのsaturationの値
998
+ - `lightness` number
999
+ Hslオブジェクトのlightnessの値
1000
+
1001
+ ### rgb16ToHsl
1002
+ 16進数のRGB表記を受け取り、それをHslオブジェクトに変換するためのユーティリティ関数です。
1003
+ #### 引数
1004
+ - `strRgb16` string
1005
+ #000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
1006
+   
1007
+
1008
+ ### HexToRGB
1009
+ 16進数のRGB表記を受け取り、それを10進数のRGBオブジェクトに変換するためのユーティリティ関数です。
1010
+ #### 引数
1011
+ - `strRgb16` string
1012
+ #000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
1013
+
1014
+ ## 指定した投稿タイプの投稿に含まれる特定のブロックの属性を書き換えるコンポーネント
1015
+ ### UpdateAllPostsBlockAttributes
1016
+ #### 引数
1017
+ - `postType` string
1018
+ WordPressのRestAPIで使用するrest_baseに相当する文字列
1019
+ - `blockName` string
1020
+ ブロックの名称。投稿本文に含まれるブロックの名前を指定
1021
+ - `newAttributes` object
1022
+ 新しいブロックの属性をオブジェクトで指定
1023
+ - `onProcessStart` function
1024
+ 処理が完了したときに実行するコールバック関数
1025
+ - `onProcessEnd` function
1026
+ 処理が完了したときに実行するコールバック関数
1027
+ - `onProcessCancel` function
1028
+ 処理が中断されたときに実行するコールバック関数
1029
+ ```
1030
+ <UpdateAllPostsBlockAttributes
1031
+ postType={rest_base}
1032
+ blockName="itmar/markdown-block"
1033
+ newAttributes={{
1034
+ element_style_obj: element_style_obj,
1035
+ backgroundColor: backgroundColor,
1036
+ backgroundGradient: backgroundGradient,
1037
+ default_val: default_val,
1038
+ mobile_val: mobile_val,
1039
+ radius_value: radius_value,
1040
+ border_value: border_value,
1041
+ }}
1042
+ onProcessStart={startProgress}
1043
+ onProcessEnd={closeProgress}
1044
+ onProcessCancel={() => {
1045
+ dispatch("core/notices").createNotice(
1046
+ "error",
1047
+ __("Processing was interrupted.", "markdown-block"),
1048
+ { type: "snackbar" },
1049
+ );
1050
+ }}
1051
+ />
1052
+ ```
1053
+
1054
+ ## インナーブロックを取得・操作する関数
1055
+ ### `useTargetBlocks`
1056
+
1057
+ `useTargetBlocks` は、**Gutenberg ブロックエディタ上で同じ親ブロック内にある特定の名前・属性を持つブロックを取得する React フック**です。
1058
+ ネストされたブロックの検索にも対応しています。
1059
+
1060
+
1061
+
1062
+ #### 🧩 概要
1063
+
1064
+ このカスタムフックは、次のような用途に使えます:
1065
+
1066
+ - 同じ親ブロックの中から特定のブロックを配列で取得
1067
+ - 属性値でフィルタして一致する **1件のブロック**を取得
1068
+ - ネストされたブロックも含めて取得(オプション)
1069
+
1070
+ ---
1071
+
1072
+ #### ✅ 使い方
1073
+
1074
+ ##### 基本構文
1075
+
1076
+ ```js
1077
+ const result = useTargetBlocks(clientId, blockName, attributeFilter?, includeNested?);
1078
+ ```
1079
+
1080
+ | 引数 | 型 | 説明 |
1081
+ |------|----|------|
1082
+ | `clientId` | `string` | 呼び出し元(自分自身)の `clientId`。`useBlockEditContext()` などで取得 |
1083
+ | `blockName` | `string` | 対象ブロック名(例: `'itmar/design-text-ctrl'`) |
1084
+ | `attributeFilter` | `object|null` | オプション:指定した属性に一致するブロックを1件だけ取得(例: `{ inputName: 'address' }`) |
1085
+ | `includeNested` | `boolean` | オプション:`true` でネストされたブロックも対象に含める(デフォルト: `false`) |
1086
+
1087
+ ---
1088
+
1089
+ #### 🧪 使用例
1090
+
1091
+ ##### 1. 全ての `itmar/design-text-ctrl` ブロックを取得(自分を除く)
1092
+
1093
+ ```js
1094
+ import { useBlockEditContext } from '@wordpress/block-editor';
1095
+ import { useTargetBlocks } from '@your-scope/use-target-blocks';
1096
+
1097
+ const MyComponent = () => {
1098
+ const { clientId } = useBlockEditContext();
1099
+
1100
+ const blocks = useTargetBlocks(clientId, 'itmar/design-text-ctrl');
1101
+
1102
+ return <div>対象ブロック数: {blocks.length}</div>;
1103
+ };
1104
+ ```
1105
+
1106
+ ---
1107
+
1108
+ ##### 2. `inputName: 'address'` を持つブロックを1件だけ取得
1109
+
1110
+ ```js
1111
+ const targetBlock = useTargetBlocks(clientId, 'itmar/design-text-ctrl', {
1112
+ inputName: 'address',
1113
+ });
1114
+
1115
+ if (targetBlock) {
1116
+ console.log('Address block found:', targetBlock.clientId);
1117
+ }
1118
+ ```
1119
+
1120
+ ---
1121
+
1122
+ ##### 3. ネストされたブロックも含めて検索
1123
+
1124
+ ```js
1125
+ const nestedBlock = useTargetBlocks(
1126
+ clientId,
1127
+ 'itmar/design-text-ctrl',
1128
+ { inputName: 'address' },
1129
+ true // ネスト含める
1130
+ );
1131
+ ```
1132
+
1133
+ ---
1134
+
1135
+ #### 📁 内部で使用しているもの
1136
+
1137
+ - `@wordpress/data`
1138
+ - `@wordpress/block-editor`
1139
+ - `useSelect`, `getBlockRootClientId`, `getBlock`, `getBlocks`
1140
+
1141
+ ---
1142
+
1143
+ #### 🔁 補助関数:`flattenBlocks`
1144
+
1145
+ ネストされたブロックを平坦化するためのユーティリティも内蔵:
1146
+
1147
+ ```js
1148
+ const flattenBlocks = (blocks) => {
1149
+ return blocks.reduce((acc, block) => {
1150
+ acc.push(block);
1151
+ if (block.innerBlocks?.length > 0) {
1152
+ acc.push(...flattenBlocks(block.innerBlocks));
1153
+ }
1154
+ return acc;
1155
+ }, []);
1156
+ };
1157
+ ```
1158
+
1159
+ ---
1160
+
1161
+ #### 🛡️ 注意事項
1162
+
1163
+ - このフックは **Gutenberg ブロックエディタ内でのみ使用可能**です。
1164
+ - `useTargetBlocks()` は **React フック**です。関数やイベントハンドラ内部では直接呼び出せません。
1165
+
1166
+ ---
1167
+
1168
+ ### `serializeBlockTree`
1169
+
1170
+ 指定された Gutenberg ブロックオブジェクトを、**ネスト構造を保ったままプレーンな JSON 形式に変換(保存用)**します。
1171
+
1172
+ #### ✅ 使い方
1173
+
1174
+ ```js
1175
+ import { serializeBlockTree } from '@your-scope/block-tree-utils';
1176
+
1177
+ const json = serializeBlockTree(block);
1178
+ ```
1179
+
1180
+ #### 📥 入力
1181
+
1182
+ - `block`: Gutenberg ブロックオブジェクト(`name`, `attributes`, `innerBlocks` を含む)
1183
+
1184
+ #### 📤 出力
1185
+
1186
+ ```json
1187
+ {
1188
+ "blockName": "core/group",
1189
+ "attributes": { ... },
1190
+ "innerBlocks": [
1191
+ {
1192
+ "blockName": "core/paragraph",
1193
+ "attributes": { ... },
1194
+ "innerBlocks": []
1195
+ }
1196
+ ]
1197
+ }
1198
+ ```
1199
+
1200
+ ---
1201
+
1202
+ ### `createBlockTree`
1203
+
1204
+ `serializeBlockTree` によって得られた JSON 構造を、**`createBlock()` に渡せる Gutenberg ブロックオブジェクトに再構築**します。
1205
+
1206
+ #### ✅ 使い方
1207
+
1208
+ ```js
1209
+ import { createBlockTree } from '@your-scope/block-tree-utils';
1210
+ import { createBlock } from '@wordpress/blocks';
1211
+
1212
+ const wpBlock = createBlockTree(savedJson);
1213
+ ```
1214
+
1215
+ #### 📥 入力
1216
+
1217
+ - `savedJson`: `serializeBlockTree` で生成されたブロックデータ
1218
+
1219
+ #### 📤 出力
1220
+
1221
+ - `createBlock(name, attributes, innerBlocks)` の形で再帰的に構成された WP ブロックオブジェクト
1222
+
1223
+ ---
1224
+
1225
+ ### `flattenBlocks`
1226
+
1227
+ Gutenberg のネストされたブロック配列を、**1階層の配列としてフラットに展開**します。
1228
+ ブロック構成内にあるすべてのブロック(ネスト含む)を一括走査する際に便利です。
1229
+
1230
+ #### ✅ 使い方
1231
+
1232
+ ```js
1233
+ import { flattenBlocks } from '@your-scope/block-tree-utils';
1234
+
1235
+ const flat = flattenBlocks(innerBlocks);
1236
+ ```
1237
+
1238
+ #### 📥 入力
1239
+
1240
+ - `innerBlocks`: Gutenberg のブロック配列(`innerBlocks` を含む構造)
1241
+
1242
+ #### 📤 出力
1243
+
1244
+ - 平坦化されたブロック配列(元の構造は保持しない)
1245
+
1246
+ ---
1247
+
1248
+ ## 🧪 使用例
1249
+
1250
+ ```js
1251
+ import {
1252
+ serializeBlockTree,
1253
+ createBlockTree,
1254
+ flattenBlocks,
1255
+ } from '@your-scope/block-tree-utils';
1256
+
1257
+ const savedData = blocks.map(serializeBlockTree);
1258
+ const restored = savedData.map(createBlockTree);
1259
+ const flatList = flattenBlocks(restored);
1260
+ ```
1261
+
1262
+ ---
1263
+
1264
+
1265
+ ## 日本郵便番号から住所を取得するユーティリティ関数
1266
+ ### `fetchZipToAddress`
1267
+ `fetchZipToAddress` は、[zipcloud](https://zipcloud.ibsnet.co.jp) API を使用して、日本の郵便番号から都道府県・市区町村・町域の住所を非同期で取得する JavaScript 関数です。
1268
+ Gutenberg ブロック開発やフロントエンドフォーム処理において、郵便番号による住所補完機能を簡単に実装できます。
1269
+
1270
+
1271
+ #### 使用例(React / jQuery 共通)
1272
+
1273
+ ```js
1274
+ const addressObj = await fetchZipToAddress("1600022");
1275
+ if (addressObj) {
1276
+ const fullAddress = addressObj.address1 + addressObj.address2 + addressObj.address3;
1277
+ console.log(fullAddress); // 例: 東京都新宿区新宿
1278
+ }
1279
+ ```
1280
+
1281
+ ---
1282
+
1283
+ #### 🔐 バリデーション仕様
1284
+
1285
+ - 郵便番号は「**ハイフンなしの7桁の数字**」形式のみ許可されます(例: `1234567`)。
1286
+ - 無効な形式や一致しない郵便番号、通信エラー時には `null` を返します。
1287
+ - エラーはすべて `alert()` によってユーザーに通知されます。
1288
+
1289
+ ---
1290
+
1291
+ #### 🔁 返り値の形式(成功時)
1292
+
1293
+ ```json
1294
+ {
1295
+ "zipcode": "1600022",
1296
+ "prefcode": "13",
1297
+ "address1": "東京都",
1298
+ "address2": "新宿区",
1299
+ "address3": "新宿",
1300
+ ...
1301
+ }
1302
+ ```
1303
+
1304
+ ---
1305
+
1306
+ #### 🌐 使用API
1307
+
1308
+ 本ライブラリは以下の外部APIを使用しています:
1309
+
1310
+ - **zipcloud(日本郵便公式APIラッパー)**
1311
+ - URL: [https://zipcloud.ibsnet.co.jp](https://zipcloud.ibsnet.co.jp)
1312
+ - ドキュメント: [https://zipcloud.ibsnet.co.jp/doc/api](https://zipcloud.ibsnet.co.jp/doc/api)
1313
+
1314
+ #### ⚠️ ご注意
1315
+
1316
+ - この API は外部サービス(zipcloud)に依存しており、アクセス過多による制限や仕様変更の可能性があります。
1317
+ - 本ライブラリを利用する場合は、[zipcloud利用規約](https://zipcloud.ibsnet.co.jp/doc/rule) を必ずご確認・順守してください。
1318
+
1319
+ ---
1320
+
1321
+ #### 🧩 WordPress / Gutenberg との統合例
1322
+
1323
+ ```js
1324
+ const handleZipSearch = async () => {
1325
+ const result = await fetchZipToAddress(zipValue);
1326
+ if (result) {
1327
+ setAttributes({ inputValue: result.address1 + result.address2 + result.address3 });
1328
+ }
1329
+ };
1330
+ ```
1331
+
1332
+ ## バリデーションチェックを行う関数
1333
+ ### `isValidUrlWithUrlApi`
1334
+ `isValidUrlWithUrlApi` は、引数で与えた文字列がURLの形式であるかどうかのバリデーションチェックをします。
1335
+
1336
+
1337
+ #### 使用例
1338
+ ```
1339
+ if (isValidUrlWithUrlApi(headingContent)) {
1340
+ setAttributes({ selectedPageUrl: headingContent });
1341
+ }
1342
+ ```
1343
+
1344
+ ## データのフォーマットを設定、表示するコンポーネント
1345
+
1346
+ Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数です。
1347
+
1348
+ ---
1349
+
1350
+ ### 概要
1351
+
1352
+ このライブラリは、以下の2つの機能を提供します:
1353
+
1354
+ 1. **`<FormatSelectControl />`**
1355
+ ブロックエディターの「インスペクター設定」内で、表示形式を選択する UI コンポーネント。
1356
+
1357
+ 2. **`displayFormated()`**
1358
+ 保存された設定に基づき、日付・数値・自由文字列の値を整形する表示用関数。
1359
+
1360
+ ---
1361
+
1362
+ ### `FormatSelectControl`
1363
+
1364
+ #### 説明
1365
+
1366
+ ブロック編集画面で「日付」「数値」「自由文字列」のいずれかの表示形式を選択・設定可能にする `PanelBody` コンポーネントです。
1367
+
1368
+ #### 引数
1369
+
1370
+ | 名前 | 型 | 必須 | 説明 |
1371
+ |------|----|------|------|
1372
+ | `titleType` | `"date"` \| `"plaine"` \| `"user"` | ✅ | フォーマット対象の種類を指定します。 |
1373
+ | `userFormat` | `string` | ✅ | 現在選択中のフォーマットのキー(例: `"num_comma"`)。 |
1374
+ | `freeStrFormat` | `string` | ✅ | 自由書式入力時の書式文字列(例: `"¥%s円"`)。 |
1375
+ | `decimal` | `number` | ✅ | 数値の小数点以下の桁数(0〜5) |
1376
+ | `onFormatChange` | `(info: FormatSettings) => void` | ✅ | 各設定項目の更新を通知するコールバック |
1377
+
1378
+ #### フォーマットオプション例(SelectControlで使用)
1379
+
1380
+ - 日付形式:`Y-m-d H:i:s`、`Y年n月j日 (l)` など
1381
+ - 数値形式:カンマ区切りあり/なし、金額表示など
1382
+ - 自由書式:`"%s"` を含む文字列で、実際の値が置換されます
1383
+
1384
+ ---
1385
+
1386
+ ### `displayFormated(content, userFormat, freeStrFormat, decimal)`
1387
+
1388
+ #### 説明
1389
+
1390
+ 指定されたフォーマットに従って、値を整形して文字列として返します。
1391
+
1392
+ #### 引数
1393
+
1394
+ | 名前 | 型 | 説明 |
1395
+ |------|----|------|
1396
+ | `content` | `string` \| `number` | 整形対象の生の値 |
1397
+ | `userFormat` | `string` | 日付または数値のフォーマットキー(例: `"num_comma"`、`"Y-m-d"`) |
1398
+ | `freeStrFormat` | `string` | `"%s"` を含む自由書式文字列 |
1399
+ | `decimal` | `number` | 小数点以下の桁数指定(`0` なら整数扱い) |
1400
+
1401
+ #### 戻り値
1402
+
1403
+ 整形後の文字列(`string`)
1404
+
1405
+ ---
1406
+
1407
+ ### 使用例
1408
+
1409
+ #### 1. コンポーネントの設置例
1410
+
1411
+ ```jsx
1412
+ <FormatSelectControl
1413
+ titleType="plaine"
1414
+ userFormat={attributes.userFormat}
1415
+ freeStrFormat={attributes.freeStrFormat}
1416
+ decimal={attributes.decimal}
1417
+ onFormatChange={(newSettings) => setAttributes(newSettings)}
1418
+ />
1419
+ ```
1420
+ #### 2. 表示用フォーマット関数の使用例
1421
+ ```
1422
+ const display = displayFormated(
1423
+ 1234567.89,
1424
+ attributes.userFormat,
1425
+ attributes.freeStrFormat,
1426
+ attributes.decimal
1427
+ );
1428
+ // → "1,234,567.89"(例: num_comma + decimal: 2 の場合)
1429
+ ```
1430
+
1431
+ ### 注意事項・ルール
1432
+ ✅ 自由書式(freeStrFormat)について
1433
+ - %s を含まない文字列は 置換せず、値をそのまま返します
1434
+ - 例:"¥%s" → "¥1234"、"Total: " → "1234"(%s なし)
1435
+
1436
+ ✅ 日付フォーマットの安全性
1437
+ - userFormat が dateFormats に存在しない限り format() は呼び出されません(安全)
1438
+ - Gutenberg 標準の PHP形式に準拠(例:Y-m-d, F j, Y)
1439
+
1440
+ ✅ 数値フォーマットの条件
1441
+ - decimal が 1 以上のときは minimumFractionDigits / maximumFractionDigits が指定され、常に小数点以下を表示
1442
+ - decimal = 0 の場合は整数として表示
1443
+
1444
+
1445
+