@total_onion/onion-library 3.2.0 → 3.2.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 (525) hide show
  1. package/.github/workflows/npm-publish.yml +38 -0
  2. package/.prettierrc +22 -0
  3. package/__spec__/copyBlockComponent.spec.js +94 -0
  4. package/__spec__/copyFile.spec.js +78 -0
  5. package/__spec__/copyFileKeeping.spec.js +74 -0
  6. package/__spec__/files/source.txt +1 -0
  7. package/__spec__/update-all-components.spec.js +99 -0
  8. package/__spec__/update-component.spec.js +165 -0
  9. package/assembleAssetList.js +69 -0
  10. package/breakpoints.scss +6 -0
  11. package/build-library.js +4 -0
  12. package/checkBuildAssets.js +17 -0
  13. package/components/block-accent-image-v3/accent-image-v3.js +7 -0
  14. package/components/block-accent-image-v3/accent-image-v3.scss +4 -0
  15. package/components/block-accent-image-v3/accent-image-v3.twig +137 -0
  16. package/components/block-accent-image-v3/group_6890e1233ff2d.json +81 -0
  17. package/components/block-accordion-v3/accordion-v3.js +119 -0
  18. package/components/block-accordion-v3/accordion-v3.scss +197 -0
  19. package/components/block-accordion-v3/accordion-v3.twig +51 -0
  20. package/components/block-accordion-v3/group_6888d2f0b230b.json +458 -0
  21. package/components/block-back-to-top-button-v3/back-to-top-button-v3.js +12 -0
  22. package/components/block-back-to-top-button-v3/back-to-top-button-v3.scss +68 -0
  23. package/components/block-back-to-top-button-v3/back-to-top-button-v3.twig +40 -0
  24. package/components/block-back-to-top-button-v3/group_63e24e04a1e61.json +323 -0
  25. package/components/block-betterreviews-display-v3/betterreviews-display-v3.js +10 -0
  26. package/components/block-betterreviews-display-v3/betterreviews-display-v3.scss +104 -0
  27. package/components/block-betterreviews-display-v3/betterreviews-display-v3.twig +24 -0
  28. package/components/block-betterreviews-display-v3/group_6892880fc1a00.json +182 -0
  29. package/components/block-block-interactions-v3/block-interactions-v3.js +53 -0
  30. package/components/block-block-interactions-v3/block-interactions-v3.scss +32 -0
  31. package/components/block-block-interactions-v3/block-interactions-v3.twig +55 -0
  32. package/components/block-block-interactions-v3/group_687e1575ba23d.json +700 -0
  33. package/components/block-carousel-multi-layout-v3/carousel-multi-layout-v3.js +243 -0
  34. package/components/block-carousel-multi-layout-v3/carousel-multi-layout-v3.scss +156 -0
  35. package/components/block-carousel-multi-layout-v3/carousel-multi-layout-v3.twig +146 -0
  36. package/components/block-carousel-multi-layout-v3/group_686bd42e551d6.json +578 -0
  37. package/components/block-cocktail-recipe-v3/cocktail-recipe-v3.js +127 -0
  38. package/components/block-cocktail-recipe-v3/cocktail-recipe-v3.scss +345 -0
  39. package/components/block-cocktail-recipe-v3/cocktail-recipe-v3.twig +93 -0
  40. package/components/block-cocktail-recipe-v3/group_68fff19fa4dd0.json +202 -0
  41. package/components/block-cover-link-v3/cover-link-v3.js +7 -0
  42. package/components/block-cover-link-v3/cover-link-v3.scss +10 -0
  43. package/components/block-cover-link-v3/cover-link-v3.twig +16 -0
  44. package/components/block-cover-link-v3/group_687192c28b7eb.json +96 -0
  45. package/components/block-divider-v3/divider-v3.js +8 -0
  46. package/components/block-divider-v3/divider-v3.scss +103 -0
  47. package/components/block-divider-v3/divider-v3.twig +45 -0
  48. package/components/block-divider-v3/group_686b919696bfe.json +891 -0
  49. package/components/block-featured-image-gallery-v3/featured-image-gallery-v3.js +44 -0
  50. package/components/block-featured-image-gallery-v3/featured-image-gallery-v3.scss +93 -0
  51. package/components/block-featured-image-gallery-v3/featured-image-gallery-v3.twig +43 -0
  52. package/components/block-featured-image-gallery-v3/group_5f91897095b42.json +88 -0
  53. package/components/block-form-selection-v3/form-selection-v3.js +78 -0
  54. package/components/block-form-selection-v3/form-selection-v3.scss +38 -0
  55. package/components/block-form-selection-v3/form-selection-v3.twig +84 -0
  56. package/components/block-form-selection-v3/group_68752e7949e53.json +351 -0
  57. package/components/block-gradient-layer-v3/gradient-layer-v3.js +7 -0
  58. package/components/block-gradient-layer-v3/gradient-layer-v3.scss +8 -0
  59. package/components/block-gradient-layer-v3/gradient-layer-v3.twig +78 -0
  60. package/components/block-gradient-layer-v3/group_686fdadc85df4.json +206 -0
  61. package/components/block-group-container-v3/group-container-v3.js +7 -0
  62. package/components/block-group-container-v3/group-container-v3.php +14 -0
  63. package/components/block-group-container-v3/group-container-v3.scss +45 -0
  64. package/components/block-group-container-v3/group-container-v3.twig +70 -0
  65. package/components/block-group-container-v3/group_6865578ada499.json +3660 -0
  66. package/components/block-lottie-content-v3/group_687197027216d.json +177 -0
  67. package/components/block-lottie-content-v3/lottie-content-v3.js +25 -0
  68. package/components/block-lottie-content-v3/lottie-content-v3.scss +2 -0
  69. package/components/block-lottie-content-v3/lottie-content-v3.twig +15 -0
  70. package/components/block-market-selector-v3/group_68752075dd831.json +129 -0
  71. package/components/block-market-selector-v3/market-selector-v3.js +7 -0
  72. package/components/block-market-selector-v3/market-selector-v3.scss +120 -0
  73. package/components/block-market-selector-v3/market-selector-v3.twig +40 -0
  74. package/components/block-modal-form-v3/modal-form-v3.js +59 -0
  75. package/components/block-modal-form-v3/modal-form-v3.scss +6 -0
  76. package/components/block-modal-form-v3/modal-form-v3.twig +30 -0
  77. package/components/block-nav-menu-container-v3/group_687e00b45e9a3.json +187 -0
  78. package/components/block-nav-menu-container-v3/nav-menu-container-v3.js +7 -0
  79. package/components/block-nav-menu-container-v3/nav-menu-container-v3.scss +3 -0
  80. package/components/block-nav-menu-container-v3/nav-menu-container-v3.twig +23 -0
  81. package/components/block-post-info-v3/group_6866429531436.json +3112 -0
  82. package/components/block-post-info-v3/post-info-v3/bazaarvoice-inline.twig +13 -0
  83. package/components/block-post-info-v3/post-info-v3/better-reviews.twig +15 -0
  84. package/components/block-post-info-v3/post-info-v3/divider.twig +8 -0
  85. package/components/block-post-info-v3/post-info-v3/drink-description.twig +10 -0
  86. package/components/block-post-info-v3/post-info-v3/global-image.twig +22 -0
  87. package/components/block-post-info-v3/post-info-v3/gradient-layer.twig +78 -0
  88. package/components/block-post-info-v3/post-info-v3/gradient-overlay.twig +10 -0
  89. package/components/block-post-info-v3/post-info-v3/post-author.twig +17 -0
  90. package/components/block-post-info-v3/post-info-v3/post-buy-now.twig +116 -0
  91. package/components/block-post-info-v3/post-info-v3/post-categories.twig +15 -0
  92. package/components/block-post-info-v3/post-info-v3/post-headline.twig +15 -0
  93. package/components/block-post-info-v3/post-info-v3/post-image.twig +47 -0
  94. package/components/block-post-info-v3/post-info-v3/post-info-description.twig +15 -0
  95. package/components/block-post-info-v3/post-info-v3/post-info-subtitle.twig +14 -0
  96. package/components/block-post-info-v3/post-info-v3/post-link.twig +42 -0
  97. package/components/block-post-info-v3/post-info-v3/post-name.twig +12 -0
  98. package/components/block-post-info-v3/post-info-v3/post-publish-date.twig +12 -0
  99. package/components/block-post-info-v3/post-info-v3/post-tags.twig +24 -0
  100. package/components/block-post-info-v3/post-info-v3/post-text-alternative-style.twig +16 -0
  101. package/components/block-post-info-v3/post-info-v3/post-title.twig +15 -0
  102. package/components/block-post-info-v3/post-info-v3/post-video.twig +27 -0
  103. package/components/block-post-info-v3/post-info-v3/reservebar-add-to-cart.twig +32 -0
  104. package/components/block-post-info-v3/post-info-v3/shopify-add-to-cart.twig +31 -0
  105. package/components/block-post-info-v3/post-info-v3/social-networks.twig +33 -0
  106. package/components/block-post-info-v3/post-info-v3/spacer-v3.twig +9 -0
  107. package/components/block-post-info-v3/post-info-v3.js +10 -0
  108. package/components/block-post-info-v3/post-info-v3.scss +210 -0
  109. package/components/block-post-info-v3/post-info-v3.twig +67 -0
  110. package/components/block-product-info-v3/group_68909995b6550.json +3544 -0
  111. package/components/block-product-info-v3/product-info-v3/product-abv.twig +14 -0
  112. package/components/block-product-info-v3/product-info-v3/product-cask-type-label.twig +14 -0
  113. package/components/block-product-info-v3/product-info-v3/product-cask-type.twig +14 -0
  114. package/components/block-product-info-v3/product-info-v3/product-colour-label.twig +14 -0
  115. package/components/block-product-info-v3/product-info-v3/product-colour.twig +14 -0
  116. package/components/block-product-info-v3/product-info-v3/product-description.twig +14 -0
  117. package/components/block-product-info-v3/product-info-v3/product-finish-label.twig +14 -0
  118. package/components/block-product-info-v3/product-info-v3/product-finish.twig +14 -0
  119. package/components/block-product-info-v3/product-info-v3/product-headline.twig +14 -0
  120. package/components/block-product-info-v3/product-info-v3/product-image.twig +43 -0
  121. package/components/block-product-info-v3/product-info-v3/product-name.twig +14 -0
  122. package/components/block-product-info-v3/product-info-v3/product-nose-label.twig +14 -0
  123. package/components/block-product-info-v3/product-info-v3/product-nose.twig +14 -0
  124. package/components/block-product-info-v3/product-info-v3/product-pair-with-label.twig +14 -0
  125. package/components/block-product-info-v3/product-info-v3/product-pair-with.twig +14 -0
  126. package/components/block-product-info-v3/product-info-v3/product-palate-label.twig +14 -0
  127. package/components/block-product-info-v3/product-info-v3/product-palate.twig +14 -0
  128. package/components/block-product-info-v3/product-info-v3/product-taste-label.twig +14 -0
  129. package/components/block-product-info-v3/product-info-v3/product-taste.twig +14 -0
  130. package/components/block-product-info-v3/product-info-v3/product-volume.twig +14 -0
  131. package/components/block-product-info-v3/product-info-v3/spacer-v3.twig +9 -0
  132. package/components/block-product-info-v3/product-info-v3.js +7 -0
  133. package/components/block-product-info-v3/product-info-v3.scss +171 -0
  134. package/components/block-product-info-v3/product-info-v3.twig +43 -0
  135. package/components/block-raw-html-v3/group_686ba68d603a2.json +212 -0
  136. package/components/block-raw-html-v3/raw-html-v3.js +7 -0
  137. package/components/block-raw-html-v3/raw-html-v3.scss +2 -0
  138. package/components/block-raw-html-v3/raw-html-v3.twig +17 -0
  139. package/components/block-responsive-table-v3/group_6617ecc987ddd.json +394 -0
  140. package/components/block-responsive-table-v3/responsive-table-v3.js +7 -0
  141. package/components/block-responsive-table-v3/responsive-table-v3.scss +49 -0
  142. package/components/block-responsive-table-v3/responsive-table-v3.twig +47 -0
  143. package/components/block-scrolling-banner-v3/group_68e67fca1ec80.json +664 -0
  144. package/components/block-scrolling-banner-v3/scrolling-banner-v3.js +144 -0
  145. package/components/block-scrolling-banner-v3/scrolling-banner-v3.scss +104 -0
  146. package/components/block-scrolling-banner-v3/scrolling-banner-v3.twig +72 -0
  147. package/components/block-section-separator-v3/group_6874c8d79b84b.json +576 -0
  148. package/components/block-section-separator-v3/section-separator-v3.js +7 -0
  149. package/components/block-section-separator-v3/section-separator-v3.scss +42 -0
  150. package/components/block-section-separator-v3/section-separator-v3.twig +46 -0
  151. package/components/block-single-column-container-v3/group_6887640458d61.json +481 -0
  152. package/components/block-single-column-container-v3/single-column-container-v3.js +7 -0
  153. package/components/block-single-column-container-v3/single-column-container-v3.scss +14 -0
  154. package/components/block-single-column-container-v3/single-column-container-v3.twig +30 -0
  155. package/components/block-single-responsive-image-v3/group_6867bcf24c2fc.json +128 -0
  156. package/components/block-single-responsive-image-v3/single-responsive-image-v3.js +7 -0
  157. package/components/block-single-responsive-image-v3/single-responsive-image-v3.scss +9 -0
  158. package/components/block-single-responsive-image-v3/single-responsive-image-v3.twig +24 -0
  159. package/components/block-site-copyright-notice-v3/group_66296c3716b4f.json +304 -0
  160. package/components/block-site-copyright-notice-v3/index.html +33 -0
  161. package/components/block-site-copyright-notice-v3/site-copyright-notice-v3.js +58 -0
  162. package/components/block-site-copyright-notice-v3/site-copyright-notice-v3.scss +21 -0
  163. package/components/block-site-copyright-notice-v3/site-copyright-notice-v3.twig +30 -0
  164. package/components/block-site-logo-container-v3/group_687e3b887b508.json +175 -0
  165. package/components/block-site-logo-container-v3/site-logo-container-v3.js +7 -0
  166. package/components/block-site-logo-container-v3/site-logo-container-v3.scss +29 -0
  167. package/components/block-site-logo-container-v3/site-logo-container-v3.twig +40 -0
  168. package/components/block-site-title-and-tagline-v3/site-title-and-tagline-v3.js +7 -0
  169. package/components/block-site-title-and-tagline-v3/site-title-and-tagline-v3.scss +16 -0
  170. package/components/block-site-title-and-tagline-v3/site-title-and-tagline-v3.twig +24 -0
  171. package/components/block-smash-balloon-social-media-v3/smash-balloon-social-media-v3.js +8 -0
  172. package/components/block-smash-balloon-social-media-v3/smash-balloon-social-media-v3.scss +31 -0
  173. package/components/block-smash-balloon-social-media-v3/smash-balloon-social-media-v3.twig +18 -0
  174. package/components/block-social-networks-v3/group_6891d4d7db414.json +146 -0
  175. package/components/block-social-networks-v3/social-networks-v3.js +7 -0
  176. package/components/block-social-networks-v3/social-networks-v3.scss +7 -0
  177. package/components/block-social-networks-v3/social-networks-v3.twig +24 -0
  178. package/components/block-spacer-v3/group_686b8cb48c708.json +131 -0
  179. package/components/block-spacer-v3/spacer-v3.js +8 -0
  180. package/components/block-spacer-v3/spacer-v3.scss +19 -0
  181. package/components/block-spacer-v3/spacer-v3.twig +13 -0
  182. package/components/block-spotify-embed-v3/group_67d04c4c4cf78.json +120 -0
  183. package/components/block-spotify-embed-v3/spotify-embed-v3.js +7 -0
  184. package/components/block-spotify-embed-v3/spotify-embed-v3.scss +11 -0
  185. package/components/block-spotify-embed-v3/spotify-embed-v3.twig +23 -0
  186. package/components/block-standard-content-v3/group_68655756737c9.json +344 -0
  187. package/components/block-standard-content-v3/standard-content-v3.js +39 -0
  188. package/components/block-standard-content-v3/standard-content-v3.scss +11 -0
  189. package/components/block-standard-content-v3/standard-content-v3.twig +46 -0
  190. package/components/block-sticky-buy-cta-v3/group_68b061bb56543.json +172 -0
  191. package/components/block-sticky-buy-cta-v3/sticky-buy-cta-v3.js +7 -0
  192. package/components/block-sticky-buy-cta-v3/sticky-buy-cta-v3.scss +2 -0
  193. package/components/block-sticky-buy-cta-v3/sticky-buy-cta-v3.twig +92 -0
  194. package/components/block-sub-group-container-v3/group_686ceba7d6066.json +2142 -0
  195. package/components/block-sub-group-container-v3/sub-group-container-v3.js +9 -0
  196. package/components/block-sub-group-container-v3/sub-group-container-v3.scss +27 -0
  197. package/components/block-sub-group-container-v3/sub-group-container-v3.twig +59 -0
  198. package/components/block-video-content-v3/group_687190b8d26df.json +169 -0
  199. package/components/block-video-content-v3/video-content-v3.js +12 -0
  200. package/components/block-video-content-v3/video-content-v3.scss +123 -0
  201. package/components/block-video-content-v3/video-content-v3.twig +26 -0
  202. package/components/component-accent-image-v3/accent-image-v3.twig +119 -0
  203. package/components/component-accent-image-v3/group_686cd5547efd2.json +975 -0
  204. package/components/component-accent-text-v3/accent-text-v3-extra.scss +2 -0
  205. package/components/component-accent-text-v3/accent-text-v3.scss +60 -0
  206. package/components/component-accent-text-v3/group_686b91fed8f5f.json +220 -0
  207. package/components/component-accordion-v3/accordion-v3.js +113 -0
  208. package/components/component-accordion-v3/accordion-v3.scss +189 -0
  209. package/components/component-accordion-v3/accordion-v3.twig +39 -0
  210. package/components/component-accordion-v3/group_66ab7edfc6d63.json +535 -0
  211. package/components/component-animations-style-v3/animations-style-v3.twig +5 -0
  212. package/components/component-animations-v3/animations-v3.scss +161 -0
  213. package/components/component-animations-v3/animations-v3.twig +19 -0
  214. package/components/component-animations-v3/group_689f39c37980a.json +499 -0
  215. package/components/component-better-reviews-v3/better-reviews-v3.scss +137 -0
  216. package/components/component-block-padding-v3/block-padding-v3.scss +64 -0
  217. package/components/component-block-padding-v3/block-padding-v3.twig +33 -0
  218. package/components/component-block-padding-v3/group_689f66f3e26df.json +535 -0
  219. package/components/component-block-settings-v3/block-settings-v3.scss +46 -0
  220. package/components/component-block-settings-v3/block-settings-v3.twig +34 -0
  221. package/components/component-block-settings-v3/group_689f649af2ac4.json +983 -0
  222. package/components/component-blockquote-v3/blockquote-v3.scss +54 -0
  223. package/components/component-box-shadow-v3/box-shadow-v3.scss +12 -0
  224. package/components/component-buy-now-button-v3/buy-now-buttons-v3.twig +69 -0
  225. package/components/component-carousel-fields-v3/group_686fd30f4d873.json +3025 -0
  226. package/components/component-child-block-video-fields/group_6852a4f384204.json +536 -0
  227. package/components/component-content-box-settings-v3/content-box-settings-v3.scss +205 -0
  228. package/components/component-content-box-settings-v3/content-box-settings-v3.twig +156 -0
  229. package/components/component-content-box-settings-v3/group_686e6ec702acc.json +1729 -0
  230. package/components/component-content-box-v3/content-box-v3.js +6 -0
  231. package/components/component-content-box-v3/content-box-v3.scss +28 -0
  232. package/components/component-content-box-v3/content-box-v3.twig +23 -0
  233. package/components/component-content-box-v3/group_686b8a4f1fe5d.json +568 -0
  234. package/components/component-content-image-v3/content-image-v3.scss +33 -0
  235. package/components/component-content-image-v3/content-image-v3.twig +77 -0
  236. package/components/component-content-image-v3/group_68722935c428f.json +647 -0
  237. package/components/component-core-body-close-v3/core-body-close-v3.twig +2 -0
  238. package/components/component-core-body-open-v3/core-body-open-v3.twig +32 -0
  239. package/components/component-core-group-container-styles-v3/core-group-container-styles-v3.scss +48 -0
  240. package/components/component-core-head-v3/core-head-v3.twig +62 -0
  241. package/components/component-cta-selection-v3/cta-selection-v3.twig +256 -0
  242. package/components/component-cta-selection-v3/group_686e93eb832a6.json +1117 -0
  243. package/components/component-e-shop-settings-v3/e-shop-settings-v3.twig +114 -0
  244. package/components/component-element-positioning-v3/element-positioning-v3.scss +41 -0
  245. package/components/component-element-positioning-v3/element-positioning-v3.twig +42 -0
  246. package/components/component-element-positioning-v3/group_6882281544263.json +635 -0
  247. package/components/component-endpoints/endpoints.php +32 -0
  248. package/components/component-flex-layout-container-v3/flex-layout-container-v3.scss +38 -0
  249. package/components/component-flex-layout-container-v3/flex-layout-container-v3.twig +28 -0
  250. package/components/component-flex-layout-container-v3/group_6887a026bbc33.json +773 -0
  251. package/components/component-global-content-max-width-v3/global-content-max-width-v3.twig +10 -0
  252. package/components/component-global-content-max-width-v3/group_63c83de4f0a99.json +58 -0
  253. package/components/component-gradient-overlay-v3/gradient-overlay-v3.scss +43 -0
  254. package/components/component-gradient-overlay-v3/gradient-overlay-v3.twig +58 -0
  255. package/components/component-gradient-overlay-v3/group_686fd9ca50b63.json +495 -0
  256. package/components/component-grid-gap-mults-v3/grid-gap-mults-v3.twig +10 -0
  257. package/components/component-grid-gap-mults-v3/group_689221b94ce69.json +220 -0
  258. package/components/component-grid-layout-container-v3/grid-layout-container-v3.scss +154 -0
  259. package/components/component-grid-layout-container-v3/grid-layout-container-v3.twig +88 -0
  260. package/components/component-grid-layout-container-v3/group_6882282e65bf2.json +1525 -0
  261. package/components/component-grid-layout-element-v3/grid-layout-element-v3.scss +47 -0
  262. package/components/component-grid-layout-element-v3/grid-layout-element-v3.twig +23 -0
  263. package/components/component-grid-layout-element-v3/group_68822860bda9f.json +728 -0
  264. package/components/component-nav-menu-v3/group_68da703f710ff.json +432 -0
  265. package/components/component-nav-menu-v3/nav-menu-v3.scss +43 -0
  266. package/components/component-nav-menu-v3/nav-menu-v3.twig +75 -0
  267. package/components/component-responsive-image-v3/group_6867bc53f1da8.json +1515 -0
  268. package/components/component-responsive-image-v3/responsive-image-v3.scss +63 -0
  269. package/components/component-responsive-image-v3/responsive-image-v3.twig +71 -0
  270. package/components/component-responsive-picture-element-v3/responsive-picture-element-v3.twig +35 -0
  271. package/components/component-responsive-show-hide/responsive-show-hide-v3.twig +9 -0
  272. package/components/component-social-media-share-v3/social-media-share-v3-extra.scss +6 -0
  273. package/components/component-social-media-share-v3/social-media-share-v3.scss +131 -0
  274. package/components/component-social-networks-v3/social-networks-v3.scss +73 -0
  275. package/components/component-social-networks-v3/social-networks-v3.twig +43 -0
  276. package/components/component-text-editor-settings-container-classes-v3/text-editor-settings-container-classes-v3.twig +9 -0
  277. package/components/component-text-editor-settings-element-classes-v3/text-editor-settings-element-classes-v3.twig +13 -0
  278. package/components/component-text-editor-settings-v3/group_687a4e2334e37.json +1377 -0
  279. package/components/component-text-editor-settings-variables-v3/text-editor-settings-variables-v3.twig +61 -0
  280. package/components/component-video-component-v3/video-component-v3.twig +90 -0
  281. package/components/component-video-fields-v3/group_6872282f44634.json +1013 -0
  282. package/components/component-video-trigger-button-v3/video-trigger-button-v3.twig +14 -0
  283. package/components/component-wysiwyg-editor-v3/group_6867e153af466.json +127 -0
  284. package/components/component-wysiwyg-editor-v3/wysiwyg-editor-v3.twig +18 -0
  285. package/components/core-block-editor-assets-v3/core-block-editor-assets-v3.php +14 -0
  286. package/components/core-core-block-render-function-v3/core-block-render-function-v3.php +39 -0
  287. package/components/core-core-design-settings-v3/core-design-settings-v3.php +43 -0
  288. package/components/core-core-post-overrides-v3/core-post-overrides-v3.php +21 -0
  289. package/components/core-core-themes/core-themes-v3.php +68 -0
  290. package/components/core-core-typography-v3/core-typography-v3.php +239 -0
  291. package/components/core-globals/globals.php +39 -0
  292. package/components/entrypoint-entry-point-classes-v3/entry-point-classes-v3.twig +12 -0
  293. package/components/entrypoint-entry-point-html-v3/entry-point-html-v3.twig +19 -0
  294. package/components/entrypoint-entry-point-style-v3/entry-point-style-v3.twig +11 -0
  295. package/components/fields-acf-wysiwyg-options-v3/acf-wysiwyg-options-v3.php +221 -0
  296. package/components/fields-animations-v3/animations-v3.scss +127 -0
  297. package/components/fields-archive-pages-v3/group_635e777ce46d4.json +150 -0
  298. package/components/fields-cocktail-info-v3/group_64c29b7f188ca.json +686 -0
  299. package/components/fields-content-container-settings-v3/content-container-settings-v3.scss +213 -0
  300. package/components/fields-content-container-v3/content-container-v3.js +96 -0
  301. package/components/fields-content-container-v3/content-container-v3.scss +31 -0
  302. package/components/fields-core-critical-v3/core-critical-v3.scss +13 -0
  303. package/components/fields-core-css-modules-v3/core-css-modules-v3.scss +13 -0
  304. package/components/fields-core-css-sizing-vars-v3/core-css-sizing-vars-v3.scss +125 -0
  305. package/components/fields-core-cta-v3/core-cta-v3.scss +276 -0
  306. package/components/fields-core-functions-v3/core-functions-v3.scss +30 -0
  307. package/components/fields-core-generic-v3/core-generic-v3.scss +299 -0
  308. package/components/fields-core-mixins-v3/core-mixins-v3.scss +744 -0
  309. package/components/fields-core-root-variables-v3/core-root-variables-v3.scss +47 -0
  310. package/components/fields-core-typography-mixins-v3/core-typography-mixins-v3.scss +1080 -0
  311. package/components/fields-core-typography-v3/core-typography-v3.scss +457 -0
  312. package/components/fields-core-wordpress-block-editor-preview-v3/core-wordpress-block-editor-preview-v3.js +270 -0
  313. package/components/fields-core-wordpress-block-editor-preview-v3/core-wordpress-block-editor-preview-v3.scss +106 -0
  314. package/components/fields-drink-responsibly-notice-v3/group_68751257883ad.json +266 -0
  315. package/components/fields-dynamic-critical-css-v3/group_65abcd463e8d0.json +126 -0
  316. package/components/fields-e-shop-settings-v3/e-shop-settings-v3.twig +87 -0
  317. package/components/fields-e-shop-settings-v3/group_650b24b4e623d.json +803 -0
  318. package/components/fields-global-preload-v3/group_65e0bd35e781b.json +289 -0
  319. package/components/fields-image-management-service-v3/group_677813165b633.json +149 -0
  320. package/components/fields-ingredients-list/group_6900f19dadebf.json +225 -0
  321. package/components/fields-modal-popup-content-v3/group_689876f1ee3fc.json +403 -0
  322. package/components/fields-modal-popup-content-v3/modal-popup-content-v3.twig +18 -0
  323. package/components/fields-post-info-v3/group_6867bbe167dd2.json +1089 -0
  324. package/components/fields-product-info-v3/group_689098dd3a131.json +721 -0
  325. package/components/fields-upload-filesize-limit-v3/group_659d259760a1d.json +56 -0
  326. package/components/fields-video-management-services-v3/group_67b4cac05cb30.json +146 -0
  327. package/components/webc-counter-display/counter-display.css +2 -0
  328. package/components/webc-counter-display/counter-display.html +5 -0
  329. package/components/webc-counter-display/counter-display.js +30 -0
  330. package/components/webc-counter-display/index.html +30 -0
  331. package/components/webc-layout-container/index.html +108 -0
  332. package/components/webc-layout-container/layout-container.css +9 -0
  333. package/components/webc-layout-container/layout-container.html +5 -0
  334. package/components/webc-layout-container/layout-container.js +22 -0
  335. package/components/webc-loadmore-trigger/index.html +30 -0
  336. package/components/webc-loadmore-trigger/loadmore-trigger.css +20 -0
  337. package/components/webc-loadmore-trigger/loadmore-trigger.html +6 -0
  338. package/components/webc-loadmore-trigger/loadmore-trigger.js +34 -0
  339. package/components/webc-post-carousel-display-module/index.html +30 -0
  340. package/components/webc-post-carousel-display-module/post-carousel-display-module.css +36 -0
  341. package/components/webc-post-carousel-display-module/post-carousel-display-module.html +5 -0
  342. package/components/webc-post-carousel-display-module/post-carousel-display-module.js +48 -0
  343. package/components/webc-post-filter-module/dev-content/amber.webp +0 -0
  344. package/components/webc-post-filter-module/dev-content/bluey.webp +0 -0
  345. package/components/webc-post-filter-module/dev-content/chucky-vanille.webp +0 -0
  346. package/components/webc-post-filter-module/dev-content/dev-content.js +347 -0
  347. package/components/webc-post-filter-module/dev-content/dev-contentlocal.js +362 -0
  348. package/components/webc-post-filter-module/dev-content/fat-gigio-basket-life.webp +0 -0
  349. package/components/webc-post-filter-module/dev-content/fat-gigio-kitten.webp +0 -0
  350. package/components/webc-post-filter-module/dev-content/fat-gigio-sleepy.webp +0 -0
  351. package/components/webc-post-filter-module/dev-content/kai-lounging.webp +0 -0
  352. package/components/webc-post-filter-module/dev-content/kai-selfie.webp +0 -0
  353. package/components/webc-post-filter-module/dev-content/kai.webp +0 -0
  354. package/components/webc-post-filter-module/dev-content/lulu-mad.webp +0 -0
  355. package/components/webc-post-filter-module/dev-content/lulu-serious.webp +0 -0
  356. package/components/webc-post-filter-module/dev-content/martha-on-the-mat.webp +0 -0
  357. package/components/webc-post-filter-module/dev-content/max-on-the-mat.webp +0 -0
  358. package/components/webc-post-filter-module/dev-content/mephy-dreams-of-mice.webp +0 -0
  359. package/components/webc-post-filter-module/dev-content/mr-business-doing-work.webp +0 -0
  360. package/components/webc-post-filter-module/dev-content/mr-business-on-top.webp +0 -0
  361. package/components/webc-post-filter-module/dev-content/peanut-keeping-an-eye.webp +0 -0
  362. package/components/webc-post-filter-module/dev-content/pete-at-work.webp +0 -0
  363. package/components/webc-post-filter-module/dev-content/pete-bath.webp +0 -0
  364. package/components/webc-post-filter-module/dev-content/pete-dinosaur.webp +0 -0
  365. package/components/webc-post-filter-module/dev-content/pete-lawn.webp +0 -0
  366. package/components/webc-post-filter-module/dev-content/pete-snacks.webp +0 -0
  367. package/components/webc-post-filter-module/dev-content/ramses-kitten.webp +0 -0
  368. package/components/webc-post-filter-module/dev-content/ramses-school-day.webp +0 -0
  369. package/components/webc-post-filter-module/dev-content/ramses-tired.webp +0 -0
  370. package/components/webc-post-filter-module/dev-content/remy-garden-contemplation.webp +0 -0
  371. package/components/webc-post-filter-module/dev-content/sky-field.webp +0 -0
  372. package/components/webc-post-filter-module/dev-content/sky-luxury-2.webp +0 -0
  373. package/components/webc-post-filter-module/dev-content/sky-luxury.webp +0 -0
  374. package/components/webc-post-filter-module/dev-content/sky-puppy-good-dog.webp +0 -0
  375. package/components/webc-post-filter-module/dev-content/sky-puppy-pose.webp +0 -0
  376. package/components/webc-post-filter-module/dev-content/sky-security.webp +0 -0
  377. package/components/webc-post-filter-module/dev-content/vanille-asleep.webp +0 -0
  378. package/components/webc-post-filter-module/dev-content/vanille-bass.webp +0 -0
  379. package/components/webc-post-filter-module/dev-content/vanille-party.webp +0 -0
  380. package/components/webc-post-filter-module/dev-content/vanille-puppy-eyes.webp +0 -0
  381. package/components/webc-post-filter-module/dev-content/vanille-puppy.webp +0 -0
  382. package/components/webc-post-filter-module/index.html +30 -0
  383. package/components/webc-post-filter-module/post-filter-module.css +59 -0
  384. package/components/webc-post-filter-module/post-filter-module.html +13 -0
  385. package/components/webc-post-filter-module/post-filter-module.js +359 -0
  386. package/components/webc-post-filter-module-no-group/index.html +30 -0
  387. package/components/webc-post-filter-module-no-group/post-filter-module-no-group.css +59 -0
  388. package/components/webc-post-filter-module-no-group/post-filter-module-no-group.html +13 -0
  389. package/components/webc-post-filter-module-no-group/post-filter-module-no-group.js +312 -0
  390. package/components/webc-post-grid-display-module/index.html +30 -0
  391. package/components/webc-post-grid-display-module/post-grid-display-module.css +42 -0
  392. package/components/webc-post-grid-display-module/post-grid-display-module.html +6 -0
  393. package/components/webc-post-grid-display-module/post-grid-display-module.js +48 -0
  394. package/components/webc-ptfg-9000/index.html +108 -0
  395. package/components/webc-ptfg-9000/ptfg-9000.css +14 -0
  396. package/components/webc-ptfg-9000/ptfg-9000.html +1 -0
  397. package/components/webc-ptfg-9000/ptfg-9000.js +42 -0
  398. package/components/webc-responsive-image/index.html +108 -0
  399. package/components/webc-responsive-image/layout-container.css +9 -0
  400. package/components/webc-responsive-image/layout-container.js +22 -0
  401. package/components/webc-responsive-image/responsive-image.html +15 -0
  402. package/components/webc-slot-test/slot-test.html +25 -0
  403. package/components/webc-text-input-trigger/index.html +30 -0
  404. package/components/webc-text-input-trigger/text-input-trigger.css +6 -0
  405. package/components/webc-text-input-trigger/text-input-trigger.html +4 -0
  406. package/components/webc-text-input-trigger/text-input-trigger.js +33 -0
  407. package/components/webc-toggle-trigger/index.html +30 -0
  408. package/components/webc-toggle-trigger/toggle-trigger.css +13 -0
  409. package/components/webc-toggle-trigger/toggle-trigger.html +8 -0
  410. package/components/webc-toggle-trigger/toggle-trigger.js +53 -0
  411. package/createDynamicBlockScss-v3.js +25 -0
  412. package/createJsAssets-v3.js +35 -0
  413. package/createJsAssets.js +31 -0
  414. package/createNewBlock.js +131 -0
  415. package/createNewChildBlock2.js +140 -0
  416. package/createPreviewScss.js +35 -0
  417. package/datalayer-tools.mjs +2 -0
  418. package/duplicateBlock.js +123 -0
  419. package/esbuild.mjs +87 -0
  420. package/exportAllBlocks.js +147 -0
  421. package/exportBlock.js +109 -0
  422. package/exportChildBlock.js +102 -0
  423. package/exportCustomCachesToLibrary.js +76 -0
  424. package/exportEntrypointToLibrary.js +79 -0
  425. package/exportImagesToLibrary.js +68 -0
  426. package/exportSEOExtrasToLibrary.js +76 -0
  427. package/exportToLibrary.js +551 -0
  428. package/importBlock.js +92 -0
  429. package/importChildBlock.js +76 -0
  430. package/install-component.js +204 -0
  431. package/list-components.js +9 -0
  432. package/new-block-templates/template-acf-pattern.js +30 -0
  433. package/new-block-templates/template-block-json.js +37 -0
  434. package/new-block-templates/template-default.js +24 -0
  435. package/new-block-templates/template-js-blank.js +12 -0
  436. package/new-block-templates/template-scss-blank.js +6 -0
  437. package/no-audio.vtt +4 -0
  438. package/onion-loader-dev.js +260 -0
  439. package/onion-loader-local.js +222 -0
  440. package/package.json +1 -9
  441. package/public/.gitkeep +0 -0
  442. package/public/assetList.mjs +3 -0
  443. package/public/block-accent-image-v3/accent-image-v3.css +2 -0
  444. package/public/block-accent-image-v3/accent-image-v3.js +7 -0
  445. package/public/block-accordion-v3/accordion-v3.css +380 -0
  446. package/public/block-accordion-v3/accordion-v3.js +117 -0
  447. package/public/block-back-to-top-button-v3/back-to-top-button-v3.css +64 -0
  448. package/public/block-back-to-top-button-v3/back-to-top-button-v3.js +12 -0
  449. package/public/block-betterreviews-display-v3/betterreviews-display-v3.css +95 -0
  450. package/public/block-betterreviews-display-v3/betterreviews-display-v3.js +7 -0
  451. package/public/block-block-interactions-v3/block-interactions-v3.css +36 -0
  452. package/public/block-block-interactions-v3/block-interactions-v3.js +44 -0
  453. package/public/block-carousel-multi-layout-v3/carousel-multi-layout-v3.css +187 -0
  454. package/public/block-carousel-multi-layout-v3/carousel-multi-layout-v3.js +185 -0
  455. package/public/block-cocktail-recipe-v3/cocktail-recipe-v3.css +268 -0
  456. package/public/block-cocktail-recipe-v3/cocktail-recipe-v3.js +95 -0
  457. package/public/block-cover-link-v3/cover-link-v3.css +8 -0
  458. package/public/block-cover-link-v3/cover-link-v3.js +7 -0
  459. package/public/block-divider-v3/divider-v3.css +74 -0
  460. package/public/block-divider-v3/divider-v3.js +7 -0
  461. package/public/block-featured-image-gallery-v3/featured-image-gallery-v3.css +98 -0
  462. package/public/block-featured-image-gallery-v3/featured-image-gallery-v3.js +44 -0
  463. package/public/block-form-selection-v3/form-selection-v3.css +31 -0
  464. package/public/block-form-selection-v3/form-selection-v3.js +61 -0
  465. package/public/block-gradient-layer-v3/gradient-layer-v3.css +45 -0
  466. package/public/block-gradient-layer-v3/gradient-layer-v3.js +7 -0
  467. package/public/block-group-container-v3/group-container-v3.css +303 -0
  468. package/public/block-group-container-v3/group-container-v3.js +7 -0
  469. package/public/block-lottie-content-v3/lottie-content-v3.css +0 -0
  470. package/public/block-lottie-content-v3/lottie-content-v3.js +25 -0
  471. package/public/block-market-selector-v3/market-selector-v3.css +136 -0
  472. package/public/block-market-selector-v3/market-selector-v3.js +7 -0
  473. package/public/block-modal-form-v3/modal-form-v3.css +0 -0
  474. package/public/block-modal-form-v3/modal-form-v3.js +48 -0
  475. package/public/block-nav-menu-container-v3/nav-menu-container-v3.css +3 -0
  476. package/public/block-nav-menu-container-v3/nav-menu-container-v3.js +7 -0
  477. package/public/block-post-info-v3/post-info-v3.css +1148 -0
  478. package/public/block-post-info-v3/post-info-v3.js +7 -0
  479. package/public/block-post-type-filter-grid-v3/post-type-filter-grid-v3.css +873 -0
  480. package/public/block-post-type-filter-grid-v3/post-type-filter-grid-v3.js +13 -0
  481. package/public/block-product-info-v3/product-info-v3.css +846 -0
  482. package/public/block-product-info-v3/product-info-v3.js +7 -0
  483. package/public/block-raw-html-v3/raw-html-v3.css +0 -0
  484. package/public/block-raw-html-v3/raw-html-v3.js +7 -0
  485. package/public/block-responsive-table-v3/responsive-table-v3.css +50 -0
  486. package/public/block-responsive-table-v3/responsive-table-v3.js +7 -0
  487. package/public/block-scrolling-banner-v3/scrolling-banner-v3.css +93 -0
  488. package/public/block-scrolling-banner-v3/scrolling-banner-v3.js +118 -0
  489. package/public/block-section-separator-v3/section-separator-v3.css +43 -0
  490. package/public/block-section-separator-v3/section-separator-v3.js +7 -0
  491. package/public/block-single-column-container-v3/single-column-container-v3.css +14 -0
  492. package/public/block-single-column-container-v3/single-column-container-v3.js +7 -0
  493. package/public/block-single-responsive-image-v3/single-responsive-image-v3.css +61 -0
  494. package/public/block-single-responsive-image-v3/single-responsive-image-v3.js +7 -0
  495. package/public/block-site-copyright-notice-v3/site-copyright-notice-v3.css +20 -0
  496. package/public/block-site-copyright-notice-v3/site-copyright-notice-v3.js +44 -0
  497. package/public/block-site-logo-container-v3/site-logo-container-v3.css +18 -0
  498. package/public/block-site-logo-container-v3/site-logo-container-v3.js +7 -0
  499. package/public/block-site-title-and-tagline-v3/site-title-and-tagline-v3.css +12 -0
  500. package/public/block-site-title-and-tagline-v3/site-title-and-tagline-v3.js +7 -0
  501. package/public/block-smash-balloon-social-media-v3/smash-balloon-social-media-v3.css +25 -0
  502. package/public/block-smash-balloon-social-media-v3/smash-balloon-social-media-v3.js +8 -0
  503. package/public/block-social-networks-v3/social-networks-v3.css +74 -0
  504. package/public/block-social-networks-v3/social-networks-v3.js +7 -0
  505. package/public/block-spacer-v3/spacer-v3.css +16 -0
  506. package/public/block-spacer-v3/spacer-v3.js +2 -0
  507. package/public/block-spotify-embed-v3/spotify-embed-v3.css +7 -0
  508. package/public/block-spotify-embed-v3/spotify-embed-v3.js +7 -0
  509. package/public/block-standard-content-v3/standard-content-v3.css +423 -0
  510. package/public/block-standard-content-v3/standard-content-v3.js +7 -0
  511. package/public/block-sticky-buy-cta-v3/sticky-buy-cta-v3.css +0 -0
  512. package/public/block-sticky-buy-cta-v3/sticky-buy-cta-v3.js +7 -0
  513. package/public/block-sub-group-container-v3/sub-group-container-v3.css +288 -0
  514. package/public/block-sub-group-container-v3/sub-group-container-v3.js +2 -0
  515. package/public/block-video-content-v3/video-content-v3.css +102 -0
  516. package/public/block-video-content-v3/video-content-v3.js +11 -0
  517. package/public/dynamicBlockScss-v3.css +6392 -0
  518. package/public/dynamicBlockScss-v3.scss +37 -0
  519. package/public/jsAssets.mjs +4 -0
  520. package/public/publicBundleBase.css +4742 -0
  521. package/public/publicBundleBase.scss +11 -0
  522. package/removeBlock.js +124 -0
  523. package/update-all-components.js +96 -0
  524. package/update-component.js +538 -0
  525. package/update-template.js +538 -0
@@ -0,0 +1,38 @@
1
+ # This workflow will run tests using node and then publish a package to NPM when a release is created
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3
+
4
+ name: Node.js Package
5
+
6
+ on:
7
+ release:
8
+ types: [published]
9
+ branches:
10
+ - master
11
+ permissions:
12
+ id-token: write # Required for OIDC
13
+ contents: read
14
+
15
+ jobs:
16
+ build:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: actions/setup-node@v4
21
+ with:
22
+ node-version: 24
23
+ # Ensure npm 11.5.1 or later is installed
24
+ - name: Update npm
25
+ run: npm install -g npm@latest
26
+ - run: npm ci
27
+
28
+
29
+ publish:
30
+ needs: build
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: actions/setup-node@v4
35
+ with:
36
+ node-version: 24
37
+ registry-url: https://registry.npmjs.org/
38
+ - run: npm publish
package/.prettierrc ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "useTabs": true,
3
+ "overrides": [
4
+ {
5
+ "files": "*.test.js",
6
+ "options": {
7
+ "semi": true
8
+ }
9
+ },
10
+ {
11
+ "files": ["*.js", "*.css", "*.scss"],
12
+ "options": {
13
+ "useTabs": true,
14
+ "semi": true,
15
+ "singleQuote": true,
16
+ "trailingComma": "none",
17
+ "tabWidth": 4,
18
+ "bracketSpacing": false
19
+ }
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,94 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { promisify } from 'node:util';
4
+
5
+ // Import the function to be tested
6
+ import updateComponent from '../update-component.js';
7
+
8
+ // Promisify the fs functions used in the copyBlockComponent function
9
+ const readdirPromisified = promisify(fs.readdir);
10
+ const accessPromisified = promisify(fs.access);
11
+
12
+ // Create a utility function to remove the file (used after each test)
13
+ const removeFile = async (filePath) => {
14
+ try {
15
+ await fs.promises.unlink(filePath);
16
+ } catch (err) {
17
+ // If the file doesn't exist, ignore the error
18
+ if (err.code !== 'ENOENT') {
19
+ console.error('Error removing the file:', err);
20
+ }
21
+ }
22
+ };
23
+
24
+ xdescribe('copyBlockComponent function', () => {
25
+ const libraryPath = 'testFiles/library'; // Assuming the libraryPath is defined for the tests
26
+ const componentName = 'TestComponent';
27
+
28
+ // Before each test, create the source directory with some test files
29
+ beforeEach(async () => {
30
+ try {
31
+ const sourceDir = path.join(libraryPath, 'components', componentName);
32
+ await fs.promises.mkdir(sourceDir, { recursive: true });
33
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.php'), 'Test PHP content');
34
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.js'), 'Test JS content');
35
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.scss'), 'Test SCSS content');
36
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.json'), 'Test JSON content');
37
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.twig'), 'Test Twig content');
38
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.vue'), 'Test Vue content');
39
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.extra'), 'Test Extra content');
40
+ await fs.promises.writeFile(path.join(sourceDir, 'TestComponent.spec'), 'Test Spec content');
41
+ } catch (err) {
42
+ console.error('Error creating the source directory:', err);
43
+ }
44
+ });
45
+
46
+ // After each test, remove the source and destination files
47
+ afterEach(async () => {
48
+ try {
49
+ const sourceDir = path.join(libraryPath, 'components', componentName);
50
+ await fs.promises.rmdir(sourceDir, { recursive: true });
51
+ await removeFile('./inc/acf-blocks/TestComponent.php');
52
+ await removeFile('./assets/js/blocks/TestComponent.js');
53
+ await removeFile('./assets/scss/blocks/TestComponent.scss');
54
+ await removeFile('./acf-json/TestComponent.json');
55
+ await removeFile('./views/blocks/TestComponent.twig');
56
+ await removeFile('./assets/vue/blocks/TestComponent.vue');
57
+ await removeFile('./assets/scss/blocks/TestComponent/TestComponent.extra');
58
+ } catch (err) {
59
+ console.error('Error cleaning up the test files:', err);
60
+ }
61
+ });
62
+
63
+ it('should copy files from source to destination based on the file types', async () => {
64
+ // Call the function to be tested
65
+ await updateComponent.copyBlockComponent(componentName);
66
+
67
+ // Assert that the destination files exist for each file type
68
+ const destinationFiles = [
69
+ './inc/acf-blocks/TestComponent.php',
70
+ './assets/js/blocks/TestComponent.js',
71
+ './assets/scss/blocks/TestComponent.scss',
72
+ './acf-json/TestComponent.json',
73
+ './views/blocks/TestComponent.twig',
74
+ './assets/vue/blocks/TestComponent.vue',
75
+ './assets/scss/blocks/TestComponent/TestComponent.extra',
76
+ ];
77
+
78
+ for (const filePath of destinationFiles) {
79
+ const fileExists = await accessPromisified(filePath)
80
+ .then(() => true)
81
+ .catch(() => false);
82
+ expect(fileExists).toBe(true);
83
+ }
84
+
85
+ // Assert that the destination files contain the same content as the source files
86
+ const sourceDir = path.join(libraryPath, 'components', componentName);
87
+ const fileTypes = ['php', 'js', 'scss', 'json', 'twig', 'vue', 'extra'];
88
+ for (const fileType of fileTypes) {
89
+ const sourceContent = await fs.promises.readFile(path.join(sourceDir, `TestComponent.${fileType}`), 'utf-8');
90
+ const destinationContent = await fs.promises.readFile(path.join(`./${fileType === 'extra' ? 'assets/scss/blocks/TestComponent' : fileType}s/TestComponent.${fileType}`), 'utf-8');
91
+ expect(destinationContent).toBe(sourceContent);
92
+ }
93
+ });
94
+ });
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import updateComponent from '../update-component.js';
6
+
7
+
8
+ describe('copyFile function', () => {
9
+ const sourceFilePath = './__spec__/files/source.txt';
10
+ const destinationFilePath = './__spec__/files/destination.txt';
11
+
12
+ // Helper function to delete a file if it exists
13
+ const deleteFileIfExists = (filePath) => {
14
+ if (fs.existsSync(filePath)) {
15
+ fs.unlinkSync(destinationFilePath);
16
+ }
17
+ };
18
+
19
+ beforeEach(() => {
20
+ deleteFileIfExists(destinationFilePath);
21
+ jest.resetModules();
22
+ jest.clearAllMocks();
23
+ });
24
+ afterEach(() => {
25
+ deleteFileIfExists(destinationFilePath);
26
+ });
27
+
28
+
29
+ // Test case 1: Ensure the file is copied when destination does not exists
30
+ test('copies file if it does not exist', async () => {
31
+ await updateComponent.copyFile(sourceFilePath, destinationFilePath);
32
+
33
+ // Wait for a short delay to allow the asynchronous operation to complete
34
+ await new Promise((resolve) => setTimeout(resolve, 150)); // Adjust the delay time as needed
35
+
36
+ expect(fs.existsSync(destinationFilePath)).toBe(true);
37
+ });
38
+
39
+ // Test case 2: Ensure the file is copied even if the destination exists
40
+ test('overwrite file when destination file already exists', async () => {
41
+ // Create a dummy destination file to simulate an existing file
42
+ fs.writeFileSync(destinationFilePath, 'Dummy content Newer');
43
+
44
+ await updateComponent.copyFile(sourceFilePath, destinationFilePath);
45
+ // Wait for a short delay to allow the asynchronous operation to complete
46
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Adjust the delay time as needed
47
+
48
+ // Assert that the destination file still exists after the function call
49
+ expect(fs.existsSync(destinationFilePath)).toBe(true);
50
+
51
+ // get file content
52
+ const destinationContent = fs.readFileSync(destinationFilePath, 'utf8');
53
+
54
+ // content should be
55
+ expect(destinationContent).toBe('Dummy content');
56
+ });
57
+
58
+ // Test case 3: Ensure the function handles errors properly
59
+ test('handles errors when copying the file', async () => {
60
+ // Create a dummy destination file to simulate an existing file
61
+ // fs.writeFileSync(destinationFilePath, 'Dummy content');
62
+ const sourceFilePath = './__spec__/nonexistent_source.txt';
63
+
64
+ // Ensure that console.error is called with the error message
65
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
66
+
67
+ await updateComponent.copyFileKeeping(sourceFilePath, destinationFilePath);
68
+ // Wait for a short delay to allow the asynchronous operation to complete
69
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Adjust the delay time as needed
70
+
71
+ // Assert that console.error was called with the expected error message
72
+ expect(consoleErrorSpy).toHaveBeenCalled();
73
+
74
+ // Restore the original console.error function
75
+ consoleErrorSpy.mockRestore();
76
+ });
77
+
78
+ });
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ import fs from 'node:fs';
4
+ // import path from 'node:path';
5
+ import updateComponent from '../update-component.js';
6
+
7
+ describe('copyFileKeeping', () => {
8
+ const sourceFilePath = './__spec__/files/source.txt';
9
+ const destinationFilePath = './__spec__/files/destination.txt';
10
+
11
+ // Helper function to delete a file if it exists
12
+ const deleteFileIfExists = (filePath) => {
13
+ if (fs.existsSync(filePath)) {
14
+ fs.unlinkSync(destinationFilePath);
15
+ }
16
+ };
17
+
18
+ beforeEach(() => {
19
+ deleteFileIfExists(destinationFilePath);
20
+ jest.resetModules();
21
+ jest.clearAllMocks();
22
+ });
23
+ afterEach(() => {
24
+ deleteFileIfExists(destinationFilePath);
25
+ });
26
+
27
+ // Test case 1: Ensure the file is copied when destination does not exists
28
+ test('copies file if it does not exist', async () => {
29
+ await updateComponent.copyFileKeeping(sourceFilePath, destinationFilePath);
30
+
31
+ // Wait for a short delay to allow the asynchronous operation to complete
32
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Adjust the delay time as needed
33
+
34
+ expect(fs.existsSync(destinationFilePath)).toBe(true);
35
+ });
36
+
37
+ // Test case 2: Ensure the file is NOT copied when destination exists
38
+ test('copies file when destination file already exists', async () => {
39
+ // Create a dummy destination file to simulate an existing file
40
+ fs.writeFileSync(destinationFilePath, 'Dummy content Newer');
41
+
42
+ await updateComponent.copyFileKeeping(sourceFilePath, destinationFilePath);
43
+ // Wait for a short delay to allow the asynchronous operation to complete
44
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Adjust the delay time as needed
45
+
46
+ // Assert that the destination file still exists after the function call
47
+ expect(fs.existsSync(destinationFilePath)).toBe(true);
48
+
49
+ // get file content
50
+ const destinationContent = fs.readFileSync(destinationFilePath, 'utf8');
51
+
52
+ expect(destinationContent).toBe('Dummy content Newer');
53
+ });
54
+
55
+ // Test case 3: Ensure the function handles errors properly
56
+ test('handles errors when copying the file', async () => {
57
+ // Create a dummy destination file to simulate an existing file
58
+ // fs.writeFileSync(destinationFilePath, 'Dummy content');
59
+ const sourceFilePath = './__spec__/nonexistent_source.txt';
60
+
61
+ // Ensure that console.error is called with the error message
62
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
63
+
64
+ await updateComponent.copyFileKeeping(sourceFilePath, destinationFilePath);
65
+ // Wait for a short delay to allow the asynchronous operation to complete
66
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Adjust the delay time as needed
67
+
68
+ // Assert that console.error was called with the expected error message
69
+ expect(consoleErrorSpy).toHaveBeenCalled();
70
+
71
+ // Restore the original console.error function
72
+ consoleErrorSpy.mockRestore();
73
+ });
74
+ });
@@ -0,0 +1 @@
1
+ Dummy content
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ import * as glob from 'glob';
4
+ const fs = jest.mock('fs');
5
+ import updateAllComponents from '../update-all-components.js';
6
+
7
+ describe('getComponentsList', () => {
8
+ afterEach(() => {
9
+ jest.resetModules(); // Reset all mocked modules after each test
10
+ });
11
+
12
+ it('returns the correct components list when project-components-list.json is found', () => {
13
+ const projectComponentsList = {
14
+ "block": [
15
+ "accordion",
16
+ "standard-content-v2"
17
+ ],
18
+ "fields": [
19
+ "video-standard",
20
+ "responsive-show-hide"
21
+ ],
22
+ "admin": [
23
+ "filter-pages-by-block",
24
+ "resizable-editor-sidebar"
25
+ ]
26
+ };
27
+
28
+ jest.mock('fs', () => ({
29
+ existsSync: jest.fn().mockReturnValue(true),
30
+ readFileSync: jest
31
+ .fn()
32
+ .mockReturnValue(JSON.stringify(projectComponentsList)),
33
+ }));
34
+
35
+ const result = updateAllComponents.getComponentsList();
36
+
37
+ // random order
38
+ result.map(m => expect([
39
+ "block-accordion",
40
+ "block-standard-content-v2",
41
+
42
+ "admin-core-mixins",
43
+ "admin-core-design-system",
44
+ "admin-core-generic",
45
+ "admin-core-critical",
46
+ "admin-core-functions",
47
+
48
+ "admin-filter-pages-by-block",
49
+ "admin-resizable-editor-sidebar",
50
+ "fields-video-standard",
51
+ "fields-responsive-show-hide",
52
+
53
+ "admin-core-cta",
54
+ "admin-core-root-variables",
55
+ "admin-core-css-sizing-vars",
56
+ "admin-core-colour-data-config",
57
+ "admin-core-wordpress-block-editor-preview",
58
+ "admin-core-editor-cta-style-select",
59
+ "admin-core-gradient-designer",
60
+ "admin-core-typography",
61
+ ]).toContain(m));
62
+ });
63
+
64
+ it('returns the correct components list when project-components-list.json is not found', () => {
65
+ jest.mock('fs', () => ({
66
+ existsSync: jest.fn().mockReturnValue(false), // Simulate 'project-components-list.json' not existing
67
+ }));
68
+
69
+ jest.mock('glob', () => ({
70
+ // mock components in the filesystem
71
+ sync: jest.fn().mockReturnValue([
72
+ `./node_modules/@pernod-ricard-global-cms/cbl-component-library/components/component1`,
73
+ `./node_modules/@pernod-ricard-global-cms/cbl-component-library/components/component2`,
74
+ ]),
75
+ }));
76
+ const result = updateAllComponents.getComponentsList();
77
+
78
+ // random order
79
+ result.map(m => expect([
80
+ "admin-core-mixins",
81
+ "admin-core-design-system",
82
+ "admin-core-generic",
83
+ "admin-core-critical",
84
+ "admin-core-functions",
85
+
86
+ "component1",
87
+ "component2",
88
+
89
+ "admin-core-cta",
90
+ "admin-core-root-variables",
91
+ "admin-core-css-sizing-vars",
92
+ "admin-core-colour-data-config",
93
+ "admin-core-wordpress-block-editor-preview",
94
+ "admin-core-editor-cta-style-select",
95
+ "admin-core-gradient-designer",
96
+ "admin-core-typography",
97
+ ]).toContain(m));
98
+ });
99
+ });
@@ -0,0 +1,165 @@
1
+ 'use strict';
2
+
3
+ // import * as glob from 'glob';
4
+ import fs from 'node:fs';
5
+ // const fse = require("fs-extra");
6
+
7
+ // import path from 'node:path';
8
+ import updateComponent from '../update-component.js';
9
+
10
+ jest.mock('fs');
11
+
12
+ describe('getExtension', () => {
13
+ test('Check getExtension js', () => {
14
+ const result = updateComponent.getExtension('testing.js')
15
+ expect(result).toBe('js');
16
+ });
17
+
18
+ test('Check getExtension spec.js', () => {
19
+ const result = updateComponent.getExtension('testing.spec.js')
20
+ expect(result).toBe('js');
21
+ });
22
+ });
23
+
24
+ describe('getFileType function', () => {
25
+ it('should return "extra" for filenames ending with "-extra.scss"', () => {
26
+ const result = updateComponent.getFileType('styles-extra.scss');
27
+ expect(result).toBe('extra');
28
+ });
29
+
30
+ it('should return "spec" for filenames ending with "spec.js"', () => {
31
+ const result = updateComponent.getFileType('test.spec.js');
32
+ expect(result).toBe('spec');
33
+ });
34
+
35
+ it('should return the correct file extension for other filenames', () => {
36
+ const result = updateComponent.getFileType('script.js');
37
+ expect(result).toBe('js');
38
+ });
39
+
40
+ it('should return an empty string for filenames without extensions', () => {
41
+ const result = updateComponent.getFileType('README');
42
+ expect(result).toBe('');
43
+ });
44
+ });
45
+
46
+ describe('checkFolder function', () => {
47
+ beforeEach(() => {
48
+ jest.resetModules();
49
+ jest.clearAllMocks();
50
+ });
51
+
52
+ it('should return true for an existing directory', () => {
53
+ // Mocking fs.existsSync to return true
54
+ fs.existsSync.mockReturnValue(true);
55
+ // Mocking fs.statSync to return an object with isDirectory function returning true
56
+ fs.statSync.mockReturnValue({ isDirectory: () => true });
57
+
58
+ const result = updateComponent.checkFolder('/path/to/existing/folder');
59
+ expect(result).toBe(true);
60
+ // Ensure that the fs.existsSync function was called with the correct argument
61
+ expect(fs.existsSync).toHaveBeenCalledWith('/path/to/existing/folder');
62
+ // Ensure that the fs.statSync function was called with the correct argument
63
+ expect(fs.statSync).toHaveBeenCalledWith('/path/to/existing/folder');
64
+ });
65
+
66
+ it('should return false for a non-existing directory', () => {
67
+ // Mocking fs.existsSync to return false
68
+ fs.existsSync.mockReturnValue(false);
69
+
70
+ const result = updateComponent.checkFolder('/path/to/non_existing/folder');
71
+ expect(result).toBe(false);
72
+ // Ensure that the fs.existsSync function was called with the correct argument
73
+ expect(fs.existsSync).toHaveBeenCalledWith('/path/to/non_existing/folder');
74
+ // Ensure that the fs.statSync function was not called (since the folder does not exist)
75
+ expect(fs.statSync).not.toHaveBeenCalled();
76
+ });
77
+
78
+ it('should return false for an existing file (not a directory)', () => {
79
+ // Mocking fs.existsSync to return true
80
+ fs.existsSync.mockReturnValue(true);
81
+ // Mocking fs.statSync to return an object with isDirectory function returning false
82
+ fs.statSync.mockReturnValue({ isDirectory: () => false });
83
+
84
+ const result = updateComponent.checkFolder('/path/to/existing/file');
85
+ expect(result).toBe(false);
86
+ // Ensure that the fs.existsSync function was called with the correct argument
87
+ expect(fs.existsSync).toHaveBeenCalledWith('/path/to/existing/file');
88
+ // Ensure that the fs.statSync function was called with the correct argument
89
+ expect(fs.statSync).toHaveBeenCalledWith('/path/to/existing/file');
90
+ });
91
+ });
92
+
93
+ describe('getProjectName function', () => {
94
+ beforeEach(() => {
95
+ jest.resetModules();
96
+ });
97
+
98
+ test('should return the project name from package.json', () => {
99
+ const projectName = 'Your Project Name';
100
+ const packageJson = {
101
+ name: projectName
102
+ };
103
+ fs.readFileSync.mockReturnValue(JSON.stringify(packageJson));
104
+ const result = updateComponent.getProjectName();
105
+ expect(result).toBe(projectName);
106
+ });
107
+
108
+ test('should capitalize the project name if it does not start with "the"', () => {
109
+ const projectName = 'your project name';
110
+ const packageJson = {
111
+ name: projectName
112
+ };
113
+ fs.readFileSync.mockReturnValue(JSON.stringify(packageJson));
114
+ const result = updateComponent.getProjectName();
115
+ expect(result).toBe('Your project name');
116
+ });
117
+
118
+ test('should capitalize and prepend "The" to the project name if it starts with "the"', () => {
119
+ const projectName = 'theglenlivet';
120
+ const packageJson = {
121
+ name: projectName
122
+ };
123
+ fs.readFileSync.mockReturnValue(JSON.stringify(packageJson));
124
+ const result = updateComponent.getProjectName();
125
+ expect(result).toBe('The Glenlivet');
126
+ });
127
+
128
+ test('should return default project name if package.json is not found', () => {
129
+ fs.readFileSync.mockImplementation(() => {
130
+ throw new Error('File not found');
131
+ });
132
+ // Ensure that console.error is called with the error message
133
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
134
+
135
+ const result = updateComponent.getProjectName();
136
+ expect(result).toBe('Global Theme');
137
+ // Assert that console.error was called with the expected error message
138
+ expect(consoleErrorSpy).toHaveBeenCalled();
139
+ });
140
+ });
141
+
142
+ describe('getFileType function', () => {
143
+ it('should return "extra" for filenames ending with "-extra.scss"', () => {
144
+ const filename = 'style-extra.scss';
145
+ expect(updateComponent.getFileType(filename)).toBe('extra');
146
+ });
147
+
148
+ it('should return "spec" for filenames ending with "spec.js"', () => {
149
+ const filename = 'test.spec.js';
150
+ expect(updateComponent.getFileType(filename)).toBe('spec');
151
+ });
152
+
153
+ it('should call getExtension for other filenames', () => {
154
+ const addSpy = jest.spyOn(updateComponent, 'getExtension');
155
+ // console.log(addSpy)
156
+ // return
157
+ const filename = 'example.txt';
158
+ const result = updateComponent.getFileType(filename);
159
+ // expect(addSpy).toHaveBeenCalledWith(filename);
160
+ expect(result).toBe('txt');
161
+
162
+ // Don't forget to restore the original 'add' function after the test
163
+ addSpy.mockRestore();
164
+ });
165
+ });
@@ -0,0 +1,69 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import {globSync} from 'glob';
4
+
5
+ const dynamicEntryPointsJs = globSync(`./components/block-*/*-v3.js`).map(
6
+ (filePath) => {
7
+ const assetKey = path.basename(filePath, '.js');
8
+ return assetKey;
9
+ }
10
+ );
11
+ const dynamicEntryPointsJsV4 = globSync(`./components/block-*/*-v4.js`).map(
12
+ (filePath) => {
13
+ const assetKey = path.basename(filePath, '.js');
14
+ return assetKey;
15
+ }
16
+ );
17
+ const dynamicEntryPointsScss = globSync(`./components/block-*/*-v3.scss`).map(
18
+ (filePath) => {
19
+ const assetKey = path.basename(filePath, '.js');
20
+ return assetKey;
21
+ }
22
+ );
23
+ const dynamicEntryPointsCss = globSync(`./components/block-*/*-v4.css`).map(
24
+ (filePath) => {
25
+ const assetKey = path.basename(filePath, '.js');
26
+ return assetKey;
27
+ }
28
+ );
29
+ const assetArrayJs = dynamicEntryPointsJs.map((entry) => {
30
+ return `./components/block-${entry}/${entry}.js`;
31
+ });
32
+ const assetArrayJsV4 = dynamicEntryPointsJsV4.map((entry) => {
33
+ return `./components/block-${entry}/${entry}.js`;
34
+ });
35
+
36
+ const assetArrayScss = dynamicEntryPointsScss.map((entry) => {
37
+ let filename = entry.replace('.scss', '');
38
+ return `./components/block-${filename}/${filename}.scss`;
39
+ });
40
+ const assetArrayCss = dynamicEntryPointsCss.map((entry) => {
41
+ let filename = entry.replace('.css', '');
42
+ return `./components/block-${filename}/${filename}.css`;
43
+ });
44
+
45
+ // Create the directory path for the target file
46
+ const jsModulePath = path.join('./public');
47
+ const jsAssetsFilePath = path.join(jsModulePath, 'assetList.mjs');
48
+
49
+ // Create directories if they don't exist
50
+ fs.mkdirSync(jsModulePath, {recursive: true});
51
+
52
+ // Write the initial content to the target file
53
+ fs.writeFileSync(jsAssetsFilePath, '// This file is auto-generated.\n');
54
+
55
+ // Create directories if they don't exist
56
+ const dirPath = path.dirname(jsAssetsFilePath);
57
+ fs.mkdirSync(dirPath, {recursive: true});
58
+
59
+ const data = `
60
+ const dynamicAssets = ${JSON.stringify([
61
+ ...assetArrayScss,
62
+ ...assetArrayCss,
63
+ ...assetArrayJs,
64
+ ...assetArrayJsV4
65
+ ])};
66
+ export default dynamicAssets;
67
+ `;
68
+
69
+ fs.writeFileSync(jsAssetsFilePath, data);
@@ -0,0 +1,6 @@
1
+ //Breakpoints
2
+ $mobile: 375px;
3
+ $tabPortrait: 768px;
4
+ $tabLandscape: 1024px;
5
+ $desktop: 1440px;
6
+ $desktop-fullhd: 1920px;
@@ -0,0 +1,4 @@
1
+ import('./assembleAssetList.js');
2
+ import('./createDynamicBlockScss-v3.js');
3
+ import('./createJsAssets-v3.js');
4
+ import('./esbuild.mjs');
@@ -0,0 +1,17 @@
1
+ import 'dotenv/config';
2
+ import fs from 'node:fs';
3
+ import {fork} from 'node:child_process';
4
+
5
+ const themePath = process.env.THEME_PATH || 'web/wp-content/themes/global-theme';
6
+
7
+ const paths = {
8
+ createJsAssets: `${themePath}/assets/js/modules/jsAssets.js`,
9
+ createPreviewScss: `${themePath}/assets/scss/modules/dynamicBlocksPreview.scss`,
10
+ };
11
+
12
+ Object.keys(paths).forEach((key) => {
13
+ if (!fs.existsSync(paths[key])) {
14
+ console.log(`creating missing assets with ${key}`);
15
+ fork(`./node_modules/@pernod-ricard-global-cms/jsbuildutils/${key}.js`);
16
+ }
17
+ });
@@ -0,0 +1,7 @@
1
+ export default function accentimagev3Js ( options = {} ) {
2
+ try {
3
+ const { block } = options;
4
+ } catch ( error ) {
5
+ console.error( error );
6
+ }
7
+ }