@eightshift/frontend-libs-tailwind 1.0.0

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 (275) hide show
  1. package/.gitattributes +37 -0
  2. package/.github/CODEOWNERS +1 -0
  3. package/.github/CONTRIBUTING.md +17 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +10 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +10 -0
  6. package/.github/ISSUE_TEMPLATE/question.md +10 -0
  7. package/.github/PULL_REQUEST_TEMPLATE.md +11 -0
  8. package/.github/workflows/ci.yml +31 -0
  9. package/.husky/pre-commit +1 -0
  10. package/.prettierrc +14 -0
  11. package/.stylelintrc +4 -0
  12. package/CHANGELOG.md +13 -0
  13. package/CODE_OF_CONDUCT.md +76 -0
  14. package/LICENSE +21 -0
  15. package/README.md +24 -0
  16. package/blocks/init/assets/application-admin.js +10 -0
  17. package/blocks/init/assets/application.js +13 -0
  18. package/blocks/init/assets/images/index.js +5 -0
  19. package/blocks/init/assets/scripts/application-admin.js +7 -0
  20. package/blocks/init/assets/scripts/application.js +3 -0
  21. package/blocks/init/assets/scripts/theme-colors.js +39 -0
  22. package/blocks/init/assets/styles/application-admin.css +6 -0
  23. package/blocks/init/assets/styles/application.css +3 -0
  24. package/blocks/init/src/Blocks/assets/application-blocks-editor.js +14 -0
  25. package/blocks/init/src/Blocks/assets/application-blocks-frontend.js +13 -0
  26. package/blocks/init/src/Blocks/assets/application-blocks.js +9 -0
  27. package/blocks/init/src/Blocks/assets/scripts/application-blocks-editor.js +65 -0
  28. package/blocks/init/src/Blocks/assets/scripts/application-blocks-frontend.js +24 -0
  29. package/blocks/init/src/Blocks/assets/scripts/link-section-editor.js +258 -0
  30. package/blocks/init/src/Blocks/assets/scripts/shared.js +25 -0
  31. package/blocks/init/src/Blocks/assets/styles/application-blocks-editor.css +15 -0
  32. package/blocks/init/src/Blocks/assets/styles/application-blocks-frontend.css +12 -0
  33. package/blocks/init/src/Blocks/assets/styles/application-blocks.css +0 -0
  34. package/blocks/init/src/Blocks/assets/styles/editor/editor-overrides.css +15 -0
  35. package/blocks/init/src/Blocks/assets/styles/tailwind.css +34 -0
  36. package/blocks/init/src/Blocks/components/admin-theme-options/admin-theme-options.php +20 -0
  37. package/blocks/init/src/Blocks/components/admin-theme-options/assets-admin/index.js +36 -0
  38. package/blocks/init/src/Blocks/components/admin-theme-options/assets-admin/pages/parts.js +55 -0
  39. package/blocks/init/src/Blocks/components/admin-theme-options/manifest.json +5 -0
  40. package/blocks/init/src/Blocks/components/button/assets/index.js +22 -0
  41. package/blocks/init/src/Blocks/components/button/button.php +77 -0
  42. package/blocks/init/src/Blocks/components/button/components/button-editor.js +40 -0
  43. package/blocks/init/src/Blocks/components/button/components/button-options.js +135 -0
  44. package/blocks/init/src/Blocks/components/button/manifest.json +299 -0
  45. package/blocks/init/src/Blocks/components/card/card.php +42 -0
  46. package/blocks/init/src/Blocks/components/card/components/card-editor.js +39 -0
  47. package/blocks/init/src/Blocks/components/card/components/card-options.js +56 -0
  48. package/blocks/init/src/Blocks/components/card/manifest.json +111 -0
  49. package/blocks/init/src/Blocks/components/head/head.php +52 -0
  50. package/blocks/init/src/Blocks/components/head/manifest.json +17 -0
  51. package/blocks/init/src/Blocks/components/heading/components/heading-editor.js +30 -0
  52. package/blocks/init/src/Blocks/components/heading/components/heading-options.js +62 -0
  53. package/blocks/init/src/Blocks/components/heading/heading.php +45 -0
  54. package/blocks/init/src/Blocks/components/heading/manifest.json +76 -0
  55. package/blocks/init/src/Blocks/components/hero/components/hero-editor.js +42 -0
  56. package/blocks/init/src/Blocks/components/hero/components/hero-options.js +100 -0
  57. package/blocks/init/src/Blocks/components/hero/hero.php +45 -0
  58. package/blocks/init/src/Blocks/components/hero/manifest.json +96 -0
  59. package/blocks/init/src/Blocks/components/icon/components/icon-editor.js +23 -0
  60. package/blocks/init/src/Blocks/components/icon/components/icon-options.js +65 -0
  61. package/blocks/init/src/Blocks/components/icon/icon.php +34 -0
  62. package/blocks/init/src/Blocks/components/icon/manifest.json +1234 -0
  63. package/blocks/init/src/Blocks/components/image/components/image-editor.js +65 -0
  64. package/blocks/init/src/Blocks/components/image/components/image-options.js +111 -0
  65. package/blocks/init/src/Blocks/components/image/image.php +62 -0
  66. package/blocks/init/src/Blocks/components/image/manifest.json +125 -0
  67. package/blocks/init/src/Blocks/components/list/components/list-editor.js +30 -0
  68. package/blocks/init/src/Blocks/components/list/components/list-options.js +62 -0
  69. package/blocks/init/src/Blocks/components/list/list.php +32 -0
  70. package/blocks/init/src/Blocks/components/list/manifest.json +127 -0
  71. package/blocks/init/src/Blocks/components/load-more/assets/index.js +19 -0
  72. package/blocks/init/src/Blocks/components/load-more/assets/load-more.js +147 -0
  73. package/blocks/init/src/Blocks/components/load-more/components/load-more-editor.js +14 -0
  74. package/blocks/init/src/Blocks/components/load-more/components/load-more-options.js +18 -0
  75. package/blocks/init/src/Blocks/components/load-more/load-more.php +47 -0
  76. package/blocks/init/src/Blocks/components/load-more/manifest.json +39 -0
  77. package/blocks/init/src/Blocks/components/modal/assets/index.js +27 -0
  78. package/blocks/init/src/Blocks/components/modal/manifest.json +48 -0
  79. package/blocks/init/src/Blocks/components/modal/modal.php +46 -0
  80. package/blocks/init/src/Blocks/components/paragraph/components/paragraph-editor.js +40 -0
  81. package/blocks/init/src/Blocks/components/paragraph/components/paragraph-options.js +48 -0
  82. package/blocks/init/src/Blocks/components/paragraph/manifest.json +83 -0
  83. package/blocks/init/src/Blocks/components/paragraph/paragraph.php +33 -0
  84. package/blocks/init/src/Blocks/components/post-header/manifest.json +5 -0
  85. package/blocks/init/src/Blocks/components/post-header/post-header.php +24 -0
  86. package/blocks/init/src/Blocks/components/quote/components/quote-editor.js +53 -0
  87. package/blocks/init/src/Blocks/components/quote/components/quote-options.js +29 -0
  88. package/blocks/init/src/Blocks/components/quote/manifest.json +47 -0
  89. package/blocks/init/src/Blocks/components/quote/quote.php +49 -0
  90. package/blocks/init/src/Blocks/components/share/assets/index.js +39 -0
  91. package/blocks/init/src/Blocks/components/share/components/share-editor.js +25 -0
  92. package/blocks/init/src/Blocks/components/share/components/share-options.js +112 -0
  93. package/blocks/init/src/Blocks/components/share/manifest.json +72 -0
  94. package/blocks/init/src/Blocks/components/share/share.php +66 -0
  95. package/blocks/init/src/Blocks/components/tracking-before-body-end/manifest.json +5 -0
  96. package/blocks/init/src/Blocks/components/tracking-before-body-end/tracking-before-body-end.php +9 -0
  97. package/blocks/init/src/Blocks/components/tracking-head/manifest.json +5 -0
  98. package/blocks/init/src/Blocks/components/tracking-head/tracking-head.php +9 -0
  99. package/blocks/init/src/Blocks/components/video/components/video-editor.js +74 -0
  100. package/blocks/init/src/Blocks/components/video/components/video-options.js +280 -0
  101. package/blocks/init/src/Blocks/components/video/manifest.json +116 -0
  102. package/blocks/init/src/Blocks/components/video/video.php +72 -0
  103. package/blocks/init/src/Blocks/custom/accordion/accordion-block.js +15 -0
  104. package/blocks/init/src/Blocks/custom/accordion/accordion.php +28 -0
  105. package/blocks/init/src/Blocks/custom/accordion/assets/index.js +37 -0
  106. package/blocks/init/src/Blocks/custom/accordion/components/accordion-editor.js +17 -0
  107. package/blocks/init/src/Blocks/custom/accordion/components/accordion-options.js +18 -0
  108. package/blocks/init/src/Blocks/custom/accordion/manifest.json +32 -0
  109. package/blocks/init/src/Blocks/custom/accordion-item/accordion-item-block.js +19 -0
  110. package/blocks/init/src/Blocks/custom/accordion-item/accordion-item.php +46 -0
  111. package/blocks/init/src/Blocks/custom/accordion-item/components/accordion-item-editor.js +60 -0
  112. package/blocks/init/src/Blocks/custom/accordion-item/manifest.json +69 -0
  113. package/blocks/init/src/Blocks/custom/button/button-block.js +13 -0
  114. package/blocks/init/src/Blocks/custom/button/button.php +11 -0
  115. package/blocks/init/src/Blocks/custom/button/components/button-editor.js +12 -0
  116. package/blocks/init/src/Blocks/custom/button/components/button-options.js +12 -0
  117. package/blocks/init/src/Blocks/custom/button/manifest.json +18 -0
  118. package/blocks/init/src/Blocks/custom/card/card-block.js +13 -0
  119. package/blocks/init/src/Blocks/custom/card/card.php +11 -0
  120. package/blocks/init/src/Blocks/custom/card/components/card-editor.js +12 -0
  121. package/blocks/init/src/Blocks/custom/card/components/card-options.js +15 -0
  122. package/blocks/init/src/Blocks/custom/card/manifest.json +18 -0
  123. package/blocks/init/src/Blocks/custom/carousel/assets/index.js +46 -0
  124. package/blocks/init/src/Blocks/custom/carousel/assets/navigation.js +31 -0
  125. package/blocks/init/src/Blocks/custom/carousel/assets/pagination.js +39 -0
  126. package/blocks/init/src/Blocks/custom/carousel/carousel-block.js +21 -0
  127. package/blocks/init/src/Blocks/custom/carousel/carousel.php +61 -0
  128. package/blocks/init/src/Blocks/custom/carousel/components/carousel-editor.js +25 -0
  129. package/blocks/init/src/Blocks/custom/carousel/components/carousel-options.js +47 -0
  130. package/blocks/init/src/Blocks/custom/carousel/manifest.json +130 -0
  131. package/blocks/init/src/Blocks/custom/column/column-block.js +21 -0
  132. package/blocks/init/src/Blocks/custom/column/column-hooks.js +32 -0
  133. package/blocks/init/src/Blocks/custom/column/column.php +21 -0
  134. package/blocks/init/src/Blocks/custom/column/components/column-editor.js +19 -0
  135. package/blocks/init/src/Blocks/custom/column/components/column-options.js +579 -0
  136. package/blocks/init/src/Blocks/custom/column/manifest.json +625 -0
  137. package/blocks/init/src/Blocks/custom/columns/columns-block.js +20 -0
  138. package/blocks/init/src/Blocks/custom/columns/columns.php +21 -0
  139. package/blocks/init/src/Blocks/custom/columns/components/columns-editor.js +81 -0
  140. package/blocks/init/src/Blocks/custom/columns/components/columns-options.js +104 -0
  141. package/blocks/init/src/Blocks/custom/columns/manifest.json +555 -0
  142. package/blocks/init/src/Blocks/custom/featured-content/components/featured-content-editor.js +28 -0
  143. package/blocks/init/src/Blocks/custom/featured-content/components/featured-content-options.js +239 -0
  144. package/blocks/init/src/Blocks/custom/featured-content/featured-content-block.js +13 -0
  145. package/blocks/init/src/Blocks/custom/featured-content/featured-content.php +139 -0
  146. package/blocks/init/src/Blocks/custom/featured-content/manifest.json +131 -0
  147. package/blocks/init/src/Blocks/custom/featured-content/partials/cards.php +39 -0
  148. package/blocks/init/src/Blocks/custom/group/components/group-editor.js +8 -0
  149. package/blocks/init/src/Blocks/custom/group/group-block.js +14 -0
  150. package/blocks/init/src/Blocks/custom/group/group.php +10 -0
  151. package/blocks/init/src/Blocks/custom/group/manifest.json +32 -0
  152. package/blocks/init/src/Blocks/custom/heading/components/heading-editor.js +15 -0
  153. package/blocks/init/src/Blocks/custom/heading/components/heading-options.js +38 -0
  154. package/blocks/init/src/Blocks/custom/heading/heading-block.js +13 -0
  155. package/blocks/init/src/Blocks/custom/heading/heading-transforms.js +25 -0
  156. package/blocks/init/src/Blocks/custom/heading/heading.php +15 -0
  157. package/blocks/init/src/Blocks/custom/heading/manifest.json +79 -0
  158. package/blocks/init/src/Blocks/custom/hero/components/hero-editor.js +12 -0
  159. package/blocks/init/src/Blocks/custom/hero/components/hero-options.js +14 -0
  160. package/blocks/init/src/Blocks/custom/hero/hero-block.js +13 -0
  161. package/blocks/init/src/Blocks/custom/hero/hero.php +11 -0
  162. package/blocks/init/src/Blocks/custom/hero/manifest.json +17 -0
  163. package/blocks/init/src/Blocks/custom/image/components/image-editor.js +12 -0
  164. package/blocks/init/src/Blocks/custom/image/components/image-options.js +14 -0
  165. package/blocks/init/src/Blocks/custom/image/image-block.js +13 -0
  166. package/blocks/init/src/Blocks/custom/image/image.php +11 -0
  167. package/blocks/init/src/Blocks/custom/image/manifest.json +105 -0
  168. package/blocks/init/src/Blocks/custom/list/components/list-editor.js +14 -0
  169. package/blocks/init/src/Blocks/custom/list/components/list-options.js +39 -0
  170. package/blocks/init/src/Blocks/custom/list/list-block.js +13 -0
  171. package/blocks/init/src/Blocks/custom/list/list.php +15 -0
  172. package/blocks/init/src/Blocks/custom/list/manifest.json +58 -0
  173. package/blocks/init/src/Blocks/custom/map/assets/index.js +20 -0
  174. package/blocks/init/src/Blocks/custom/map/assets/map-controller.js +42 -0
  175. package/blocks/init/src/Blocks/custom/map/assets/utils.js +161 -0
  176. package/blocks/init/src/Blocks/custom/map/components/map-components.js +403 -0
  177. package/blocks/init/src/Blocks/custom/map/components/map-editor.js +56 -0
  178. package/blocks/init/src/Blocks/custom/map/components/map-options.js +557 -0
  179. package/blocks/init/src/Blocks/custom/map/manifest.json +79 -0
  180. package/blocks/init/src/Blocks/custom/map/map-block.js +13 -0
  181. package/blocks/init/src/Blocks/custom/map/map.php +52 -0
  182. package/blocks/init/src/Blocks/custom/map/styles.css +2 -0
  183. package/blocks/init/src/Blocks/custom/modal/components/modal-editor.js +90 -0
  184. package/blocks/init/src/Blocks/custom/modal/manifest.json +51 -0
  185. package/blocks/init/src/Blocks/custom/modal/modal-block.js +14 -0
  186. package/blocks/init/src/Blocks/custom/modal/modal.php +20 -0
  187. package/blocks/init/src/Blocks/custom/paragraph/components/paragraph-editor.js +41 -0
  188. package/blocks/init/src/Blocks/custom/paragraph/components/paragraph-options.js +38 -0
  189. package/blocks/init/src/Blocks/custom/paragraph/manifest.json +79 -0
  190. package/blocks/init/src/Blocks/custom/paragraph/paragraph-block.js +13 -0
  191. package/blocks/init/src/Blocks/custom/paragraph/paragraph-transforms.js +45 -0
  192. package/blocks/init/src/Blocks/custom/paragraph/paragraph.php +15 -0
  193. package/blocks/init/src/Blocks/custom/quote/components/quote-editor.js +12 -0
  194. package/blocks/init/src/Blocks/custom/quote/components/quote-options.js +14 -0
  195. package/blocks/init/src/Blocks/custom/quote/manifest.json +17 -0
  196. package/blocks/init/src/Blocks/custom/quote/quote-block.js +13 -0
  197. package/blocks/init/src/Blocks/custom/quote/quote.php +13 -0
  198. package/blocks/init/src/Blocks/custom/share/components/share-editor.js +6 -0
  199. package/blocks/init/src/Blocks/custom/share/components/share-options.js +12 -0
  200. package/blocks/init/src/Blocks/custom/share/manifest.json +19 -0
  201. package/blocks/init/src/Blocks/custom/share/share-block.js +13 -0
  202. package/blocks/init/src/Blocks/custom/share/share.php +11 -0
  203. package/blocks/init/src/Blocks/custom/site-footer/components/site-footer-editor.js +57 -0
  204. package/blocks/init/src/Blocks/custom/site-footer/components/site-footer-options.js +106 -0
  205. package/blocks/init/src/Blocks/custom/site-footer/manifest.json +73 -0
  206. package/blocks/init/src/Blocks/custom/site-footer/site-footer-block.js +13 -0
  207. package/blocks/init/src/Blocks/custom/site-footer/site-footer.php +72 -0
  208. package/blocks/init/src/Blocks/custom/site-navigation/assets/index.js +9 -0
  209. package/blocks/init/src/Blocks/custom/site-navigation/components/site-navigation-editor.js +42 -0
  210. package/blocks/init/src/Blocks/custom/site-navigation/components/site-navigation-options.js +73 -0
  211. package/blocks/init/src/Blocks/custom/site-navigation/manifest.json +77 -0
  212. package/blocks/init/src/Blocks/custom/site-navigation/site-navigation-block.js +13 -0
  213. package/blocks/init/src/Blocks/custom/site-navigation/site-navigation.php +99 -0
  214. package/blocks/init/src/Blocks/custom/table-of-contents/assets/index.js +58 -0
  215. package/blocks/init/src/Blocks/custom/table-of-contents/components/table-of-contents-editor.js +38 -0
  216. package/blocks/init/src/Blocks/custom/table-of-contents/components/table-of-contents-options.js +32 -0
  217. package/blocks/init/src/Blocks/custom/table-of-contents/manifest.json +48 -0
  218. package/blocks/init/src/Blocks/custom/table-of-contents/table-of-contents-block.js +13 -0
  219. package/blocks/init/src/Blocks/custom/table-of-contents/table-of-contents.php +31 -0
  220. package/blocks/init/src/Blocks/custom/video/components/video-editor.js +6 -0
  221. package/blocks/init/src/Blocks/custom/video/components/video-options.js +12 -0
  222. package/blocks/init/src/Blocks/custom/video/manifest.json +105 -0
  223. package/blocks/init/src/Blocks/custom/video/video-block.js +13 -0
  224. package/blocks/init/src/Blocks/custom/video/video.php +22 -0
  225. package/blocks/init/src/Blocks/manifest.json +14 -0
  226. package/blocks/init/src/Blocks/variations/card-simple/manifest.json +17 -0
  227. package/blocks/init/src/Blocks/wrapper/components/wrapper-editor.js +12 -0
  228. package/blocks/init/src/Blocks/wrapper/components/wrapper-options.js +348 -0
  229. package/blocks/init/src/Blocks/wrapper/manifest.json +450 -0
  230. package/blocks/init/src/Blocks/wrapper/styles-editor.css +13 -0
  231. package/blocks/init/src/Blocks/wrapper/styles.css +19 -0
  232. package/blocks/init/src/Blocks/wrapper/wrapper.js +30 -0
  233. package/blocks/init/src/Blocks/wrapper/wrapper.php +34 -0
  234. package/eslint.config.mjs +3 -0
  235. package/linters/base.config.mjs +81 -0
  236. package/linters/eslint.config.mjs +4 -0
  237. package/linters/ignore-gitignored.mjs +9 -0
  238. package/linters/stylelint.config.js +146 -0
  239. package/package.json +93 -0
  240. package/readme/packages.md +74 -0
  241. package/schemas/block.json +302 -0
  242. package/schemas/component.json +240 -0
  243. package/schemas/globalManifest.json +73 -0
  244. package/schemas/variation.json +83 -0
  245. package/scripts/components/block-inserter.js +70 -0
  246. package/scripts/components/file-picker.js +243 -0
  247. package/scripts/components/index.js +6 -0
  248. package/scripts/components/link-section-editor.js +319 -0
  249. package/scripts/components/media-picker.js +86 -0
  250. package/scripts/components/server-side-render.js +37 -0
  251. package/scripts/components/settings/settings.js +48 -0
  252. package/scripts/components/settings/use-theme-options.js +52 -0
  253. package/scripts/editor/attributes.js +304 -0
  254. package/scripts/editor/colors.js +64 -0
  255. package/scripts/editor/editor.js +139 -0
  256. package/scripts/editor/fetch.js +102 -0
  257. package/scripts/editor/hooks.js +44 -0
  258. package/scripts/editor/index.js +11 -0
  259. package/scripts/editor/options.js +152 -0
  260. package/scripts/editor/registration.js +901 -0
  261. package/scripts/editor/store.js +213 -0
  262. package/scripts/editor/tailwindcss.js +224 -0
  263. package/scripts/editor/utility.js +47 -0
  264. package/scripts/helpers/breakpoints.js +48 -0
  265. package/scripts/helpers/cookies.js +65 -0
  266. package/scripts/helpers/dynamic-import.js +19 -0
  267. package/scripts/helpers/index.js +11 -0
  268. package/scripts/index.js +22 -0
  269. package/scripts/plugins/index.js +3 -0
  270. package/scripts/plugins/yoast-seo.js +70 -0
  271. package/webpack/base.mjs +138 -0
  272. package/webpack/helpers.mjs +67 -0
  273. package/webpack/index.mjs +52 -0
  274. package/webpack/production.mjs +60 -0
  275. package/webpack/project.mjs +55 -0
@@ -0,0 +1,70 @@
1
+ import domReady from '@wordpress/dom-ready';
2
+ import apiFetch from '@wordpress/api-fetch';
3
+ import { subscribe, select } from '@wordpress/data';
4
+ import { debounce, isEmpty } from '../helpers';
5
+
6
+ /* global YoastSEO */
7
+
8
+ /**
9
+ * Attributes with this key will be passed as custom data to YoastSEO's analysis.
10
+ * See https://developer.yoast.com/customization/yoast-seo/adding-custom-data-analysis for more info.
11
+ */
12
+ export const yoastSeo = () => {
13
+ domReady(() => {
14
+ // Bailout if plugin is missing.
15
+ if (typeof YoastSEO === 'undefined' && typeof YoastSEO?.app === 'undefined') {
16
+ return;
17
+ }
18
+
19
+ // Local variable content, used to update Yoast modifications.
20
+ let content = '';
21
+ let isDataAvailable = false;
22
+
23
+ YoastSEO.app.registerPlugin('EightshiftCustomSeo', { status: 'ready' });
24
+ YoastSEO.app.registerModification('content', () => content, 'EightshiftCustomSeo', 5);
25
+
26
+ // Subscribe to changes.
27
+ subscribe(
28
+ // Small debounce for more optimisations in loading.
29
+ debounce(() => {
30
+ // Filter only when saved or autosaved.
31
+ const isSavingPost = wp.data.select('core/editor').isSavingPost();
32
+ const isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();
33
+
34
+ // Get the new current post when ready.
35
+ const currentPost = select('core/editor').getCurrentPost();
36
+
37
+ // Filter subscribes. Check only if post is saving, autosaving or initial load.
38
+ if (isEmpty(currentPost) || (isDataAvailable && !isSavingPost && !isAutosavingPost)) {
39
+ return;
40
+ }
41
+
42
+ isDataAvailable = true;
43
+
44
+ // Find API url for single item.
45
+ const apiUrl = currentPost['_links']['wp:action-publish'][0].href;
46
+
47
+ if (typeof apiUrl === 'undefined') {
48
+ return;
49
+ }
50
+
51
+ // Fetch content from the api with only content data in it.
52
+ apiFetch({
53
+ url: `${apiUrl}?_fields=content`,
54
+ method: 'GET',
55
+ }).then((response) => {
56
+ const fetchedContent = response?.content?.rendered;
57
+
58
+ if (typeof content === 'undefined' && fetchedContent === content) {
59
+ return;
60
+ }
61
+ // Updating global variable content.
62
+ content = fetchedContent;
63
+ // Refreshing Yoast input.
64
+ YoastSEO.app.pluggable.refresh();
65
+ });
66
+ }, 50)
67
+ );
68
+ }
69
+ );
70
+ };
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Project Base overrides used in production and development build.
3
+ *
4
+ */
5
+
6
+ import webpack from 'webpack';
7
+ import MiniCssExtractPlugin from 'mini-css-extract-plugin';
8
+ import { WebpackManifestPlugin } from 'webpack-manifest-plugin';
9
+ import DependencyExtractionWebpackPlugin from '@wordpress/dependency-extraction-webpack-plugin';
10
+
11
+ export default (options) => {
12
+ // All Plugins used in production and development build.
13
+ const plugins = [];
14
+
15
+ // Provide global variables to window object.
16
+ if (!options.overrides.includes('providePlugin')) {
17
+ plugins.push(
18
+ new webpack.ProvidePlugin({
19
+ $: 'jquery',
20
+ jQuery: 'jquery',
21
+ }),
22
+ );
23
+ }
24
+
25
+ // Provide variables to code build.
26
+ if (!options.overrides.includes('definePlugin')) {
27
+ plugins.push(
28
+ new webpack.DefinePlugin({
29
+ 'process.env.VERSION': JSON.stringify(Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)),
30
+ 'process.browser': true,
31
+ }),
32
+ );
33
+ }
34
+
35
+ // Output css from Js.
36
+ if (!options.overrides.includes('miniCssExtractPlugin')) {
37
+ plugins.push(
38
+ new MiniCssExtractPlugin({
39
+ filename: `${options.config.filesOutput}.css`,
40
+ }),
41
+ );
42
+ }
43
+
44
+ // Create manifest.json file.
45
+ if (!options.overrides.includes('webpackManifestPlugin')) {
46
+ plugins.push(new WebpackManifestPlugin());
47
+ }
48
+
49
+ // Enable export for all WordPress related packages
50
+ if (!options.overrides.includes('dependencyExtractionWebpackPlugin')) {
51
+ plugins.push(
52
+ new DependencyExtractionWebpackPlugin({
53
+ outputFormat: 'json',
54
+ requestToExternal: function (request) {
55
+ if (request === '@wordpress/dom-ready') {
56
+ return '';
57
+ }
58
+ },
59
+ }),
60
+ );
61
+ }
62
+
63
+ // All module used in production and development build.
64
+ const module = {
65
+ rules: [],
66
+ };
67
+
68
+ // Module for JS and JSX.
69
+ if (!options.overrides.includes('js')) {
70
+ module.rules.push({
71
+ test: /\.(js|jsx)$/,
72
+ exclude: /node_modules[\\/](?!@eightshift)/,
73
+ use: {
74
+ loader: 'swc-loader',
75
+ },
76
+ });
77
+ }
78
+
79
+ // Module for Images.
80
+ if (!options.overrides.includes('images')) {
81
+ module.rules.push({
82
+ test: /\.(png|svg|jpg|jpeg|gif|ico|webp)$/i,
83
+ use: [
84
+ {
85
+ loader: 'url-loader',
86
+ options: {
87
+ limit: 8192,
88
+ },
89
+ },
90
+ ],
91
+ type: 'javascript/auto',
92
+ });
93
+
94
+ module.rules.push({
95
+ test: /\.(png|svg|jpg|jpeg|gif|ico|webp)$/i,
96
+ exclude: [/fonts/, /node_modules/],
97
+ use: 'file-loader?name=[name].[ext]',
98
+ dependency: { not: ['url'] },
99
+ });
100
+ }
101
+
102
+ // Module for CSS.
103
+ if (!options.overrides.includes('css')) {
104
+ module.rules.push({
105
+ test: /\.css$/,
106
+ exclude: /node_modules/,
107
+ use: [
108
+ MiniCssExtractPlugin.loader,
109
+ {
110
+ loader: 'css-loader',
111
+ },
112
+ {
113
+ loader: 'postcss-loader',
114
+ },
115
+ ],
116
+ });
117
+
118
+ module.rules.push({
119
+ test: /\.css$/,
120
+ include: /node_modules/,
121
+ use: [
122
+ {
123
+ loader: 'css-loader',
124
+ },
125
+ ],
126
+ });
127
+ }
128
+
129
+ const resolve = {
130
+ symlinks: false,
131
+ };
132
+
133
+ return {
134
+ plugins,
135
+ module,
136
+ resolve,
137
+ };
138
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * File holding webpack helpers used to create project webpack build setup.
3
+ *
4
+ */
5
+
6
+ import path from 'path';
7
+
8
+ /**
9
+ * Generate all paths required for Webpack build to work.
10
+ *
11
+ * @param {string} projectDir Current project directory absolute path.
12
+ * @param {string} projectPathConfig Project path relative to project root.
13
+ * @param {string} assetsPathConfig Assets path after projectPath location.
14
+ * @param {string} blocksAssetsPathConfig Path of the block assets.
15
+ * @param {string} outputPathConfig Public output path after projectPath location.
16
+ * @param {string} blocksManifestSettingsPath Main global settings manifest.json path after projectPath location.
17
+ *
18
+ */
19
+ function getConfig(
20
+ projectDir,
21
+ projectPathConfig,
22
+ assetsPathConfig = 'assets',
23
+ blocksAssetsPathConfig = 'src/Blocks/assets',
24
+ outputPathConfig = 'public',
25
+ blocksManifestSettingsPath = 'src/Blocks/manifest.json',
26
+ ) {
27
+ if (typeof projectDir === 'undefined') {
28
+ throw Error('projectDir parameter is empty, please provide. This key represents: Current project directory absolute path. For example: __dirname');
29
+ }
30
+
31
+ if (typeof projectPathConfig === 'undefined') {
32
+ throw Error(
33
+ 'projectPath parameter is empty, please provide. This key represents: Project path relative to project root. For example: wp-content/themes/eightshift-boilerplate',
34
+ );
35
+ }
36
+
37
+ // Clear all slashes from user config.
38
+ const projectPathConfigClean = projectPathConfig.replace(/^\/|\/$/g, '');
39
+ const assetsPathConfigClean = assetsPathConfig.replace(/^\/|\/$/g, '');
40
+ const blocksAssetsPathConfigClean = blocksAssetsPathConfig.replace(/^\/|\/$/g, '');
41
+ const outputPathConfigClean = outputPathConfig.replace(/^\/|\/$/g, '');
42
+ const blocksManifestSettingsPathClean = blocksManifestSettingsPath.replace(/^\/|\/$/g, '');
43
+
44
+ // Create absolute path from the projects relative path.
45
+ const absolutePath = `${projectDir}`;
46
+
47
+ return {
48
+ absolutePath,
49
+
50
+ // Output files absolute location.
51
+ outputPath: path.resolve(absolutePath, outputPathConfigClean),
52
+
53
+ // Output files relative location, added before every output file in manifest.json. Should start and end with "/".
54
+ publicPath: path.join('/', projectPathConfigClean, outputPathConfigClean, '/'),
55
+
56
+ // Source files entries absolute locations.
57
+ applicationEntry: path.resolve(absolutePath, assetsPathConfigClean, 'application.js'),
58
+ applicationAdminEntry: path.resolve(absolutePath, assetsPathConfigClean, 'application-admin.js'),
59
+ applicationBlocksEntry: path.resolve(absolutePath, blocksAssetsPathConfigClean, 'application-blocks.js'),
60
+ applicationBlocksEditorEntry: path.resolve(absolutePath, blocksAssetsPathConfigClean, 'application-blocks-editor.js'),
61
+ applicationBlocksFrontendEntry: path.resolve(absolutePath, blocksAssetsPathConfigClean, 'application-blocks-frontend.js'),
62
+
63
+ blocksManifestSettingsPath: path.resolve(absolutePath, blocksManifestSettingsPathClean),
64
+ };
65
+ }
66
+
67
+ export { getConfig };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Main entrypoint location for webpack config.
3
+ *
4
+ */
5
+
6
+ import { merge } from 'webpack-merge';
7
+ import { getConfig } from './helpers.mjs';
8
+ import baseConfig from './base.mjs';
9
+ import projectConfig from './project.mjs';
10
+ import productionConfig from './production.mjs';
11
+
12
+ const eightshiftConfig = (mode, optionsData = {}) => {
13
+ // All config and default setting overrides must be provided using this object.
14
+ const options = {
15
+ config: {},
16
+ overrides: [],
17
+ ...optionsData,
18
+ };
19
+
20
+ // Append project config using getConfig helper.
21
+ options.config = getConfig(
22
+ optionsData.config.projectDir,
23
+ optionsData.config.projectPath,
24
+ optionsData.config.assetsPath,
25
+ optionsData.config.blocksAssetsPath,
26
+ optionsData.config.outputPath,
27
+ optionsData.config.blocksManifestSettingsPath,
28
+ );
29
+
30
+ options.config.mode = mode;
31
+ options.config.filesOutput = mode === 'production' ? '[name]-[contenthash]' : '[name]';
32
+
33
+ // Get all webpack partials.
34
+ const base = baseConfig(options);
35
+ const project = projectConfig(options);
36
+ const production = productionConfig(options);
37
+
38
+ // Default output that is going to be merged in any env.
39
+ const outputDefault = merge(project, base);
40
+
41
+ // Output development setup by default.
42
+ const development = {
43
+ devtool: false,
44
+ watchOptions: {
45
+ ignored: ['**/node_modules', '**/vendor', '**/public'],
46
+ },
47
+ };
48
+
49
+ return merge(outputDefault, mode === 'production' ? production : development);
50
+ };
51
+
52
+ export { eightshiftConfig };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Project Production config used only in production build.
3
+ *
4
+ */
5
+
6
+ import TerserPlugin from 'terser-webpack-plugin';
7
+ import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
8
+ import { browserslistToTargets } from 'lightningcss';
9
+ import browserslist from 'browserslist';
10
+
11
+ export default (options) => {
12
+ // Enable Webpack caching for production
13
+ const cache = true;
14
+
15
+ // All Plugins used in production build.
16
+ const plugins = [];
17
+
18
+ // All Optimizations used in production build.
19
+ const optimization = {
20
+ minimize: true,
21
+ minimizer: [],
22
+ };
23
+
24
+ // Plugin used to minify output.
25
+ if (!options.overrides.includes('terserPlugin')) {
26
+ optimization.minimizer.push(
27
+ new TerserPlugin({
28
+ parallel: true,
29
+ minify: TerserPlugin.swcMinify,
30
+ terserOptions: {
31
+ compress: {
32
+ drop_console: true,
33
+ passes: 2,
34
+ },
35
+ format: {
36
+ comments: false,
37
+ },
38
+ },
39
+ }),
40
+ );
41
+ }
42
+
43
+ if (!options.overrides.includes('cssMinimizerPlugin')) {
44
+ optimization.minimizer.push(
45
+ new CssMinimizerPlugin({
46
+ parallel: true,
47
+ minify: CssMinimizerPlugin.lightningCssMinify,
48
+ minimizerOptions: {
49
+ targets: browserslistToTargets(browserslist('>= 0.25%')),
50
+ },
51
+ }),
52
+ );
53
+ }
54
+
55
+ return {
56
+ plugins,
57
+ optimization,
58
+ cache,
59
+ };
60
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Project config used only in development and production build.
3
+ *
4
+ */
5
+
6
+ import fs from 'fs';
7
+
8
+ export default (options) => {
9
+ const entry = {};
10
+ const output = {
11
+ path: options.config.outputPath,
12
+ publicPath: options.config.publicPath,
13
+
14
+ // This clean will remove the build folder on every start of the build process.
15
+ clean: true,
16
+
17
+ // If you are using the multiple webpack builds with dynamic import you must provide different name here in order to avoid collision.
18
+ library: '[name]',
19
+ };
20
+
21
+ // Load Application Entrypoint.
22
+ if (!options.overrides.includes('application') && fs.existsSync(options.config.applicationEntry)) {
23
+ entry.application = options.config.applicationEntry;
24
+ }
25
+
26
+ // Load ApplicationAdmin Entrypoint.
27
+ if (!options.overrides.includes('applicationAdmin') && fs.existsSync(options.config.applicationAdminEntry)) {
28
+ entry.applicationAdmin = options.config.applicationAdminEntry;
29
+ }
30
+
31
+ // Load ApplicationBlocks Entrypoint.
32
+ if (!options.overrides.includes('applicationBlocks') && fs.existsSync(options.config.applicationBlocksEntry)) {
33
+ entry.applicationBlocks = options.config.applicationBlocksEntry;
34
+ }
35
+
36
+ // Load ApplicationBlocksEditor Entrypoint.
37
+ if (!options.overrides.includes('applicationBlocksEditor') && fs.existsSync(options.config.applicationBlocksEditorEntry)) {
38
+ entry.applicationBlocksEditor = options.config.applicationBlocksEditorEntry;
39
+ }
40
+
41
+ // Load applicationBlocksFrontend Entrypoint.
42
+ if (!options.overrides.includes('applicationBlocksFrontend') && fs.existsSync(options.config.applicationBlocksFrontendEntry)) {
43
+ entry.applicationBlocksFrontend = options.config.applicationBlocksFrontendEntry;
44
+ }
45
+
46
+ // Load filename Output.
47
+ if (!options.overrides.includes('filename')) {
48
+ output.filename = `${options.config.filesOutput}.js`;
49
+ }
50
+
51
+ return {
52
+ entry,
53
+ output,
54
+ };
55
+ };