@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,273 @@
1
+ {% doc %}
2
+ Baseline Media as a snippet (spec: components/media/spec.md). An image, or a video shown as an image until someone
3
+ presses play: before the click no <video> or <iframe> exists, so no video bytes load. The player waits in an inert
4
+ <template>; the script below swaps it in and focuses it. Without JavaScript the play button is a link to the video.
5
+
6
+ Video sources, in order of precedence:
7
+ video a Shopify video: product media (media_type 'video' or 'external_video') or a `video` setting
8
+ video_url a YouTube or Vimeo URL (a `video_url` setting), or a direct video file URL
9
+
10
+ @param {image} [image] - the picture; for a Shopify video it defaults to the video's preview image
11
+ @param {string} [alt] - alt text; empty for a decorative picture (a video's title names the play button instead)
12
+ @param {object} [video] - Shopify video or external_video media, or a video setting
13
+ @param {string} [video_url] - YouTube / Vimeo URL or a video file URL
14
+ @param {string} [title] - the video's title, for the play button ("Play video: <title>") and the iframe
15
+ @param {number} [ratio] - width / height, e.g. 1.7778; left out, the frame takes the image's own ratio
16
+ @param {string} [caption] - text under the frame
17
+ @param {string} [playback] - inline (default): the player replaces the poster; dialog: it plays in a Baseline Dialog
18
+ (the dialog snippet), titled with the video's title, and is removed when the dialog closes
19
+ @param {string} [id] - the dialog's id in dialog playback; defaults to one derived from the video, so pass it when the
20
+ same video appears twice on a page
21
+ @param {string} [class] - extra classes
22
+ @param {string} [attrs] - extra attributes on the root (block.shopify_attributes)
23
+
24
+ @example
25
+ {% render 'media', image: section.settings.image, caption: section.settings.caption %}
26
+ {% render 'media', video: product.media[1], ratio: 1.7778 %}
27
+ {% enddoc %}
28
+
29
+ {%- liquid
30
+ assign poster = image
31
+ if poster == blank and video != blank
32
+ assign poster = video.preview_image
33
+ endif
34
+ assign frame_ratio = ratio
35
+ if frame_ratio == blank and poster != blank
36
+ assign frame_ratio = poster.aspect_ratio
37
+ endif
38
+
39
+ assign kind = ''
40
+ assign watch = ''
41
+ assign embed_id = ''
42
+ if video != blank
43
+ if video.media_type == 'external_video'
44
+ assign kind = video.host
45
+ assign embed_id = video.external_id
46
+ else
47
+ assign kind = 'shopify'
48
+ assign watch = video.sources | where: 'format', 'mp4' | map: 'url' | first
49
+ endif
50
+ elsif video_url != blank
51
+ if video_url.type == 'youtube' or video_url.type == 'vimeo'
52
+ assign kind = video_url.type
53
+ assign embed_id = video_url.id
54
+ elsif video_url contains 'youtu'
55
+ assign kind = 'youtube'
56
+ assign embed_id = video_url | split: 'v=' | last | split: '&' | first | split: 'youtu.be/' | last | split: '?' | first
57
+ elsif video_url contains 'vimeo.com'
58
+ assign kind = 'vimeo'
59
+ assign embed_id = video_url | split: 'vimeo.com/' | last | split: '/' | last | split: '?' | first
60
+ else
61
+ assign kind = 'file'
62
+ assign watch = video_url
63
+ endif
64
+ endif
65
+ case kind
66
+ when 'youtube'
67
+ assign watch = 'https://www.youtube.com/watch?v=' | append: embed_id
68
+ when 'vimeo'
69
+ assign watch = 'https://vimeo.com/' | append: embed_id
70
+ endcase
71
+
72
+ assign video_title = title
73
+ if video_title == blank and video != blank
74
+ assign video_title = video.alt
75
+ endif
76
+ if video_title == blank
77
+ assign video_title = 'Video'
78
+ endif
79
+ assign play_label = 'Play video: ' | append: video_title
80
+ assign in_dialog = false
81
+ if playback == 'dialog' and kind != ''
82
+ assign in_dialog = true
83
+ assign dialog_id = id | default: ''
84
+ if dialog_id == ''
85
+ assign dialog_id = watch | append: embed_id | md5 | slice: 0, 10 | prepend: 'media-dialog-'
86
+ endif
87
+ assign play_attrs = 'data-bl-media-play data-bl-media-dialog="' | append: dialog_id | append: '" aria-haspopup="dialog"'
88
+ else
89
+ assign play_attrs = 'data-bl-media-play'
90
+ endif
91
+
92
+ assign classes = 'bl-media'
93
+ if class
94
+ assign classes = classes | append: ' ' | append: class
95
+ endif
96
+ -%}
97
+ <figure class="{{ classes }}" data-slot="media" {{ attrs }}>
98
+ <div
99
+ class="bl-media__frame{% if frame_ratio == blank %} bl-media__frame--natural{% endif %}"
100
+ data-slot="media-frame"
101
+ {% if frame_ratio != blank %}
102
+ style="--ratio: {{ frame_ratio }}"
103
+ {% endif %}
104
+ >
105
+ {%- if poster != blank -%}
106
+ {{- poster | image_url: width: 1600 | image_tag: alt: alt, class: 'bl-media__image', loading: 'lazy', widths: '400, 800, 1200, 1600', sizes: '(min-width: 750px) 50vw, 100vw' -}}
107
+ {%- else -%}
108
+ {{- 'image' | placeholder_svg_tag: 'bl-media__image bl-media__image--placeholder' -}}
109
+ {%- endif -%}
110
+ {%- if kind != '' -%}
111
+ <div class="bl-media__play" data-slot="media-play">
112
+ <div class="bl-media__play-inset">
113
+ {% render 'button',
114
+ label: play_label,
115
+ href: watch,
116
+ variant: 'secondary',
117
+ size: 'lg',
118
+ icon: 'play',
119
+ icon_only: true,
120
+ class: 'bl-media__play-button',
121
+ attrs: play_attrs
122
+ %}
123
+ </div>
124
+ </div>
125
+ <template data-bl-media-player>
126
+ {%- case kind -%}
127
+ {%- when 'shopify' -%}
128
+ {{- video | video_tag: autoplay: true, controls: true, playsinline: true, image_size: '1600x', class: 'bl-media__player' -}}
129
+ {%- when 'youtube' -%}
130
+ <iframe class="bl-media__player" data-slot="media-player" src="https://www.youtube-nocookie.com/embed/{{ embed_id }}?autoplay=1" title="{{ video_title | escape }}" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
131
+ {%- when 'vimeo' -%}
132
+ <iframe class="bl-media__player" data-slot="media-player" src="https://player.vimeo.com/video/{{ embed_id }}?autoplay=1" title="{{ video_title | escape }}" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen></iframe>
133
+ {%- else -%}
134
+ <video class="bl-media__player" data-slot="media-player" src="{{ watch }}" controls autoplay playsinline></video>
135
+ {%- endcase -%}
136
+ </template>
137
+ {%- endif -%}
138
+ </div>
139
+ {%- if in_dialog -%}
140
+ {%- comment -%} the lightbox: the video alone on the backdrop, the close in the viewport's corner; named by the title {%- endcomment -%}
141
+ {%- assign media_close_attrs = 'command="close" commandfor="' | append: dialog_id | append: '"' -%}
142
+ <dialog id="{{ dialog_id }}" class="bl-media__dialog" data-slot="media-dialog" closedby="any" aria-label="{{ video_title | escape }}">
143
+ {%- render 'button', label: 'Close', variant: 'secondary', size: 'md', icon: 'close', icon_only: true, class: 'bl-media__dialog-close', attrs: media_close_attrs -%}
144
+ <div class="bl-media__dialog-frame" data-slot="media-dialog-frame" style="--ratio: {{ frame_ratio | default: 1.7778 }}"></div>
145
+ </dialog>
146
+ {%- endif -%}
147
+ {%- if caption != blank -%}
148
+ <figcaption class="bl-media__caption" data-slot="media-caption">{{ caption }}</figcaption>
149
+ {%- endif -%}
150
+ </figure>
151
+
152
+ {% stylesheet %}
153
+ /* Mirrors registry/src/ui/media/media.tsx. Geometry from the media/* tokens. The frame has no radius of its own:
154
+ inside a Card it takes the card's corners (card.liquid clips them). */
155
+ .bl-media {
156
+ display: flex;
157
+ flex-direction: column;
158
+ gap: var(--bl-media-caption-gap);
159
+ margin: 0;
160
+ }
161
+ .bl-media__frame {
162
+ position: relative;
163
+ aspect-ratio: var(--ratio);
164
+ overflow: hidden;
165
+ background-color: var(--muted);
166
+ }
167
+ .bl-media__frame > .bl-media__image,
168
+ .bl-media__frame > .bl-media__player {
169
+ position: absolute;
170
+ inset: 0;
171
+ width: 100%;
172
+ height: 100%;
173
+ margin: 0;
174
+ border: 0;
175
+ }
176
+ .bl-media__frame > .bl-media__image { object-fit: cover; }
177
+ .bl-media__frame > video.bl-media__player,
178
+ .bl-media__frame > .bl-media__player video { object-fit: contain; width: 100%; height: 100%; }
179
+ /* no ratio and no image ratio: the image sets the height */
180
+ .bl-media__frame--natural > .bl-media__image {
181
+ position: static;
182
+ display: block;
183
+ height: auto;
184
+ }
185
+ .bl-media__play {
186
+ position: absolute;
187
+ inset: 0;
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ }
192
+ /* the inset widens the clickable area round the button. The button is the button snippet (secondary) on its own
193
+ media/play-button/* box, icon and radius (user, 2026-10-02), not a Button size; three classes to win over the
194
+ button stylesheet whatever order Shopify bundles them in */
195
+ .bl-media__play-inset { padding: var(--bl-media-play-button-inset); }
196
+ .bl-media__play-button.bl-button.bl-button--icon-only { width: var(--bl-media-play-button-size); height: var(--bl-media-play-button-size); padding: 0; border-radius: var(--bl-media-play-button-radius); }
197
+ .bl-media__play-button.bl-button.bl-button--icon-only svg { width: var(--bl-media-play-button-icon-size); height: var(--bl-media-play-button-icon-size); }
198
+ /* dialog playback: a lightbox (user, 2026-10-05). The <dialog> fills the viewport and is transparent, so its corner is
199
+ the viewport's and a click outside the video is a click on it (the script closes it); the video is centred, at most
200
+ media/dialog/max-width wide, on the color/overlay backdrop. Mirrors registry/src/ui/media/media-play-button.tsx. */
201
+ :root:has(dialog[open]:modal) { overflow: hidden; }
202
+ .bl-media__dialog {
203
+ position: fixed; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none; margin: 0;
204
+ padding: var(--bl-dialog-padding); border: 0; background: transparent; outline: none;
205
+ align-items: center; justify-content: center; opacity: 0;
206
+ transition: opacity 200ms, display 200ms allow-discrete, overlay 200ms allow-discrete;
207
+ }
208
+ .bl-media__dialog[open] { display: flex; opacity: 1; }
209
+ @starting-style { .bl-media__dialog[open] { opacity: 0; } }
210
+ .bl-media__dialog::backdrop {
211
+ background-color: var(--overlay); opacity: 0;
212
+ transition: opacity 200ms, display 200ms allow-discrete, overlay 200ms allow-discrete;
213
+ }
214
+ @supports (backdrop-filter: blur(4px)) { .bl-media__dialog::backdrop { backdrop-filter: blur(4px); } }
215
+ .bl-media__dialog[open]::backdrop { opacity: 1; }
216
+ @starting-style { .bl-media__dialog[open]::backdrop { opacity: 0; } }
217
+ @media (prefers-reduced-motion: reduce) { .bl-media__dialog, .bl-media__dialog::backdrop { transition: none; } }
218
+ .bl-media__dialog > .bl-media__dialog-close { position: absolute; top: var(--bl-dialog-padding); right: var(--bl-dialog-padding); }
219
+ .bl-media__dialog-frame { position: relative; width: 100%; max-width: var(--bl-media-dialog-max-width); aspect-ratio: var(--ratio); overflow: hidden; background-color: var(--muted); opacity: 0; scale: 0.95; transition: opacity 200ms ease-out, scale 200ms ease-out; }
220
+ /* the video fades and zooms in from 95 %, as Dialog's panel does */
221
+ .bl-media__dialog[open] > .bl-media__dialog-frame { opacity: 1; scale: 1; }
222
+ @starting-style { .bl-media__dialog[open] > .bl-media__dialog-frame { opacity: 0; scale: 0.95; } }
223
+ @media (prefers-reduced-motion: reduce) { .bl-media__dialog-frame { transition: none; } }
224
+ .bl-media__dialog-frame > .bl-media__player { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; border: 0; }
225
+ .bl-media__dialog-frame > video.bl-media__player,
226
+ .bl-media__dialog-frame > .bl-media__player video { object-fit: contain; width: 100%; height: 100%; }
227
+ .bl-media__caption {
228
+ color: var(--muted-foreground);
229
+ font-size: var(--bl-media-caption-font-size);
230
+ line-height: var(--bl-media-caption-line-height);
231
+ }
232
+ {% endstylesheet %}
233
+
234
+ {% javascript %}
235
+ /* The facade swap (spec: components/media/spec.md): the play button is a link to the video; with this script the
236
+ click instead clones the frame's inert <template> player in over the poster and moves focus to it. Delegated, so
237
+ sections added in the theme editor work too. */
238
+ document.addEventListener('click', function (event) {
239
+ var button = event.target instanceof Element ? event.target.closest('[data-bl-media-play]') : null;
240
+ if (!button) return;
241
+ var frame = button.closest('.bl-media__frame');
242
+ var template = frame && frame.querySelector('template[data-bl-media-player]');
243
+ if (!template) return;
244
+ event.preventDefault();
245
+ var player = template.content.firstElementChild.cloneNode(true);
246
+ var focusable = player.matches('video, iframe') ? player : player.querySelector('video, iframe') || player;
247
+ focusable.setAttribute('tabindex', '-1');
248
+ var media = focusable.tagName === 'VIDEO' ? focusable : null;
249
+ /* dialog playback: open the dialog first, then put the player in, so showModal() leaves focus on the close button
250
+ (focus inside a cross-origin iframe would keep Escape from closing it); closing removes the player, which stops it */
251
+ var dialogId = button.getAttribute('data-bl-media-dialog');
252
+ var dialog = dialogId ? document.getElementById(dialogId) : null;
253
+ if (dialog) {
254
+ var slot = dialog.querySelector('[data-slot=media-dialog-frame]');
255
+ dialog.showModal();
256
+ slot.replaceChildren(player);
257
+ if (media) media.play().catch(function () {});
258
+ if (!dialog.dataset.blMediaBound) {
259
+ dialog.dataset.blMediaBound = '1';
260
+ dialog.addEventListener('close', function () { slot.replaceChildren(); });
261
+ /* the lightbox fills the viewport, so a click outside the video is a click on the <dialog> itself */
262
+ dialog.addEventListener('click', function (e) {
263
+ if (e.target === dialog) dialog.close();
264
+ });
265
+ }
266
+ return;
267
+ }
268
+ frame.querySelector('.bl-media__play').replaceWith(player);
269
+ template.remove();
270
+ focusable.focus();
271
+ if (media) media.play().catch(function () {});
272
+ });
273
+ {% endjavascript %}
@@ -0,0 +1,105 @@
1
+ <meta charset="utf-8">
2
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
3
+ <meta name="viewport" content="width=device-width,initial-scale=1">
4
+
5
+ {%- liquid
6
+ assign og_title = page_title | default: shop.name
7
+ assign og_url = canonical_url | default: request.origin
8
+ assign og_type = 'website'
9
+ assign og_description = page_description | default: shop.description | default: shop.name
10
+
11
+ if request.page_type == 'product'
12
+ assign og_type = 'product'
13
+ elsif request.page_type == 'article'
14
+ assign og_type = 'article'
15
+ elsif request.page_type == 'password'
16
+ assign og_url = request.origin
17
+ endif
18
+ %}
19
+
20
+ <meta
21
+ property="og:site_name"
22
+ content="{{ shop.name }}"
23
+ >
24
+ <meta
25
+ property="og:url"
26
+ content="{{ og_url }}"
27
+ >
28
+ <meta
29
+ property="og:title"
30
+ content="{{ og_title | escape }}"
31
+ >
32
+ <meta
33
+ property="og:type"
34
+ content="{{ og_type }}"
35
+ >
36
+ <meta
37
+ property="og:description"
38
+ content="{{ og_description | escape }}"
39
+ >
40
+
41
+ {%- if page_image -%}
42
+ <meta
43
+ property="og:image"
44
+ content="http:{{ page_image | image_url }}"
45
+ >
46
+ <meta
47
+ property="og:image:secure_url"
48
+ content="https:{{ page_image | image_url }}"
49
+ >
50
+ <meta
51
+ property="og:image:width"
52
+ content="{{ page_image.width }}"
53
+ >
54
+ <meta
55
+ property="og:image:height"
56
+ content="{{ page_image.height }}"
57
+ >
58
+ {%- endif -%}
59
+
60
+ {%- if request.page_type == 'product' -%}
61
+ <script type="application/ld+json">
62
+ {{ product | structured_data }}
63
+ </script>
64
+
65
+ <meta
66
+ property="og:price:amount"
67
+ content="{{ product.price | money_without_currency | strip_html }}"
68
+ >
69
+ <meta
70
+ property="og:price:currency"
71
+ content="{{ cart.currency.iso_code }}"
72
+ >
73
+ {%- endif -%}
74
+
75
+ <meta
76
+ name="twitter:card"
77
+ content="summary_large_image"
78
+ >
79
+ <meta
80
+ name="twitter:title"
81
+ content="{{ og_title | escape }}"
82
+ >
83
+ <meta
84
+ name="twitter:description"
85
+ content="{{ og_description | escape }}"
86
+ >
87
+
88
+ <title>
89
+ {{ page_title }}
90
+ {%- if current_tags %} &ndash; tagged "{{ current_tags | join: ', ' }}"{% endif -%}
91
+ {%- if current_page != 1 %} &ndash; Page {{ current_page }}{% endif -%}
92
+ {%- unless page_title contains shop.name %} &ndash; {{ shop.name }}{% endunless -%}
93
+ </title>
94
+
95
+ <link
96
+ rel="canonical"
97
+ href="{{ canonical_url }}"
98
+ >
99
+
100
+ {% if page_description %}
101
+ <meta
102
+ name="description"
103
+ content="{{ page_description | escape }}"
104
+ >
105
+ {% endif %}
@@ -0,0 +1,24 @@
1
+ // url=https://www.figma.com/design/ba28zZ49PAkXhE7PW5kyT9/Design-System?node-id=2207-24960
2
+ // source=platforms/shopify/theme/snippets/meter.liquid
3
+ // component=meter (snippet)
4
+ // Shopify Code Connect template (label "Shopify (Liquid)"): the meter snippet. The fill is drawn in Figma, not a
5
+ // property, so the number comes from the Value text when it is a percentage.
6
+ import figma from "figma";
7
+ const instance = figma.selectedInstance;
8
+
9
+ const showLabel = instance.getBoolean("Show Label");
10
+ const showValue = instance.getBoolean("Show Value");
11
+ const label = instance.getString("Label");
12
+ const valueText = instance.getString("Value");
13
+ const parsed = /^\s*(\d+(?:\.\d+)?)\s*%\s*$/.exec(valueText ?? "");
14
+ const args = [
15
+ `value: ${parsed ? parsed[1] : "50"}`,
16
+ showLabel ? `label: '${label}'` : `aria_label: '${label}'`,
17
+ showValue ? (parsed ? "show_value: true" : `value_text: '${valueText}'`) : "",
18
+ ].filter(Boolean).join(", ");
19
+
20
+ export default {
21
+ example: figma.code`{% render 'meter', ${args} %}`,
22
+ id: "shopify-meter",
23
+ metadata: { nestable: true },
24
+ };
@@ -0,0 +1,118 @@
1
+ {% doc %}
2
+ Baseline Meter as a snippet (spec: components/meter/spec.md). A native <meter>: a measurement inside a known range
3
+ (stock left, a rating), not task progress. The bar is primary in every region; low/high/optimum still reach assistive
4
+ tech. A meter that must read as "bad" sits in the error scheme.
5
+
6
+ @param {number} value - the measurement (required)
7
+ @param {number} [min] - default 0
8
+ @param {number} [max] - default 100
9
+ @param {number} [low]
10
+ @param {number} [high]
11
+ @param {number} [optimum]
12
+ @param {string} [label] - the visible label, a <label for> pointing at the meter
13
+ @param {boolean} [show_value] - show the value as a percentage of the range
14
+ @param {string} [value_text] - text in place of the percentage, e.g. "12 GB of 15 GB"
15
+ @param {string} [aria_label] - names the meter when there is no label
16
+ @param {string} [id] - the meter's id; defaults to one made from the label
17
+ @param {string} [scheme] - success | warning | error
18
+ @param {string} [class] - extra classes
19
+
20
+ @example
21
+ {% render 'meter', value: 4.2, max: 5, label: 'Rating', value_text: '4.2 out of 5' %}
22
+ {% enddoc %}
23
+
24
+ {%- liquid
25
+ assign lo = min | default: 0
26
+ assign hi = max | default: 100
27
+ assign meter_id = id
28
+ if meter_id == blank
29
+ assign meter_id = 'bl-meter-' | append: label | handleize
30
+ endif
31
+ assign text = value_text
32
+ if text == blank and show_value
33
+ assign range = hi | minus: lo
34
+ assign pct = value | minus: lo | times: 100.0 | divided_by: range | round
35
+ assign text = pct | append: '%'
36
+ endif
37
+ assign classes = 'bl-meter'
38
+ case scheme
39
+ when 'success', 'warning', 'error'
40
+ assign classes = classes | append: ' color-' | append: scheme
41
+ endcase
42
+ if class
43
+ assign classes = classes | append: ' ' | append: class
44
+ endif
45
+ -%}
46
+ <div class="{{ classes }}" data-slot="meter">
47
+ {%- if label != blank -%}
48
+ <label class="bl-meter__label" data-slot="meter-label" for="{{ meter_id }}">{{ label | escape }}</label>
49
+ {%- endif -%}
50
+ {%- if text != blank -%}
51
+ <span class="bl-meter__value" data-slot="meter-value" aria-hidden="true">{{ text | escape }}</span>
52
+ {%- endif -%}
53
+ <meter
54
+ class="bl-meter__track"
55
+ data-slot="meter-track"
56
+ id="{{ meter_id }}"
57
+ value="{{ value }}"
58
+ min="{{ lo }}"
59
+ max="{{ hi }}"
60
+ {% if low != blank %}
61
+ low="{{ low }}"
62
+ {% endif %}
63
+ {% if high != blank %}
64
+ high="{{ high }}"
65
+ {% endif %}
66
+ {% if optimum != blank %}
67
+ optimum="{{ optimum }}"
68
+ {% endif %}
69
+ {% if aria_label != blank %}
70
+ aria-label="{{ aria_label | escape }}"
71
+ {% endif %}
72
+ ></meter>
73
+ </div>
74
+
75
+ {% stylesheet %}
76
+ /* Mirrors registry/src/ui/meter/meter.tsx. Colours from the scheme; geometry from the meter/* tokens. */
77
+ .bl-meter {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ gap: var(--bl-meter-gap);
81
+ }
82
+ .bl-meter__label {
83
+ font-size: var(--bl-meter-label-font-size);
84
+ line-height: var(--bl-meter-label-line-height);
85
+ font-weight: var(--bl-meter-label-font-weight);
86
+ }
87
+ .bl-meter__value {
88
+ margin-inline-start: auto;
89
+ font-size: var(--bl-meter-value-font-size);
90
+ line-height: var(--bl-meter-value-line-height);
91
+ color: var(--muted-foreground);
92
+ font-variant-numeric: tabular-nums;
93
+ }
94
+ .bl-meter__track {
95
+ display: block;
96
+ width: 100%;
97
+ height: var(--bl-meter-track-height);
98
+ appearance: none;
99
+ overflow: hidden;
100
+ border: 0;
101
+ border-radius: var(--bl-meter-track-radius);
102
+ background-color: var(--muted);
103
+ }
104
+ /* Blink paints the bar and each region with a gradient image, and draws them short with height: 100% */
105
+ .bl-meter__track::-webkit-meter-bar {
106
+ height: var(--bl-meter-track-height);
107
+ border: 0;
108
+ border-radius: 0;
109
+ background: transparent;
110
+ }
111
+ .bl-meter__track::-webkit-meter-optimum-value,
112
+ .bl-meter__track::-webkit-meter-suboptimum-value,
113
+ .bl-meter__track::-webkit-meter-even-less-good-value {
114
+ height: var(--bl-meter-track-height);
115
+ background: var(--primary);
116
+ }
117
+ .bl-meter__track::-moz-meter-bar { background: var(--primary); }
118
+ {% endstylesheet %}
@@ -0,0 +1,141 @@
1
+ {% doc %}
2
+ Baseline NativeSelect as a snippet (spec: components/native-select/spec.md). The styled native <select>: it
3
+ owns its box and its chevron and nothing else — no label, no description, no error. Wrap it in `field` — a
4
+ select without a label is a bug.
5
+
6
+ The browser owns the option list, which cannot be styled and on a phone beats anything a design system will
7
+ build. Shopify has no panel component: the designed panel is React-only (components/select/spec.md), and if
8
+ customizable <select> lands in browsers that decision gets revisited.
9
+
10
+ @param {string} options - the <option> and <optgroup> markup, captured by the caller
11
+ @param {string} [name] - form field name
12
+ @param {string} [id] - id, so a <label for> can point at it
13
+ @param {boolean} [multiple] - native multi-select: grows with its options and has no chevron
14
+ @param {boolean} [required] - required attribute
15
+ @param {boolean} [disabled] - disabled attribute
16
+ @param {boolean} [invalid] - renders aria-invalid: destructive border, text and ring
17
+ @param {string} [attrs] - extra attributes, e.g. block.shopify_attributes
18
+ @param {string} [class] - extra classes on the wrapper
19
+
20
+ @example
21
+ {%- capture variant_options -%}
22
+ {% for variant in product.variants %}<option value="{{ variant.id }}">{{ variant.title }}</option>{% endfor %}
23
+ {%- endcapture -%}
24
+ {% render 'native-select', name: 'id', id: 'variant', options: variant_options %}
25
+ {% enddoc %}
26
+
27
+ {%- liquid
28
+ assign classes = 'bl-native-select'
29
+ if multiple
30
+ assign classes = classes | append: ' bl-native-select--multiple'
31
+ endif
32
+ if class
33
+ assign classes = classes | append: ' ' | append: class
34
+ endif
35
+ -%}
36
+ {%- comment -%}
37
+ A <select> is a replaced element and cannot have children, so the chevron is a sibling laid over the box,
38
+ never taking the click. Same three-element shape as the React component, and as checkbox, radio and switch.
39
+ {%- endcomment -%}
40
+ <span class="{{ classes }}" data-slot="native-select">
41
+ <select
42
+ class="bl-native-select__control"
43
+ data-slot="native-select-control"
44
+ {%- if name != blank %} name="{{ name }}"{% endif -%}
45
+ {%- if id != blank %} id="{{ id }}"{% endif -%}
46
+ {%- if multiple %} multiple{% endif -%}
47
+ {%- if required %} required{% endif -%}
48
+ {%- if disabled %} disabled{% endif -%}
49
+ {%- if invalid %} aria-invalid="true"{% endif -%}
50
+ {{ attrs }}
51
+ >
52
+ {{ options }}
53
+ </select>
54
+ {%- unless multiple -%}
55
+ {% render 'icon', name: 'chevron-down', class: 'bl-native-select__chevron' %}
56
+ {%- endunless -%}
57
+ </span>
58
+
59
+ {% stylesheet %}
60
+ /* Mirrors registry/src/ui/native-select/native-select.tsx. Colours come from the scheme class (--input,
61
+ --primary, --ring ...); geometry from the select/* component tokens in baseline-tokens.liquid (ADR-0017),
62
+ shared with the React Select trigger so the two cannot drift. */
63
+ .bl-native-select {
64
+ position: relative;
65
+ display: inline-flex;
66
+ width: 100%;
67
+ align-items: center;
68
+ }
69
+
70
+ /* the whole control fades together, chevron included; opacity on the select alone would leave the chevron at
71
+ full strength over a faded box */
72
+ .bl-native-select:has(.bl-native-select__control:disabled) {
73
+ cursor: not-allowed;
74
+ opacity: 0.5;
75
+ }
76
+
77
+ .bl-native-select__control {
78
+ /* appearance:none removes the UA arrow so the Baseline chevron is the only one */
79
+ appearance: none;
80
+ width: 100%;
81
+ min-width: 0;
82
+ height: var(--bl-select-md-height);
83
+ padding-block: var(--bl-select-md-padding-y);
84
+ padding-inline-start: var(--bl-select-md-padding-x);
85
+ /* room on the inline end for the chevron, which is drawn over the box */
86
+ padding-inline-end: calc(
87
+ var(--bl-select-md-padding-x) + var(--bl-select-md-icon-size) + var(--bl-select-md-gap)
88
+ );
89
+ border: var(--bl-select-md-border-width) solid var(--input);
90
+ border-radius: var(--bl-select-md-radius);
91
+ background-color: transparent;
92
+ color: var(--foreground);
93
+ font-family: var(--bl-font-sans);
94
+ font-size: var(--bl-select-md-font-size);
95
+ line-height: var(--bl-select-md-line-height);
96
+ outline: none;
97
+ transition: color 150ms, border-color 150ms, box-shadow 150ms;
98
+ }
99
+
100
+ .bl-native-select__control:focus-visible {
101
+ border-color: var(--primary);
102
+ box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
103
+ }
104
+
105
+ /* invalid is set here, never inherited from a surrounding field, so a bare select matches one inside a
106
+ Field — the call Input made */
107
+ .bl-native-select__control[aria-invalid='true'] {
108
+ border-color: var(--destructive);
109
+ color: var(--destructive);
110
+ }
111
+
112
+ .bl-native-select__control[aria-invalid='true']:focus-visible {
113
+ box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring-invalid);
114
+ }
115
+
116
+ .bl-native-select__control:disabled {
117
+ cursor: not-allowed;
118
+ }
119
+
120
+ /* A multi-select grows with its options rather than taking the single-line control height, and has no
121
+ chevron: there is nothing to drop down. Where field-sizing is unsupported the box keeps its rows and
122
+ scrolls, which is a plain multi-select, so the degradation is invisible rather than broken. */
123
+ .bl-native-select--multiple .bl-native-select__control {
124
+ field-sizing: content;
125
+ height: auto;
126
+ min-height: var(--bl-select-md-height);
127
+ padding-inline-end: var(--bl-select-md-padding-x);
128
+ }
129
+
130
+ /* Scoped under .bl-native-select for the reason checkbox.liquid records: the icon snippet ships its own
131
+ `.bl-icon { display: inline-block }`, also one class, so an unscoped rule ties with it and loses on
132
+ source order. */
133
+ .bl-native-select .bl-native-select__chevron {
134
+ position: absolute;
135
+ inset-inline-end: var(--bl-select-md-padding-x);
136
+ width: var(--bl-select-md-icon-size);
137
+ height: var(--bl-select-md-icon-size);
138
+ color: var(--muted-foreground);
139
+ pointer-events: none;
140
+ }
141
+ {% endstylesheet %}