@brilo/base-blocks 0.1.41 → 0.1.43

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 (337) hide show
  1. package/build/.tsbuildinfo +1 -1
  2. package/build/blocks/compare/compare-group/types.d.ts +1 -1
  3. package/build/blocks/compare/compare-group/types.d.ts.map +1 -1
  4. package/build/blocks/compare/compare-option/types.d.ts +1 -1
  5. package/build/blocks/compare/compare-option/types.d.ts.map +1 -1
  6. package/build/blocks/core/basic-button/edit.d.ts.map +1 -1
  7. package/build/blocks/core/basic-button/edit.js +3 -3
  8. package/build/blocks/core/basic-button/factory.d.ts.map +1 -1
  9. package/build/blocks/core/basic-button/factory.js +1 -0
  10. package/build/blocks/core/basic-button/types.d.ts +1 -0
  11. package/build/blocks/core/basic-button/types.d.ts.map +1 -1
  12. package/build/blocks/core/basic-overline/edit.d.ts.map +1 -1
  13. package/build/blocks/core/basic-overline/edit.js +6 -1
  14. package/build/blocks/core/basic-overline/factory.d.ts.map +1 -1
  15. package/build/blocks/core/basic-overline/factory.js +2 -0
  16. package/build/blocks/core/basic-overline/types.d.ts +3 -1
  17. package/build/blocks/core/basic-overline/types.d.ts.map +1 -1
  18. package/build/blocks/form/form-field/edit.d.ts +1 -1
  19. package/build/blocks/form/form-field/edit.d.ts.map +1 -1
  20. package/build/blocks/form/form-field/types.d.ts +1 -1
  21. package/build/blocks/form/form-field/types.d.ts.map +1 -1
  22. package/build/blocks/gallery/gallery-item/index.d.ts +1 -1
  23. package/build/blocks/gallery/gallery-item/index.d.ts.map +1 -1
  24. package/build/blocks/groups/banner-group/index.d.ts +1 -1
  25. package/build/blocks/groups/banner-group/index.d.ts.map +1 -1
  26. package/build/blocks/groups/banner-group/types.d.ts +2 -2
  27. package/build/blocks/groups/banner-group/types.d.ts.map +1 -1
  28. package/build/blocks/groups/basic-header-group/edit.d.ts.map +1 -1
  29. package/build/blocks/groups/basic-header-group/edit.js +8 -3
  30. package/build/blocks/groups/basic-header-group/factory.js +1 -1
  31. package/build/blocks/groups/basic-header-group/types.d.ts +2 -0
  32. package/build/blocks/groups/basic-header-group/types.d.ts.map +1 -1
  33. package/build/blocks/groups/text-and-media-group/constants.d.ts +25 -0
  34. package/build/blocks/groups/text-and-media-group/constants.d.ts.map +1 -1
  35. package/build/blocks/groups/text-and-media-group/constants.js +10 -0
  36. package/build/blocks/groups/text-and-media-group/edit.d.ts.map +1 -1
  37. package/build/blocks/groups/text-and-media-group/edit.js +16 -9
  38. package/build/blocks/groups/text-and-media-group/factory.d.ts +2 -2
  39. package/build/blocks/groups/text-and-media-group/factory.d.ts.map +1 -1
  40. package/build/blocks/groups/text-and-media-group/factory.js +12 -10
  41. package/build/blocks/groups/text-and-media-group/types.d.ts +8 -3
  42. package/build/blocks/groups/text-and-media-group/types.d.ts.map +1 -1
  43. package/build/blocks/hero/hero-group/constants.d.ts +16 -0
  44. package/build/blocks/hero/hero-group/constants.d.ts.map +1 -1
  45. package/build/blocks/hero/hero-group/constants.js +7 -0
  46. package/build/blocks/hero/hero-group/edit.d.ts.map +1 -1
  47. package/build/blocks/hero/hero-group/edit.js +6 -5
  48. package/build/blocks/hero/hero-group/factory.d.ts +2 -2
  49. package/build/blocks/hero/hero-group/factory.d.ts.map +1 -1
  50. package/build/blocks/hero/hero-group/factory.js +11 -5
  51. package/build/blocks/hero/hero-group/types.d.ts +7 -4
  52. package/build/blocks/hero/hero-group/types.d.ts.map +1 -1
  53. package/build/blocks/hero/hero-item/edit.d.ts.map +1 -1
  54. package/build/blocks/hero/hero-item/edit.js +7 -2
  55. package/build/blocks/hero/hero-item/factory.d.ts.map +1 -1
  56. package/build/blocks/hero/hero-item/factory.js +1 -0
  57. package/build/blocks/hero/hero-item/types.d.ts +12 -2
  58. package/build/blocks/hero/hero-item/types.d.ts.map +1 -1
  59. package/build/blocks/link/link-item/factory.d.ts +1 -1
  60. package/build/blocks/link/link-item/factory.d.ts.map +1 -1
  61. package/build/blocks/map/map-group/types.d.ts +3 -3
  62. package/build/blocks/map/map-group/types.d.ts.map +1 -1
  63. package/build/blocks/newsletter/newsletter-form/types.d.ts +1 -1
  64. package/build/blocks/newsletter/newsletter-form/types.d.ts.map +1 -1
  65. package/build/blocks/person/person-group/types.d.ts +1 -1
  66. package/build/blocks/person/person-group/types.d.ts.map +1 -1
  67. package/build/blocks/person/person-item/constants.d.ts.map +1 -1
  68. package/build/blocks/person/person-item/types.d.ts +2 -2
  69. package/build/blocks/person/person-item/types.d.ts.map +1 -1
  70. package/build/blocks/priceplan/priceplan-group/constants.d.ts +2 -0
  71. package/build/blocks/priceplan/priceplan-group/constants.d.ts.map +1 -0
  72. package/build/blocks/priceplan/priceplan-group/constants.js +1 -0
  73. package/build/blocks/priceplan/priceplan-group/edit.d.ts +3 -0
  74. package/build/blocks/priceplan/priceplan-group/edit.d.ts.map +1 -0
  75. package/build/blocks/priceplan/priceplan-group/edit.js +16 -0
  76. package/build/blocks/priceplan/priceplan-group/factory.d.ts +5 -0
  77. package/build/blocks/priceplan/priceplan-group/factory.d.ts.map +1 -0
  78. package/build/blocks/priceplan/priceplan-group/factory.js +20 -0
  79. package/build/blocks/priceplan/priceplan-group/icon.d.ts +2 -0
  80. package/build/blocks/priceplan/priceplan-group/icon.d.ts.map +1 -0
  81. package/build/blocks/priceplan/priceplan-group/icon.js +2 -0
  82. package/build/blocks/priceplan/priceplan-group/index.d.ts +5 -0
  83. package/build/blocks/priceplan/priceplan-group/index.d.ts.map +1 -0
  84. package/build/blocks/priceplan/priceplan-group/index.js +11 -0
  85. package/build/blocks/priceplan/priceplan-group/types.d.ts +7 -0
  86. package/build/blocks/priceplan/priceplan-group/types.d.ts.map +1 -0
  87. package/build/blocks/priceplan/priceplan-group/types.js +1 -0
  88. package/build/blocks/priceplan/priceplan-item/constants.d.ts +15 -0
  89. package/build/blocks/priceplan/priceplan-item/constants.d.ts.map +1 -0
  90. package/build/blocks/priceplan/priceplan-item/constants.js +9 -0
  91. package/build/blocks/priceplan/priceplan-item/edit.d.ts +6 -0
  92. package/build/blocks/priceplan/priceplan-item/edit.d.ts.map +1 -0
  93. package/build/blocks/priceplan/priceplan-item/edit.js +30 -0
  94. package/build/blocks/priceplan/priceplan-item/factory.d.ts +7 -0
  95. package/build/blocks/priceplan/priceplan-item/factory.d.ts.map +1 -0
  96. package/build/blocks/priceplan/priceplan-item/factory.js +70 -0
  97. package/build/blocks/priceplan/priceplan-item/icon.d.ts +2 -0
  98. package/build/blocks/priceplan/priceplan-item/icon.d.ts.map +1 -0
  99. package/build/blocks/priceplan/priceplan-item/icon.js +2 -0
  100. package/build/blocks/priceplan/priceplan-item/index.d.ts +5 -0
  101. package/build/blocks/priceplan/priceplan-item/index.d.ts.map +1 -0
  102. package/build/blocks/priceplan/priceplan-item/index.js +12 -0
  103. package/build/blocks/priceplan/priceplan-item/types.d.ts +28 -0
  104. package/build/blocks/priceplan/priceplan-item/types.d.ts.map +1 -0
  105. package/build/blocks/priceplan/priceplan-item/types.js +1 -0
  106. package/build/blocks/priceplan/priceplan-list-item/constants.d.ts +8 -0
  107. package/build/blocks/priceplan/priceplan-list-item/constants.d.ts.map +1 -0
  108. package/build/blocks/priceplan/priceplan-list-item/constants.js +5 -0
  109. package/build/blocks/priceplan/priceplan-list-item/edit.d.ts +6 -0
  110. package/build/blocks/priceplan/priceplan-list-item/edit.d.ts.map +1 -0
  111. package/build/blocks/priceplan/priceplan-list-item/edit.js +17 -0
  112. package/build/blocks/priceplan/priceplan-list-item/factory.d.ts +7 -0
  113. package/build/blocks/priceplan/priceplan-list-item/factory.d.ts.map +1 -0
  114. package/build/blocks/priceplan/priceplan-list-item/factory.js +30 -0
  115. package/build/blocks/priceplan/priceplan-list-item/icon.d.ts +2 -0
  116. package/build/blocks/priceplan/priceplan-list-item/icon.d.ts.map +1 -0
  117. package/build/blocks/priceplan/priceplan-list-item/icon.js +2 -0
  118. package/build/blocks/priceplan/priceplan-list-item/index.d.ts +5 -0
  119. package/build/blocks/priceplan/priceplan-list-item/index.d.ts.map +1 -0
  120. package/build/blocks/priceplan/priceplan-list-item/index.js +5 -0
  121. package/build/blocks/priceplan/priceplan-list-item/types.d.ts +11 -0
  122. package/build/blocks/priceplan/priceplan-list-item/types.d.ts.map +1 -0
  123. package/build/blocks/priceplan/priceplan-list-item/types.js +1 -0
  124. package/build/blocks/review/review-group/constants.d.ts +16 -0
  125. package/build/blocks/review/review-group/constants.d.ts.map +1 -0
  126. package/build/blocks/review/review-group/constants.js +16 -0
  127. package/build/blocks/review/review-group/edit.d.ts +4 -0
  128. package/build/blocks/review/review-group/edit.d.ts.map +1 -0
  129. package/build/blocks/review/review-group/edit.js +28 -0
  130. package/build/blocks/review/review-group/factory.d.ts +7 -0
  131. package/build/blocks/review/review-group/factory.d.ts.map +1 -0
  132. package/build/blocks/review/review-group/factory.js +36 -0
  133. package/build/blocks/review/review-group/icon.d.ts +2 -0
  134. package/build/blocks/review/review-group/icon.d.ts.map +1 -0
  135. package/build/blocks/review/review-group/icon.js +2 -0
  136. package/build/blocks/review/review-group/index.d.ts +5 -0
  137. package/build/blocks/review/review-group/index.d.ts.map +1 -0
  138. package/build/blocks/review/review-group/index.js +6 -0
  139. package/build/blocks/review/review-group/types.d.ts +15 -0
  140. package/build/blocks/review/review-group/types.d.ts.map +1 -0
  141. package/build/blocks/review/review-group/types.js +1 -0
  142. package/build/blocks/review/review-item/constants.d.ts +2 -0
  143. package/build/blocks/review/review-item/constants.d.ts.map +1 -0
  144. package/build/blocks/review/review-item/constants.js +1 -0
  145. package/build/blocks/review/review-item/edit.d.ts +4 -0
  146. package/build/blocks/review/review-item/edit.d.ts.map +1 -0
  147. package/build/blocks/review/review-item/edit.js +29 -0
  148. package/build/blocks/review/review-item/factory.d.ts +5 -0
  149. package/build/blocks/review/review-item/factory.d.ts.map +1 -0
  150. package/build/blocks/review/review-item/factory.js +36 -0
  151. package/build/blocks/review/review-item/icon.d.ts +2 -0
  152. package/build/blocks/review/review-item/icon.d.ts.map +1 -0
  153. package/build/blocks/review/review-item/icon.js +2 -0
  154. package/build/blocks/review/review-item/index.d.ts +5 -0
  155. package/build/blocks/review/review-item/index.d.ts.map +1 -0
  156. package/build/blocks/review/review-item/index.js +5 -0
  157. package/build/blocks/review/review-item/types.d.ts +17 -0
  158. package/build/blocks/review/review-item/types.d.ts.map +1 -0
  159. package/build/blocks/review/review-item/types.js +1 -0
  160. package/build/blocks/sections/base-section/attributes.d.ts +25 -0
  161. package/build/blocks/sections/base-section/attributes.d.ts.map +1 -1
  162. package/build/blocks/sections/base-section/attributes.js +9 -0
  163. package/build/blocks/sections/base-section/controls.d.ts.map +1 -1
  164. package/build/blocks/sections/base-section/controls.js +46 -2
  165. package/build/blocks/sections/base-section/types.d.ts +24 -1
  166. package/build/blocks/sections/base-section/types.d.ts.map +1 -1
  167. package/build/blocks/share/share/index.d.ts.map +1 -1
  168. package/build/blocks/share/share/index.js +1 -0
  169. package/build/blocks/signpost/signpost-group/constants.d.ts +26 -0
  170. package/build/blocks/signpost/signpost-group/constants.d.ts.map +1 -1
  171. package/build/blocks/signpost/signpost-group/constants.js +21 -0
  172. package/build/blocks/signpost/signpost-group/edit.d.ts.map +1 -1
  173. package/build/blocks/signpost/signpost-group/edit.js +13 -8
  174. package/build/blocks/signpost/signpost-group/factory.d.ts.map +1 -1
  175. package/build/blocks/signpost/signpost-group/factory.js +5 -1
  176. package/build/blocks/signpost/signpost-group/types.d.ts +5 -1
  177. package/build/blocks/signpost/signpost-group/types.d.ts.map +1 -1
  178. package/build/blocks/step/step-group/edit.d.ts +1 -1
  179. package/build/blocks/step/step-group/edit.d.ts.map +1 -1
  180. package/build/blocks/step/step-group/factory.d.ts +1 -1
  181. package/build/blocks/step/step-group/factory.d.ts.map +1 -1
  182. package/build/blocks/step/step-group/types.d.ts +2 -2
  183. package/build/blocks/step/step-group/types.d.ts.map +1 -1
  184. package/build/blocks/step/step-item/types.d.ts +1 -1
  185. package/build/blocks/step/step-item/types.d.ts.map +1 -1
  186. package/build/blocks/testimonial/testimonial-group/index.d.ts +1 -1
  187. package/build/blocks/testimonial/testimonial-group/index.d.ts.map +1 -1
  188. package/build/blocks/testimonial/testimonial-group/types.d.ts +1 -1
  189. package/build/blocks/testimonial/testimonial-group/types.d.ts.map +1 -1
  190. package/build/blocks/text-and-form/text-and-form-text-column/edit.d.ts.map +1 -1
  191. package/build/blocks/text-and-form/text-and-form-text-column/edit.js +9 -2
  192. package/build/blocks/text-and-form/text-and-form-text-column/factory.js +1 -1
  193. package/build/blocks/text-and-form/text-and-form-text-column/types.d.ts +2 -0
  194. package/build/blocks/text-and-form/text-and-form-text-column/types.d.ts.map +1 -1
  195. package/build/blocks/usp/usp-item/types.d.ts +1 -1
  196. package/build/blocks/usp/usp-item/types.d.ts.map +1 -1
  197. package/build/blocks/video/video-group/constants.d.ts +15 -0
  198. package/build/blocks/video/video-group/constants.d.ts.map +1 -0
  199. package/build/blocks/video/video-group/constants.js +9 -0
  200. package/build/blocks/video/video-group/edit.d.ts +4 -0
  201. package/build/blocks/video/video-group/edit.d.ts.map +1 -0
  202. package/build/blocks/video/video-group/edit.js +23 -0
  203. package/build/blocks/video/video-group/factory.d.ts +5 -0
  204. package/build/blocks/video/video-group/factory.d.ts.map +1 -0
  205. package/build/blocks/video/video-group/factory.js +47 -0
  206. package/build/blocks/video/video-group/icon.d.ts +2 -0
  207. package/build/blocks/video/video-group/icon.d.ts.map +1 -0
  208. package/build/blocks/video/video-group/icon.js +2 -0
  209. package/build/blocks/video/video-group/index.d.ts +5 -0
  210. package/build/blocks/video/video-group/index.d.ts.map +1 -0
  211. package/build/blocks/video/video-group/index.js +5 -0
  212. package/build/blocks/video/video-group/types.d.ts +19 -0
  213. package/build/blocks/video/video-group/types.d.ts.map +1 -0
  214. package/build/blocks/video/video-group/types.js +1 -0
  215. package/build/components/Document/DocumentTermSelectModal.js +1 -1
  216. package/build/components/EntitySelectModal/EntitySelectModal.d.ts.map +1 -0
  217. package/build/components/Event/EventSelectModal.js +1 -1
  218. package/build/components/Event/EventTermSelectModal.js +1 -1
  219. package/build/components/Post/PostSelectModal.js +1 -1
  220. package/build/components/Post/PostTermSelectModal.js +1 -1
  221. package/build/index.d.ts +12 -0
  222. package/build/index.d.ts.map +1 -1
  223. package/build/index.js +6 -0
  224. package/build/types.d.ts +1 -1
  225. package/build/types.d.ts.map +1 -1
  226. package/package.json +1 -1
  227. package/src/blocks/compare/compare-group/types.ts +1 -1
  228. package/src/blocks/compare/compare-option/types.ts +1 -1
  229. package/src/blocks/core/basic-button/edit.tsx +29 -18
  230. package/src/blocks/core/basic-button/factory.tsx +1 -0
  231. package/src/blocks/core/basic-button/types.ts +1 -0
  232. package/src/blocks/core/basic-overline/edit.tsx +8 -0
  233. package/src/blocks/core/basic-overline/factory.tsx +2 -0
  234. package/src/blocks/core/basic-overline/types.ts +3 -1
  235. package/src/blocks/form/form-field/edit.tsx +1 -1
  236. package/src/blocks/form/form-field/types.ts +4 -4
  237. package/src/blocks/form/form-group/editor.scss +1 -0
  238. package/src/blocks/gallery/gallery-item/index.ts +1 -1
  239. package/src/blocks/groups/banner-group/index.ts +1 -1
  240. package/src/blocks/groups/banner-group/types.ts +2 -2
  241. package/src/blocks/groups/basic-header-group/edit.tsx +25 -1
  242. package/src/blocks/groups/basic-header-group/factory.tsx +1 -1
  243. package/src/blocks/groups/basic-header-group/types.ts +1 -1
  244. package/src/blocks/groups/text-and-media-group/constants.ts +11 -0
  245. package/src/blocks/groups/text-and-media-group/edit.tsx +37 -2
  246. package/src/blocks/groups/text-and-media-group/editor.scss +50 -4
  247. package/src/blocks/groups/text-and-media-group/factory.tsx +10 -4
  248. package/src/blocks/groups/text-and-media-group/types.ts +7 -1
  249. package/src/blocks/hero/hero-group/constants.ts +8 -0
  250. package/src/blocks/hero/hero-group/edit.tsx +16 -4
  251. package/src/blocks/hero/hero-group/factory.tsx +13 -4
  252. package/src/blocks/hero/hero-group/types.ts +15 -3
  253. package/src/blocks/hero/hero-item/edit.tsx +42 -2
  254. package/src/blocks/hero/hero-item/editor.scss +13 -0
  255. package/src/blocks/hero/hero-item/factory.tsx +1 -0
  256. package/src/blocks/hero/hero-item/types.ts +4 -2
  257. package/src/blocks/link/link-item/factory.tsx +1 -1
  258. package/src/blocks/map/map-group/types.ts +3 -3
  259. package/src/blocks/newsletter/newsletter-form/types.ts +1 -1
  260. package/src/blocks/person/person-group/types.ts +1 -1
  261. package/src/blocks/person/person-item/constants.ts +0 -3
  262. package/src/blocks/person/person-item/types.ts +2 -2
  263. package/src/blocks/priceplan/priceplan-group/constants.ts +1 -0
  264. package/src/blocks/priceplan/priceplan-group/edit.tsx +21 -0
  265. package/src/blocks/priceplan/priceplan-group/editor.scss +3 -0
  266. package/src/blocks/priceplan/priceplan-group/factory.tsx +23 -0
  267. package/src/blocks/priceplan/priceplan-group/icon.tsx +36 -0
  268. package/src/blocks/priceplan/priceplan-group/index.ts +15 -0
  269. package/src/blocks/priceplan/priceplan-group/types.ts +7 -0
  270. package/src/blocks/priceplan/priceplan-item/constants.ts +11 -0
  271. package/src/blocks/priceplan/priceplan-item/edit.tsx +158 -0
  272. package/src/blocks/priceplan/priceplan-item/editor.scss +131 -0
  273. package/src/blocks/priceplan/priceplan-item/factory.tsx +80 -0
  274. package/src/blocks/priceplan/priceplan-item/icon.tsx +9 -0
  275. package/src/blocks/priceplan/priceplan-item/index.ts +16 -0
  276. package/src/blocks/priceplan/priceplan-item/types.ts +34 -0
  277. package/src/blocks/priceplan/priceplan-list-item/constants.ts +6 -0
  278. package/src/blocks/priceplan/priceplan-list-item/edit.tsx +59 -0
  279. package/src/blocks/priceplan/priceplan-list-item/editor.scss +21 -0
  280. package/src/blocks/priceplan/priceplan-list-item/factory.tsx +38 -0
  281. package/src/blocks/priceplan/priceplan-list-item/icon.tsx +9 -0
  282. package/src/blocks/priceplan/priceplan-list-item/index.ts +9 -0
  283. package/src/blocks/priceplan/priceplan-list-item/types.ts +13 -0
  284. package/src/blocks/review/review-group/constants.ts +19 -0
  285. package/src/blocks/review/review-group/edit.tsx +72 -0
  286. package/src/blocks/review/review-group/editor.scss +10 -0
  287. package/src/blocks/review/review-group/factory.tsx +43 -0
  288. package/src/blocks/review/review-group/icon.tsx +12 -0
  289. package/src/blocks/review/review-group/index.ts +10 -0
  290. package/src/blocks/review/review-group/types.ts +17 -0
  291. package/src/blocks/review/review-item/constants.ts +1 -0
  292. package/src/blocks/review/review-item/edit.tsx +126 -0
  293. package/src/blocks/review/review-item/editor.scss +96 -0
  294. package/src/blocks/review/review-item/factory.tsx +40 -0
  295. package/src/blocks/review/review-item/icon.tsx +9 -0
  296. package/src/blocks/review/review-item/index.ts +9 -0
  297. package/src/blocks/review/review-item/types.ts +19 -0
  298. package/src/blocks/sections/base-section/attributes.ts +9 -0
  299. package/src/blocks/sections/base-section/controls.tsx +97 -1
  300. package/src/blocks/sections/base-section/types.ts +9 -1
  301. package/src/blocks/share/share/index.ts +1 -0
  302. package/src/blocks/signpost/signpost-group/constants.ts +23 -0
  303. package/src/blocks/signpost/signpost-group/edit.tsx +25 -4
  304. package/src/blocks/signpost/signpost-group/factory.tsx +5 -1
  305. package/src/blocks/signpost/signpost-group/types.ts +4 -1
  306. package/src/blocks/signpost/signpost-item/editor.scss +5 -0
  307. package/src/blocks/step/step-group/edit.tsx +1 -1
  308. package/src/blocks/step/step-group/factory.tsx +1 -1
  309. package/src/blocks/step/step-group/types.ts +2 -2
  310. package/src/blocks/step/step-item/types.ts +1 -1
  311. package/src/blocks/testimonial/testimonial-group/index.ts +1 -1
  312. package/src/blocks/testimonial/testimonial-group/types.ts +1 -1
  313. package/src/blocks/text-and-form/text-and-form-text-column/edit.tsx +31 -0
  314. package/src/blocks/text-and-form/text-and-form-text-column/editor.scss +8 -4
  315. package/src/blocks/text-and-form/text-and-form-text-column/factory.tsx +1 -1
  316. package/src/blocks/text-and-form/text-and-form-text-column/types.ts +1 -1
  317. package/src/blocks/usp/usp-item/types.ts +1 -1
  318. package/src/blocks/video/video-group/constants.ts +11 -0
  319. package/src/blocks/video/video-group/edit.tsx +158 -0
  320. package/src/blocks/video/video-group/editor.scss +105 -0
  321. package/src/blocks/video/video-group/factory.tsx +51 -0
  322. package/src/blocks/video/video-group/icon.tsx +17 -0
  323. package/src/blocks/video/video-group/index.ts +9 -0
  324. package/src/blocks/video/video-group/types.ts +21 -0
  325. package/src/components/Document/DocumentTermSelectModal.tsx +1 -1
  326. package/src/components/Event/EventSelectModal.tsx +1 -1
  327. package/src/components/Event/EventTermSelectModal.tsx +1 -1
  328. package/src/components/ImagePicker/ImagePicker.tsx +1 -1
  329. package/src/components/Post/PostSelectModal.tsx +1 -1
  330. package/src/components/Post/PostTermSelectModal.tsx +1 -1
  331. package/src/editor.scss +6 -0
  332. package/src/index.ts +12 -0
  333. package/src/types.ts +1 -1
  334. package/build/components/Event/EntitySelectModal.d.ts.map +0 -1
  335. /package/build/components/{Event → EntitySelectModal}/EntitySelectModal.d.ts +0 -0
  336. /package/build/components/{Event → EntitySelectModal}/EntitySelectModal.js +0 -0
  337. /package/src/components/{Event → EntitySelectModal}/EntitySelectModal.tsx +0 -0
@@ -19,6 +19,7 @@ import type {
19
19
  BackgroundImageFit,
20
20
  BackgroundImagePosition,
21
21
  BaseBlockAttributes,
22
+ Border,
22
23
  Decoration,
23
24
  DecorationDepth,
24
25
  DecorationImage,
@@ -315,6 +316,79 @@ function BackgroundImageControl({value, onChange}: BackgroundImageControlProps)
315
316
  )
316
317
  }
317
318
 
319
+ const BORDER_STYLES = [
320
+ {value: 'none', label: __('Žádný', 'brilo-blocks')},
321
+ {value: 'solid', label: __('Plný', 'brilo-blocks')},
322
+ {value: 'dashed', label: __('Čárkovaný', 'brilo-blocks')},
323
+ {value: 'dotted', label: __('Tečkovaný', 'brilo-blocks')},
324
+ ]
325
+
326
+ interface BorderControlProps {
327
+ value?: Border
328
+ onChange: (value: Border | undefined) => void
329
+ }
330
+
331
+ function BorderControl({value, onChange}: BorderControlProps) {
332
+ const {paletteColors} = useTenantColorPalette()
333
+
334
+ const sides: Array<{key: keyof Border; label: string}> = [
335
+ {key: 'top', label: __('Nahoře', 'brilo-blocks')},
336
+ {key: 'bottom', label: __('Dole', 'brilo-blocks')},
337
+ {key: 'left', label: __('Vlevo', 'brilo-blocks')},
338
+ {key: 'right', label: __('Vpravo', 'brilo-blocks')},
339
+ ]
340
+
341
+ const defaultSide = {width: 0, color: '', style: 'none'}
342
+
343
+ const updateSide = (side: keyof Border, patch: Partial<Border[keyof Border]>) => {
344
+ const current = value?.[side] ?? defaultSide
345
+ onChange({
346
+ top: value?.top ?? defaultSide,
347
+ bottom: value?.bottom ?? defaultSide,
348
+ left: value?.left ?? defaultSide,
349
+ right: value?.right ?? defaultSide,
350
+ ...value,
351
+ [side]: {...current, ...patch},
352
+ })
353
+ }
354
+
355
+ return (
356
+ <BaseControl label={__('Ohraničení', 'brilo-blocks')} __nextHasNoMarginBottom>
357
+ {sides.map(({key, label}) => {
358
+ const sideValue = value?.[key] ?? defaultSide
359
+ return (
360
+ <PanelBody key={key} title={label} initialOpen={false}>
361
+ <RangeControl
362
+ label={__('Šířka (px)', 'brilo-blocks')}
363
+ value={sideValue.width}
364
+ min={0}
365
+ max={20}
366
+ onChange={(next) => updateSide(key, {width: next ?? 0})}
367
+ />
368
+ {sideValue.width > 0 && (
369
+ <>
370
+ <SelectControl<string>
371
+ label={__('Styl', 'brilo-blocks')}
372
+ value={sideValue.style}
373
+ options={BORDER_STYLES}
374
+ onChange={(next) => updateSide(key, {style: next})}
375
+ />
376
+ <BaseControl label={__('Barva', 'brilo-blocks')} __nextHasNoMarginBottom>
377
+ <ColorPalette
378
+ colors={paletteColors}
379
+ value={sideValue.color || undefined}
380
+ onChange={(next) => updateSide(key, {color: next ?? ''})}
381
+ />
382
+ </BaseControl>
383
+ </>
384
+ )}
385
+ </PanelBody>
386
+ )
387
+ })}
388
+ </BaseControl>
389
+ )
390
+ }
391
+
318
392
  type SpacingPosition = BaseBlockAttributes['spacing']['position']
319
393
  type SpacingSize = BaseBlockAttributes['spacing']['size']
320
394
 
@@ -325,7 +399,7 @@ interface BaseControlsProps {
325
399
  }
326
400
 
327
401
  export function BaseControls({attributes, setAttributes, exclude}: BaseControlsProps) {
328
- const {id, spacing, background, textColor, decoration, decorations, backgroundImage} = attributes
402
+ const {id, spacing, background, textColor, decoration, decorations, backgroundImage, border} = attributes
329
403
  const {paletteColors, resolveHex} = useTenantColorPalette()
330
404
  const fluid = decorations?.fluid ?? {}
331
405
 
@@ -394,6 +468,28 @@ export function BaseControls({attributes, setAttributes, exclude}: BaseControlsP
394
468
  </PanelBody>
395
469
  )}
396
470
 
471
+ {!exclude.includes('border') && (
472
+ <PanelBody title={__('Ohraničení', 'brilo-blocks')} initialOpen={false}>
473
+ <BorderControl
474
+ value={border}
475
+ onChange={(value) =>
476
+ setAttributes({
477
+ border: value ?? {
478
+ top: {
479
+ width: 0,
480
+ color: '',
481
+ style: 'none',
482
+ },
483
+ bottom: {width: 0, color: '', style: 'none'},
484
+ left: {width: 0, color: '', style: 'none'},
485
+ right: {width: 0, color: '', style: 'none'},
486
+ },
487
+ })
488
+ }
489
+ />
490
+ </PanelBody>
491
+ )}
492
+
397
493
  {!exclude.includes('id') && (
398
494
  <PanelBody title={__('Kotva', 'brilo-blocks')} initialOpen={false}>
399
495
  <TextControl
@@ -56,6 +56,13 @@ export interface BackgroundImage {
56
56
  overlay?: BackgroundImageOverlay
57
57
  }
58
58
 
59
+ export interface Border {
60
+ top: {width: number; color: string; style: string}
61
+ bottom: {width: number; color: string; style: string}
62
+ left: {width: number; color: string; style: string}
63
+ right: {width: number; color: string; style: string}
64
+ }
65
+
59
66
  export interface BaseBlockAttributes extends Record<string, unknown> {
60
67
  id: string
61
68
  spacing: {
@@ -72,9 +79,10 @@ export interface BaseBlockAttributes extends Record<string, unknown> {
72
79
  }
73
80
  }
74
81
  backgroundImage: BackgroundImage
82
+ border: Border
75
83
  }
76
84
 
77
- export type ExcludableBaseAttr = 'spacing' | 'background' | 'id' | 'decorations' | 'decoration' | 'backgroundImage'
85
+ export type ExcludableBaseAttr = 'spacing' | 'background' | 'id' | 'decorations' | 'decoration' | 'backgroundImage' | 'border'
78
86
 
79
87
  export interface BaseSectionOptions<TExtra extends Record<string, unknown> = Record<string, never>> extends BriloBlockType {
80
88
  supports?: BlockConfiguration['supports']
@@ -5,4 +5,5 @@ import type {ShareOptions} from './types'
5
5
 
6
6
  export const shareDefaults: ShareOptions = {
7
7
  name: 'brilo/share',
8
+ parent: ['brilo/base-section'],
8
9
  }
@@ -22,3 +22,26 @@ export const PADDING_MARKS = [
22
22
  {value: 1.5, label: '1.5'},
23
23
  {value: 2, label: '2'},
24
24
  ] as const
25
+
26
+ export const DEFAULT_IMAGE_CLIP_PATHS = [
27
+ {value: 'none', label: __('Žádný', 'brilo-blocks')},
28
+ {value: 'circle', label: __('Kruh', 'brilo-blocks')},
29
+ {value: 'triangle', label: __('Trojúhelník', 'brilo-blocks')},
30
+ {value: 'rhombus', label: __('Kosočtverec', 'brilo-blocks')},
31
+ {value: 'octagon', label: __('Osmiúhelník', 'brilo-blocks')},
32
+ {value: 'bevel', label: __('Zkosený', 'brilo-blocks')},
33
+ {value: 'rabbet', label: __('Drážkovaný', 'brilo-blocks')},
34
+ {value: 'parallelogram', label: __('Rovnoběžník', 'brilo-blocks')},
35
+ ] as const
36
+
37
+ // Frontend reads the shapes from the theme's --shape-* tokens; the editor has no
38
+ // access to them, so the same geometry is inlined here for the preview CSS var.
39
+ export const IMAGE_CLIP_PATH_VALUES: Record<string, string> = {
40
+ circle: 'circle(50% at 50% 50%)',
41
+ triangle: 'polygon(50% 0%, 0% 100%, 100% 100%)',
42
+ rhombus: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)',
43
+ octagon: 'polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)',
44
+ bevel: 'polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%)',
45
+ rabbet: 'polygon(0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%)',
46
+ parallelogram: 'polygon(25% 0%, 100% 0%, 75% 100%, 0% 100%)',
47
+ }
@@ -4,6 +4,7 @@ import {
4
4
  ColorPalette,
5
5
  PanelBody,
6
6
  RangeControl,
7
+ SelectControl,
7
8
  __experimentalToggleGroupControl as ToggleGroupControl,
8
9
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
9
10
  } from '@wordpress/components'
@@ -11,8 +12,17 @@ import {__} from '@wordpress/i18n'
11
12
  import clsx from 'clsx'
12
13
  import {useGroupBlock} from '~/hooks/useGroupBlock'
13
14
  import {useTenantColorPalette} from '~/hooks/useTenantColorPalette'
14
- import {COLUMNS, DEFAULT_SHADOWS, HEADING_LEVELS, PADDING_MARKS, RATIOS, TEXT_ALIGNS} from './constants'
15
- import type {SignpostGroupAttributes, SignpostGroupOptions, SignpostShadow, SignpostTextAlign} from './types'
15
+ import {
16
+ COLUMNS,
17
+ DEFAULT_IMAGE_CLIP_PATHS,
18
+ DEFAULT_SHADOWS,
19
+ HEADING_LEVELS,
20
+ IMAGE_CLIP_PATH_VALUES,
21
+ PADDING_MARKS,
22
+ RATIOS,
23
+ TEXT_ALIGNS,
24
+ } from './constants'
25
+ import type {SignpostGroupAttributes, SignpostGroupOptions, SignpostImageClipPath, SignpostShadow, SignpostTextAlign} from './types'
16
26
 
17
27
  export function createSignpostGroupEdit(options: SignpostGroupOptions) {
18
28
  const exclude = options.exclude ?? []
@@ -24,13 +34,18 @@ export function createSignpostGroupEdit(options: SignpostGroupOptions) {
24
34
  attributes: SignpostGroupAttributes
25
35
  setAttributes: (a: Partial<SignpostGroupAttributes>) => void
26
36
  }) {
27
- const {columns, headingLevel, ratio, style, padding} = attributes
37
+ const {columns, headingLevel, ratio, img, style, padding} = attributes
38
+ const clipPath = img?.clipPath ?? 'none'
28
39
  const {paletteColors} = useTenantColorPalette()
29
40
 
30
41
  const {blockProps, innerBlocksProps} = useGroupBlock({
31
42
  blockClassName: clsx(options.blockClassName ?? 'g-signpost wp-block-section'),
32
43
  containerClassName: [options.containerClassName ?? 'u-grid-responsive', `--cols-${columns}`, `--ratio-${ratio.replace(':', '-')}`],
33
- containerStyle: {'--grid-max-col-count': columns},
44
+ containerStyle: {
45
+ '--grid-max-col-count': columns,
46
+ // Inherited by every signpost item inside the container.
47
+ ...(IMAGE_CLIP_PATH_VALUES[clipPath] && {'--signpost-image-clip-path': IMAGE_CLIP_PATH_VALUES[clipPath]}),
48
+ },
34
49
  allowedBlocks: options.allowedBlocks,
35
50
  orientation: 'horizontal',
36
51
  template: options.template,
@@ -61,6 +76,12 @@ export function createSignpostGroupEdit(options: SignpostGroupOptions) {
61
76
  <ToggleGroupControlOption key={r} value={r} label={r} />
62
77
  ))}
63
78
  </ToggleGroupControl>
79
+ <SelectControl<string>
80
+ label={__('Tvar výřezu obrázku', 'brilo-blocks')}
81
+ value={clipPath}
82
+ options={[...DEFAULT_IMAGE_CLIP_PATHS]}
83
+ onChange={(v) => setAttributes({img: {...img, clipPath: v as SignpostImageClipPath}})}
84
+ />
64
85
  <ToggleGroupControl
65
86
  isBlock
66
87
  label={__('Úroveň nadpisu položek', 'brilo-blocks')}
@@ -1,7 +1,7 @@
1
1
  import {InnerBlocks} from '@wordpress/block-editor'
2
2
  import type {BlockConfiguration} from '@wordpress/blocks'
3
3
  import {__} from '@wordpress/i18n'
4
- import {COLUMNS, DEFAULT_SHADOWS, HEADING_LEVELS, RATIOS, TEXT_ALIGNS} from './constants'
4
+ import {COLUMNS, DEFAULT_IMAGE_CLIP_PATHS, DEFAULT_SHADOWS, HEADING_LEVELS, RATIOS, TEXT_ALIGNS} from './constants'
5
5
  import {createSignpostGroupEdit} from './edit'
6
6
  import {icon as defaultIcon} from './icon'
7
7
  import type {SignpostGroupAttributes, SignpostGroupOptions} from './types'
@@ -27,6 +27,10 @@ export function createSignpostGroupBlock(options: SignpostGroupOptions): BlockCo
27
27
  default: HEADING_LEVELS[0],
28
28
  enum: [...HEADING_LEVELS],
29
29
  },
30
+ img: {
31
+ type: 'object',
32
+ default: {clipPath: DEFAULT_IMAGE_CLIP_PATHS[0].value},
33
+ },
30
34
  }
31
35
 
32
36
  if (!exclude.includes('colors')) {
@@ -1,8 +1,10 @@
1
1
  import type {BriloBlockType} from '~/types'
2
- import type {DEFAULT_SHADOWS, TEXT_ALIGNS} from './constants'
2
+ import type {DEFAULT_IMAGE_CLIP_PATHS, DEFAULT_SHADOWS, TEXT_ALIGNS} from './constants'
3
3
 
4
4
  export type SignpostShadow = (typeof DEFAULT_SHADOWS)[number]['value']
5
5
 
6
+ export type SignpostImageClipPath = (typeof DEFAULT_IMAGE_CLIP_PATHS)[number]['value']
7
+
6
8
  export type SignpostTextAlign = (typeof TEXT_ALIGNS)[number]['value']
7
9
 
8
10
  export type ExcludableSignpostAttr = 'colors' | 'padding'
@@ -11,6 +13,7 @@ export interface SignpostGroupAttributes extends Record<string, unknown> {
11
13
  columns: number
12
14
  headingLevel: number
13
15
  ratio: string
16
+ img: {clipPath: SignpostImageClipPath}
14
17
  style: {
15
18
  shadow: SignpostShadow
16
19
  borderColor: string
@@ -21,5 +21,10 @@
21
21
  .c-image-picker-control__row {
22
22
  flex-direction: column;
23
23
  }
24
+
25
+ // Set by the parent signpost group on the inner blocks container.
26
+ .c-image-picker-control__thumb {
27
+ clip-path: var(--signpost-image-clip-path, none);
28
+ }
24
29
  }
25
30
  }
@@ -8,7 +8,7 @@ import {
8
8
  import {__} from '@wordpress/i18n'
9
9
  import clsx from 'clsx'
10
10
  import {useGroupBlock} from '~/hooks/useGroupBlock'
11
- import {OptionArray} from '~/types'
11
+ import type {OptionArray} from '~/types'
12
12
  import type {StepGroupAttributes, StepGroupOptions, StepVariant} from './types'
13
13
  import {DEFAULT_VARIANTS} from './constants'
14
14
 
@@ -5,7 +5,7 @@ import {DEFAULT_VARIANTS} from './constants'
5
5
  import {createStepGroupEdit} from './edit'
6
6
  import type {StepGroupAttributes, StepGroupOptions} from './types'
7
7
  import {icon} from '~/blocks/step/step-group/icon'
8
- import {OptionArray} from '~/types'
8
+ import type {OptionArray} from '~/types'
9
9
 
10
10
  export function createStepGroupBlock<TVariants extends OptionArray = typeof DEFAULT_VARIANTS>(
11
11
  options: StepGroupOptions<TVariants>,
@@ -1,5 +1,5 @@
1
- import {BriloBlockType, OptionArray} from '~/types'
2
- import {DEFAULT_VARIANTS} from './constants'
1
+ import type {BriloBlockType, OptionArray} from '~/types'
2
+ import type {DEFAULT_VARIANTS} from './constants'
3
3
 
4
4
  export type StepVariant = (typeof DEFAULT_VARIANTS)[number]['value']
5
5
 
@@ -1,4 +1,4 @@
1
- import {BriloBlockType, Icon} from '~/types'
1
+ import type {BriloBlockType, Icon} from '~/types'
2
2
  import type {IconType} from '~/components/IconControl'
3
3
 
4
4
  export interface StepItemAttributes extends Record<string, unknown> {
@@ -1,7 +1,7 @@
1
1
  export type {TestimonialGroupAttributes} from './types'
2
2
  export {createTestimonialGroupBlock} from './factory'
3
3
 
4
- import {TestimonialGroupOptions} from './types'
4
+ import type {TestimonialGroupOptions} from './types'
5
5
 
6
6
  export const testimonialGroupDefaults: TestimonialGroupOptions = {
7
7
  name: 'brilo/testimonial-group',
@@ -1,5 +1,5 @@
1
1
  import type {BriloBlockType, OptionArray} from '~/types'
2
- import {VARIANTS, SIZES} from './constants'
2
+ import type {VARIANTS, SIZES} from './constants'
3
3
 
4
4
  export type Variant = (typeof VARIANTS)[number]['value']
5
5
  export type Size = (typeof SIZES)[number]['value']
@@ -3,11 +3,14 @@ import {
3
3
  PanelBody,
4
4
  __experimentalToggleGroupControl as ToggleGroupControl,
5
5
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
6
+ BaseControl,
7
+ ColorPalette,
6
8
  } from '@wordpress/components'
7
9
  import {__} from '@wordpress/i18n'
8
10
  import {useGroupBlock} from '~/hooks/useGroupBlock'
9
11
  import {DEFAULT_CONTENT_SIZES, DEFAULT_HEADING_STYLES, HEADING_LEVELS} from './constants'
10
12
  import type {ContentSizes, HeadingLevels, HeadingStyles, TextAndFormTextColumnAttributes, TextAndFormTextColumnOptions} from './types'
13
+ import {useTenantColorPalette} from '~/hooks/useTenantColorPalette'
11
14
 
12
15
  export function createTextAndFormTextColumnEdit(options: TextAndFormTextColumnOptions) {
13
16
  const HEADING_STYLES = options.headingStyles ?? DEFAULT_HEADING_STYLES
@@ -30,9 +33,28 @@ export function createTextAndFormTextColumnEdit(options: TextAndFormTextColumnOp
30
33
  layout: {type: 'default'},
31
34
  })
32
35
 
36
+ const {paletteColors} = useTenantColorPalette()
37
+
33
38
  return (
34
39
  <>
35
40
  <InspectorControls>
41
+ <PanelBody title={__('Overline', 'brilo-blocks')}>
42
+ <BaseControl label={__('Barva pozadí', 'brilo-blocks')}>
43
+ <ColorPalette
44
+ colors={paletteColors}
45
+ value={header.overline.background || undefined}
46
+ onChange={(value) => setAttributes({header: {...header, overline: {...header.overline, background: value ?? ''}}})}
47
+ />
48
+ </BaseControl>
49
+ <BaseControl label={__('Barva textu', 'brilo-blocks')}>
50
+ <ColorPalette
51
+ colors={paletteColors}
52
+ value={header.overline.color || undefined}
53
+ onChange={(value) => setAttributes({header: {...header, overline: {...header.overline, color: value ?? ''}}})}
54
+ />
55
+ </BaseControl>
56
+ </PanelBody>
57
+
36
58
  <PanelBody title={__('Nadpis', 'brilo-blocks')} initialOpen={false}>
37
59
  <ToggleGroupControl
38
60
  label={__('Úroveň nadpisu', 'brilo-blocks')}
@@ -57,6 +79,7 @@ export function createTextAndFormTextColumnEdit(options: TextAndFormTextColumnOp
57
79
  ))}
58
80
  </ToggleGroupControl>
59
81
  </PanelBody>
82
+
60
83
  <PanelBody title={__('Rozložení', 'brilo-blocks')}>
61
84
  <ToggleGroupControl
62
85
  label={__('Velikost textu', 'brilo-blocks')}
@@ -74,6 +97,14 @@ export function createTextAndFormTextColumnEdit(options: TextAndFormTextColumnOp
74
97
  <RichText
75
98
  tagName="span"
76
99
  className="g-text-and-form__overline u-text-editable"
100
+ style={
101
+ header.overline.color || header.overline.background
102
+ ? {
103
+ ...(header.overline.color ? {color: header.overline.color} : {}),
104
+ ...(header.overline.background ? {backgroundColor: header.overline.background} : {}),
105
+ }
106
+ : undefined
107
+ }
77
108
  value={header.overline.title}
78
109
  onChange={(value: string) => setAttributes({header: {...header, overline: {title: value}}})}
79
110
  placeholder={__('Overline...', 'brilo-blocks')}
@@ -8,12 +8,16 @@
8
8
  }
9
9
 
10
10
  .g-text-and-form__overline {
11
- display: block;
12
- font-size: 12px;
11
+ display: inline-flex;
12
+ font-size: 11px;
13
13
  font-weight: 600;
14
14
  text-transform: uppercase;
15
- letter-spacing: 1px;
16
- color: #888;
15
+ letter-spacing: 1.5px;
16
+ color: #555;
17
+ background-color: #f0f0f0;
18
+ border-radius: 100px;
19
+ padding: 3px 10px;
20
+ margin-bottom: 8px;
17
21
  }
18
22
 
19
23
  .g-text-and-form__heading {
@@ -30,7 +30,7 @@ export function createTextAndFormTextColumnBlock<
30
30
  type: 'object',
31
31
  default: {
32
32
  heading: {title: '', level: HEADING_LEVELS[1], style: headingStyles[1]?.value ?? headingStyles[0].value},
33
- overline: {title: ''},
33
+ overline: {type: 'object', default: {title: '', color: '', background: ''}},
34
34
  },
35
35
  },
36
36
  content: {type: 'object', default: {size: contentSizes[1]?.value ?? contentSizes[0].value}},
@@ -9,7 +9,7 @@ export interface TextAndFormTextColumnAttributes<THeadingStyle extends string =
9
9
  extends Record<string, unknown> {
10
10
  header: {
11
11
  heading: {title: string; level: HeadingLevels; style: THeadingStyle}
12
- overline: {title: string}
12
+ overline: {title: string; color?: string; background?: string}
13
13
  }
14
14
  content: {size: TContentSize}
15
15
  }
@@ -1,4 +1,4 @@
1
- import {BriloBlockType, Icon} from '~/types'
1
+ import type {BriloBlockType, Icon} from '~/types'
2
2
  import type {IconType} from '~/components/IconControl'
3
3
  import type {ICON_TYPES} from './constants'
4
4
 
@@ -0,0 +1,11 @@
1
+ import {__} from '@wordpress/i18n'
2
+
3
+ export const VIDEO_TYPES = [
4
+ {value: 'youtube', label: __('YouTube', 'brilo-blocks')},
5
+ {value: 'media', label: __('WP médium', 'brilo-blocks')},
6
+ ] as const
7
+
8
+ export const SIZES = [
9
+ {value: 'md', label: __('Střední', 'brilo-blocks')},
10
+ {value: 'lg', label: __('Velký', 'brilo-blocks')},
11
+ ] as const
@@ -0,0 +1,158 @@
1
+ import {InspectorControls, MediaUpload, MediaUploadCheck, RichText, useBlockProps} from '@wordpress/block-editor'
2
+ import type {BlockEditProps} from '@wordpress/blocks'
3
+ import {
4
+ Button,
5
+ PanelBody,
6
+ TextControl,
7
+ __experimentalToggleGroupControl as ToggleGroupControl,
8
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
9
+ } from '@wordpress/components'
10
+ import {__} from '@wordpress/i18n'
11
+ import clsx from 'clsx'
12
+ import {SIZES, VIDEO_TYPES} from './constants'
13
+ import type {VideoGroupAttributes, VideoGroupOptions, VideoSize, VideoType} from './types'
14
+
15
+ function extractYoutubeId(url: string): string | null {
16
+ const match = url.match(/(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/)
17
+ return match ? match[1] : null
18
+ }
19
+
20
+ export function createVideoGroupEdit(_options: VideoGroupOptions) {
21
+ return function VideoGroupEdit({attributes, setAttributes}: BlockEditProps<VideoGroupAttributes>) {
22
+ const {type, url, mediaId, caption, size, poster} = attributes
23
+
24
+ const youtubeId = type === 'youtube' ? extractYoutubeId(url) : null
25
+ const youtubeThumbnail = youtubeId ? `https://img.youtube.com/vi/${youtubeId}/maxresdefault.jpg` : null
26
+
27
+ const blockProps = useBlockProps({
28
+ className: clsx('g-video wp-block-section', `--size-${size}`, `--type-${type}`),
29
+ })
30
+
31
+ return (
32
+ <>
33
+ <InspectorControls>
34
+ <PanelBody title={__('Typ videa', 'brilo-blocks')}>
35
+ <ToggleGroupControl
36
+ label={__('Zdroj', 'brilo-blocks')}
37
+ value={type}
38
+ onChange={(value) => setAttributes({type: value as VideoType, url: '', mediaId: 0})}
39
+ isBlock
40
+ >
41
+ {VIDEO_TYPES.map((t) => (
42
+ <ToggleGroupControlOption key={t.value} value={t.value} label={t.label} />
43
+ ))}
44
+ </ToggleGroupControl>
45
+ </PanelBody>
46
+
47
+ {type === 'youtube' && (
48
+ <PanelBody title={__('YouTube', 'brilo-blocks')}>
49
+ <TextControl
50
+ label={__('URL videa', 'brilo-blocks')}
51
+ value={url}
52
+ onChange={(value) => setAttributes({url: value})}
53
+ placeholder="https://www.youtube.com/watch?v=..."
54
+ help={youtubeId ? __('✓ Platné YouTube video', 'brilo-blocks') : url ? __('⚠ Neplatná YouTube URL', 'brilo-blocks') : ''}
55
+ />
56
+ </PanelBody>
57
+ )}
58
+
59
+ <PanelBody title={__('Náhledový obrázek', 'brilo-blocks')} initialOpen={false}>
60
+ <MediaUploadCheck>
61
+ <MediaUpload
62
+ onSelect={(media: {url: string; id: number}) => setAttributes({poster: {src: media.url, id: media.id}})}
63
+ allowedTypes={['image']}
64
+ value={poster?.id}
65
+ render={({open}: {open: () => void}) => (
66
+ <div className="g-video__poster-control">
67
+ {poster?.src ? (
68
+ <>
69
+ <img src={poster.src} alt="" className="g-video__poster-preview" />
70
+ <Button onClick={open} variant="secondary" size="small">
71
+ {__('Změnit obrázek', 'brilo-blocks')}
72
+ </Button>
73
+ <Button onClick={() => setAttributes({poster: {src: '', id: 0}})} variant="tertiary" size="small" isDestructive>
74
+ {__('Odebrat', 'brilo-blocks')}
75
+ </Button>
76
+ </>
77
+ ) : (
78
+ <Button onClick={open} variant="secondary">
79
+ {__('Vybrat náhledový obrázek', 'brilo-blocks')}
80
+ </Button>
81
+ )}
82
+ </div>
83
+ )}
84
+ />
85
+ </MediaUploadCheck>
86
+ </PanelBody>
87
+
88
+ <PanelBody title={__('Rozložení', 'brilo-blocks')} initialOpen={false}>
89
+ <ToggleGroupControl
90
+ label={__('Velikost', 'brilo-blocks')}
91
+ value={size}
92
+ onChange={(value) => setAttributes({size: value as VideoSize})}
93
+ isBlock
94
+ >
95
+ {SIZES.map((s) => (
96
+ <ToggleGroupControlOption key={s.value} value={s.value} label={s.label} />
97
+ ))}
98
+ </ToggleGroupControl>
99
+ </PanelBody>
100
+ </InspectorControls>
101
+
102
+ <div {...blockProps}>
103
+ <div className="g-video__media">
104
+ {type === 'youtube' ? (
105
+ youtubeThumbnail ? (
106
+ <div className="g-video__youtube-preview">
107
+ <img src={youtubeThumbnail} alt="" />
108
+ <div className="g-video__play-icon" />
109
+ </div>
110
+ ) : (
111
+ <div className={clsx('g-video__empty', url && '--invalid')}>
112
+ <span className="g-video__empty-label">
113
+ {url
114
+ ? __('⚠ Neplatná YouTube URL — zkontroluj odkaz', 'brilo-blocks')
115
+ : __('Zadej YouTube URL v postranním panelu →', 'brilo-blocks')}
116
+ </span>
117
+ </div>
118
+ )
119
+ ) : (
120
+ <MediaUploadCheck>
121
+ <MediaUpload
122
+ onSelect={(media: {url: string; id: number}) => setAttributes({url: media.url, mediaId: media.id})}
123
+ allowedTypes={['video']}
124
+ value={mediaId}
125
+ render={({open}: {open: () => void}) =>
126
+ mediaId ? (
127
+ <div className="g-video__media-inner">
128
+ <video src={url} poster={poster?.src || undefined}>
129
+ <track kind="captions" />
130
+ </video>
131
+ <Button onClick={open} variant="primary" className="g-video__change-btn">
132
+ {__('Změnit video', 'brilo-blocks')}
133
+ </Button>
134
+ </div>
135
+ ) : (
136
+ <button type="button" className="g-video__empty" onClick={open}>
137
+ <span className="g-video__empty-label">{__('Klikni pro výběr videa z médií', 'brilo-blocks')}</span>
138
+ </button>
139
+ )
140
+ }
141
+ />
142
+ </MediaUploadCheck>
143
+ )}
144
+ </div>
145
+
146
+ <RichText
147
+ tagName="p"
148
+ className="g-video__caption u-text-editable"
149
+ value={caption}
150
+ onChange={(value) => setAttributes({caption: value})}
151
+ placeholder={__('Popisek videa...', 'brilo-blocks')}
152
+ allowedFormats={['core/bold', 'core/italic', 'brilo-blocks/text-color']}
153
+ />
154
+ </div>
155
+ </>
156
+ )
157
+ }
158
+ }