@goldencomm/create-baseline 0.0.1 → 0.1.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 (756) hide show
  1. package/README.md +18 -79
  2. package/index.mjs +175 -283
  3. package/package.json +13 -30
  4. package/templates/ci/bitbucket-pipelines.yml +29 -0
  5. package/templates/code-connect/accordion-item.figma.ts +45 -0
  6. package/templates/code-connect/accordion.figma.ts +40 -0
  7. package/templates/code-connect/alert.figma.ts +378 -0
  8. package/templates/code-connect/avatar-badge.figma.ts +14 -0
  9. package/templates/code-connect/avatar-group-count.figma.ts +16 -0
  10. package/templates/code-connect/avatar-group.figma.ts +30 -0
  11. package/templates/code-connect/avatar.figma.ts +34 -0
  12. package/templates/code-connect/badge.figma.ts +383 -0
  13. package/templates/code-connect/breadcrumb-item.figma.ts +23 -0
  14. package/templates/code-connect/breadcrumb-separator.figma.ts +12 -0
  15. package/templates/code-connect/breadcrumb.figma.ts +32 -0
  16. package/templates/code-connect/button-group.figma.ts +28 -0
  17. package/templates/code-connect/button.figma.ts +408 -0
  18. package/templates/code-connect/card.figma.ts +74 -0
  19. package/templates/code-connect/carousel.figma.ts +27 -0
  20. package/templates/code-connect/checkbox.figma.ts +34 -0
  21. package/templates/code-connect/columns-1.figma.ts +43 -0
  22. package/templates/code-connect/columns-2.figma.ts +49 -0
  23. package/templates/code-connect/columns-3.figma.ts +45 -0
  24. package/templates/code-connect/columns-4.figma.ts +46 -0
  25. package/templates/code-connect/container.figma.ts +42 -0
  26. package/templates/code-connect/dialog.figma.ts +72 -0
  27. package/templates/code-connect/drawer.figma.ts +69 -0
  28. package/templates/code-connect/dropdown-menu-checkbox-item.figma.ts +19 -0
  29. package/templates/code-connect/dropdown-menu-item.figma.ts +25 -0
  30. package/templates/code-connect/dropdown-menu-label.figma.ts +16 -0
  31. package/templates/code-connect/dropdown-menu-radio-item.figma.ts +19 -0
  32. package/templates/code-connect/dropdown-menu-separator.figma.ts +12 -0
  33. package/templates/code-connect/dropdown-menu-sub-trigger.figma.ts +22 -0
  34. package/templates/code-connect/dropdown-menu.figma.ts +44 -0
  35. package/templates/code-connect/field-horizontal.figma.ts +73 -0
  36. package/templates/code-connect/field.figma.ts +68 -0
  37. package/templates/code-connect/hover-card.figma.ts +41 -0
  38. package/templates/code-connect/icon-button.figma.ts +382 -0
  39. package/templates/code-connect/input-group.figma.ts +51 -0
  40. package/templates/code-connect/input-otp.figma.ts +40 -0
  41. package/templates/code-connect/input.figma.ts +42 -0
  42. package/templates/code-connect/item-group.figma.ts +30 -0
  43. package/templates/code-connect/item.figma.ts +50 -0
  44. package/templates/code-connect/kbd.figma.ts +16 -0
  45. package/templates/code-connect/media.figma.ts +35 -0
  46. package/templates/code-connect/meter.figma.ts +31 -0
  47. package/templates/code-connect/native-select.figma.ts +36 -0
  48. package/templates/code-connect/navigation-menu-link.figma.ts +33 -0
  49. package/templates/code-connect/navigation-menu-trigger.figma.ts +28 -0
  50. package/templates/code-connect/navigation-menu.figma.ts +30 -0
  51. package/templates/code-connect/pagination-ellipsis.figma.ts +11 -0
  52. package/templates/code-connect/pagination-link.figma.ts +24 -0
  53. package/templates/code-connect/pagination-next.figma.ts +17 -0
  54. package/templates/code-connect/pagination-previous.figma.ts +17 -0
  55. package/templates/code-connect/pagination.figma.ts +33 -0
  56. package/templates/code-connect/panel.figma.ts +40 -0
  57. package/templates/code-connect/popover.figma.ts +58 -0
  58. package/templates/code-connect/progress.figma.ts +34 -0
  59. package/templates/code-connect/radio.figma.ts +29 -0
  60. package/templates/code-connect/section.figma.ts +42 -0
  61. package/templates/code-connect/select.figma.ts +30 -0
  62. package/templates/code-connect/sheet.figma.ts +70 -0
  63. package/templates/code-connect/sidebar-menu-button.figma.ts +36 -0
  64. package/templates/code-connect/sidebar.figma.ts +44 -0
  65. package/templates/code-connect/spinner.figma.ts +13 -0
  66. package/templates/code-connect/switch.figma.ts +32 -0
  67. package/templates/code-connect/table-cell.figma.ts +21 -0
  68. package/templates/code-connect/table.figma.ts +62 -0
  69. package/templates/code-connect/tabs-trigger.figma.ts +369 -0
  70. package/templates/code-connect/tabs.figma.ts +28 -0
  71. package/templates/code-connect/textarea.figma.ts +32 -0
  72. package/templates/code-connect/toggle-group.figma.ts +24 -0
  73. package/templates/code-connect/toggle.figma.ts +385 -0
  74. package/templates/code-connect/tooltip.figma.ts +29 -0
  75. package/templates/next/app/globals.css +13 -12
  76. package/templates/next/app/page.tsx +38 -26
  77. package/templates/next/public/placeholder.svg +1 -0
  78. package/templates/shopify/.gitattributes +1 -0
  79. package/templates/shopify/.shopifyignore +23 -0
  80. package/templates/shopify/.theme-check.yml +1 -0
  81. package/templates/shopify/CODE_OF_CONDUCT.md +132 -0
  82. package/templates/shopify/CONTRIBUTING.md +24 -0
  83. package/templates/shopify/LICENSE.md +9 -0
  84. package/templates/shopify/README.md +160 -0
  85. package/templates/shopify/assets/carousel.js +2 -0
  86. package/templates/shopify/assets/critical.css +117 -0
  87. package/templates/shopify/assets/icon-account.svg +6 -0
  88. package/templates/shopify/assets/icon-cart.svg +5 -0
  89. package/templates/shopify/assets/predictive-search.js +65 -0
  90. package/templates/shopify/assets/shoppy-x-ray.svg +1 -0
  91. package/templates/shopify/blocks/_accordion-item.liquid +44 -0
  92. package/templates/shopify/blocks/_card-footer.liquid +26 -0
  93. package/templates/shopify/blocks/_carousel-slide.liquid +21 -0
  94. package/templates/shopify/blocks/_column.liquid +30 -0
  95. package/templates/shopify/blocks/_dialog-footer.liquid +28 -0
  96. package/templates/shopify/blocks/_sheet-footer.liquid +28 -0
  97. package/templates/shopify/blocks/_tab.liquid +21 -0
  98. package/templates/shopify/blocks/accordion.liquid +40 -0
  99. package/templates/shopify/blocks/blog-posts.liquid +70 -0
  100. package/templates/shopify/blocks/button.figma.ts +359 -0
  101. package/templates/shopify/blocks/button.liquid +477 -0
  102. package/templates/shopify/blocks/card.liquid +73 -0
  103. package/templates/shopify/blocks/carousel.liquid +47 -0
  104. package/templates/shopify/blocks/columns.liquid +73 -0
  105. package/templates/shopify/blocks/contact-form.liquid +69 -0
  106. package/templates/shopify/blocks/container.liquid +29 -0
  107. package/templates/shopify/blocks/dialog.liquid +77 -0
  108. package/templates/shopify/blocks/group.liquid +105 -0
  109. package/templates/shopify/blocks/heading.liquid +57 -0
  110. package/templates/shopify/blocks/icon-button.figma.ts +358 -0
  111. package/templates/shopify/blocks/media.liquid +80 -0
  112. package/templates/shopify/blocks/navigation-menu.liquid +23 -0
  113. package/templates/shopify/blocks/panel.liquid +64 -0
  114. package/templates/shopify/blocks/popover.liquid +88 -0
  115. package/templates/shopify/blocks/section-heading.liquid +68 -0
  116. package/templates/shopify/blocks/sheet.liquid +90 -0
  117. package/templates/shopify/blocks/tabs.liquid +58 -0
  118. package/templates/shopify/blocks/text.liquid +59 -0
  119. package/templates/shopify/build-js.mjs +22 -0
  120. package/templates/shopify/config/settings_data.json +182 -0
  121. package/templates/shopify/config/settings_schema.json +365 -0
  122. package/templates/shopify/layout/password.liquid +19 -0
  123. package/templates/shopify/layout/theme.liquid +57 -0
  124. package/templates/shopify/locales/en.default.json +58 -0
  125. package/templates/shopify/locales/en.default.schema.json +303 -0
  126. package/templates/shopify/package-lock.json +521 -0
  127. package/templates/shopify/package.json +17 -0
  128. package/templates/shopify/sections/404.liquid +23 -0
  129. package/templates/shopify/sections/article.liquid +81 -0
  130. package/templates/shopify/sections/baseline-header.liquid +236 -0
  131. package/templates/shopify/sections/baseline-kitchen-sink.liquid +988 -0
  132. package/templates/shopify/sections/baseline-section.liquid +661 -0
  133. package/templates/shopify/sections/blog.liquid +36 -0
  134. package/templates/shopify/sections/cart.liquid +65 -0
  135. package/templates/shopify/sections/collection.liquid +54 -0
  136. package/templates/shopify/sections/collections.liquid +83 -0
  137. package/templates/shopify/sections/custom-section.liquid +60 -0
  138. package/templates/shopify/sections/footer-group.json +25 -0
  139. package/templates/shopify/sections/footer.liquid +57 -0
  140. package/templates/shopify/sections/header-group.json +22 -0
  141. package/templates/shopify/sections/page.liquid +18 -0
  142. package/templates/shopify/sections/password.liquid +36 -0
  143. package/templates/shopify/sections/product.liquid +60 -0
  144. package/templates/shopify/sections/search.liquid +73 -0
  145. package/templates/shopify/snippets/accordion-item.figma.ts +34 -0
  146. package/templates/shopify/snippets/accordion-item.liquid +36 -0
  147. package/templates/shopify/snippets/accordion.figma.ts +37 -0
  148. package/templates/shopify/snippets/accordion.liquid +169 -0
  149. package/templates/shopify/snippets/alert.figma.ts +31 -0
  150. package/templates/shopify/snippets/alert.liquid +104 -0
  151. package/templates/shopify/snippets/avatar-group.figma.ts +17 -0
  152. package/templates/shopify/snippets/avatar-group.liquid +66 -0
  153. package/templates/shopify/snippets/avatar.figma.ts +24 -0
  154. package/templates/shopify/snippets/avatar.liquid +143 -0
  155. package/templates/shopify/snippets/badge.figma.ts +355 -0
  156. package/templates/shopify/snippets/badge.liquid +111 -0
  157. package/templates/shopify/snippets/baseline-schemes.liquid +44 -0
  158. package/templates/shopify/snippets/baseline-tokens.liquid +712 -0
  159. package/templates/shopify/snippets/breadcrumb.figma.ts +12 -0
  160. package/templates/shopify/snippets/breadcrumb.liquid +124 -0
  161. package/templates/shopify/snippets/button-group.liquid +148 -0
  162. package/templates/shopify/snippets/button.liquid +144 -0
  163. package/templates/shopify/snippets/card.figma.ts +43 -0
  164. package/templates/shopify/snippets/card.liquid +196 -0
  165. package/templates/shopify/snippets/carousel-item.liquid +18 -0
  166. package/templates/shopify/snippets/carousel.figma.ts +28 -0
  167. package/templates/shopify/snippets/carousel.liquid +121 -0
  168. package/templates/shopify/snippets/checkbox.liquid +147 -0
  169. package/templates/shopify/snippets/container.liquid +52 -0
  170. package/templates/shopify/snippets/css-variables.liquid +18 -0
  171. package/templates/shopify/snippets/dialog.figma.ts +36 -0
  172. package/templates/shopify/snippets/dialog.liquid +217 -0
  173. package/templates/shopify/snippets/field-separator.liquid +68 -0
  174. package/templates/shopify/snippets/field.liquid +187 -0
  175. package/templates/shopify/snippets/icon.liquid +101 -0
  176. package/templates/shopify/snippets/image.liquid +64 -0
  177. package/templates/shopify/snippets/input-group.liquid +196 -0
  178. package/templates/shopify/snippets/input.liquid +126 -0
  179. package/templates/shopify/snippets/item-group.liquid +31 -0
  180. package/templates/shopify/snippets/item.figma.ts +40 -0
  181. package/templates/shopify/snippets/item.liquid +162 -0
  182. package/templates/shopify/snippets/media.figma.ts +33 -0
  183. package/templates/shopify/snippets/media.liquid +273 -0
  184. package/templates/shopify/snippets/meta-tags.liquid +105 -0
  185. package/templates/shopify/snippets/meter.figma.ts +24 -0
  186. package/templates/shopify/snippets/meter.liquid +118 -0
  187. package/templates/shopify/snippets/native-select.liquid +141 -0
  188. package/templates/shopify/snippets/navigation-menu-item.figma.ts +23 -0
  189. package/templates/shopify/snippets/navigation-menu-item.liquid +40 -0
  190. package/templates/shopify/snippets/navigation-menu-link.figma.ts +27 -0
  191. package/templates/shopify/snippets/navigation-menu-link.liquid +31 -0
  192. package/templates/shopify/snippets/navigation-menu.figma.ts +12 -0
  193. package/templates/shopify/snippets/navigation-menu.liquid +300 -0
  194. package/templates/shopify/snippets/pagination.figma.ts +13 -0
  195. package/templates/shopify/snippets/pagination.liquid +208 -0
  196. package/templates/shopify/snippets/popover.figma.ts +41 -0
  197. package/templates/shopify/snippets/popover.liquid +203 -0
  198. package/templates/shopify/snippets/progress.figma.ts +26 -0
  199. package/templates/shopify/snippets/progress.liquid +114 -0
  200. package/templates/shopify/snippets/radio.liquid +145 -0
  201. package/templates/shopify/snippets/sheet.figma.ts +37 -0
  202. package/templates/shopify/snippets/sheet.liquid +197 -0
  203. package/templates/shopify/snippets/sidebar-menu-item.liquid +34 -0
  204. package/templates/shopify/snippets/sidebar-menu-sub-link.liquid +17 -0
  205. package/templates/shopify/snippets/sidebar-menu.liquid +139 -0
  206. package/templates/shopify/snippets/spinner.liquid +42 -0
  207. package/templates/shopify/snippets/switch.liquid +180 -0
  208. package/templates/shopify/snippets/tab.figma.ts +353 -0
  209. package/templates/shopify/snippets/tab.liquid +33 -0
  210. package/templates/shopify/snippets/tabs.figma.ts +21 -0
  211. package/templates/shopify/snippets/tabs.liquid +260 -0
  212. package/templates/shopify/snippets/text-styles.liquid +45 -0
  213. package/templates/shopify/snippets/textarea.liquid +103 -0
  214. package/templates/shopify/snippets/toggle-group.figma.ts +30 -0
  215. package/templates/shopify/snippets/toggle-group.liquid +46 -0
  216. package/templates/shopify/snippets/toggle.figma.ts +357 -0
  217. package/templates/shopify/snippets/toggle.liquid +104 -0
  218. package/templates/shopify/snippets/typeset.liquid +498 -0
  219. package/templates/shopify/src/carousel.js +94 -0
  220. package/templates/shopify/templates/404.json +20 -0
  221. package/templates/shopify/templates/article.json +20 -0
  222. package/templates/shopify/templates/blog.json +20 -0
  223. package/templates/shopify/templates/cart.json +20 -0
  224. package/templates/shopify/templates/collection.json +20 -0
  225. package/templates/shopify/templates/gift_card.liquid +73 -0
  226. package/templates/shopify/templates/index.json +18 -0
  227. package/templates/shopify/templates/list-collections.json +20 -0
  228. package/templates/shopify/templates/page.json +20 -0
  229. package/templates/shopify/templates/password.json +21 -0
  230. package/templates/shopify/templates/product.json +20 -0
  231. package/templates/shopify/templates/search.json +20 -0
  232. package/templates/skills/baseline-client-tokens/SKILL.md +74 -0
  233. package/templates/wordpress/.ddev/commands/web/seed +258 -3
  234. package/templates/wordpress/.ddev/config.yaml +10 -7
  235. package/templates/wordpress/.ddev/seed/gravityforms-contact.json +1 -0
  236. package/templates/wordpress/README.md +37 -39
  237. package/templates/wordpress/auth.json.example +1 -1
  238. package/templates/wordpress/composer.json +88 -84
  239. package/templates/wordpress/theme/README.md +3 -0
  240. package/templates/wordpress/theme/acf-json/.gitkeep +0 -0
  241. package/templates/wordpress/theme/acf-json/group_baseline_alert.json +83 -0
  242. package/templates/wordpress/theme/acf-json/group_baseline_avatar.json +82 -0
  243. package/templates/wordpress/theme/acf-json/group_baseline_avatar_group.json +35 -0
  244. package/templates/wordpress/theme/acf-json/group_baseline_badge.json +93 -0
  245. package/templates/wordpress/theme/acf-json/group_baseline_carousel.json +21 -0
  246. package/templates/wordpress/theme/acf-json/group_baseline_carousel_slide.json +16 -0
  247. package/templates/wordpress/theme/acf-json/group_baseline_dialog.json +68 -0
  248. package/templates/wordpress/theme/acf-json/group_baseline_dialog_footer.json +23 -0
  249. package/templates/wordpress/theme/acf-json/group_baseline_item.json +101 -0
  250. package/templates/wordpress/theme/acf-json/group_baseline_item_group.json +26 -0
  251. package/templates/wordpress/theme/acf-json/group_baseline_sheet.json +104 -0
  252. package/templates/wordpress/theme/acf-json/group_baseline_sheet_footer.json +31 -0
  253. package/templates/wordpress/theme/assets/app.css +2 -0
  254. package/templates/wordpress/theme/assets/editor.css +2 -0
  255. package/templates/wordpress/theme/assets/images/placeholder.svg +1 -0
  256. package/templates/wordpress/theme/assets/js/carousel-editor.js +85 -0
  257. package/templates/wordpress/theme/assets/js/carousel.js +2 -0
  258. package/templates/wordpress/theme/assets/js/core-button-editor.js +243 -0
  259. package/templates/wordpress/theme/assets/js/core-layout-editor.js +144 -0
  260. package/templates/wordpress/theme/assets/js/core-navigation.js +11 -0
  261. package/templates/wordpress/theme/assets/js/media-editor.js +52 -0
  262. package/templates/wordpress/theme/assets/js/media.js +38 -0
  263. package/templates/wordpress/theme/assets/tokens.css +1030 -0
  264. package/templates/wordpress/theme/blocks/alert/alert.figma.ts +32 -0
  265. package/templates/wordpress/theme/blocks/alert/block.json +24 -0
  266. package/templates/wordpress/theme/blocks/alert/render.php +30 -0
  267. package/templates/wordpress/theme/blocks/avatar/block.json +24 -0
  268. package/templates/wordpress/theme/blocks/avatar/render.php +35 -0
  269. package/templates/wordpress/theme/blocks/avatar-group/avatar-group.figma.ts +16 -0
  270. package/templates/wordpress/theme/blocks/avatar-group/block.json +25 -0
  271. package/templates/wordpress/theme/blocks/avatar-group/render.php +27 -0
  272. package/templates/wordpress/theme/blocks/badge/badge.figma.ts +349 -0
  273. package/templates/wordpress/theme/blocks/badge/block.json +23 -0
  274. package/templates/wordpress/theme/blocks/badge/render.php +28 -0
  275. package/templates/wordpress/theme/blocks/carousel/block.json +25 -0
  276. package/templates/wordpress/theme/blocks/carousel/carousel.figma.ts +22 -0
  277. package/templates/wordpress/theme/blocks/carousel/render.php +54 -0
  278. package/templates/wordpress/theme/blocks/carousel-slide/block.json +24 -0
  279. package/templates/wordpress/theme/blocks/carousel-slide/render.php +13 -0
  280. package/templates/wordpress/theme/blocks/dialog/block.json +24 -0
  281. package/templates/wordpress/theme/blocks/dialog/dialog.figma.ts +36 -0
  282. package/templates/wordpress/theme/blocks/dialog/render.php +41 -0
  283. package/templates/wordpress/theme/blocks/dialog-footer/block.json +25 -0
  284. package/templates/wordpress/theme/blocks/dialog-footer/render.php +18 -0
  285. package/templates/wordpress/theme/blocks/item/block.json +25 -0
  286. package/templates/wordpress/theme/blocks/item/item.figma.ts +43 -0
  287. package/templates/wordpress/theme/blocks/item/render.php +38 -0
  288. package/templates/wordpress/theme/blocks/item-group/block.json +25 -0
  289. package/templates/wordpress/theme/blocks/item-group/item-group.figma.ts +28 -0
  290. package/templates/wordpress/theme/blocks/item-group/render.php +22 -0
  291. package/templates/wordpress/theme/blocks/sheet/block.json +24 -0
  292. package/templates/wordpress/theme/blocks/sheet/render.php +39 -0
  293. package/templates/wordpress/theme/blocks/sheet/sheet.figma.ts +38 -0
  294. package/templates/wordpress/theme/blocks/sheet-footer/block.json +25 -0
  295. package/templates/wordpress/theme/blocks/sheet-footer/render.php +18 -0
  296. package/templates/wordpress/theme/build-js.mjs +22 -0
  297. package/templates/wordpress/theme/code-connect/accordion-item.figma.ts +47 -0
  298. package/templates/wordpress/theme/code-connect/accordion.figma.ts +37 -0
  299. package/templates/wordpress/theme/code-connect/avatar.figma.ts +25 -0
  300. package/templates/wordpress/theme/code-connect/breadcrumb.figma.ts +12 -0
  301. package/templates/wordpress/theme/code-connect/button.figma.ts +360 -0
  302. package/templates/wordpress/theme/code-connect/card.figma.ts +45 -0
  303. package/templates/wordpress/theme/code-connect/icon-button.figma.ts +359 -0
  304. package/templates/wordpress/theme/code-connect/navigation-menu.figma.ts +20 -0
  305. package/templates/wordpress/theme/code-connect/pagination.figma.ts +17 -0
  306. package/templates/wordpress/theme/code-connect/popover.figma.ts +42 -0
  307. package/templates/wordpress/theme/code-connect/tabs.figma.ts +32 -0
  308. package/templates/wordpress/theme/code-connect/toggle-group.figma.ts +34 -0
  309. package/templates/wordpress/theme/code-connect/toggle.figma.ts +356 -0
  310. package/templates/wordpress/theme/composer.json +7 -0
  311. package/templates/wordpress/theme/footer.php +4 -0
  312. package/templates/wordpress/theme/functions.php +86 -0
  313. package/templates/wordpress/theme/header.php +17 -0
  314. package/templates/wordpress/theme/inc/acf.php +13 -0
  315. package/templates/wordpress/theme/inc/blocks.php +41 -0
  316. package/templates/wordpress/theme/inc/carousel.php +36 -0
  317. package/templates/wordpress/theme/inc/components/alert.php +83 -0
  318. package/templates/wordpress/theme/inc/components/avatar.php +111 -0
  319. package/templates/wordpress/theme/inc/components/badge.php +96 -0
  320. package/templates/wordpress/theme/inc/components/button.php +77 -0
  321. package/templates/wordpress/theme/inc/components/dialog.php +98 -0
  322. package/templates/wordpress/theme/inc/components/item.php +111 -0
  323. package/templates/wordpress/theme/inc/components/popover.php +125 -0
  324. package/templates/wordpress/theme/inc/components/sheet.php +88 -0
  325. package/templates/wordpress/theme/inc/components/toggle.php +127 -0
  326. package/templates/wordpress/theme/inc/core-button.php +96 -0
  327. package/templates/wordpress/theme/inc/core-card.php +30 -0
  328. package/templates/wordpress/theme/inc/core-layout.php +76 -0
  329. package/templates/wordpress/theme/inc/core-navigation.php +31 -0
  330. package/templates/wordpress/theme/inc/core-pagination.php +87 -0
  331. package/templates/wordpress/theme/inc/header.php +39 -0
  332. package/templates/wordpress/theme/inc/icons.generated.php +94 -0
  333. package/templates/wordpress/theme/inc/icons.php +70 -0
  334. package/templates/wordpress/theme/inc/looks.generated.php +18 -0
  335. package/templates/wordpress/theme/inc/media.php +183 -0
  336. package/templates/wordpress/theme/inc/sections.php +16 -0
  337. package/templates/wordpress/theme/index.php +24 -0
  338. package/templates/wordpress/theme/package-lock.json +1637 -0
  339. package/templates/wordpress/theme/package.json +23 -0
  340. package/templates/wordpress/theme/parts/header.html +23 -0
  341. package/templates/wordpress/theme/patterns/blog-card-grid.php +41 -0
  342. package/templates/wordpress/theme/patterns/card.php +46 -0
  343. package/templates/wordpress/theme/patterns/contact-centered.php +22 -0
  344. package/templates/wordpress/theme/patterns/cta-left.php +25 -0
  345. package/templates/wordpress/theme/patterns/faq-centered.php +36 -0
  346. package/templates/wordpress/theme/patterns/header-inline.php +33 -0
  347. package/templates/wordpress/theme/patterns/header-stacked.php +25 -0
  348. package/templates/wordpress/theme/patterns/hero-centered.php +28 -0
  349. package/templates/wordpress/theme/patterns/hero-split.php +41 -0
  350. package/templates/wordpress/theme/patterns/section.php +28 -0
  351. package/templates/wordpress/theme/src/app.css +45 -0
  352. package/templates/wordpress/theme/src/carousel.css +93 -0
  353. package/templates/wordpress/theme/src/carousel.js +94 -0
  354. package/templates/wordpress/theme/src/checkbox.css +102 -0
  355. package/templates/wordpress/theme/src/core-accordion.css +158 -0
  356. package/templates/wordpress/theme/src/core-avatar.css +68 -0
  357. package/templates/wordpress/theme/src/core-breadcrumbs.css +124 -0
  358. package/templates/wordpress/theme/src/core-button-editor.css +45 -0
  359. package/templates/wordpress/theme/src/core-button.css +155 -0
  360. package/templates/wordpress/theme/src/core-card.css +157 -0
  361. package/templates/wordpress/theme/src/core-layout.css +73 -0
  362. package/templates/wordpress/theme/src/core-navigation.css +290 -0
  363. package/templates/wordpress/theme/src/core-pagination.css +112 -0
  364. package/templates/wordpress/theme/src/core-table.css +88 -0
  365. package/templates/wordpress/theme/src/core-tabs.css +86 -0
  366. package/templates/wordpress/theme/src/dialog.css +29 -0
  367. package/templates/wordpress/theme/src/editor.css +65 -0
  368. package/templates/wordpress/theme/src/field.css +95 -0
  369. package/templates/wordpress/theme/src/fonts.css +3 -0
  370. package/templates/wordpress/theme/src/gravityforms.css +919 -0
  371. package/templates/wordpress/theme/src/header.css +80 -0
  372. package/templates/wordpress/theme/src/icons.generated.css +16 -0
  373. package/templates/wordpress/theme/src/input-group.css +105 -0
  374. package/templates/wordpress/theme/src/input.css +116 -0
  375. package/templates/wordpress/theme/src/item.css +7 -0
  376. package/templates/wordpress/theme/src/looks.generated.css +358 -0
  377. package/templates/wordpress/theme/src/media.css +160 -0
  378. package/templates/wordpress/theme/src/radio.css +88 -0
  379. package/templates/wordpress/theme/src/sections.css +80 -0
  380. package/templates/wordpress/theme/src/sheet.css +24 -0
  381. package/templates/wordpress/theme/src/switch.css +120 -0
  382. package/templates/wordpress/theme/src/text-styles.css +44 -0
  383. package/templates/wordpress/theme/src/textarea.css +61 -0
  384. package/templates/wordpress/theme/src/toggle-group.css +28 -0
  385. package/templates/wordpress/theme/src/typeset.css +510 -0
  386. package/templates/wordpress/theme/style.css +13 -0
  387. package/templates/wordpress/theme/theme.json +362 -0
  388. package/templates/wordpress/web/wp-config.php +38 -0
  389. package/templates/wordpress/wp-cli.yml +1 -0
  390. package/templates/next/.claude/skills/ai-elements/SKILL.md +0 -160
  391. package/templates/next/.claude/skills/ai-elements/references/agent.md +0 -134
  392. package/templates/next/.claude/skills/ai-elements/references/artifact.md +0 -84
  393. package/templates/next/.claude/skills/ai-elements/references/attachments.md +0 -190
  394. package/templates/next/.claude/skills/ai-elements/references/audio-player.md +0 -134
  395. package/templates/next/.claude/skills/ai-elements/references/canvas.md +0 -34
  396. package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +0 -81
  397. package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +0 -183
  398. package/templates/next/.claude/skills/ai-elements/references/code-block.md +0 -170
  399. package/templates/next/.claude/skills/ai-elements/references/commit.md +0 -177
  400. package/templates/next/.claude/skills/ai-elements/references/confirmation.md +0 -262
  401. package/templates/next/.claude/skills/ai-elements/references/connection.md +0 -34
  402. package/templates/next/.claude/skills/ai-elements/references/context.md +0 -126
  403. package/templates/next/.claude/skills/ai-elements/references/controls.md +0 -32
  404. package/templates/next/.claude/skills/ai-elements/references/conversation.md +0 -224
  405. package/templates/next/.claude/skills/ai-elements/references/edge.md +0 -52
  406. package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +0 -102
  407. package/templates/next/.claude/skills/ai-elements/references/file-tree.md +0 -72
  408. package/templates/next/.claude/skills/ai-elements/references/image.md +0 -146
  409. package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +0 -299
  410. package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +0 -104
  411. package/templates/next/.claude/skills/ai-elements/references/message.md +0 -237
  412. package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +0 -189
  413. package/templates/next/.claude/skills/ai-elements/references/model-selector.md +0 -112
  414. package/templates/next/.claude/skills/ai-elements/references/node.md +0 -73
  415. package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +0 -67
  416. package/templates/next/.claude/skills/ai-elements/references/package-info.md +0 -95
  417. package/templates/next/.claude/skills/ai-elements/references/panel.md +0 -33
  418. package/templates/next/.claude/skills/ai-elements/references/persona.md +0 -166
  419. package/templates/next/.claude/skills/ai-elements/references/plan.md +0 -79
  420. package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +0 -579
  421. package/templates/next/.claude/skills/ai-elements/references/queue.md +0 -172
  422. package/templates/next/.claude/skills/ai-elements/references/reasoning.md +0 -238
  423. package/templates/next/.claude/skills/ai-elements/references/sandbox.md +0 -129
  424. package/templates/next/.claude/skills/ai-elements/references/schema-display.md +0 -102
  425. package/templates/next/.claude/skills/ai-elements/references/shimmer.md +0 -48
  426. package/templates/next/.claude/skills/ai-elements/references/snippet.md +0 -64
  427. package/templates/next/.claude/skills/ai-elements/references/sources.md +0 -209
  428. package/templates/next/.claude/skills/ai-elements/references/speech-input.md +0 -163
  429. package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +0 -224
  430. package/templates/next/.claude/skills/ai-elements/references/suggestion.md +0 -124
  431. package/templates/next/.claude/skills/ai-elements/references/task.md +0 -222
  432. package/templates/next/.claude/skills/ai-elements/references/terminal.md +0 -103
  433. package/templates/next/.claude/skills/ai-elements/references/test-results.md +0 -157
  434. package/templates/next/.claude/skills/ai-elements/references/tool.md +0 -285
  435. package/templates/next/.claude/skills/ai-elements/references/toolbar.md +0 -32
  436. package/templates/next/.claude/skills/ai-elements/references/transcription.md +0 -120
  437. package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +0 -241
  438. package/templates/next/.claude/skills/ai-elements/references/web-preview.md +0 -200
  439. package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +0 -61
  440. package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +0 -127
  441. package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +0 -128
  442. package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +0 -95
  443. package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +0 -85
  444. package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +0 -35
  445. package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +0 -68
  446. package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +0 -82
  447. package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +0 -110
  448. package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +0 -46
  449. package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +0 -120
  450. package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +0 -94
  451. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +0 -40
  452. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +0 -40
  453. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +0 -54
  454. package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +0 -55
  455. package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +0 -45
  456. package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +0 -177
  457. package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +0 -62
  458. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +0 -18
  459. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +0 -21
  460. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +0 -24
  461. package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +0 -42
  462. package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +0 -20
  463. package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +0 -97
  464. package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +0 -104
  465. package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +0 -365
  466. package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +0 -49
  467. package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +0 -365
  468. package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +0 -33
  469. package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +0 -51
  470. package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +0 -110
  471. package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +0 -110
  472. package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +0 -110
  473. package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +0 -110
  474. package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +0 -110
  475. package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +0 -110
  476. package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +0 -65
  477. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +0 -502
  478. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +0 -44
  479. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +0 -267
  480. package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +0 -394
  481. package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +0 -295
  482. package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +0 -71
  483. package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +0 -178
  484. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +0 -9
  485. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +0 -20
  486. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +0 -23
  487. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +0 -16
  488. package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +0 -110
  489. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +0 -31
  490. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +0 -43
  491. package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +0 -17
  492. package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +0 -19
  493. package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +0 -25
  494. package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +0 -39
  495. package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +0 -32
  496. package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +0 -84
  497. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +0 -39
  498. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +0 -41
  499. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +0 -58
  500. package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +0 -144
  501. package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +0 -32
  502. package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +0 -59
  503. package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +0 -7
  504. package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +0 -19
  505. package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +0 -38
  506. package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +0 -82
  507. package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +0 -27
  508. package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +0 -51
  509. package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +0 -40
  510. package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +0 -102
  511. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +0 -31
  512. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +0 -30
  513. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +0 -80
  514. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +0 -44
  515. package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +0 -222
  516. package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +0 -290
  517. package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +0 -245
  518. package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +0 -115
  519. package/templates/next/.claude/skills/ai-sdk/SKILL.md +0 -78
  520. package/templates/next/.claude/skills/frontend-design/LICENSE.txt +0 -177
  521. package/templates/next/.claude/skills/frontend-design/SKILL.md +0 -55
  522. package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +0 -93
  523. package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +0 -108
  524. package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +0 -946
  525. package/templates/next/.claude/skills/vercel-composition-patterns/README.md +0 -60
  526. package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +0 -89
  527. package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +0 -11
  528. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +0 -29
  529. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +0 -24
  530. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +0 -100
  531. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +0 -112
  532. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +0 -87
  533. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +0 -100
  534. package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +0 -42
  535. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +0 -191
  536. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +0 -113
  537. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +0 -125
  538. package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +0 -3810
  539. package/templates/next/.claude/skills/vercel-react-best-practices/README.md +0 -123
  540. package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +0 -149
  541. package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +0 -15
  542. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +0 -46
  543. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +0 -28
  544. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
  545. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  546. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  547. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  548. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  549. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
  550. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -82
  551. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  552. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  553. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  554. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
  555. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
  556. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  557. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  558. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  559. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  560. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  561. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  562. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  563. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  564. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  565. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  566. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  567. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  568. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  569. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  570. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  571. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  572. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  573. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  574. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  575. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
  576. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  577. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  578. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  579. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  580. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  581. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  582. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  583. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  584. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  585. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  586. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  587. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  588. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  589. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  590. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  591. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  592. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  593. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  594. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  595. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  596. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  597. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  598. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  599. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  600. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  601. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  602. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  603. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  604. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  605. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  606. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  607. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  608. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  609. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
  610. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
  611. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  612. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
  613. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  614. package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +0 -39
  615. package/templates/next/CLAUDE.md +0 -42
  616. package/templates/next/README.md +0 -30
  617. package/templates/next/_gitignore +0 -4
  618. package/templates/next/app/layout.tsx +0 -44
  619. package/templates/next/globals.d.ts +0 -8
  620. package/templates/next/next.config.mjs +0 -6
  621. package/templates/next/package.json +0 -38
  622. package/templates/next/postcss.config.mjs +0 -5
  623. package/templates/next/skills-lock.json +0 -47
  624. package/templates/next/tsconfig.json +0 -36
  625. package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +0 -44
  626. package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +0 -51
  627. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +0 -205
  628. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +0 -272
  629. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +0 -361
  630. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +0 -527
  631. package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +0 -343
  632. package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +0 -342
  633. package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +0 -1
  634. package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +0 -457
  635. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +0 -10
  636. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +0 -103
  637. package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +0 -10
  638. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +0 -759
  639. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +0 -361
  640. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +0 -527
  641. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +0 -654
  642. package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +0 -329
  643. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +0 -165
  644. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +0 -205
  645. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +0 -361
  646. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +0 -527
  647. package/templates/shopify-theme/.shopifyignore +0 -9
  648. package/templates/shopify-theme/CLAUDE.md +0 -51
  649. package/templates/shopify-theme/README.md +0 -92
  650. package/templates/shopify-theme/assets/baseline.css +0 -8390
  651. package/templates/shopify-theme/assets/swiper-element-bundle.min.js +0 -14
  652. package/templates/shopify-theme/blocks/_accordion.liquid +0 -59
  653. package/templates/shopify-theme/blocks/_carousel-slide.liquid +0 -24
  654. package/templates/shopify-theme/blocks/_modal-body.liquid +0 -18
  655. package/templates/shopify-theme/blocks/_modal-footer.liquid +0 -36
  656. package/templates/shopify-theme/blocks/_modal-header.liquid +0 -19
  657. package/templates/shopify-theme/blocks/_modal-media.liquid +0 -37
  658. package/templates/shopify-theme/blocks/accordion-group.liquid +0 -53
  659. package/templates/shopify-theme/blocks/alert.liquid +0 -92
  660. package/templates/shopify-theme/blocks/avatar-group.liquid +0 -51
  661. package/templates/shopify-theme/blocks/avatar.liquid +0 -56
  662. package/templates/shopify-theme/blocks/badge.liquid +0 -33
  663. package/templates/shopify-theme/blocks/breadcrumb.liquid +0 -45
  664. package/templates/shopify-theme/blocks/button.liquid +0 -51
  665. package/templates/shopify-theme/blocks/buttons.liquid +0 -41
  666. package/templates/shopify-theme/blocks/card.liquid +0 -67
  667. package/templates/shopify-theme/blocks/carousel.liquid +0 -55
  668. package/templates/shopify-theme/blocks/column.liquid +0 -33
  669. package/templates/shopify-theme/blocks/image.liquid +0 -37
  670. package/templates/shopify-theme/blocks/modal.liquid +0 -52
  671. package/templates/shopify-theme/blocks/popover.liquid +0 -24
  672. package/templates/shopify-theme/blocks/skeleton.liquid +0 -22
  673. package/templates/shopify-theme/blocks/spinner.liquid +0 -22
  674. package/templates/shopify-theme/blocks/split.liquid +0 -39
  675. package/templates/shopify-theme/blocks/tab.liquid +0 -19
  676. package/templates/shopify-theme/blocks/tabs.liquid +0 -78
  677. package/templates/shopify-theme/blocks/tags.liquid +0 -55
  678. package/templates/shopify-theme/blocks/text.liquid +0 -55
  679. package/templates/shopify-theme/blocks/tooltip.liquid +0 -50
  680. package/templates/shopify-theme/blocks/typography.liquid +0 -90
  681. package/templates/shopify-theme/config/settings_data.json +0 -4
  682. package/templates/shopify-theme/config/settings_schema.json +0 -10
  683. package/templates/shopify-theme/layout/theme.liquid +0 -21
  684. package/templates/shopify-theme/locales/en.default.json +0 -5
  685. package/templates/shopify-theme/locales/en.default.schema.json +0 -131
  686. package/templates/shopify-theme/package.json +0 -21
  687. package/templates/shopify-theme/scripts/sync-tokens.mjs +0 -32
  688. package/templates/shopify-theme/sections/baseline-components.liquid +0 -81
  689. package/templates/shopify-theme/skills-lock.json +0 -23
  690. package/templates/shopify-theme/snippets/lucide.liquid +0 -34
  691. package/templates/shopify-theme/snippets/pagination.liquid +0 -44
  692. package/templates/shopify-theme/templates/collection.json +0 -13
  693. package/templates/shopify-theme/templates/gift_card.liquid +0 -5
  694. package/templates/shopify-theme/templates/index.json +0 -135
  695. package/templates/shopify-theme/templates/list-collections.json +0 -13
  696. package/templates/shopify-theme/templates/product.json +0 -13
  697. package/templates/wordpress/.claude/CLAUDE.md +0 -37
  698. package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +0 -174
  699. package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +0 -22
  700. package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +0 -49
  701. package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +0 -46
  702. package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +0 -36
  703. package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +0 -24
  704. package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +0 -23
  705. package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +0 -25
  706. package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +0 -30
  707. package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +0 -18
  708. package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +0 -21
  709. package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +0 -121
  710. package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +0 -116
  711. package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +0 -37
  712. package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +0 -24
  713. package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +0 -18
  714. package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +0 -14
  715. package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +0 -16
  716. package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +0 -59
  717. package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +0 -117
  718. package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +0 -146
  719. package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +0 -24
  720. package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +0 -20
  721. package/templates/wordpress/.claude/skills/wp-performance/references/database.md +0 -20
  722. package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +0 -15
  723. package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +0 -21
  724. package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +0 -24
  725. package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +0 -38
  726. package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +0 -22
  727. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +0 -24
  728. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +0 -32
  729. package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +0 -128
  730. package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +0 -112
  731. package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +0 -19
  732. package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +0 -19
  733. package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +0 -33
  734. package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +0 -29
  735. package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +0 -22
  736. package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +0 -16
  737. package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +0 -122
  738. package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +0 -114
  739. package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +0 -18
  740. package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +0 -20
  741. package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +0 -20
  742. package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +0 -30
  743. package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +0 -36
  744. package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +0 -22
  745. package/templates/wordpress/.ddev/docker-compose.packages.yaml +0 -14
  746. package/templates/wordpress/.ddev/docker-compose.redis.yaml +0 -11
  747. package/templates/wordpress/.env.example +0 -33
  748. package/templates/wordpress/CLAUDE.md +0 -34
  749. package/templates/wordpress/_gitignore +0 -33
  750. package/templates/wordpress/composer.lock +0 -1594
  751. package/templates/wordpress/package.json +0 -13
  752. package/templates/wordpress/scripts/seed.sh +0 -64
  753. package/templates/wordpress/skills-lock.json +0 -35
  754. package/templates/wordpress/wp-config.php +0 -89
  755. package/templates/wordpress/wp-content/index.php +0 -2
  756. package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +0 -26
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "goldencomm-baseline-theme",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "description": "Build tooling for the Baseline WordPress theme (Tailwind v4 CLI, and esbuild for the scripts that import npm packages: the carousel's Embla). Not a monorepo workspace: this folder is copied into client sites, which update Embla here with npm install + npm run build.",
6
+ "engines": {
7
+ "node": ">=24 <25"
8
+ },
9
+ "scripts": {
10
+ "build": "tailwindcss -i src/app.css -o assets/app.css --minify && tailwindcss -i src/editor.css -o assets/editor.css --minify && node build-js.mjs",
11
+ "watch": "tailwindcss -i src/app.css -o assets/app.css --watch",
12
+ "build:js": "node build-js.mjs"
13
+ },
14
+ "devDependencies": {
15
+ "@tailwindcss/cli": "^4.1.0",
16
+ "tailwindcss": "^4.1.0",
17
+ "esbuild": "0.28.2"
18
+ },
19
+ "dependencies": {
20
+ "embla-carousel": "8.6.0",
21
+ "embla-carousel-autoplay": "8.6.0"
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ <!-- wp:group {"align":"full","className":"bl-announcement","baselineSurface":"muted","layout":{"type":"constrained"}} -->
2
+ <div class="wp-block-group alignfull bl-announcement"><!-- wp:paragraph {"align":"center"} -->
3
+ <p class="has-text-align-center">We’ll find you the best possible rate. <a href="/contact/">Get a quote now.</a></p>
4
+ <!-- /wp:paragraph --></div>
5
+ <!-- /wp:group -->
6
+
7
+ <!-- wp:group {"align":"full","className":"bl-header-bar","layout":{"type":"constrained"}} -->
8
+ <div class="wp-block-group alignfull bl-header-bar"><!-- wp:group {"align":"wide","className":"bl-header-row","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"space-between"}} -->
9
+ <div class="wp-block-group alignwide bl-header-row"><!-- wp:site-title {"level":0,"fontSize":"heading-md"} /-->
10
+
11
+ <!-- wp:navigation {"overlayMenu":"mobile","className":"bl-header-nav","layout":{"type":"flex","justifyContent":"center"}} /-->
12
+
13
+ <!-- wp:group {"className":"bl-header-actions","layout":{"type":"flex","flexWrap":"nowrap"}} -->
14
+ <div class="wp-block-group bl-header-actions"><!-- wp:buttons -->
15
+ <div class="wp-block-buttons"><!-- wp:button -->
16
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="tel:+15555550100">Call us</a></div>
17
+ <!-- /wp:button --></div>
18
+ <!-- /wp:buttons -->
19
+
20
+ <!-- wp:search {"label":"Search","showLabel":false,"buttonText":"Search","className":"is-style-dialog"} /--></div>
21
+ <!-- /wp:group --></div>
22
+ <!-- /wp:group --></div>
23
+ <!-- /wp:group -->
@@ -0,0 +1,41 @@
1
+ <?php
2
+ /**
3
+ * Title: Blog: Card Grid
4
+ * Slug: baseline/blog-card-grid
5
+ * Categories: sections
6
+ * Description: Figma Blog/Card Grid: an eyebrow, a heading and a lead, then the latest three posts as Cards (featured image, title, date, category, excerpt) at the wide width.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)"><!-- wp:group {"align":"wide","layout":{"type":"default"}} -->
11
+ <div class="wp-block-group alignwide"><!-- wp:paragraph {"className":"is-style-eyebrow"} -->
12
+ <p class="is-style-eyebrow">Blog</p>
13
+ <!-- /wp:paragraph -->
14
+
15
+ <!-- wp:heading {"fontSize":"heading-xl"} -->
16
+ <h2 class="wp-block-heading has-heading-xl-font-size">Latest articles</h2>
17
+ <!-- /wp:heading -->
18
+
19
+ <!-- wp:paragraph {"className":"is-style-lead"} -->
20
+ <p class="is-style-lead">Insights on design, development and marketing from our team.</p>
21
+ <!-- /wp:paragraph --></div>
22
+ <!-- /wp:group -->
23
+
24
+ <!-- wp:query {"queryId":0,"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","inherit":false},"align":"wide","className":"bl-post-grid"} -->
25
+ <div class="wp-block-query alignwide bl-post-grid"><!-- wp:post-template {"layout":{"type":"grid","columnCount":3}} -->
26
+ <!-- wp:group {"className":"is-style-card","layout":{"type":"default"}} -->
27
+ <div class="wp-block-group is-style-card"><!-- wp:post-featured-image {"isLink":true,"aspectRatio":"3/2"} /-->
28
+
29
+ <!-- wp:post-title {"level":3,"isLink":true,"fontSize":"heading-sm"} /-->
30
+
31
+ <!-- wp:group {"className":"bl-post-meta","layout":{"type":"flex","flexWrap":"wrap"}} -->
32
+ <div class="wp-block-group bl-post-meta"><!-- wp:post-date /-->
33
+
34
+ <!-- wp:post-terms {"term":"category"} /--></div>
35
+ <!-- /wp:group -->
36
+
37
+ <!-- wp:post-excerpt {"excerptLength":24} /--></div>
38
+ <!-- /wp:group -->
39
+ <!-- /wp:post-template --></div>
40
+ <!-- /wp:query --></section>
41
+ <!-- /wp:group -->
@@ -0,0 +1,46 @@
1
+ <?php
2
+ /**
3
+ * Title: Card
4
+ * Slug: baseline/card
5
+ * Categories: baseline
6
+ * Keywords: card, panel, tile
7
+ * Description: Baseline Card (components/card/spec.md): media, header with title, description and action, content, footer. Delete the regions you do not need.
8
+ */
9
+ ?>
10
+ <!-- wp:group {"className":"is-style-card","layout":{"type":"default"}} -->
11
+ <div class="wp-block-group is-style-card"><!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
12
+ <figure class="wp-block-image size-large"><img alt=""/></figure>
13
+ <!-- /wp:image -->
14
+
15
+ <!-- wp:group {"className":"is-style-card-header","layout":{"type":"default"}} -->
16
+ <div class="wp-block-group is-style-card-header"><!-- wp:heading {"level":3} -->
17
+ <h3 class="wp-block-heading"><?php esc_html_e('Card title', 'baseline'); ?></h3>
18
+ <!-- /wp:heading -->
19
+
20
+ <!-- wp:paragraph -->
21
+ <p><?php esc_html_e('A short supporting description.', 'baseline'); ?></p>
22
+ <!-- /wp:paragraph -->
23
+
24
+ <!-- wp:buttons -->
25
+ <div class="wp-block-buttons"><!-- wp:button {"className":"is-style-link"} -->
26
+ <div class="wp-block-button is-style-link"><a class="wp-block-button__link wp-element-button"><?php esc_html_e('Action', 'baseline'); ?></a></div>
27
+ <!-- /wp:button --></div>
28
+ <!-- /wp:buttons --></div>
29
+ <!-- /wp:group -->
30
+
31
+ <!-- wp:paragraph -->
32
+ <p><?php esc_html_e('Card content: any blocks placed here are padded to the card.', 'baseline'); ?></p>
33
+ <!-- /wp:paragraph -->
34
+
35
+ <!-- wp:group {"className":"is-style-card-footer","layout":{"type":"flex","flexWrap":"nowrap"}} -->
36
+ <div class="wp-block-group is-style-card-footer"><!-- wp:buttons -->
37
+ <div class="wp-block-buttons"><!-- wp:button -->
38
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button"><?php esc_html_e('Primary action', 'baseline'); ?></a></div>
39
+ <!-- /wp:button -->
40
+
41
+ <!-- wp:button {"className":"is-style-outline"} -->
42
+ <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button"><?php esc_html_e('Secondary', 'baseline'); ?></a></div>
43
+ <!-- /wp:button --></div>
44
+ <!-- /wp:buttons --></div>
45
+ <!-- /wp:group --></div>
46
+ <!-- /wp:group -->
@@ -0,0 +1,22 @@
1
+ <?php
2
+ /**
3
+ * Title: Contact: Centered
4
+ * Slug: baseline/contact-centered
5
+ * Categories: sections
6
+ * Description: Figma Contact/Centered: a heading and a lead at the content width; add the site's form block (Gravity Forms) below. WordPress has no core form block.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)">
11
+ <!-- wp:heading {"fontSize":"heading-xl"} -->
12
+ <h2 class="wp-block-heading has-heading-xl-font-size">Get in touch</h2>
13
+ <!-- /wp:heading -->
14
+
15
+ <!-- wp:paragraph {"className":"is-style-lead"} -->
16
+ <p class="is-style-lead">Tell us about your project and we’ll get back to you within one business day.</p>
17
+ <!-- /wp:paragraph -->
18
+
19
+ <!-- wp:paragraph {"className":"is-style-lead"} -->
20
+ <p class="is-style-lead"><em>Replace this paragraph with the contact form block.</em></p>
21
+ <!-- /wp:paragraph --></section>
22
+ <!-- /wp:group -->
@@ -0,0 +1,25 @@
1
+ <?php
2
+ /**
3
+ * Title: CTA: Left
4
+ * Slug: baseline/cta-left
5
+ * Categories: sections
6
+ * Description: Figma CTA/Left: a heading and two actions, start-aligned at the wide width. Set the section group's Scheme for a coloured band.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)"><!-- wp:group {"align":"wide","layout":{"type":"default"}} -->
11
+ <div class="wp-block-group alignwide"><!-- wp:heading {"fontSize":"heading-xl"} -->
12
+ <h2 class="wp-block-heading has-heading-xl-font-size">Let’s build something great together</h2>
13
+ <!-- /wp:heading -->
14
+
15
+ <!-- wp:buttons -->
16
+ <div class="wp-block-buttons"><!-- wp:button -->
17
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="#">Start a free trial</a></div>
18
+ <!-- /wp:button -->
19
+
20
+ <!-- wp:button {"className":"is-style-outline"} -->
21
+ <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="#">Request a demo</a></div>
22
+ <!-- /wp:button --></div>
23
+ <!-- /wp:buttons --></div>
24
+ <!-- /wp:group --></section>
25
+ <!-- /wp:group -->
@@ -0,0 +1,36 @@
1
+ <?php
2
+ /**
3
+ * Title: FAQ: Centered
4
+ * Slug: baseline/faq-centered
5
+ * Categories: sections
6
+ * Description: Figma FAQ/Centered: a heading, a lead and the questions as core/details (Baseline's Accordion), at the content width.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)">
11
+ <!-- wp:heading {"fontSize":"heading-xl"} -->
12
+ <h2 class="wp-block-heading has-heading-xl-font-size">Frequently asked questions</h2>
13
+ <!-- /wp:heading -->
14
+
15
+ <!-- wp:paragraph {"className":"is-style-lead"} -->
16
+ <p class="is-style-lead">Can’t find the answer you’re looking for? Contact our support team.</p>
17
+ <!-- /wp:paragraph -->
18
+
19
+ <!-- wp:details {"showContent":true} -->
20
+ <details class="wp-block-details" open><summary>How do I reset my password?</summary><!-- wp:paragraph -->
21
+ <p>Click on ‘Forgot password’ on the login page, enter your email address, and we’ll send you a link to reset your password. The link expires in 24 hours.</p>
22
+ <!-- /wp:paragraph --></details>
23
+ <!-- /wp:details -->
24
+
25
+ <!-- wp:details -->
26
+ <details class="wp-block-details"><summary>Can I change my plan later?</summary><!-- wp:paragraph -->
27
+ <p>Yes. Upgrade or downgrade at any time from your account settings; changes apply from the next billing period.</p>
28
+ <!-- /wp:paragraph --></details>
29
+ <!-- /wp:details -->
30
+
31
+ <!-- wp:details -->
32
+ <details class="wp-block-details"><summary>Do you offer support?</summary><!-- wp:paragraph -->
33
+ <p>Every plan includes email support. Business plans add phone support and a named account manager.</p>
34
+ <!-- /wp:paragraph --></details>
35
+ <!-- /wp:details --></section>
36
+ <!-- /wp:group -->
@@ -0,0 +1,33 @@
1
+ <?php
2
+ /**
3
+ * Title: Header: Inline
4
+ * Slug: baseline/header-inline
5
+ * Categories: header
6
+ * Block Types: core/template-part/header
7
+ * Description: Figma Header/Inline (components/header/spec.md): a centred announcement on the muted surface, then the site title, the navigation and the actions on one row. Below 600px core's navigation overlay is the mobile menu.
8
+ * Keywords: header, navigation, announcement
9
+ */
10
+ ?>
11
+ <!-- wp:group {"align":"full","className":"bl-announcement","baselineSurface":"muted","layout":{"type":"constrained"}} -->
12
+ <div class="wp-block-group alignfull bl-announcement"><!-- wp:paragraph {"align":"center"} -->
13
+ <p class="has-text-align-center">We’ll find you the best possible rate. <a href="/contact/">Get a quote now.</a></p>
14
+ <!-- /wp:paragraph --></div>
15
+ <!-- /wp:group -->
16
+
17
+ <!-- wp:group {"align":"full","className":"bl-header-bar","layout":{"type":"constrained"}} -->
18
+ <div class="wp-block-group alignfull bl-header-bar"><!-- wp:group {"align":"wide","className":"bl-header-row","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"space-between"}} -->
19
+ <div class="wp-block-group alignwide bl-header-row"><!-- wp:site-title {"level":0,"fontSize":"heading-md"} /-->
20
+
21
+ <!-- wp:navigation {"overlayMenu":"mobile","className":"bl-header-nav","layout":{"type":"flex","justifyContent":"center"}} /-->
22
+
23
+ <!-- wp:group {"className":"bl-header-actions","layout":{"type":"flex","flexWrap":"nowrap"}} -->
24
+ <div class="wp-block-group bl-header-actions"><!-- wp:buttons -->
25
+ <div class="wp-block-buttons"><!-- wp:button -->
26
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="tel:+15555550100">Call us</a></div>
27
+ <!-- /wp:button --></div>
28
+ <!-- /wp:buttons -->
29
+
30
+ <!-- wp:search {"label":"Search","showLabel":false,"buttonText":"Search","className":"is-style-dialog"} /--></div>
31
+ <!-- /wp:group --></div>
32
+ <!-- /wp:group --></div>
33
+ <!-- /wp:group -->
@@ -0,0 +1,25 @@
1
+ <?php
2
+ /**
3
+ * Title: Header: Stacked
4
+ * Slug: baseline/header-stacked
5
+ * Categories: header
6
+ * Block Types: core/template-part/header
7
+ * Description: Figma Header/Stacked (components/header/spec.md): the site title and search on the first row, the navigation on its own row below. Below 600px the navigation row goes and the first row carries core's mobile menu.
8
+ * Keywords: header, navigation
9
+ */
10
+ ?>
11
+ <!-- wp:group {"align":"full","className":"bl-header-bar","layout":{"type":"constrained"}} -->
12
+ <div class="wp-block-group alignfull bl-header-bar"><!-- wp:group {"align":"wide","className":"bl-header-row","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"space-between"}} -->
13
+ <div class="wp-block-group alignwide bl-header-row"><!-- wp:navigation {"overlayMenu":"always","className":"bl-header-nav-mobile"} /-->
14
+
15
+ <!-- wp:site-title {"level":0,"fontSize":"heading-md"} /-->
16
+
17
+ <!-- wp:group {"className":"bl-header-actions","layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"right"}} -->
18
+ <div class="wp-block-group bl-header-actions"><!-- wp:search {"label":"Search","showLabel":false,"buttonText":"Search","className":"is-style-dialog"} /--></div>
19
+ <!-- /wp:group --></div>
20
+ <!-- /wp:group --></div>
21
+ <!-- /wp:group -->
22
+
23
+ <!-- wp:group {"align":"full","className":"bl-header-nav-row","layout":{"type":"constrained"}} -->
24
+ <div class="wp-block-group alignfull bl-header-nav-row"><!-- wp:navigation {"overlayMenu":"never","align":"wide","className":"bl-header-nav"} /--></div>
25
+ <!-- /wp:group -->
@@ -0,0 +1,28 @@
1
+ <?php
2
+ /**
3
+ * Title: Hero: Centered
4
+ * Slug: baseline/hero-centered
5
+ * Categories: sections
6
+ * Description: Figma Hero/Centered: a centred display headline (h1), a lead and two actions at the content width.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)">
11
+ <!-- wp:heading {"textAlign":"center","level":1,"fontSize":"display-sm"} -->
12
+ <h1 class="wp-block-heading has-text-align-center has-display-sm-font-size">Build a website your team can run</h1>
13
+ <!-- /wp:heading -->
14
+
15
+ <!-- wp:paragraph {"align":"center","className":"is-style-lead"} -->
16
+ <p class="has-text-align-center is-style-lead">Launch faster with components that are designed, built and tested together for every platform you use.</p>
17
+ <!-- /wp:paragraph -->
18
+
19
+ <!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
20
+ <div class="wp-block-buttons"><!-- wp:button -->
21
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="#">Start a free trial</a></div>
22
+ <!-- /wp:button -->
23
+
24
+ <!-- wp:button {"className":"is-style-outline"} -->
25
+ <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="#">Request a demo</a></div>
26
+ <!-- /wp:button --></div>
27
+ <!-- /wp:buttons --></section>
28
+ <!-- /wp:group -->
@@ -0,0 +1,41 @@
1
+ <?php
2
+ /**
3
+ * Title: Hero: Split
4
+ * Slug: baseline/hero-split
5
+ * Categories: sections
6
+ * Description: Figma Hero/Split: an eyebrow, a display headline (h1), a lead and two actions beside a square image, at the wide width. On mobile set the columns block to Invert order when stacked to put the image first.
7
+ */
8
+ ?>
9
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
10
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)"><!-- wp:columns {"verticalAlignment":"center","align":"wide"} -->
11
+ <div class="wp-block-columns alignwide are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center"} -->
12
+ <div class="wp-block-column is-vertically-aligned-center"><!-- wp:paragraph {"className":"is-style-eyebrow"} -->
13
+ <p class="is-style-eyebrow">New for 2026</p>
14
+ <!-- /wp:paragraph -->
15
+
16
+ <!-- wp:heading {"level":1,"fontSize":"display-sm"} -->
17
+ <h1 class="wp-block-heading has-display-sm-font-size">Build a website your team can run</h1>
18
+ <!-- /wp:heading -->
19
+
20
+ <!-- wp:paragraph {"className":"is-style-lead"} -->
21
+ <p class="is-style-lead">Launch faster with components that are designed, built and tested together for every platform you use.</p>
22
+ <!-- /wp:paragraph -->
23
+
24
+ <!-- wp:buttons -->
25
+ <div class="wp-block-buttons"><!-- wp:button -->
26
+ <div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="#">Start a free trial</a></div>
27
+ <!-- /wp:button -->
28
+
29
+ <!-- wp:button {"className":"is-style-outline"} -->
30
+ <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="#">Request a demo</a></div>
31
+ <!-- /wp:button --></div>
32
+ <!-- /wp:buttons --></div>
33
+ <!-- /wp:column -->
34
+
35
+ <!-- wp:column {"verticalAlignment":"center"} -->
36
+ <div class="wp-block-column is-vertically-aligned-center"><!-- wp:image {"aspectRatio":"1","scale":"cover","sizeSlug":"full","linkDestination":"none"} -->
37
+ <figure class="wp-block-image size-full"><img src="<?php echo esc_url(get_theme_file_uri('assets/images/placeholder.svg')); ?>" alt="" style="aspect-ratio:1;object-fit:cover"/></figure>
38
+ <!-- /wp:image --></div>
39
+ <!-- /wp:column --></div>
40
+ <!-- /wp:columns --></section>
41
+ <!-- /wp:group -->
@@ -0,0 +1,28 @@
1
+ <?php
2
+ /**
3
+ * Title: Section
4
+ * Slug: baseline/section
5
+ * Categories: baseline
6
+ * Description: Section > Container > Columns (B5): a full-width band in the page's scheme, wide content in two columns.
7
+ * Keywords: section, columns, layout
8
+ */
9
+ ?>
10
+ <!-- wp:group {"tagName":"section","align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|lg","bottom":"var:preset|spacing|lg"}}},"layout":{"type":"constrained"}} -->
11
+ <section class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--lg);padding-bottom:var(--wp--preset--spacing--lg)"><!-- wp:columns {"align":"wide"} -->
12
+ <div class="wp-block-columns alignwide"><!-- wp:column -->
13
+ <div class="wp-block-column"><!-- wp:heading -->
14
+ <h2 class="wp-block-heading">Build a website your team can run</h2>
15
+ <!-- /wp:heading -->
16
+
17
+ <!-- wp:paragraph -->
18
+ <p>Launch faster with components that are designed, built and tested together for every platform you use.</p>
19
+ <!-- /wp:paragraph --></div>
20
+ <!-- /wp:column -->
21
+
22
+ <!-- wp:column -->
23
+ <div class="wp-block-column"><!-- wp:paragraph -->
24
+ <p>Column 2</p>
25
+ <!-- /wp:paragraph --></div>
26
+ <!-- /wp:column --></div>
27
+ <!-- /wp:columns --></section>
28
+ <!-- /wp:group -->
@@ -0,0 +1,45 @@
1
+ /* Front-end stylesheet: Tailwind with preflight + Baseline tokens. Built by `npm run build` into assets/app.css. */
2
+ @import "./fonts.css";
3
+ @import "tailwindcss";
4
+ @import "../assets/tokens.css";
5
+ @import "./typeset.css"; /* prose rhythm (ADR-0028): generated from tokens/typeset.css; unlayered on purpose */
6
+ @import "./text-styles.css"; /* content ramp (ADR-0014, generated): display-* / heading-* and the has-<style>-font-size presets */
7
+ @import "./core-button.css"; /* core/button as the Baseline button (ADR-0018); plain CSS on core's classes */
8
+ @import "./core-avatar.css"; /* core/avatar as the Baseline Avatar (ADR-0018): round, blended outline */
9
+ @import "./core-card.css"; /* core/group as the Baseline Card (ADR-0018): block styles card, card-header, card-footer */
10
+ @import "./sections.css"; /* the starter sections' paragraph styles and blog grid (B5) */
11
+ @import "./header.css"; /* the site header on core blocks: parts/header.html, patterns header-inline / header-stacked (B5) */
12
+ @import "./core-layout.css"; /* Section, Container, Columns, Panel on core/group and core/columns (B5) */
13
+ @import "./core-breadcrumbs.css"; /* core/breadcrumbs as the Baseline Breadcrumb (ADR-0018): chevron mask separator */
14
+ @import "./core-pagination.css"; /* core/query-pagination and paginate_links() as the Baseline Pagination (ADR-0018) */
15
+ @import "./core-accordion.css"; /* core/accordion and core/details as the Baseline Accordion (ADR-0018); looks in looks.generated.css */
16
+ @import "./carousel.css"; /* acf/carousel (spec: components/carousel/spec.md) */
17
+ @import "./core-navigation.css"; /* core/navigation as the Baseline Navigation Menu (ADR-0018) */
18
+ @import "./core-tabs.css"; /* core/tabs as the Baseline Tabs (ADR-0018); looks in looks.generated.css */
19
+ @import "./looks.generated.css"; /* the installed looks (ADR-0031), generated by tokens/looks.mjs */
20
+ @import "./core-table.css"; /* core/table as the Baseline Table (ADR-0018): the component's look, as typeset gives prose tables */
21
+ @import "./media.css"; /* Media: core/image, core/video and core/embed; the video facade from inc/media.php */
22
+ @import "./item.css"; /* acf/item-group: the gap reaches the items through ACF's InnerBlocks wrappers */
23
+ @import "./dialog.css"; /* acf/dialog: page scroll lock and the InnerBlocks wrappers stepping out of the grid */
24
+ @import "./sheet.css"; /* acf/sheet: InnerBlocks wrappers, body padding and stacked footer buttons */
25
+ @import "./toggle-group.css"; /* Toggle Group: the joined group's corners and shared borders (baseline_toggle_group) */
26
+ @import "./icons.generated.css"; /* glyphs a stylesheet has to draw itself, as masks; follows the active set */
27
+ @import "./input.css"; /* Input: no core block exists, so the native control is the component (ADR-0018) */
28
+ @import "./checkbox.css"; /* Checkbox: same ladder as Input; the glyph is a mask because GF and core own the markup */
29
+ @import "./radio.css"; /* Radio: same ladder again; the dot is a pseudo-element, which needs no mask */
30
+ @import "./switch.css"; /* Switch: opt-in role="switch" markup, so no existing checkbox changes appearance */
31
+ @import "./textarea.css"; /* Textarea: the same control box as Input with a floor instead of a fixed height */
32
+ @import "./input-group.css"; /* Input Group: core/search with the button inside is the one real group in core */
33
+ @import "./field.css"; /* Field: core's own form markup (search, comments, password) styled as the component */
34
+ @import "./gravityforms.css"; /* unlayered on purpose: Gravity Forms' CSS API variables */
35
+
36
+ /* Only block templates and theme templates are scanned (ADR-0008 guardrail). */
37
+ @source "../blocks";
38
+ @source "../inc";
39
+ @source "../*.php";
40
+
41
+ body {
42
+ background: var(--background);
43
+ color: var(--foreground);
44
+ font-family: var(--font-sans);
45
+ }
@@ -0,0 +1,93 @@
1
+ /* Carousel on WordPress (spec: components/carousel/spec.md): the acf/carousel block's look, React's carousel.tsx in plain
2
+ CSS on the block's classes. Geometry from the carousel/* tokens; the controls are outline sm icon-only buttons
3
+ (baseline_button) made round, carousel/control-offset outside the slides. ACF wraps the slides in
4
+ div.acf-innerblocks-container, which is the track. */
5
+
6
+ .bl-carousel { position: relative; }
7
+ /* dots below: padding keeps their room (a margin would collapse into the next block's) and the controls stop above it,
8
+ so they centre on the slides */
9
+ .bl-carousel.has-dots { --bl-carousel-dots-room: calc(var(--bl-carousel-dots-offset) + var(--bl-carousel-dot-size)); padding-bottom: var(--bl-carousel-dots-room); }
10
+ .bl-carousel__viewport { overflow: hidden; }
11
+ .bl-carousel__viewport > .acf-innerblocks-container {
12
+ display: flex;
13
+ margin-inline-start: calc(-1 * var(--bl-carousel-gap));
14
+ }
15
+ .bl-carousel__slide {
16
+ flex: 0 0 100%;
17
+ min-width: 0;
18
+ margin: 0;
19
+ padding-inline-start: var(--bl-carousel-gap);
20
+ }
21
+ @media (min-width: 48rem) {
22
+ .bl-carousel[data-slides="2"] .bl-carousel__slide { flex-basis: 50%; }
23
+ .bl-carousel[data-slides="3"] .bl-carousel__slide { flex-basis: calc(100% / 3); }
24
+ }
25
+
26
+ /* Previous / Next */
27
+ .bl-carousel > .bl-carousel__control {
28
+ position: absolute;
29
+ display: flex; /* the core-button wrapper hugs its button (as a block it was taller, and the control sat off centre) */
30
+ inset-block: 0 var(--bl-carousel-dots-room, 0px);
31
+ height: fit-content;
32
+ margin-block: auto;
33
+ }
34
+ .bl-carousel > .bl-carousel__control--previous { inset-inline-start: calc(-1 * var(--bl-carousel-control-offset)); }
35
+ .bl-carousel > .bl-carousel__control--next { inset-inline-end: calc(-1 * var(--bl-carousel-control-offset)); }
36
+ .bl-carousel .bl-carousel__control > .wp-block-button__link { border-radius: var(--bl-carousel-control-radius); touch-action: manipulation; }
37
+ .bl-carousel .bl-carousel__control > .wp-block-button__link:disabled { pointer-events: none; opacity: 0.5; }
38
+ [dir="rtl"] .bl-carousel .bl-carousel__control svg { scale: -1 1; }
39
+
40
+ /* CarouselDots (built by the script) */
41
+ .bl-carousel__dots {
42
+ position: absolute;
43
+ inset-inline: 0;
44
+ bottom: 0;
45
+ display: flex;
46
+ justify-content: center;
47
+ align-items: center;
48
+ gap: var(--bl-carousel-dots-gap);
49
+ }
50
+ .bl-carousel__dot {
51
+ width: var(--bl-carousel-dot-size);
52
+ height: var(--bl-carousel-dot-size);
53
+ flex: none;
54
+ padding: 0;
55
+ border: 0;
56
+ border-radius: var(--bl-carousel-dot-radius);
57
+ background-color: var(--bl-carousel-dot-background);
58
+ cursor: pointer;
59
+ outline: none;
60
+ transition: background-color 150ms;
61
+ }
62
+ .bl-carousel__dot[aria-current="true"] { background-color: var(--primary); }
63
+ .bl-carousel__dot:focus-visible { box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring); }
64
+
65
+ /* editor (2026-10-07, user: look as on the front end): Embla does not run on the canvas, and there the track's items are
66
+ the editor's block wrappers, with each slide nested inside. So the wrappers take the slide's width and gap, the
67
+ viewport scrolls a slide at a time (snapping, its scrollbar hidden), and assets/js/carousel-editor.js makes Previous /
68
+ Next and the dots scroll it. The inserter's appender sits after the last slide. */
69
+ .editor-styles-wrapper .bl-carousel__viewport {
70
+ overflow-x: auto;
71
+ overscroll-behavior-x: contain;
72
+ scroll-snap-type: x mandatory;
73
+ scrollbar-width: none;
74
+ }
75
+ .editor-styles-wrapper .bl-carousel__viewport > .acf-innerblocks-container > .block-editor-block-list__block {
76
+ flex: 0 0 100%;
77
+ min-width: 0;
78
+ margin: 0;
79
+ padding-inline-start: var(--bl-carousel-gap);
80
+ scroll-snap-align: start;
81
+ }
82
+ @media (min-width: 48rem) {
83
+ .editor-styles-wrapper .bl-carousel[data-slides="2"] .bl-carousel__viewport > .acf-innerblocks-container > .block-editor-block-list__block { flex-basis: 50%; }
84
+ .editor-styles-wrapper .bl-carousel[data-slides="3"] .bl-carousel__viewport > .acf-innerblocks-container > .block-editor-block-list__block { flex-basis: calc(100% / 3); }
85
+ }
86
+ .editor-styles-wrapper .bl-carousel__viewport > .acf-innerblocks-container > .block-editor-block-list__block .bl-carousel__slide { padding-inline-start: 0; }
87
+ .editor-styles-wrapper .bl-carousel__viewport > .acf-innerblocks-container > .block-list-appender {
88
+ position: static;
89
+ flex: none;
90
+ align-self: center;
91
+ margin: 0;
92
+ padding-inline-start: var(--bl-carousel-gap);
93
+ }
@@ -0,0 +1,94 @@
1
+ /* Baseline Carousel without React (spec: components/carousel/spec.md): Embla on the markup React's Carousel renders
2
+ (data-slot carousel / carousel-content / carousel-previous / carousel-next / carousel-dots), for the HTML build,
3
+ WordPress (acf/carousel) and Shopify (the carousel snippet). One engine everywhere, as React's embla-carousel-react.
4
+ - options: the root's data-options (JSON, Embla's options, as React's `opts`), data-orientation (vertical -> axis y),
5
+ data-autoplay (ms between slides; Embla's autoplay plugin, paused while the pointer is over the carousel or focus is
6
+ in it, stopped by an interaction)
7
+ - Previous / Next scroll one snap and disable at the ends (unless the carousel loops); the dots container gets one
8
+ button per snap ("Go to slide n", the current one aria-current); ArrowLeft / ArrowRight inside the carousel move it
9
+ - carousels added later (Shopify's theme editor) start too: a MutationObserver watches for new roots
10
+ This file is the SOURCE: it imports Embla from npm, and a build bundles it (with a banner naming Embla's version):
11
+ the monorepo's scripts/gen-html.mjs to platforms/html/dist/carousel.js, and each theme's own `npm run build` from its
12
+ copy in src/ (written here by gen-html), so a scaffolded project updates Embla with npm install + npm run build. */
13
+ import EmblaCarousel from "embla-carousel";
14
+ import Autoplay from "embla-carousel-autoplay";
15
+
16
+ const started = new WeakSet();
17
+
18
+ function start(root) {
19
+ if (started.has(root)) return;
20
+ const viewport = root.querySelector("[data-slot=carousel-content]");
21
+ if (!viewport) return;
22
+ started.add(root);
23
+ let options = {};
24
+ try { options = JSON.parse(root.getAttribute("data-options") || "{}"); } catch { /* not JSON: Embla's defaults */ }
25
+ options.axis = root.getAttribute("data-orientation") === "vertical" ? "y" : "x";
26
+ // the track (the slides' parent) is the viewport's first child, or the element its data-track selector names (a
27
+ // WordPress ACF block wraps its inner blocks in div.acf-innerblocks-container)
28
+ const trackSelector = viewport.getAttribute("data-track");
29
+ const track = trackSelector && viewport.querySelector(trackSelector);
30
+ if (track) options.container = track;
31
+ const plugins = [];
32
+ const delay = Number(root.getAttribute("data-autoplay"));
33
+ if (delay > 0) plugins.push(Autoplay({ delay, stopOnMouseEnter: true, stopOnFocusIn: true, stopOnInteraction: true }));
34
+ const api = EmblaCarousel(viewport, options, plugins);
35
+
36
+ // a control is data-slot carousel-previous / -next, or carries data-carousel-previous / -next where its own component
37
+ // owns data-slot (Shopify's button snippet)
38
+ const prev = root.querySelector("[data-slot=carousel-previous], [data-carousel-previous]");
39
+ const next = root.querySelector("[data-slot=carousel-next], [data-carousel-next]");
40
+ const dotsBox = root.querySelector("[data-slot=carousel-dots]");
41
+ const dotClass = dotsBox && dotsBox.getAttribute("data-dot-class");
42
+ prev?.addEventListener("click", () => api.scrollPrev());
43
+ next?.addEventListener("click", () => api.scrollNext());
44
+
45
+ const buildDots = () => {
46
+ if (!dotsBox) return;
47
+ dotsBox.replaceChildren(...api.scrollSnapList().map((_, i) => {
48
+ const b = document.createElement("button");
49
+ b.type = "button";
50
+ b.setAttribute("data-slot", "carousel-dot");
51
+ b.setAttribute("aria-label", `Go to slide ${i + 1}`);
52
+ if (dotClass) b.className = dotClass;
53
+ b.addEventListener("click", () => api.scrollTo(i));
54
+ return b;
55
+ }));
56
+ };
57
+ const update = () => {
58
+ if (prev) prev.disabled = !api.canScrollPrev();
59
+ if (next) next.disabled = !api.canScrollNext();
60
+ if (dotsBox) [...dotsBox.children].forEach((d, i) => {
61
+ if (i === api.selectedScrollSnap()) d.setAttribute("aria-current", "true");
62
+ else d.removeAttribute("aria-current");
63
+ });
64
+ };
65
+ api.on("init", () => { buildDots(); update(); });
66
+ api.on("reInit", () => { buildDots(); update(); });
67
+ api.on("select", update);
68
+ buildDots();
69
+ update();
70
+
71
+ root.addEventListener("keydown", (e) => {
72
+ if (e.key === "ArrowLeft") { e.preventDefault(); api.scrollPrev(); }
73
+ else if (e.key === "ArrowRight") { e.preventDefault(); api.scrollNext(); }
74
+ }, true);
75
+ }
76
+
77
+ function startAll(scope) {
78
+ scope.querySelectorAll?.("[data-slot=carousel]").forEach(start);
79
+ }
80
+
81
+ if (!window.baselineCarousel) {
82
+ window.baselineCarousel = true;
83
+ const go = () => {
84
+ startAll(document);
85
+ new MutationObserver((records) => {
86
+ for (const r of records) for (const n of r.addedNodes) if (n instanceof Element) {
87
+ if (n.matches("[data-slot=carousel]")) start(n);
88
+ startAll(n);
89
+ }
90
+ }).observe(document.documentElement, { childList: true, subtree: true });
91
+ };
92
+ if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", go);
93
+ else go();
94
+ }