-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
block.json
996 lines (996 loc) · 38.9 KB
/
block.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
{
"title": "JSON schema for WordPress blocks",
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"//": {
"reference": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/",
"attributesReference": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/",
"contextReference": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-context/",
"supportsReference": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/",
"registerReference": "https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#example-optional"
}
},
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"apiVersion": {
"description": "The version of the Block API used by the block. The most recent version is 3 and it was introduced in WordPress 6.3.\n\n See the API versions documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/ for more details.",
"type": "integer",
"enum": [ 1, 2, 3 ],
"default": 1
},
"name": {
"description": "The name for a block is a unique string that identifies a block. Names have to be structured as `namespace/block-name`, where namespace is the name of your plugin or theme.",
"type": "string",
"pattern": "^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$"
},
"__experimental": {
"description": "The name of the experiment this block is a part of, or boolean true if there is no specific experiment name.",
"anyOf": [
{
"type": "string"
},
{
"type": "boolean"
}
]
},
"title": {
"description": "This is the display title for your block, which can be translated with our translation functions. The block inserter will show this name.",
"type": "string"
},
"category": {
"description": "Blocks are grouped into categories to help users browse and discover them.\n Core provided categories are: text, media, design, widgets, theme, embed\n\nPlugins and Themes can also register custom block categories.\n\nhttps://developer.wordpress.org/block-editor/reference-guides/filters/block-filters/#managing-block-categories",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"text",
"media",
"design",
"widgets",
"theme",
"embed"
]
}
]
},
"parent": {
"description": "Setting parent lets a block require that it is only available when nested within the specified blocks. For example, you might want to allow an ‘Add to Cart’ block to only be available within a ‘Product’ block.",
"type": "array",
"items": {
"type": "string"
}
},
"ancestor": {
"description": "The `ancestor` property makes a block available inside the specified block types at any position of the ancestor block subtree. That allows, for example, to place a ‘Comment Content’ block inside a ‘Column’ block, as long as ‘Column’ is somewhere within a ‘Comment Template’ block.",
"type": "array",
"items": {
"type": "string"
}
},
"allowedBlocks": {
"description": "The `allowedBlocks` property specifies that only the listed block types can be the children of this block. For example, a ‘List’ block allows only ‘List Item’ blocks as direct children.",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "An icon property should be specified to make it easier to identify a block. These can be any of WordPress’ Dashicons (slug serving also as a fallback in non-js contexts).",
"type": "string"
},
"description": {
"description": "This is a short description for your block, which can be translated with our translation functions. This will be shown in the block inspector.",
"type": "string"
},
"keywords": {
"description": "Sometimes a block could have aliases that help users discover it while searching. For example, an image block could also want to be discovered by photo. You can do so by providing an array of unlimited terms (which are translated).",
"type": "array",
"items": {
"type": "string"
}
},
"version": {
"description": "The current version number of the block, such as 1.0 or 1.0.3. It’s similar to how plugins are versioned. This field might be used with block assets to control cache invalidation, and when the block author omits it, then the installed version of WordPress is used instead.",
"type": "string"
},
"textdomain": {
"description": "The gettext text domain of the plugin/block. More information can be found in the Text Domain section of the How to Internationalize your Plugin page.\n\nhttps://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/",
"type": "string"
},
"attributes": {
"description": "Attributes provide the structured data needs of a block. They can exist in different forms when they are serialized, but they are declared together under a common interface.\n\nSee the attributes documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/ for more details.",
"type": "object",
"patternProperties": {
"[a-zA-Z]": {
"type": "object",
"properties": {
"type": {
"description": "The type indicates the type of data that is stored by the attribute. It does not indicate where the data is stored, which is defined by the source field.\n\nA type is required, unless an enum is provided. A type can be used with an enum.\n\nNote that the validity of an object is determined by your source. For an example, see the query details below.",
"oneOf": [
{
"type": "string",
"enum": [
"null",
"boolean",
"object",
"array",
"string",
"rich-text",
"integer",
"number"
]
},
{
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"null",
"boolean",
"object",
"array",
"string",
"integer",
"number"
]
}
}
]
},
"enum": {
"description": "An attribute can be defined as one of a fixed set of values. This is specified by an enum, which contains an array of allowed values:",
"type": "array",
"items": {
"oneOf": [
{ "type": "boolean" },
{ "type": "number" },
{ "type": "string" }
]
}
},
"source": {
"description": "Attribute sources are used to define how the attribute values are extracted from saved post content. They provide a mechanism to map from the saved markup to a JavaScript representation of a block.",
"type": "string",
"enum": [
"attribute",
"text",
"rich-text",
"html",
"raw",
"query",
"meta"
]
},
"selector": {
"description": "The selector can be an HTML tag, or anything queryable with querySelector, such as a class or id attribute. Examples are given below.\n\nFor example, a selector of img will match an img element, and img.class will match an img element that has a class of class.",
"type": "string"
},
"attribute": {
"description": "Use an attribute source to extract the value from an attribute in the markup. The attribute is specified by the attribute field, which must be supplied.\n\nExample: Extract the src attribute from an image found in the block’s markup.",
"type": "string"
},
"query": {
"description": "Use query to extract an array of values from markup. Entries of the array are determined by the selector argument, where each matched element within the block will have an entry structured corresponding to the second argument, an object of attribute sources.",
"type": "object"
},
"meta": {
"description": "Although attributes may be obtained from a post’s meta, meta attribute sources are considered deprecated; EntityProvider and related hook APIs should be used instead, as shown in the Create Meta Block how-to here:\n\nhttps://developer.wordpress.org/block-editor/how-to-guides/metabox/#step-2-add-meta-block",
"type": "string"
},
"default": {
"description": "A block attribute can contain a default value, which will be used if the type and source do not match anything within the block content.\n\nThe value is provided by the default field, and the value should match the expected format of the attribute."
}
},
"anyOf": [
{ "required": [ "type" ] },
{ "required": [ "enum" ] }
]
}
},
"additionalProperties": false
},
"providesContext": {
"description": "Context provided for available access by descendants of blocks of this type, in the form of an object which maps a context name to one of the block’s own attribute.\n\nSee the block context documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-context/ for more details.",
"type": "object",
"patternProperties": {
"[a-zA-Z]": {
"type": "string"
}
}
},
"usesContext": {
"description": "Array of the names of context values to inherit from an ancestor provider.\n\nSee the block context documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-context/ for more details.",
"type": "array",
"items": {
"type": "string"
}
},
"supports": {
"description": "It contains as set of options to control features used in the editor. See the supports documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/ for more details.",
"type": "object",
"properties": {
"anchor": {
"description": "Anchors let you link directly to a specific block on a page. This property adds a field to define an id for the block and a button to copy the direct link.",
"type": "boolean",
"default": false
},
"align": {
"description": "This property adds block controls which allow to change block’s alignment.",
"oneOf": [
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"wide",
"full",
"left",
"center",
"right"
]
}
}
],
"default": false
},
"alignWide": {
"description": "This property allows to enable wide alignment for your theme. To disable this behavior for a single block, set this flag to false.",
"type": "boolean",
"default": true
},
"ariaLabel": {
"description": "ARIA-labels let you define an accessible label for elements. This property allows enabling the definition of an aria-label for the block, without exposing a UI field.",
"type": "boolean",
"default": false
},
"className": {
"description": "By default, the class .wp-block-your-block-name is added to the root element of your saved markup. This helps having a consistent mechanism for styling blocks that themes and plugins can rely on. If, for whatever reason, a class is not desired on the markup, this functionality can be disabled.",
"type": "boolean",
"default": true
},
"color": {
"description": "This value signals that a block supports some of the properties related to color. When it does, the block editor will show UI controls for the user to set their values.\n\nNote that the background and text keys have a default value of true, so if the color property is present they’ll also be considered enabled",
"type": "object",
"properties": {
"background": {
"description": "This property adds UI controls which allow the user to apply a solid background color to a block.\n\nWhen color support is declared, this property is enabled by default (along with text), so simply setting color will enable background color.\n\nTo disable background support while keeping other color supports enabled, set to false.\n\nWhen the block declares support for color.background, its attributes definition is extended to include two new attributes: backgroundColor and style",
"type": "boolean",
"default": true
},
"gradients": {
"description": "This property adds UI controls which allow the user to apply a gradient background to a block.\n\nGradient presets are sourced from editor-gradient-presets theme support.\n\nWhen the block declares support for color.gradient, its attributes definition is extended to include two new attributes: gradient and style",
"type": "boolean",
"default": false
},
"link": {
"description": "This property adds block controls which allow the user to set link color in a block, link color is disabled by default.\n\nLink color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.link, its attributes definition is extended to include the style attribute",
"type": "boolean",
"default": false
},
"text": {
"description": "This property adds block controls which allow the user to set text color in a block.\n\nWhen color support is declared, this property is enabled by default (along with background), so simply setting color will enable text color.\n\nText color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.text, its attributes definition is extended to include two new attributes: textColor and style",
"type": "boolean",
"default": true
},
"heading": {
"description": "This property adds block controls which allow the user to set heading colors in a block. Heading color is disabled by default.\n\nHeading color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.heading, its attributes definition is extended to include the style attribute",
"type": "boolean",
"default": false
},
"button": {
"description": "This property adds block controls which allow the user to set button colors in a block. Button color is disabled by default.\n\nButton color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.button, its attributes definition is extended to include the style attribute",
"type": "boolean",
"default": false
},
"enableContrastChecker": {
"description": "Determines whether the contrast checker widget displays in the block editor UI.\n\nThe contrast checker appears only if the block declares support for color. It tests the readability of color combinations and warns if there is a potential issue. The property is enabled by default.\n\nSet to `false` to explicitly disable.",
"type": "boolean",
"default": true
}
}
},
"customClassName": {
"description": "This property adds a field to define a custom className for the block’s wrapper.",
"type": "boolean",
"default": true
},
"dimensions": {
"description": "This value signals that a block supports some of the CSS style properties related to dimensions. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific dimensions property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"aspectRatio": {
"description": "Allow blocks to define an aspect ratio value.",
"type": "boolean",
"default": false
},
"minHeight": {
"description": "Allow blocks to define a minimum height value.",
"type": "boolean",
"default": false
}
}
},
"filter": {
"description": "This value signals that a block supports some of the properties related to filters. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific filter property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"duotone": {
"description": "Allow blocks to define a duotone filter.",
"type": "boolean",
"default": false
}
}
},
"background": {
"description": "This value signals that a block supports some of the CSS style properties related to background. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific background property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"backgroundImage": {
"description": "Allow blocks to define a background image.",
"type": "boolean",
"default": false
},
"backgroundSize": {
"description": "Allow blocks to define values related to the size of a background image, including size, position, and repeat controls",
"type": "boolean",
"default": false
}
}
},
"html": {
"description": "By default, a block’s markup can be edited individually. To disable this behavior, set html to false.",
"type": "boolean",
"default": true
},
"inserter": {
"description": "By default, all blocks will appear in the inserter, block transforms menu, Style Book, etc. To hide a block from all parts of the user interface so that it can only be inserted programmatically, set inserter to false.",
"type": "boolean",
"default": true
},
"renaming": {
"description": "By default, a block can be renamed by a user from the block 'Options' dropdown or the 'Advanced' panel. To disable this behavior, set renaming to false.",
"type": "boolean",
"default": true
},
"layout": {
"description": "This value only applies to blocks that are containers for inner blocks. If set to `true` the layout type will be `flow`. For other layout types it's necessary to set the `type` explicitly inside the `default` object.",
"oneOf": [
{ "type": "boolean" },
{
"type": "object",
"properties": {
"default": {
"description": "Allows setting the `type` property to define what layout type is default for the block, and also default values for any properties inherent to that layout type, e.g., for a `flex` layout, a default value can be set for `flexWrap`.",
"type": "object",
"properties": {
"type": {
"description": "The layout type.",
"type": "string",
"enum": [
"constrained",
"grid",
"flex"
]
},
"contentSize": {
"description": "The content size used on all children.",
"type": "string"
},
"wideSize": {
"description": "The wide size used on alignwide children.",
"type": "string"
},
"justifyContent": {
"description": "Content justification value.",
"type": "string",
"enum": [
"right",
"center",
"space-between",
"left",
"stretch"
]
},
"orientation": {
"description": "The orientation of the layout.",
"type": "string",
"enum": [ "horizontal", "vertical" ]
},
"flexWrap": {
"description": "The flex wrap value.",
"type": "string",
"enum": [ "wrap", "nowrap" ]
},
"verticalAlignment": {
"description": "The vertical alignment value.",
"type": "string",
"enum": [
"top",
"center",
"bottom",
"space-between",
"stretch"
]
},
"minimumColumnWidth": {
"description": "The minimum column width value.",
"type": "string"
},
"columnCount": {
"description": "The column count value.",
"type": "number"
}
}
},
"allowSwitching": {
"description": "Exposes a switcher control that allows toggling between all existing layout types.",
"type": "boolean",
"default": false
},
"allowEditing": {
"description": "Determines display of layout controls in the block sidebar. If set to false, layout controls will be hidden.",
"type": "boolean",
"default": true
},
"allowInheriting": {
"description": "For the `flow` layout type only, determines display of the `Inner blocks use content width` toggle.",
"type": "boolean",
"default": true
},
"allowSizingOnChildren": {
"description": "For the `flex` layout type only, determines display of sizing controls (Fit/Fill/Fixed) on all child blocks of the flex block.",
"type": "boolean",
"default": false
},
"allowVerticalAlignment": {
"description": "For the `flex` layout type only, determines display of vertical alignment controls in the block toolbar.",
"type": "boolean",
"default": true
},
"allowJustification": {
"description": "For the `flex` layout type, determines display of justification controls in the block toolbar and block sidebar. For the `constrained` layout type, determines display of justification control in the block sidebar.",
"type": "boolean",
"default": true
},
"allowOrientation": {
"description": "For the `flex` layout type only, determines display of the orientation control in the block toolbar.",
"type": "boolean",
"default": true
},
"allowCustomContentAndWideSize": {
"description": "For the `constrained` layout type only, determines display of the custom content and wide size controls in the block sidebar.",
"type": "boolean",
"default": true
}
}
}
],
"default": false
},
"multiple": {
"description": "A non-multiple block can be inserted into each post, one time only. For example, the built-in ‘More’ block cannot be inserted again if it already exists in the post being edited. A non-multiple block’s icon is automatically dimmed (unclickable) to prevent multiple instances.",
"type": "boolean",
"default": true
},
"reusable": {
"description": "A block may want to disable the ability of being converted into a reusable block. By default all blocks can be converted to a reusable block. If supports reusable is set to false, the option to convert the block into a reusable block will not appear.",
"type": "boolean",
"default": true
},
"lock": {
"description": "A block may want to disable the ability to toggle the lock state. It can be locked/unlocked by a user from the block 'Options' dropdown by default. To disable this behavior, set lock to false.",
"type": "boolean",
"default": true
},
"position": {
"description": "This value signals that a block supports some of the CSS style properties related to position. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific position property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"sticky": {
"description": "Allow blocks to stick to their immediate parent when scrolling the page.",
"type": "boolean",
"default": false
}
}
},
"spacing": {
"description": "This value signals that a block supports some of the CSS style properties related to spacing. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific spacing property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"margin": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"top",
"right",
"left",
"bottom"
]
}
},
{
"type": "array",
"items": {
"type": "string",
"enum": [ "vertical", "horizontal" ]
}
}
]
},
"padding": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"top",
"right",
"left",
"bottom"
]
}
},
{
"type": "array",
"items": {
"type": "string",
"enum": [ "vertical", "horizontal" ]
}
}
]
}
}
},
"shadow": {
"description": "Allow blocks to define a box shadow.",
"oneOf": [
{
"description": "Defines whether a box shadow is enabled or not.",
"type": "boolean"
},
{
"type": "object"
}
],
"default": false
},
"typography": {
"description": "This value signals that a block supports some of the CSS style properties related to typography. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific typography property, its attributes definition is extended to include the style attribute.",
"type": "object",
"properties": {
"fontSize": {
"description": "This value signals that a block supports the font-size CSS style property. When it does, the block editor will show an UI control for the user to set its value.\n\nThe values shown in this control are the ones declared by the theme via the editor-font-sizes theme support, or the default ones if none is provided.\n\nWhen the block declares support for fontSize, its attributes definition is extended to include two new attributes: fontSize and style",
"type": "boolean",
"default": false
},
"lineHeight": {
"description": "This value signals that a block supports the line-height CSS style property. When it does, the block editor will show an UI control for the user to set its value if the theme declares support.\n\nWhen the block declares support for lineHeight, its attributes definition is extended to include a new attribute style of object type with no default assigned. It stores the custom value set by the user. The block can apply a default style by specifying its own style attribute with a default",
"type": "boolean",
"default": false
},
"textAlign": {
"description": "This property adds block toolbar controls which allow to change block's text alignment.",
"oneOf": [
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"enum": [ "left", "center", "right" ]
}
}
],
"default": false
}
}
},
"interactivity": {
"description": "Indicates if the block is using Interactivity API features.",
"oneOf": [
{
"description": "Indicates whether the block is using the Interactivity API directives.",
"type": "boolean",
"default": false
},
{
"type": "object",
"properties": {
"clientNavigation": {
"description": "Indicates whether a block is compatible with the Interactivity API client-side navigation.\n\nSet it to true only if the block is not interactive or if it is interactive using the Interactivity API. Set it to false if the block is interactive but uses vanilla JS, jQuery or another JS framework/library other than the Interactivity API.",
"type": "boolean",
"default": false
},
"interactive": {
"description": "Indicates whether the block is using the Interactivity API directives.",
"type": "boolean",
"default": false
}
}
}
]
},
"splitting": {
"description": "This property indicates whether the block can split when the Enter key is pressed or when blocks are pasted.",
"type": "boolean",
"default": false
}
},
"additionalProperties": true
},
"selectors": {
"description": "Provides custom CSS selectors and mappings for the block. Selectors may be set for the block itself or per-feature e.g. typography. Custom selectors per feature or sub-feature, allow different block styles to be applied to different elements within the block.",
"type": "object",
"properties": {
"root": {
"description": "The primary CSS class to apply to the block. This replaces the `.wp-block-name` class if set.",
"type": "string"
},
"border": {
"description": "Custom CSS selector used to generate rules for the block's theme.json border styles.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"root": { "type": "string" },
"color": { "type": "string" },
"radius": { "type": "string" },
"style": { "type": "string" },
"width": { "type": "string" }
}
}
]
},
"color": {
"description": "Custom CSS selector used to generate rules for the block's theme.json color styles.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"root": { "type": "string" },
"text": { "type": "string" },
"background": { "type": "string" }
}
}
]
},
"dimensions": {
"description": "Custom CSS selector used to generate rules for the block's theme.json dimensions styles.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"root": { "type": "string" },
"aspectRatio": { "type": "string" },
"minHeight": { "type": "string" }
}
}
]
},
"spacing": {
"description": "Custom CSS selector used to generate rules for the block's theme.json spacing styles.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"root": { "type": "string" },
"blockGap": { "type": "string" },
"padding": { "type": "string" },
"margin": { "type": "string" }
}
}
]
},
"typography": {
"description": "Custom CSS selector used to generate rules for the block's theme.json typography styles.",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"root": { "type": "string" },
"fontFamily": { "type": "string" },
"fontSize": { "type": "string" },
"fontStyle": { "type": "string" },
"fontWeight": { "type": "string" },
"lineHeight": { "type": "string" },
"letterSpacing": { "type": "string" },
"textDecoration": { "type": "string" },
"textTransform": { "type": "string" }
}
}
]
}
}
},
"styles": {
"description": "Block styles can be used to provide alternative styles to block. It works by adding a class name to the block’s wrapper. Using CSS, a theme developer can target the class name for the block style if it is selected.\n\nPlugins and Themes can also register custom block style for existing blocks.\n\nhttps://developer.wordpress.org/block-editor/reference-guides/block-api/block-styles",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"isDefault": {
"type": "boolean",
"default": false
}
},
"required": [ "name", "label" ],
"additionalProperties": false
}
},
"example": {
"description": "It provides structured example data for the block. This data is used to construct a preview for the block to be shown in the Inspector Help Panel when the user mouses over the block.\n\nSee the example documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#example-optional for more details.",
"type": "object",
"properties": {
"viewportWidth": {
"description": "The viewportWidth controls the width of the iFrame container in which the block preview will get rendered",
"type": "number",
"default": 1200
},
"attributes": {
"description": "Set the attributes for the block example",
"type": "object"
},
"innerBlocks": {
"description": "Set the inner blocks that should be used within the block example. The blocks should be defined as a nested array like this:\n\n[ { \"name\": \"core/heading\", \"attributes\": { \"content\": \"This is an Example\" } } ]\n\nWhere each block itself is an object that contains the block name, the block attributes, and the blocks inner blocks.",
"type": "array"
}
}
},
"blockHooks": {
"description": "Block Hooks allow a block to automatically insert itself next to all instances of a given block type.\n\nSee the Block Hooks documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#block-hooks-optional for more details.",
"type": "object",
"patternProperties": {
"^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$": {
"type": "string",
"enum": [ "before", "after", "firstChild", "lastChild" ]
}
},
"additionalProperties": false
},
"editorScript": {
"description": "Block type editor script definition. It will only be enqueued in the context of the editor.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"script": {
"description": "Block type frontend and editor script definition. It will be enqueued both in the editor and when viewing the content on the front of the site.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"viewScript": {
"description": "Block type frontend script definition. It will be enqueued only when viewing the content on the front of the site.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"viewScriptModule": {
"description": "Block type frontend script module definition. It will be enqueued only when viewing the content on the front of the site.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"editorStyle": {
"description": "Block type editor style definition. It will only be enqueued in the context of the editor.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"style": {
"description": "Block type frontend style definition. It will be enqueued both in the editor and when viewing the content on the front of the site.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"viewStyle": {
"description": "Block type frontend style definition. It will be enqueued only when viewing the content on the front of the site.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"variations": {
"description": "Block Variations is the API that allows a block to have similar versions of it, but all these versions share some common functionality.",
"oneOf": [
{
"description": "The path to a PHP file that returns an array of block variations.",
"type": "string"
},
{
"description": "An array of block variations.",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "The unique and machine-readable name.",
"type": "string"
},
"title": {
"description": "A human-readable variation title.",
"type": "string"
},
"description": {
"description": "A detailed variation description.",
"type": "string"
},
"category": {
"description": "A category classification, used in search interfaces to arrange block types by category.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"text",
"media",
"design",
"widgets",
"theme",
"embed"
]
}
]
},
"icon": {
"description": "An icon helping to visualize the variation. It can have the same shape as the block type.",
"type": "string"
},
"isDefault": {
"description": "Indicates whether the current variation is the default one.",
"type": "boolean",
"default": false
},
"attributes": {
"description": "Values that override block attributes.",
"type": "object"
},
"innerBlocks": {
"description": "Initial configuration of nested blocks.",
"type": "array",
"items": {
"type": "array"
}
},
"example": {
"description": "Example provides structured data for the block preview. You can set to undefined to disable the preview shown for the block type.",
"type": "object"
},
"scope": {
"description": "The list of scopes where the variation is applicable.",
"type": "array",
"items": {
"type": "string",
"enum": [ "inserter", "block", "transform" ]
},
"default": [ "inserter", "block" ]
},
"keywords": {
"description": "An array of terms (which can be translated) that help users discover the variation while searching.",
"type": "array",
"items": {
"type": "string"
}
},
"isActive": {
"description": "The list of attributes that should be compared. Each attributes will be matched and the variation will be active if all of them are matching.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [ "name", "title" ],
"additionalProperties": false
}
}
]
},
"render": {
"description": "Template file loaded on the server when rendering a block.",
"type": "string"
}
},
"required": [ "name", "title" ],
"additionalProperties": false
}