@automattic/newspack-blocks 1.0.0-hotfix-cap-count-user-posts-dedup.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 (568) hide show
  1. package/.eslintrc.js +3 -0
  2. package/.hooks/pre-push +8 -0
  3. package/.nvmrc +1 -0
  4. package/.prettierignore +4 -0
  5. package/.prettierrc.js +5 -0
  6. package/.stylelintrc.js +3 -0
  7. package/AGENTS.md +275 -0
  8. package/CHANGELOG.md +3971 -0
  9. package/CLAUDE.md +1 -0
  10. package/README.md +43 -0
  11. package/babel.config.js +6 -0
  12. package/bin/install-wp-tests.sh +155 -0
  13. package/bin/update-translations.sh +13 -0
  14. package/block-list.json +12 -0
  15. package/composer.json +46 -0
  16. package/composer.lock +3632 -0
  17. package/dist/author-list/view-rtl.css +1 -0
  18. package/dist/author-list/view.asset.php +1 -0
  19. package/dist/author-list/view.css +1 -0
  20. package/dist/author-list/view.js +0 -0
  21. package/dist/author-profile/view-rtl.css +1 -0
  22. package/dist/author-profile/view.asset.php +1 -0
  23. package/dist/author-profile/view.css +1 -0
  24. package/dist/author-profile/view.js +0 -0
  25. package/dist/block_styles-rtl.css +2 -0
  26. package/dist/block_styles.asset.php +1 -0
  27. package/dist/block_styles.css +2 -0
  28. package/dist/block_styles.js +0 -0
  29. package/dist/blocks/author-list/block.json +89 -0
  30. package/dist/blocks/author-profile/block.json +80 -0
  31. package/dist/blocks/carousel/block.json +125 -0
  32. package/dist/blocks/checkout-button/block.json +117 -0
  33. package/dist/blocks/donate/block.json +103 -0
  34. package/dist/blocks/homepage-articles/block.json +260 -0
  35. package/dist/blocks/iframe/block.json +36 -0
  36. package/dist/carousel/view-rtl.css +2 -0
  37. package/dist/carousel/view.asset.php +1 -0
  38. package/dist/carousel/view.css +2 -0
  39. package/dist/carousel/view.js +3 -0
  40. package/dist/checkout-button/view-rtl.css +1 -0
  41. package/dist/checkout-button/view.asset.php +1 -0
  42. package/dist/checkout-button/view.css +1 -0
  43. package/dist/checkout-button/view.js +0 -0
  44. package/dist/donate/view-rtl.css +1 -0
  45. package/dist/donate/view.asset.php +1 -0
  46. package/dist/donate/view.css +1 -0
  47. package/dist/donate/view.js +1 -0
  48. package/dist/editor-rtl.css +66 -0
  49. package/dist/editor.asset.php +1 -0
  50. package/dist/editor.css +66 -0
  51. package/dist/editor.js +57 -0
  52. package/dist/frequencyBased-rtl.css +1 -0
  53. package/dist/frequencyBased.asset.php +1 -0
  54. package/dist/frequencyBased.css +1 -0
  55. package/dist/frequencyBased.js +1 -0
  56. package/dist/homepage-articles/view-rtl.css +1 -0
  57. package/dist/homepage-articles/view.asset.php +1 -0
  58. package/dist/homepage-articles/view.css +1 -0
  59. package/dist/homepage-articles/view.js +1 -0
  60. package/dist/iframe/view-rtl.css +1 -0
  61. package/dist/iframe/view.asset.php +1 -0
  62. package/dist/iframe/view.css +1 -0
  63. package/dist/iframe/view.js +1 -0
  64. package/dist/modal-rtl.css +1 -0
  65. package/dist/modal.asset.php +1 -0
  66. package/dist/modal.css +1 -0
  67. package/dist/modal.js +1 -0
  68. package/dist/modalCheckout-rtl.css +1 -0
  69. package/dist/modalCheckout.asset.php +1 -0
  70. package/dist/modalCheckout.css +1 -0
  71. package/dist/modalCheckout.js +1 -0
  72. package/dist/placeholder_blocks.asset.php +1 -0
  73. package/dist/placeholder_blocks.js +4 -0
  74. package/dist/tiersBased-rtl.css +1 -0
  75. package/dist/tiersBased.asset.php +1 -0
  76. package/dist/tiersBased.css +1 -0
  77. package/dist/tiersBased.js +1 -0
  78. package/includes/class-modal-checkout.php +2324 -0
  79. package/includes/class-newspack-blocks-api.php +347 -0
  80. package/includes/class-newspack-blocks-caching.php +291 -0
  81. package/includes/class-newspack-blocks-patterns.php +167 -0
  82. package/includes/class-newspack-blocks.php +1581 -0
  83. package/includes/modal-checkout/class-change-payment-gateway.php +86 -0
  84. package/includes/modal-checkout/class-checkout-data.php +406 -0
  85. package/includes/plugins/class-the-events-calendar.php +84 -0
  86. package/includes/tracking/class-data-events.php +83 -0
  87. package/languages/newspack-blocks-de_DE-01a5b44b8bc8d20f62541de420aa61ab.json +1 -0
  88. package/languages/newspack-blocks-de_DE-0662222bf15e7a1a7b74db2dabb48d6c.json +1 -0
  89. package/languages/newspack-blocks-de_DE-0c8dad524e2a57cee4f8efb6e35387c1.json +1 -0
  90. package/languages/newspack-blocks-de_DE-10754bc02d28d4301c103f26dbf519ce.json +1 -0
  91. package/languages/newspack-blocks-de_DE-2d52b39fdbc5d6c94b3514803f3720b8.json +1 -0
  92. package/languages/newspack-blocks-de_DE-34e5c64f90b1444f3fc735376442eada.json +1 -0
  93. package/languages/newspack-blocks-de_DE-351fd022e077061b5796bf7042446bfc.json +1 -0
  94. package/languages/newspack-blocks-de_DE-37552bb09e2a9fceec1970e3c6d46557.json +1 -0
  95. package/languages/newspack-blocks-de_DE-4b2ccb4e4dc8b3491228b2feb54872f2.json +1 -0
  96. package/languages/newspack-blocks-de_DE-4cecf783e091d36284a3e0cdafcd0fd5.json +1 -0
  97. package/languages/newspack-blocks-de_DE-4f16e21047908d19937bc10ced63acd1.json +1 -0
  98. package/languages/newspack-blocks-de_DE-4fdea541976076f02d56139fb35e5b42.json +1 -0
  99. package/languages/newspack-blocks-de_DE-501b38ac90d35730a620fb0d483702fa.json +1 -0
  100. package/languages/newspack-blocks-de_DE-53e2a1d5945b8d2b1c35e81ae1e532f3.json +1 -0
  101. package/languages/newspack-blocks-de_DE-5d4055f484eeb00e3ea0f9d8aace0897.json +1 -0
  102. package/languages/newspack-blocks-de_DE-5f70538e0223bc8a05b922cba67da6fb.json +1 -0
  103. package/languages/newspack-blocks-de_DE-6c2e53bab28419c30e1eaee70ba599cf.json +1 -0
  104. package/languages/newspack-blocks-de_DE-6ed95fb4873e6e2b81351177a44995f6.json +1 -0
  105. package/languages/newspack-blocks-de_DE-727631509ad8eec8e2cbe740c6dad199.json +1 -0
  106. package/languages/newspack-blocks-de_DE-73c6d3bde805172d1993f75397e9832d.json +1 -0
  107. package/languages/newspack-blocks-de_DE-78456b164809d080adecb4d2b3895802.json +1 -0
  108. package/languages/newspack-blocks-de_DE-7b1aa64ce2d962decc04666ab86c53de.json +1 -0
  109. package/languages/newspack-blocks-de_DE-7c29764d5ef91723f5ce454f66431b9e.json +1 -0
  110. package/languages/newspack-blocks-de_DE-912a2876091ef0dca9b26f3cfc01fc9c.json +1 -0
  111. package/languages/newspack-blocks-de_DE-91a7ac8017d6e2159be1c5a3c1e372e4.json +1 -0
  112. package/languages/newspack-blocks-de_DE-969286d51bb0afe10983b9aec317b5ee.json +1 -0
  113. package/languages/newspack-blocks-de_DE-9ef9b2c60c897ad79f92951e6e9949a1.json +1 -0
  114. package/languages/newspack-blocks-de_DE-a822c3d210c89af3cb7da28eaaef929c.json +1 -0
  115. package/languages/newspack-blocks-de_DE-aa9f9057c77a46b31d7e325a4322f2da.json +1 -0
  116. package/languages/newspack-blocks-de_DE-b6d3cfc30bb16d88d7bc5384bc775543.json +1 -0
  117. package/languages/newspack-blocks-de_DE-b712270cd4eb3cae7899b50b57bdd576.json +1 -0
  118. package/languages/newspack-blocks-de_DE-babcc0ca24e7f0145b1c8f647049f085.json +1 -0
  119. package/languages/newspack-blocks-de_DE-bb66d96d450663284550bed5a3e9113e.json +1 -0
  120. package/languages/newspack-blocks-de_DE-c810378e74f20906b8193ea76adb6bc0.json +1 -0
  121. package/languages/newspack-blocks-de_DE-d3a1c55a07efd1a65e227bf120840752.json +1 -0
  122. package/languages/newspack-blocks-de_DE-d5f23a52ecbfd492ebf819c14206a9e2.json +1 -0
  123. package/languages/newspack-blocks-de_DE-d684e5c5ac51934ba20811c2f588e1d5.json +1 -0
  124. package/languages/newspack-blocks-de_DE-dd56360b115d1b39c48033c1e0749a11.json +1 -0
  125. package/languages/newspack-blocks-de_DE-e0e4434aee4db01e71268ce3edf1dd97.json +1 -0
  126. package/languages/newspack-blocks-de_DE-e58126c278611ed6c17684ba8e7459b4.json +1 -0
  127. package/languages/newspack-blocks-de_DE-ea3e2a660753c7bfa13b5bbd8a46bdd0.json +1 -0
  128. package/languages/newspack-blocks-de_DE-eccbc51a43c04f59165364eda71e0be7.json +1 -0
  129. package/languages/newspack-blocks-de_DE-eeb28f99adedd5fad3081d2756d6f4a4.json +1 -0
  130. package/languages/newspack-blocks-de_DE-f03802d9ac1ae8f3b85caee4347b93a7.json +1 -0
  131. package/languages/newspack-blocks-de_DE-f32a4d8bd8f1f1e03b6523dfaa4c9f73.json +1 -0
  132. package/languages/newspack-blocks-de_DE-f5f8db76788e4079ddfa743333708b88.json +1 -0
  133. package/languages/newspack-blocks-de_DE-f8b1589c450689398f90b179f47e74ee.json +1 -0
  134. package/languages/newspack-blocks-de_DE-f9d0b05d4d6ddd3273f1f3fb2eb2ca50.json +1 -0
  135. package/languages/newspack-blocks-de_DE-fbe7f8c598cf05d4603ba49fec909ded.json +1 -0
  136. package/languages/newspack-blocks-de_DE-fcc93143c1f2b74671f595454b971f44.json +1 -0
  137. package/languages/newspack-blocks-de_DE.mo +0 -0
  138. package/languages/newspack-blocks-de_DE.po +2088 -0
  139. package/languages/newspack-blocks-es_ES-01a5b44b8bc8d20f62541de420aa61ab.json +1 -0
  140. package/languages/newspack-blocks-es_ES-0662222bf15e7a1a7b74db2dabb48d6c.json +1 -0
  141. package/languages/newspack-blocks-es_ES-0c8dad524e2a57cee4f8efb6e35387c1.json +1 -0
  142. package/languages/newspack-blocks-es_ES-10754bc02d28d4301c103f26dbf519ce.json +1 -0
  143. package/languages/newspack-blocks-es_ES-2d52b39fdbc5d6c94b3514803f3720b8.json +1 -0
  144. package/languages/newspack-blocks-es_ES-34e5c64f90b1444f3fc735376442eada.json +1 -0
  145. package/languages/newspack-blocks-es_ES-351fd022e077061b5796bf7042446bfc.json +1 -0
  146. package/languages/newspack-blocks-es_ES-37552bb09e2a9fceec1970e3c6d46557.json +1 -0
  147. package/languages/newspack-blocks-es_ES-4b2ccb4e4dc8b3491228b2feb54872f2.json +1 -0
  148. package/languages/newspack-blocks-es_ES-4cecf783e091d36284a3e0cdafcd0fd5.json +1 -0
  149. package/languages/newspack-blocks-es_ES-4f16e21047908d19937bc10ced63acd1.json +1 -0
  150. package/languages/newspack-blocks-es_ES-4fdea541976076f02d56139fb35e5b42.json +1 -0
  151. package/languages/newspack-blocks-es_ES-501b38ac90d35730a620fb0d483702fa.json +1 -0
  152. package/languages/newspack-blocks-es_ES-53e2a1d5945b8d2b1c35e81ae1e532f3.json +1 -0
  153. package/languages/newspack-blocks-es_ES-5d4055f484eeb00e3ea0f9d8aace0897.json +1 -0
  154. package/languages/newspack-blocks-es_ES-5f70538e0223bc8a05b922cba67da6fb.json +1 -0
  155. package/languages/newspack-blocks-es_ES-6c2e53bab28419c30e1eaee70ba599cf.json +1 -0
  156. package/languages/newspack-blocks-es_ES-6ed95fb4873e6e2b81351177a44995f6.json +1 -0
  157. package/languages/newspack-blocks-es_ES-727631509ad8eec8e2cbe740c6dad199.json +1 -0
  158. package/languages/newspack-blocks-es_ES-73c6d3bde805172d1993f75397e9832d.json +1 -0
  159. package/languages/newspack-blocks-es_ES-78456b164809d080adecb4d2b3895802.json +1 -0
  160. package/languages/newspack-blocks-es_ES-7b1aa64ce2d962decc04666ab86c53de.json +1 -0
  161. package/languages/newspack-blocks-es_ES-7c29764d5ef91723f5ce454f66431b9e.json +1 -0
  162. package/languages/newspack-blocks-es_ES-912a2876091ef0dca9b26f3cfc01fc9c.json +1 -0
  163. package/languages/newspack-blocks-es_ES-91a7ac8017d6e2159be1c5a3c1e372e4.json +1 -0
  164. package/languages/newspack-blocks-es_ES-969286d51bb0afe10983b9aec317b5ee.json +1 -0
  165. package/languages/newspack-blocks-es_ES-9ef9b2c60c897ad79f92951e6e9949a1.json +1 -0
  166. package/languages/newspack-blocks-es_ES-a822c3d210c89af3cb7da28eaaef929c.json +1 -0
  167. package/languages/newspack-blocks-es_ES-aa9f9057c77a46b31d7e325a4322f2da.json +1 -0
  168. package/languages/newspack-blocks-es_ES-b6d3cfc30bb16d88d7bc5384bc775543.json +1 -0
  169. package/languages/newspack-blocks-es_ES-b712270cd4eb3cae7899b50b57bdd576.json +1 -0
  170. package/languages/newspack-blocks-es_ES-babcc0ca24e7f0145b1c8f647049f085.json +1 -0
  171. package/languages/newspack-blocks-es_ES-bb66d96d450663284550bed5a3e9113e.json +1 -0
  172. package/languages/newspack-blocks-es_ES-c810378e74f20906b8193ea76adb6bc0.json +1 -0
  173. package/languages/newspack-blocks-es_ES-d3a1c55a07efd1a65e227bf120840752.json +1 -0
  174. package/languages/newspack-blocks-es_ES-d5f23a52ecbfd492ebf819c14206a9e2.json +1 -0
  175. package/languages/newspack-blocks-es_ES-d684e5c5ac51934ba20811c2f588e1d5.json +1 -0
  176. package/languages/newspack-blocks-es_ES-dd56360b115d1b39c48033c1e0749a11.json +1 -0
  177. package/languages/newspack-blocks-es_ES-e0e4434aee4db01e71268ce3edf1dd97.json +1 -0
  178. package/languages/newspack-blocks-es_ES-e58126c278611ed6c17684ba8e7459b4.json +1 -0
  179. package/languages/newspack-blocks-es_ES-ea3e2a660753c7bfa13b5bbd8a46bdd0.json +1 -0
  180. package/languages/newspack-blocks-es_ES-eccbc51a43c04f59165364eda71e0be7.json +1 -0
  181. package/languages/newspack-blocks-es_ES-eeb28f99adedd5fad3081d2756d6f4a4.json +1 -0
  182. package/languages/newspack-blocks-es_ES-f03802d9ac1ae8f3b85caee4347b93a7.json +1 -0
  183. package/languages/newspack-blocks-es_ES-f32a4d8bd8f1f1e03b6523dfaa4c9f73.json +1 -0
  184. package/languages/newspack-blocks-es_ES-f5f8db76788e4079ddfa743333708b88.json +1 -0
  185. package/languages/newspack-blocks-es_ES-f8b1589c450689398f90b179f47e74ee.json +1 -0
  186. package/languages/newspack-blocks-es_ES-f9d0b05d4d6ddd3273f1f3fb2eb2ca50.json +1 -0
  187. package/languages/newspack-blocks-es_ES-fbe7f8c598cf05d4603ba49fec909ded.json +1 -0
  188. package/languages/newspack-blocks-es_ES-fcc93143c1f2b74671f595454b971f44.json +1 -0
  189. package/languages/newspack-blocks-es_ES.mo +0 -0
  190. package/languages/newspack-blocks-es_ES.po +2080 -0
  191. package/languages/newspack-blocks-fr_BE-01a5b44b8bc8d20f62541de420aa61ab.json +1 -0
  192. package/languages/newspack-blocks-fr_BE-0662222bf15e7a1a7b74db2dabb48d6c.json +1 -0
  193. package/languages/newspack-blocks-fr_BE-0c8dad524e2a57cee4f8efb6e35387c1.json +1 -0
  194. package/languages/newspack-blocks-fr_BE-10754bc02d28d4301c103f26dbf519ce.json +1 -0
  195. package/languages/newspack-blocks-fr_BE-2d52b39fdbc5d6c94b3514803f3720b8.json +1 -0
  196. package/languages/newspack-blocks-fr_BE-34e5c64f90b1444f3fc735376442eada.json +1 -0
  197. package/languages/newspack-blocks-fr_BE-351fd022e077061b5796bf7042446bfc.json +1 -0
  198. package/languages/newspack-blocks-fr_BE-37552bb09e2a9fceec1970e3c6d46557.json +1 -0
  199. package/languages/newspack-blocks-fr_BE-4b2ccb4e4dc8b3491228b2feb54872f2.json +1 -0
  200. package/languages/newspack-blocks-fr_BE-4cecf783e091d36284a3e0cdafcd0fd5.json +1 -0
  201. package/languages/newspack-blocks-fr_BE-4f16e21047908d19937bc10ced63acd1.json +1 -0
  202. package/languages/newspack-blocks-fr_BE-4fdea541976076f02d56139fb35e5b42.json +1 -0
  203. package/languages/newspack-blocks-fr_BE-501b38ac90d35730a620fb0d483702fa.json +1 -0
  204. package/languages/newspack-blocks-fr_BE-53e2a1d5945b8d2b1c35e81ae1e532f3.json +1 -0
  205. package/languages/newspack-blocks-fr_BE-5d4055f484eeb00e3ea0f9d8aace0897.json +1 -0
  206. package/languages/newspack-blocks-fr_BE-5f70538e0223bc8a05b922cba67da6fb.json +1 -0
  207. package/languages/newspack-blocks-fr_BE-6c2e53bab28419c30e1eaee70ba599cf.json +1 -0
  208. package/languages/newspack-blocks-fr_BE-6ed95fb4873e6e2b81351177a44995f6.json +1 -0
  209. package/languages/newspack-blocks-fr_BE-727631509ad8eec8e2cbe740c6dad199.json +1 -0
  210. package/languages/newspack-blocks-fr_BE-73c6d3bde805172d1993f75397e9832d.json +1 -0
  211. package/languages/newspack-blocks-fr_BE-78456b164809d080adecb4d2b3895802.json +1 -0
  212. package/languages/newspack-blocks-fr_BE-7b1aa64ce2d962decc04666ab86c53de.json +1 -0
  213. package/languages/newspack-blocks-fr_BE-7c29764d5ef91723f5ce454f66431b9e.json +1 -0
  214. package/languages/newspack-blocks-fr_BE-912a2876091ef0dca9b26f3cfc01fc9c.json +1 -0
  215. package/languages/newspack-blocks-fr_BE-91a7ac8017d6e2159be1c5a3c1e372e4.json +1 -0
  216. package/languages/newspack-blocks-fr_BE-969286d51bb0afe10983b9aec317b5ee.json +1 -0
  217. package/languages/newspack-blocks-fr_BE-9ef9b2c60c897ad79f92951e6e9949a1.json +1 -0
  218. package/languages/newspack-blocks-fr_BE-a822c3d210c89af3cb7da28eaaef929c.json +1 -0
  219. package/languages/newspack-blocks-fr_BE-aa9f9057c77a46b31d7e325a4322f2da.json +1 -0
  220. package/languages/newspack-blocks-fr_BE-b6d3cfc30bb16d88d7bc5384bc775543.json +1 -0
  221. package/languages/newspack-blocks-fr_BE-b712270cd4eb3cae7899b50b57bdd576.json +1 -0
  222. package/languages/newspack-blocks-fr_BE-babcc0ca24e7f0145b1c8f647049f085.json +1 -0
  223. package/languages/newspack-blocks-fr_BE-bb66d96d450663284550bed5a3e9113e.json +1 -0
  224. package/languages/newspack-blocks-fr_BE-c810378e74f20906b8193ea76adb6bc0.json +1 -0
  225. package/languages/newspack-blocks-fr_BE-d3a1c55a07efd1a65e227bf120840752.json +1 -0
  226. package/languages/newspack-blocks-fr_BE-d5f23a52ecbfd492ebf819c14206a9e2.json +1 -0
  227. package/languages/newspack-blocks-fr_BE-d684e5c5ac51934ba20811c2f588e1d5.json +1 -0
  228. package/languages/newspack-blocks-fr_BE-dd56360b115d1b39c48033c1e0749a11.json +1 -0
  229. package/languages/newspack-blocks-fr_BE-e0e4434aee4db01e71268ce3edf1dd97.json +1 -0
  230. package/languages/newspack-blocks-fr_BE-e58126c278611ed6c17684ba8e7459b4.json +1 -0
  231. package/languages/newspack-blocks-fr_BE-ea3e2a660753c7bfa13b5bbd8a46bdd0.json +1 -0
  232. package/languages/newspack-blocks-fr_BE-eccbc51a43c04f59165364eda71e0be7.json +1 -0
  233. package/languages/newspack-blocks-fr_BE-eeb28f99adedd5fad3081d2756d6f4a4.json +1 -0
  234. package/languages/newspack-blocks-fr_BE-f03802d9ac1ae8f3b85caee4347b93a7.json +1 -0
  235. package/languages/newspack-blocks-fr_BE-f32a4d8bd8f1f1e03b6523dfaa4c9f73.json +1 -0
  236. package/languages/newspack-blocks-fr_BE-f5f8db76788e4079ddfa743333708b88.json +1 -0
  237. package/languages/newspack-blocks-fr_BE-f8b1589c450689398f90b179f47e74ee.json +1 -0
  238. package/languages/newspack-blocks-fr_BE-f9d0b05d4d6ddd3273f1f3fb2eb2ca50.json +1 -0
  239. package/languages/newspack-blocks-fr_BE-fbe7f8c598cf05d4603ba49fec909ded.json +1 -0
  240. package/languages/newspack-blocks-fr_BE-fcc93143c1f2b74671f595454b971f44.json +1 -0
  241. package/languages/newspack-blocks-fr_BE.mo +0 -0
  242. package/languages/newspack-blocks-fr_BE.po +2079 -0
  243. package/languages/newspack-blocks-nb_NO-01a5b44b8bc8d20f62541de420aa61ab.json +1 -0
  244. package/languages/newspack-blocks-nb_NO-0662222bf15e7a1a7b74db2dabb48d6c.json +1 -0
  245. package/languages/newspack-blocks-nb_NO-0c8dad524e2a57cee4f8efb6e35387c1.json +1 -0
  246. package/languages/newspack-blocks-nb_NO-10754bc02d28d4301c103f26dbf519ce.json +1 -0
  247. package/languages/newspack-blocks-nb_NO-2d52b39fdbc5d6c94b3514803f3720b8.json +1 -0
  248. package/languages/newspack-blocks-nb_NO-34e5c64f90b1444f3fc735376442eada.json +1 -0
  249. package/languages/newspack-blocks-nb_NO-351fd022e077061b5796bf7042446bfc.json +1 -0
  250. package/languages/newspack-blocks-nb_NO-37552bb09e2a9fceec1970e3c6d46557.json +1 -0
  251. package/languages/newspack-blocks-nb_NO-4b2ccb4e4dc8b3491228b2feb54872f2.json +1 -0
  252. package/languages/newspack-blocks-nb_NO-4cecf783e091d36284a3e0cdafcd0fd5.json +1 -0
  253. package/languages/newspack-blocks-nb_NO-4f16e21047908d19937bc10ced63acd1.json +1 -0
  254. package/languages/newspack-blocks-nb_NO-4fdea541976076f02d56139fb35e5b42.json +1 -0
  255. package/languages/newspack-blocks-nb_NO-501b38ac90d35730a620fb0d483702fa.json +1 -0
  256. package/languages/newspack-blocks-nb_NO-53e2a1d5945b8d2b1c35e81ae1e532f3.json +1 -0
  257. package/languages/newspack-blocks-nb_NO-5d4055f484eeb00e3ea0f9d8aace0897.json +1 -0
  258. package/languages/newspack-blocks-nb_NO-5f70538e0223bc8a05b922cba67da6fb.json +1 -0
  259. package/languages/newspack-blocks-nb_NO-6c2e53bab28419c30e1eaee70ba599cf.json +1 -0
  260. package/languages/newspack-blocks-nb_NO-6ed95fb4873e6e2b81351177a44995f6.json +1 -0
  261. package/languages/newspack-blocks-nb_NO-73c6d3bde805172d1993f75397e9832d.json +1 -0
  262. package/languages/newspack-blocks-nb_NO-78456b164809d080adecb4d2b3895802.json +1 -0
  263. package/languages/newspack-blocks-nb_NO-7b1aa64ce2d962decc04666ab86c53de.json +1 -0
  264. package/languages/newspack-blocks-nb_NO-7c29764d5ef91723f5ce454f66431b9e.json +1 -0
  265. package/languages/newspack-blocks-nb_NO-912a2876091ef0dca9b26f3cfc01fc9c.json +1 -0
  266. package/languages/newspack-blocks-nb_NO-91a7ac8017d6e2159be1c5a3c1e372e4.json +1 -0
  267. package/languages/newspack-blocks-nb_NO-969286d51bb0afe10983b9aec317b5ee.json +1 -0
  268. package/languages/newspack-blocks-nb_NO-9ef9b2c60c897ad79f92951e6e9949a1.json +1 -0
  269. package/languages/newspack-blocks-nb_NO-a822c3d210c89af3cb7da28eaaef929c.json +1 -0
  270. package/languages/newspack-blocks-nb_NO-aa9f9057c77a46b31d7e325a4322f2da.json +1 -0
  271. package/languages/newspack-blocks-nb_NO-b6d3cfc30bb16d88d7bc5384bc775543.json +1 -0
  272. package/languages/newspack-blocks-nb_NO-b712270cd4eb3cae7899b50b57bdd576.json +1 -0
  273. package/languages/newspack-blocks-nb_NO-babcc0ca24e7f0145b1c8f647049f085.json +1 -0
  274. package/languages/newspack-blocks-nb_NO-bb66d96d450663284550bed5a3e9113e.json +1 -0
  275. package/languages/newspack-blocks-nb_NO-c810378e74f20906b8193ea76adb6bc0.json +1 -0
  276. package/languages/newspack-blocks-nb_NO-d3a1c55a07efd1a65e227bf120840752.json +1 -0
  277. package/languages/newspack-blocks-nb_NO-d5f23a52ecbfd492ebf819c14206a9e2.json +1 -0
  278. package/languages/newspack-blocks-nb_NO-d684e5c5ac51934ba20811c2f588e1d5.json +1 -0
  279. package/languages/newspack-blocks-nb_NO-dd56360b115d1b39c48033c1e0749a11.json +1 -0
  280. package/languages/newspack-blocks-nb_NO-e0e4434aee4db01e71268ce3edf1dd97.json +1 -0
  281. package/languages/newspack-blocks-nb_NO-e58126c278611ed6c17684ba8e7459b4.json +1 -0
  282. package/languages/newspack-blocks-nb_NO-ea3e2a660753c7bfa13b5bbd8a46bdd0.json +1 -0
  283. package/languages/newspack-blocks-nb_NO-eccbc51a43c04f59165364eda71e0be7.json +1 -0
  284. package/languages/newspack-blocks-nb_NO-eeb28f99adedd5fad3081d2756d6f4a4.json +1 -0
  285. package/languages/newspack-blocks-nb_NO-f03802d9ac1ae8f3b85caee4347b93a7.json +1 -0
  286. package/languages/newspack-blocks-nb_NO-f32a4d8bd8f1f1e03b6523dfaa4c9f73.json +1 -0
  287. package/languages/newspack-blocks-nb_NO-f5f8db76788e4079ddfa743333708b88.json +1 -0
  288. package/languages/newspack-blocks-nb_NO-f8b1589c450689398f90b179f47e74ee.json +1 -0
  289. package/languages/newspack-blocks-nb_NO-f9d0b05d4d6ddd3273f1f3fb2eb2ca50.json +1 -0
  290. package/languages/newspack-blocks-nb_NO-fbe7f8c598cf05d4603ba49fec909ded.json +1 -0
  291. package/languages/newspack-blocks-nb_NO-fcc93143c1f2b74671f595454b971f44.json +1 -0
  292. package/languages/newspack-blocks-nb_NO.mo +0 -0
  293. package/languages/newspack-blocks-nb_NO.po +2078 -0
  294. package/languages/newspack-blocks-pt_PT-01a5b44b8bc8d20f62541de420aa61ab.json +1 -0
  295. package/languages/newspack-blocks-pt_PT-0662222bf15e7a1a7b74db2dabb48d6c.json +1 -0
  296. package/languages/newspack-blocks-pt_PT-0c8dad524e2a57cee4f8efb6e35387c1.json +1 -0
  297. package/languages/newspack-blocks-pt_PT-10754bc02d28d4301c103f26dbf519ce.json +1 -0
  298. package/languages/newspack-blocks-pt_PT-2d52b39fdbc5d6c94b3514803f3720b8.json +1 -0
  299. package/languages/newspack-blocks-pt_PT-34e5c64f90b1444f3fc735376442eada.json +1 -0
  300. package/languages/newspack-blocks-pt_PT-351fd022e077061b5796bf7042446bfc.json +1 -0
  301. package/languages/newspack-blocks-pt_PT-37552bb09e2a9fceec1970e3c6d46557.json +1 -0
  302. package/languages/newspack-blocks-pt_PT-4b2ccb4e4dc8b3491228b2feb54872f2.json +1 -0
  303. package/languages/newspack-blocks-pt_PT-4cecf783e091d36284a3e0cdafcd0fd5.json +1 -0
  304. package/languages/newspack-blocks-pt_PT-4f16e21047908d19937bc10ced63acd1.json +1 -0
  305. package/languages/newspack-blocks-pt_PT-4fdea541976076f02d56139fb35e5b42.json +1 -0
  306. package/languages/newspack-blocks-pt_PT-501b38ac90d35730a620fb0d483702fa.json +1 -0
  307. package/languages/newspack-blocks-pt_PT-53e2a1d5945b8d2b1c35e81ae1e532f3.json +1 -0
  308. package/languages/newspack-blocks-pt_PT-5d4055f484eeb00e3ea0f9d8aace0897.json +1 -0
  309. package/languages/newspack-blocks-pt_PT-5f70538e0223bc8a05b922cba67da6fb.json +1 -0
  310. package/languages/newspack-blocks-pt_PT-6c2e53bab28419c30e1eaee70ba599cf.json +1 -0
  311. package/languages/newspack-blocks-pt_PT-6ed95fb4873e6e2b81351177a44995f6.json +1 -0
  312. package/languages/newspack-blocks-pt_PT-727631509ad8eec8e2cbe740c6dad199.json +1 -0
  313. package/languages/newspack-blocks-pt_PT-73c6d3bde805172d1993f75397e9832d.json +1 -0
  314. package/languages/newspack-blocks-pt_PT-78456b164809d080adecb4d2b3895802.json +1 -0
  315. package/languages/newspack-blocks-pt_PT-7b1aa64ce2d962decc04666ab86c53de.json +1 -0
  316. package/languages/newspack-blocks-pt_PT-7c29764d5ef91723f5ce454f66431b9e.json +1 -0
  317. package/languages/newspack-blocks-pt_PT-912a2876091ef0dca9b26f3cfc01fc9c.json +1 -0
  318. package/languages/newspack-blocks-pt_PT-91a7ac8017d6e2159be1c5a3c1e372e4.json +1 -0
  319. package/languages/newspack-blocks-pt_PT-969286d51bb0afe10983b9aec317b5ee.json +1 -0
  320. package/languages/newspack-blocks-pt_PT-9ef9b2c60c897ad79f92951e6e9949a1.json +1 -0
  321. package/languages/newspack-blocks-pt_PT-a822c3d210c89af3cb7da28eaaef929c.json +1 -0
  322. package/languages/newspack-blocks-pt_PT-aa9f9057c77a46b31d7e325a4322f2da.json +1 -0
  323. package/languages/newspack-blocks-pt_PT-b6d3cfc30bb16d88d7bc5384bc775543.json +1 -0
  324. package/languages/newspack-blocks-pt_PT-b712270cd4eb3cae7899b50b57bdd576.json +1 -0
  325. package/languages/newspack-blocks-pt_PT-babcc0ca24e7f0145b1c8f647049f085.json +1 -0
  326. package/languages/newspack-blocks-pt_PT-bb66d96d450663284550bed5a3e9113e.json +1 -0
  327. package/languages/newspack-blocks-pt_PT-c810378e74f20906b8193ea76adb6bc0.json +1 -0
  328. package/languages/newspack-blocks-pt_PT-d3a1c55a07efd1a65e227bf120840752.json +1 -0
  329. package/languages/newspack-blocks-pt_PT-d5f23a52ecbfd492ebf819c14206a9e2.json +1 -0
  330. package/languages/newspack-blocks-pt_PT-d684e5c5ac51934ba20811c2f588e1d5.json +1 -0
  331. package/languages/newspack-blocks-pt_PT-dd56360b115d1b39c48033c1e0749a11.json +1 -0
  332. package/languages/newspack-blocks-pt_PT-e0e4434aee4db01e71268ce3edf1dd97.json +1 -0
  333. package/languages/newspack-blocks-pt_PT-e58126c278611ed6c17684ba8e7459b4.json +1 -0
  334. package/languages/newspack-blocks-pt_PT-ea3e2a660753c7bfa13b5bbd8a46bdd0.json +1 -0
  335. package/languages/newspack-blocks-pt_PT-eccbc51a43c04f59165364eda71e0be7.json +1 -0
  336. package/languages/newspack-blocks-pt_PT-eeb28f99adedd5fad3081d2756d6f4a4.json +1 -0
  337. package/languages/newspack-blocks-pt_PT-f03802d9ac1ae8f3b85caee4347b93a7.json +1 -0
  338. package/languages/newspack-blocks-pt_PT-f32a4d8bd8f1f1e03b6523dfaa4c9f73.json +1 -0
  339. package/languages/newspack-blocks-pt_PT-f5f8db76788e4079ddfa743333708b88.json +1 -0
  340. package/languages/newspack-blocks-pt_PT-f8b1589c450689398f90b179f47e74ee.json +1 -0
  341. package/languages/newspack-blocks-pt_PT-f9d0b05d4d6ddd3273f1f3fb2eb2ca50.json +1 -0
  342. package/languages/newspack-blocks-pt_PT-fbe7f8c598cf05d4603ba49fec909ded.json +1 -0
  343. package/languages/newspack-blocks-pt_PT-fcc93143c1f2b74671f595454b971f44.json +1 -0
  344. package/languages/newspack-blocks-pt_PT.mo +0 -0
  345. package/languages/newspack-blocks-pt_PT.po +2078 -0
  346. package/languages/newspack-blocks.pot +2370 -0
  347. package/newspack-blocks.php +96 -0
  348. package/package.json +64 -0
  349. package/phpcs.xml +38 -0
  350. package/release.config.js +1 -0
  351. package/src/assets/placeholder-1024x536.jpg +0 -0
  352. package/src/assets/placeholder-600x800.jpg +0 -0
  353. package/src/assets/placeholder-800x600.jpg +0 -0
  354. package/src/assets/placeholder-800x800.jpg +0 -0
  355. package/src/assets/placeholder-donations-cover.jpg +0 -0
  356. package/src/assets/placeholder-donations-image.jpg +0 -0
  357. package/src/assets/placeholder-subscribe-cover.jpg +0 -0
  358. package/src/assets/placeholder-subscribe-image.jpg +0 -0
  359. package/src/block-patterns/donations-1.php +13 -0
  360. package/src/block-patterns/donations-2.php +13 -0
  361. package/src/block-patterns/donations-3.php +13 -0
  362. package/src/block-patterns/donations-4.php +13 -0
  363. package/src/block-patterns/donations-5.php +13 -0
  364. package/src/block-patterns/homepage-posts-1.php +13 -0
  365. package/src/block-patterns/homepage-posts-10.php +13 -0
  366. package/src/block-patterns/homepage-posts-11.php +13 -0
  367. package/src/block-patterns/homepage-posts-12.php +13 -0
  368. package/src/block-patterns/homepage-posts-13.php +13 -0
  369. package/src/block-patterns/homepage-posts-14.php +13 -0
  370. package/src/block-patterns/homepage-posts-15.php +13 -0
  371. package/src/block-patterns/homepage-posts-16.php +13 -0
  372. package/src/block-patterns/homepage-posts-17.php +13 -0
  373. package/src/block-patterns/homepage-posts-18.php +13 -0
  374. package/src/block-patterns/homepage-posts-19.php +13 -0
  375. package/src/block-patterns/homepage-posts-2.php +13 -0
  376. package/src/block-patterns/homepage-posts-20.php +13 -0
  377. package/src/block-patterns/homepage-posts-21.php +13 -0
  378. package/src/block-patterns/homepage-posts-22.php +13 -0
  379. package/src/block-patterns/homepage-posts-23.php +13 -0
  380. package/src/block-patterns/homepage-posts-24.php +13 -0
  381. package/src/block-patterns/homepage-posts-25.php +13 -0
  382. package/src/block-patterns/homepage-posts-26.php +13 -0
  383. package/src/block-patterns/homepage-posts-27.php +13 -0
  384. package/src/block-patterns/homepage-posts-28.php +13 -0
  385. package/src/block-patterns/homepage-posts-29.php +13 -0
  386. package/src/block-patterns/homepage-posts-3.php +13 -0
  387. package/src/block-patterns/homepage-posts-30.php +13 -0
  388. package/src/block-patterns/homepage-posts-31.php +13 -0
  389. package/src/block-patterns/homepage-posts-4.php +13 -0
  390. package/src/block-patterns/homepage-posts-5.php +13 -0
  391. package/src/block-patterns/homepage-posts-6.php +13 -0
  392. package/src/block-patterns/homepage-posts-7.php +13 -0
  393. package/src/block-patterns/homepage-posts-8.php +13 -0
  394. package/src/block-patterns/homepage-posts-9.php +13 -0
  395. package/src/block-patterns/subscribe-1.php +13 -0
  396. package/src/block-patterns/subscribe-2.php +13 -0
  397. package/src/block-patterns/subscribe-3.php +13 -0
  398. package/src/block-patterns/subscribe-4.php +13 -0
  399. package/src/block-patterns/subscribe-5.php +13 -0
  400. package/src/block-patterns/subscribe-6.php +13 -0
  401. package/src/block-patterns/subscribe-7.php +13 -0
  402. package/src/block-styles/core/columns/editor.scss +90 -0
  403. package/src/block-styles/core/columns/index.js +20 -0
  404. package/src/block-styles/core/columns/view.scss +131 -0
  405. package/src/block-styles/core/group/editor.scss +24 -0
  406. package/src/block-styles/core/group/index.js +25 -0
  407. package/src/block-styles/core/group/view.scss +13 -0
  408. package/src/block-styles/view.js +5 -0
  409. package/src/blocks/author-list/block.json +84 -0
  410. package/src/blocks/author-list/class-wp-rest-newspack-author-list-controller.php +381 -0
  411. package/src/blocks/author-list/edit.js +456 -0
  412. package/src/blocks/author-list/editor.js +7 -0
  413. package/src/blocks/author-list/editor.scss +1 -0
  414. package/src/blocks/author-list/index.js +60 -0
  415. package/src/blocks/author-list/view.js +5 -0
  416. package/src/blocks/author-list/view.php +180 -0
  417. package/src/blocks/author-list/view.scss +46 -0
  418. package/src/blocks/author-profile/README.md +105 -0
  419. package/src/blocks/author-profile/block.json +77 -0
  420. package/src/blocks/author-profile/class-wp-rest-newspack-authors-controller.php +618 -0
  421. package/src/blocks/author-profile/context.js +26 -0
  422. package/src/blocks/author-profile/edit.js +1031 -0
  423. package/src/blocks/author-profile/editor.js +7 -0
  424. package/src/blocks/author-profile/editor.scss +61 -0
  425. package/src/blocks/author-profile/index.js +66 -0
  426. package/src/blocks/author-profile/single-author.js +106 -0
  427. package/src/blocks/author-profile/templates.js +263 -0
  428. package/src/blocks/author-profile/variations.js +86 -0
  429. package/src/blocks/author-profile/view.js +5 -0
  430. package/src/blocks/author-profile/view.php +501 -0
  431. package/src/blocks/author-profile/view.scss +159 -0
  432. package/src/blocks/carousel/block.json +121 -0
  433. package/src/blocks/carousel/create-swiper.js +230 -0
  434. package/src/blocks/carousel/edit.js +469 -0
  435. package/src/blocks/carousel/editor.js +7 -0
  436. package/src/blocks/carousel/editor.scss +54 -0
  437. package/src/blocks/carousel/index.js +55 -0
  438. package/src/blocks/carousel/view.js +49 -0
  439. package/src/blocks/carousel/view.php +417 -0
  440. package/src/blocks/carousel/view.scss +397 -0
  441. package/src/blocks/checkout-button/block.json +117 -0
  442. package/src/blocks/checkout-button/deprecated.js +81 -0
  443. package/src/blocks/checkout-button/edit.js +385 -0
  444. package/src/blocks/checkout-button/edit.scss +67 -0
  445. package/src/blocks/checkout-button/editor.js +19 -0
  446. package/src/blocks/checkout-button/index.js +32 -0
  447. package/src/blocks/checkout-button/view.js +4 -0
  448. package/src/blocks/checkout-button/view.php +178 -0
  449. package/src/blocks/checkout-button/view.scss +39 -0
  450. package/src/blocks/donate/block.json +103 -0
  451. package/src/blocks/donate/consts.ts +25 -0
  452. package/src/blocks/donate/edit/FrequencyBasedLayout.tsx +255 -0
  453. package/src/blocks/donate/edit/TierBasedLayout.tsx +133 -0
  454. package/src/blocks/donate/edit/components/AmountValueInput.tsx +62 -0
  455. package/src/blocks/donate/edit/components/index.tsx +1 -0
  456. package/src/blocks/donate/edit/index.tsx +445 -0
  457. package/src/blocks/donate/editor.js +7 -0
  458. package/src/blocks/donate/frequency-based/index.ts +135 -0
  459. package/src/blocks/donate/frequency-based/style.scss +245 -0
  460. package/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-base.php +225 -0
  461. package/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php +341 -0
  462. package/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-tiers-based.php +184 -0
  463. package/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer.php +117 -0
  464. package/src/blocks/donate/index.js +72 -0
  465. package/src/blocks/donate/styles/editor.scss +230 -0
  466. package/src/blocks/donate/styles/style-variations.scss +792 -0
  467. package/src/blocks/donate/styles/view.scss +45 -0
  468. package/src/blocks/donate/tiers-based/index.ts +36 -0
  469. package/src/blocks/donate/tiers-based/slider.ts +64 -0
  470. package/src/blocks/donate/tiers-based/style.scss +185 -0
  471. package/src/blocks/donate/tiers-based/types.ts +3 -0
  472. package/src/blocks/donate/tiers-based/utils.test.js +38 -0
  473. package/src/blocks/donate/tiers-based/utils.ts +21 -0
  474. package/src/blocks/donate/tiers-based/view.ts +132 -0
  475. package/src/blocks/donate/types.ts +96 -0
  476. package/src/blocks/donate/utils.ts +108 -0
  477. package/src/blocks/donate/view.php +29 -0
  478. package/src/blocks/donate/view.ts +44 -0
  479. package/src/blocks/homepage-articles/block.json +260 -0
  480. package/src/blocks/homepage-articles/class-wp-rest-newspack-articles-controller.php +231 -0
  481. package/src/blocks/homepage-articles/edit.tsx +730 -0
  482. package/src/blocks/homepage-articles/editor.js +16 -0
  483. package/src/blocks/homepage-articles/editor.scss +226 -0
  484. package/src/blocks/homepage-articles/index.js +102 -0
  485. package/src/blocks/homepage-articles/store.js +193 -0
  486. package/src/blocks/homepage-articles/templates/article.php +290 -0
  487. package/src/blocks/homepage-articles/templates/articles-list.php +21 -0
  488. package/src/blocks/homepage-articles/templates/articles-loop.php +35 -0
  489. package/src/blocks/homepage-articles/utils.ts +270 -0
  490. package/src/blocks/homepage-articles/view.js +242 -0
  491. package/src/blocks/homepage-articles/view.php +561 -0
  492. package/src/blocks/homepage-articles/view.scss +784 -0
  493. package/src/blocks/iframe/block.json +36 -0
  494. package/src/blocks/iframe/class-wp-rest-newspack-iframe-controller.php +586 -0
  495. package/src/blocks/iframe/edit.js +232 -0
  496. package/src/blocks/iframe/editor.js +7 -0
  497. package/src/blocks/iframe/editor.scss +84 -0
  498. package/src/blocks/iframe/iframe-placeholder.js +166 -0
  499. package/src/blocks/iframe/index.js +54 -0
  500. package/src/blocks/iframe/view.js +49 -0
  501. package/src/blocks/iframe/view.php +116 -0
  502. package/src/blocks/iframe/view.scss +9 -0
  503. package/src/blocks/shared/author.js +47 -0
  504. package/src/blocks/video-playlist/edit.js +222 -0
  505. package/src/blocks/video-playlist/editor.js +7 -0
  506. package/src/blocks/video-playlist/editor.scss +23 -0
  507. package/src/blocks/video-playlist/index.js +54 -0
  508. package/src/blocks/video-playlist/view.php +188 -0
  509. package/src/components/autocomplete-tokenfield.js +189 -0
  510. package/src/components/autocomplete-tokenfield.scss +27 -0
  511. package/src/components/editor-panels.js +90 -0
  512. package/src/components/query-controls.js +450 -0
  513. package/src/components/redirect-after-success.tsx +50 -0
  514. package/src/modal-checkout/accessibility.js +73 -0
  515. package/src/modal-checkout/analytics/ga4/README.md +45 -0
  516. package/src/modal-checkout/analytics/ga4/checkout-attempt.js +18 -0
  517. package/src/modal-checkout/analytics/ga4/checkout-success.js +17 -0
  518. package/src/modal-checkout/analytics/ga4/dismissed.js +17 -0
  519. package/src/modal-checkout/analytics/ga4/loaded.js +17 -0
  520. package/src/modal-checkout/analytics/ga4/opened.js +37 -0
  521. package/src/modal-checkout/analytics/ga4/pagination.js +59 -0
  522. package/src/modal-checkout/analytics/ga4/utils/index.js +64 -0
  523. package/src/modal-checkout/analytics/index.js +6 -0
  524. package/src/modal-checkout/checkout.scss +1064 -0
  525. package/src/modal-checkout/index.js +929 -0
  526. package/src/modal-checkout/modal.js +983 -0
  527. package/src/modal-checkout/modal.scss +265 -0
  528. package/src/modal-checkout/templates/empty-html-add-recipient.php +15 -0
  529. package/src/modal-checkout/templates/empty-order-details.php +16 -0
  530. package/src/modal-checkout/templates/form-change-payment-method.php +99 -0
  531. package/src/modal-checkout/templates/form-checkout.php +74 -0
  532. package/src/modal-checkout/templates/form-coupon.php +22 -0
  533. package/src/modal-checkout/templates/form-gift-subscription.php +34 -0
  534. package/src/modal-checkout/templates/payment-method.php +29 -0
  535. package/src/modal-checkout/templates/thankyou.php +94 -0
  536. package/src/modal-checkout/utils.js +309 -0
  537. package/src/setup/block-styles.js +2 -0
  538. package/src/setup/category.js +18 -0
  539. package/src/setup/editor.js +7 -0
  540. package/src/setup/editor.scss +56 -0
  541. package/src/setup/newspack-logo.js +26 -0
  542. package/src/setup/placeholder-blocks.js +84 -0
  543. package/src/setup/unregister-blocks.js +14 -0
  544. package/src/shared/authors.php +63 -0
  545. package/src/shared/js/newspack-icon.js +31 -0
  546. package/src/shared/js/utils.js +50 -0
  547. package/src/shared/sass/_mixins.scss +42 -0
  548. package/src/shared/sass/_placeholder.scss +5 -0
  549. package/src/shared/sass/_preview.scss +12 -0
  550. package/src/shared/sass/_variables.scss +24 -0
  551. package/src/templates/author-profile-card.php +145 -0
  552. package/src/types/@wordpress/block-editor.d.ts +1 -0
  553. package/src/types/@wordpress/components.d.ts +1 -0
  554. package/src/types/index.d.ts +170 -0
  555. package/src/types/newspack-components.d.ts +7 -0
  556. package/tsconfig.json +7 -0
  557. package/vendor/autoload.php +22 -0
  558. package/vendor/composer/ClassLoader.php +579 -0
  559. package/vendor/composer/InstalledVersions.php +396 -0
  560. package/vendor/composer/LICENSE +21 -0
  561. package/vendor/composer/autoload_classmap.php +10 -0
  562. package/vendor/composer/autoload_namespaces.php +9 -0
  563. package/vendor/composer/autoload_psr4.php +9 -0
  564. package/vendor/composer/autoload_real.php +36 -0
  565. package/vendor/composer/autoload_static.php +20 -0
  566. package/vendor/composer/installed.json +5 -0
  567. package/vendor/composer/installed.php +23 -0
  568. package/webpack.config.js +82 -0
@@ -0,0 +1,445 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classNames from 'classnames';
5
+ import { hooks } from 'newspack-components';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { __, sprintf } from '@wordpress/i18n';
11
+ import apiFetch from '@wordpress/api-fetch';
12
+ import { useState, useEffect, Fragment } from '@wordpress/element';
13
+ import {
14
+ CheckboxControl,
15
+ PanelBody,
16
+ ExternalLink,
17
+ Placeholder,
18
+ Spinner,
19
+ SelectControl,
20
+ ToggleControl,
21
+ Toolbar,
22
+ TextControl,
23
+ Button,
24
+ Notice,
25
+ } from '@wordpress/components';
26
+ import { BlockControls, ColorPaletteControl, InspectorControls, useBlockProps } from '@wordpress/block-editor';
27
+ import { isEmpty, pick } from 'lodash';
28
+ import { Icon, formatListBullets, grid } from '@wordpress/icons';
29
+
30
+ /**
31
+ * Internal dependencies
32
+ */
33
+ import { getMigratedAmount } from '../utils';
34
+ import type { DonationSettings, DonationFrequencySlug, DonationAmountsArray, EditState, EditProps } from '../types';
35
+ import TierBasedLayout from './TierBasedLayout';
36
+ import FrequencyBasedLayout from './FrequencyBasedLayout';
37
+ import { AmountValueInput } from './components';
38
+ import { FREQUENCIES, FREQUENCY_SLUGS, LAYOUT_OPTIONS, DISABLED_IN_TIERS_BASED_LAYOUT_TIER_INDEX } from '../consts';
39
+ import RedirectAfterSuccess from '../../../components/redirect-after-success';
40
+
41
+ const TIER_LABELS = [ __( 'Low-tier', 'newspack-blocks' ), __( 'Mid-tier', 'newspack-blocks' ), __( 'High-tier', 'newspack-blocks' ) ];
42
+
43
+ const Edit = ( { attributes, setAttributes }: EditProps ) => {
44
+ const [ isLoading, setIsLoading ] = useState( true );
45
+ const [ error, setError ] = useState( '' );
46
+
47
+ const [ settings, setSettings ] = hooks.useObjectState< EditState >( {
48
+ amounts: {},
49
+ currencySymbol: '$',
50
+ tiered: false,
51
+ disabledFrequencies: {},
52
+ minimumDonation: 5,
53
+ platform: '',
54
+ } );
55
+
56
+ interface AudienceDonations {
57
+ donation_data: DonationSettings;
58
+ }
59
+
60
+ useEffect( () => {
61
+ apiFetch< AudienceDonations >( {
62
+ path: '/newspack/v1/wizard/newspack-audience-donations',
63
+ } )
64
+ .then( ( { donation_data: donationSettings }: AudienceDonations ) => {
65
+ setSettings( {
66
+ amounts: donationSettings.amounts,
67
+ currencySymbol: donationSettings.currencySymbol,
68
+ tiered: donationSettings.tiered,
69
+ disabledFrequencies: donationSettings.disabledFrequencies,
70
+ minimumDonation: donationSettings.minimumDonation,
71
+ platform: donationSettings.platform,
72
+ } );
73
+
74
+ if ( isEmpty( attributes.disabledFrequencies ) ) {
75
+ setAttributes( { disabledFrequencies: donationSettings.disabledFrequencies } );
76
+ }
77
+
78
+ if ( isEmpty( attributes.minimumDonation ) ) {
79
+ setAttributes( { minimumDonation: donationSettings.minimumDonation } );
80
+ }
81
+
82
+ // Migrate old attributes.
83
+ if ( isEmpty( attributes.amounts ) && attributes.suggestedAmounts && attributes.suggestedAmounts.length ) {
84
+ const untieredAmount = attributes.suggestedAmountUntiered || donationSettings.amounts.month[ 3 ];
85
+ setAttributes( {
86
+ suggestedAmounts: undefined,
87
+ suggestedAmountUntiered: undefined,
88
+ amounts: {
89
+ once: getMigratedAmount( 'once', attributes.suggestedAmounts, untieredAmount ),
90
+ month: getMigratedAmount( 'month', attributes.suggestedAmounts, untieredAmount ),
91
+ year: getMigratedAmount( 'year', attributes.suggestedAmounts, untieredAmount ),
92
+ },
93
+ } );
94
+ } else {
95
+ setAttributes( { amounts: { ...donationSettings.amounts, ...attributes.amounts } } );
96
+ }
97
+ } )
98
+ .catch( setError )
99
+ .finally( () => setIsLoading( false ) );
100
+ }, [] );
101
+
102
+ const blockProps = useBlockProps();
103
+ if ( error.length ) {
104
+ return (
105
+ <div { ...blockProps }>
106
+ <Placeholder icon="warning" label={ __( 'Error', 'newspack-blocks' ) } instructions={ error }>
107
+ <ExternalLink href="/wp-admin/admin.php?page=newspack-audience#/payment">
108
+ { __( 'Go to checkout & payment settings to troubleshoot.', 'newspack-blocks' ) }
109
+ </ExternalLink>
110
+ </Placeholder>
111
+ </div>
112
+ );
113
+ }
114
+
115
+ if ( settings.platform === 'other' ) {
116
+ return (
117
+ <div { ...blockProps }>
118
+ <Placeholder
119
+ icon="warning"
120
+ label={ __( 'The Donate block will not be rendered.', 'newspack-blocks' ) }
121
+ instructions={ __( 'The Reader Revenue platform is set to "other".', 'newspack-blocks' ) }
122
+ >
123
+ <ExternalLink href="/wp-admin/admin.php?page=newspack-audience#/payment">
124
+ { __( 'Go to checkout & payment settings to update the platform.', 'newspack-blocks' ) }
125
+ </ExternalLink>
126
+ </Placeholder>
127
+ </div>
128
+ );
129
+ }
130
+
131
+ if ( isLoading ) {
132
+ return (
133
+ <div { ...blockProps }>
134
+ <Placeholder icon={ <Spinner /> } className="component-placeholder__align-center" />
135
+ </div>
136
+ );
137
+ }
138
+
139
+ const canUseNameYourPrice = window?.newspack_blocks_data?.can_use_name_your_price;
140
+ const isManual = attributes.manual && canUseNameYourPrice;
141
+ const isTiered = isManual ? attributes.tiered : settings.tiered;
142
+ const isTierBasedLayoutEnabled = isTiered && attributes.layoutOption === 'tiers';
143
+ const tierLayoutStyle = attributes.tierStyle;
144
+ const hasRecaptcha = window?.newspack_blocks_data?.has_recaptcha;
145
+ const supportsRecaptcha = window?.newspack_blocks_data?.supports_recaptcha;
146
+ const recaptchaURL = window?.newspack_blocks_data?.recaptcha_url || '';
147
+
148
+ const amounts = isManual ? attributes.amounts : settings.amounts;
149
+
150
+ const availableFrequencies = FREQUENCY_SLUGS.filter( slug =>
151
+ isManual ? ! attributes.disabledFrequencies[ slug ] : ! settings.disabledFrequencies[ slug ]
152
+ );
153
+
154
+ let className = attributes?.className || '';
155
+ // Editor bug – initially, the default style is selected, but the class not applied.
156
+ if ( className.indexOf( 'is-style' ) === -1 ) {
157
+ className += ' is-style-default';
158
+ }
159
+ if ( ! canUseNameYourPrice ) {
160
+ className += ' wpbnbd--nyp-disabled';
161
+ }
162
+ const getWrapperClassNames = ( classes: string[] = [] ) =>
163
+ classNames(
164
+ classes,
165
+ className,
166
+ 'wpbnbd',
167
+ `wpbnbd--${ isTierBasedLayoutEnabled ? 'tiers-based' : 'frequency-based' }`,
168
+ `wpbnbd--platform-${ settings.platform }`,
169
+ `wpbnbd-frequencies--${ availableFrequencies.length }`,
170
+ isTierBasedLayoutEnabled && `wpbnbd--tier-style-${ tierLayoutStyle }`
171
+ );
172
+
173
+ const tiersLayoutControls = [
174
+ {
175
+ icon: <Icon icon={ grid } />,
176
+ title: __( 'Grid View', 'newspack-blocks' ),
177
+ onClick: () => setAttributes( { tierStyle: 'grid' } ),
178
+ isActive: attributes.tierStyle === 'grid',
179
+ },
180
+ {
181
+ icon: <Icon icon={ formatListBullets } />,
182
+ title: __( 'List View', 'newspack-blocks' ),
183
+ onClick: () => setAttributes( { tierStyle: 'list' } ),
184
+ isActive: attributes.tierStyle === 'list',
185
+ },
186
+ ];
187
+
188
+ const minimumDonation = isManual ? attributes.minimumDonation : settings.minimumDonation;
189
+ const displayedAmounts = { ...amounts };
190
+ Object.keys( amounts ).forEach( frequency => {
191
+ const amountsWithMinimum = amounts[ frequency ].map( amount => Math.max( amount, minimumDonation ) ) as DonationAmountsArray;
192
+ displayedAmounts[ frequency ] = amountsWithMinimum;
193
+ } );
194
+
195
+ const componentProps = {
196
+ attributes,
197
+ amounts,
198
+ availableFrequencies,
199
+ settings,
200
+ setAttributes,
201
+ setSettings,
202
+ };
203
+
204
+ const renderMinAmountWarning = () => (
205
+ <p className="components-frequency-donations__error">
206
+ { sprintf(
207
+ // translators: %1$s: currency symbol, %2$d: minimum donation amount.
208
+ __( 'Warning: suggested donations should be at least the minimum donation amount (%1$s%2$d).', 'newspack-blocks' ),
209
+ settings.currencySymbol,
210
+ minimumDonation
211
+ ) }
212
+ </p>
213
+ );
214
+
215
+ return (
216
+ <Fragment>
217
+ <InspectorControls>
218
+ <PanelBody title={ __( 'Layout', 'newspack-blocks' ) }>
219
+ { canUseNameYourPrice && (
220
+ <div className="newspack-blocks-donate__layout-selector">
221
+ { LAYOUT_OPTIONS.map( ( { label, key } ) => {
222
+ const isSelected = key === 'tiers' ? isTierBasedLayoutEnabled : ! isTierBasedLayoutEnabled;
223
+ return (
224
+ <Button
225
+ key={ key }
226
+ variant={ isSelected ? 'primary' : 'secondary' }
227
+ isPressed={ isSelected }
228
+ onClick={ () => setAttributes( { layoutOption: key } ) }
229
+ aria-current={ isSelected }
230
+ disabled={ key === 'tiers' && ! isTiered }
231
+ >
232
+ { label }
233
+ </Button>
234
+ );
235
+ } ) }
236
+ </div>
237
+ ) }
238
+ { canUseNameYourPrice && ! isTiered && (
239
+ <Notice isDismissible={ false } className="newspack-blocks-donate__notice">
240
+ { __( 'Tiers layout is disabled if the block is set to render untiered.', 'newspack-blocks' ) }
241
+ </Notice>
242
+ ) }
243
+ <SelectControl
244
+ label={ __( 'Default Tab', 'newspack-blocks' ) }
245
+ value={ attributes.defaultFrequency }
246
+ options={ availableFrequencies.map( key => ( {
247
+ label: FREQUENCIES[ key ],
248
+ value: key,
249
+ } ) ) }
250
+ onChange={ ( defaultFrequency: DonationFrequencySlug ) => setAttributes( { defaultFrequency } ) }
251
+ />
252
+ </PanelBody>
253
+ { canUseNameYourPrice && (
254
+ <PanelBody title={ __( 'Suggested Donations', 'newspack-blocks' ) }>
255
+ <ToggleControl
256
+ checked={ Boolean( isManual ) }
257
+ onChange={ () => setAttributes( { manual: ! attributes.manual } ) }
258
+ label={ __( 'Configure manually', 'newspack-blocks' ) }
259
+ />
260
+ { isManual ? (
261
+ <>
262
+ <ToggleControl
263
+ checked={ Boolean( isTiered ) }
264
+ onChange={ () => setAttributes( { tiered: ! attributes.tiered } ) }
265
+ label={ __( 'Tiered', 'newspack-blocks' ) }
266
+ />
267
+ { isTiered ? (
268
+ <>
269
+ <div className="components-frequency-donations">
270
+ { FREQUENCY_SLUGS.map( ( frequency: DonationFrequencySlug ) => {
271
+ const isFrequencyDisabled = attributes.disabledFrequencies[ frequency ];
272
+ const disabledDisplayedFrequencyCount = Object.values(
273
+ pick( attributes.disabledFrequencies, FREQUENCY_SLUGS )
274
+ ).filter( Boolean ).length;
275
+ const isOnlyOneFrequencyActive = FREQUENCY_SLUGS.length - disabledDisplayedFrequencyCount === 1;
276
+ return (
277
+ <Fragment key={ frequency }>
278
+ <CheckboxControl
279
+ label={ FREQUENCIES[ frequency ] }
280
+ checked={ ! isFrequencyDisabled }
281
+ disabled={ ! isFrequencyDisabled && isOnlyOneFrequencyActive }
282
+ onChange={ () => {
283
+ setAttributes( {
284
+ disabledFrequencies: {
285
+ ...attributes.disabledFrequencies,
286
+ [ frequency ]: ! isFrequencyDisabled,
287
+ },
288
+ } );
289
+ } }
290
+ />
291
+ { ! isFrequencyDisabled && (
292
+ <div className="wp-block-newspack-blocks-donate__panel-inputs">
293
+ { amounts[ frequency ].reduce(
294
+ ( acc: boolean, suggestedAmount: number ) =>
295
+ ! suggestedAmount || suggestedAmount < minimumDonation ? true : acc,
296
+ false
297
+ ) && renderMinAmountWarning() }
298
+
299
+ { amounts[ frequency ].map( ( suggestedAmount, tierIndex ) => {
300
+ // The "Other" tier is no longer customizable and should always render empty for tiered layout.
301
+ if ( tierIndex === 3 ) {
302
+ return null;
303
+ }
304
+ return (
305
+ <AmountValueInput
306
+ ignoreMinimumAmount
307
+ { ...componentProps }
308
+ key={ `amount-${ frequency }-${ tierIndex }` }
309
+ frequencySlug={ frequency }
310
+ tierIndex={ tierIndex }
311
+ label={ TIER_LABELS[ tierIndex ] }
312
+ id={ `${ frequency }-${ tierIndex }-amount` }
313
+ disabled={
314
+ isTierBasedLayoutEnabled &&
315
+ tierIndex === DISABLED_IN_TIERS_BASED_LAYOUT_TIER_INDEX
316
+ }
317
+ />
318
+ );
319
+ } ) }
320
+ </div>
321
+ ) }
322
+ </Fragment>
323
+ );
324
+ } ) }
325
+ </div>
326
+ </>
327
+ ) : (
328
+ <div className="components-frequency-donations">
329
+ <div className="wp-block-newspack-blocks-donate__panel-inputs">
330
+ { FREQUENCY_SLUGS.reduce(
331
+ ( acc: boolean, frequencySlug: DonationFrequencySlug ) =>
332
+ ! amounts[ frequencySlug ][ 3 ] || amounts[ frequencySlug ][ 3 ] < attributes.minimumDonation
333
+ ? true
334
+ : acc,
335
+ false
336
+ ) && renderMinAmountWarning() }
337
+
338
+ { FREQUENCY_SLUGS.map( ( frequencySlug: DonationFrequencySlug ) => (
339
+ <AmountValueInput
340
+ ignoreMinimumAmount
341
+ { ...componentProps }
342
+ key={ frequencySlug }
343
+ frequencySlug={ frequencySlug }
344
+ tierIndex={ 3 }
345
+ label={ FREQUENCIES[ frequencySlug ] }
346
+ id={ `${ frequencySlug }-${ 3 }-amount` }
347
+ />
348
+ ) ) }
349
+ </div>
350
+ </div>
351
+ ) }
352
+ <TextControl
353
+ className="components-frequency-donations__minimum-donation"
354
+ type="number"
355
+ label={ __( 'Minimum donation', 'newspack-blocks' ) }
356
+ min={ 1 }
357
+ onChange={ ( value: number ) => setAttributes( { minimumDonation: value } ) }
358
+ value={ attributes.minimumDonation }
359
+ />
360
+ </>
361
+ ) : (
362
+ <p>
363
+ { __(
364
+ 'The Donate Block allows you to collect donations from readers. The fields are automatically defined based on your donation settings.',
365
+ 'newspack-blocks'
366
+ ) }
367
+ <br />
368
+ <br />
369
+ <ExternalLink href="/wp-admin/admin.php?page=newspack-audience-donations">
370
+ { __( 'Edit donation settings', 'newspack-blocks' ) }
371
+ </ExternalLink>
372
+ </p>
373
+ ) }
374
+ </PanelBody>
375
+ ) }
376
+ <PanelBody title={ __( 'Styling', 'newspack-blocks' ) } initialOpen={ false }>
377
+ <ColorPaletteControl
378
+ value={ attributes.buttonColor }
379
+ onChange={ ( buttonColor: string ) => setAttributes( { buttonColor } ) }
380
+ label={ __( 'Button Color', 'newspack-blocks' ) }
381
+ />
382
+ </PanelBody>
383
+ { settings.platform === 'nrh' && (
384
+ <PanelBody title={ __( 'News Revenue Hub Settings', 'newspack-blocks' ) } initialOpen={ false }>
385
+ <TextControl
386
+ label={ __( 'Campaign ID', 'newspack-blocks' ) }
387
+ value={ attributes.campaign || '' }
388
+ onChange={ ( value: string ) =>
389
+ setAttributes( {
390
+ campaign: value,
391
+ } )
392
+ }
393
+ />
394
+ </PanelBody>
395
+ ) }
396
+ { supportsRecaptcha && (
397
+ <PanelBody title={ __( 'Spam protection', 'newspack' ) }>
398
+ <p>
399
+ { sprintf(
400
+ // translators: %s is either 'enabled' or 'disabled'.
401
+ __( 'reCAPTCHA is currently %s.', 'newspack' ),
402
+ hasRecaptcha ? __( 'enabled', 'newspack' ) : __( 'disabled', 'newspack' )
403
+ ) }
404
+ </p>
405
+ { ! hasRecaptcha && (
406
+ <p>
407
+ { __(
408
+ "It's highly recommended that you enable reCAPTCHA protection to prevent spambots from using this form!",
409
+ 'newspack'
410
+ ) }
411
+ </p>
412
+ ) }
413
+ <p>
414
+ <a href={ recaptchaURL }>{ __( 'Configure your reCAPTCHA settings.', 'newspack' ) }</a>
415
+ </p>
416
+ </PanelBody>
417
+ ) }
418
+ <PanelBody title={ __( 'After purchase', 'newspack-blocks' ) }>
419
+ <RedirectAfterSuccess setAttributes={ setAttributes } attributes={ attributes } />
420
+ </PanelBody>
421
+ </InspectorControls>
422
+ { isTierBasedLayoutEnabled && (
423
+ <BlockControls>
424
+ <Toolbar controls={ tiersLayoutControls } />
425
+ </BlockControls>
426
+ ) }
427
+ { isTierBasedLayoutEnabled ? (
428
+ <div { ...blockProps } className={ classNames( blockProps.className, getWrapperClassNames() ) }>
429
+ <TierBasedLayout { ...componentProps } amounts={ displayedAmounts } />
430
+ </div>
431
+ ) : (
432
+ <div { ...blockProps } className={ classNames( blockProps.className, getWrapperClassNames( [ isTiered ? 'tiered' : 'untiered' ] ) ) }>
433
+ <FrequencyBasedLayout
434
+ isTiered={ isTiered }
435
+ canUseNameYourPrice={ canUseNameYourPrice }
436
+ amounts={ displayedAmounts }
437
+ { ...componentProps }
438
+ />
439
+ </div>
440
+ ) }
441
+ </Fragment>
442
+ );
443
+ };
444
+
445
+ export default Edit;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { registerBlockType } from '@wordpress/blocks';
5
+ import { name, settings } from '.';
6
+
7
+ registerBlockType( `newspack-blocks/${ name }`, settings );
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import './style.scss';
5
+
6
+ /**
7
+ * Specify a function to execute when the DOM is fully loaded.
8
+ *
9
+ * @see https://github.com/WordPress/gutenberg/blob/trunk/packages/dom-ready/
10
+ *
11
+ * @param {Function} callback A function to execute after the DOM is ready.
12
+ * @return {void}
13
+ */
14
+ function domReady( callback: () => void ): void {
15
+ if ( typeof document === 'undefined' ) {
16
+ return;
17
+ }
18
+ if (
19
+ document.readyState === 'complete' || // DOMContentLoaded + Images/Styles/etc loaded, so we call directly.
20
+ document.readyState === 'interactive' // DOMContentLoaded fires at this point, so we call directly.
21
+ ) {
22
+ return void callback();
23
+ }
24
+ // DOMContentLoaded has not fired yet, delay callback until then.
25
+ document.addEventListener( 'DOMContentLoaded', callback );
26
+ }
27
+
28
+ const handleOtherValue = ( container: HTMLElement ) => {
29
+ const frequencies = container.querySelectorAll( '.tiers' );
30
+ if ( ! frequencies?.length ) {
31
+ return;
32
+ }
33
+ const frequencyInputs = container.querySelectorAll( 'input[name="donation_frequency"]' );
34
+ const submitButton = container.querySelector( 'button[type="submit"]' );
35
+ frequencies.forEach( frequency => {
36
+ const tiers = frequency.querySelectorAll( 'input[type="radio"]' );
37
+ const input = < HTMLInputElement >frequency.querySelector( '.money-input input' );
38
+ if ( ! tiers?.length || ! input ) {
39
+ return;
40
+ }
41
+ const originalValue = input.getAttribute( 'value' );
42
+ const reset = () => {
43
+ input.value = originalValue || '';
44
+ };
45
+ const toggleSubmit = () => {
46
+ const checkedTier = < HTMLInputElement >frequency.querySelector( 'input[type="radio"]:checked' );
47
+ if ( ! checkedTier ) {
48
+ return;
49
+ }
50
+ if ( checkedTier.value === 'other' && ! input.value ) {
51
+ submitButton?.setAttribute( 'disabled', 'disabled' );
52
+ } else {
53
+ submitButton?.removeAttribute( 'disabled' );
54
+ }
55
+ };
56
+ input.addEventListener( 'keyup', toggleSubmit );
57
+ toggleSubmit();
58
+ tiers.forEach( tierInput => {
59
+ tierInput.addEventListener( 'change', reset );
60
+ tierInput.addEventListener( 'change', toggleSubmit );
61
+ } );
62
+ frequencyInputs.forEach( frequencyInput => {
63
+ frequencyInput.addEventListener( 'change', reset );
64
+ frequencyInput.addEventListener( 'change', toggleSubmit );
65
+ } );
66
+ } );
67
+ };
68
+
69
+ const addAccessibleTabs = ( container: HTMLElement ) => {
70
+ // Get the block's tabs, panels, and radio buttons associated with donation frequency.
71
+ const tabList = container.querySelectorAll( 'div[role="tablist"] [role="tab"]' ) as NodeListOf< HTMLElement >;
72
+ const panels = container.querySelectorAll( 'div[role="tabpanel"]' ) as NodeListOf< HTMLElement >;
73
+ const radioButtons = container.querySelectorAll( 'input[type="radio"][name="donation_frequency"]' ) as NodeListOf< HTMLInputElement >;
74
+ // Figure out which radio button is currently selected.
75
+ const checkedRadioId = Array.from( radioButtons ).find( ( radio: HTMLInputElement ) => radio.checked )?.id || null;
76
+
77
+ // Set the tab associated to the radio button to selected.
78
+ if ( checkedRadioId ) {
79
+ const selectedTabId = `tab-${ checkedRadioId }`;
80
+ document.getElementById( selectedTabId )?.setAttribute( 'aria-selected', 'true' );
81
+ }
82
+
83
+ // Add a click event listener to each tab.
84
+ tabList.forEach( ( tab: HTMLElement ) => {
85
+ tab.addEventListener( 'click', function () {
86
+ selectTab( tab, tabList, radioButtons, panels );
87
+ } );
88
+ } );
89
+ };
90
+
91
+ const selectTab = (
92
+ tab: HTMLElement,
93
+ tabList: NodeListOf< HTMLElement >,
94
+ radioButtons: NodeListOf< HTMLInputElement >,
95
+ panels: NodeListOf< HTMLElement >
96
+ ) => {
97
+ // Loop through tabs and set them as selected or not selected:
98
+ tabList.forEach( ( thisTab: HTMLElement ) => {
99
+ if ( tab === thisTab ) {
100
+ thisTab.setAttribute( 'aria-selected', 'true' );
101
+ thisTab.classList.add( 'wpbnbd__button--active' );
102
+ } else {
103
+ thisTab.setAttribute( 'aria-selected', 'false' );
104
+ thisTab.classList.remove( 'wpbnbd__button--active' );
105
+ }
106
+ } );
107
+
108
+ // Update the underlying radio button.
109
+ const tabId = tab.id || '';
110
+ const frequencyId = tabId.replace( 'tab-', '' );
111
+ radioButtons.forEach( ( radio: HTMLInputElement ) => {
112
+ radio.checked = frequencyId === radio.id;
113
+ } );
114
+
115
+ // Loop through the panels and set tabindex 0 on the selected panel; remove it from others.
116
+ panels.forEach( ( panel: HTMLElement ) => {
117
+ if ( tab.getAttribute( 'aria-controls' ) === panel.id ) {
118
+ panel.setAttribute( 'tabindex', '0' );
119
+ } else {
120
+ panel.removeAttribute( 'tabindex' );
121
+ }
122
+ } );
123
+ };
124
+
125
+ export const processFrequencyBasedElements = ( parentEl = document ) => {
126
+ const elements = parentEl.querySelectorAll( '.wpbnbd--frequency-based' ) as NodeListOf< HTMLElement >;
127
+ elements.forEach( container => {
128
+ handleOtherValue( container );
129
+ addAccessibleTabs( container );
130
+ } );
131
+ };
132
+
133
+ if ( typeof window !== 'undefined' ) {
134
+ domReady( () => processFrequencyBasedElements() );
135
+ }