@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,988 @@
1
+ {% comment %}
2
+ Baseline kitchen sink — every component implemented on Shopify so far, in one page, so a change to a token or
3
+ a snippet can be eyeballed in a real storefront instead of in isolation. The Shopify twin of
4
+ platforms/html/index.html.
5
+
6
+ Deliberately UNLISTED: the schema has no `presets`, so it never appears in the theme editor's "Add section"
7
+ picker. It is placed by templates/index.json and nothing else. Keep it that way — it is a development
8
+ surface, not something a merchant should be able to drop onto a page.
9
+
10
+ Add a component here in the same commit that ships it on Shopify.
11
+ {% endcomment %}
12
+
13
+ {%- liquid
14
+ assign ks_scheme = section.settings.color_scheme.id | default: settings.default_color_scheme.id | default: 'scheme-1'
15
+ assign button_variants = 'default,secondary,outline,ghost,link,destructive' | split: ','
16
+ assign button_sizes = 'xs,sm,md,lg' | split: ','
17
+ -%}
18
+
19
+ <div class="bl-ks color-{{ ks_scheme }}" data-bl-ks>
20
+ <header class="bl-ks__header">
21
+ <h1 class="bl-ks__title">Baseline kitchen sink</h1>
22
+ <p class="bl-ks__lede">
23
+ Every component implemented on Shopify. Unlisted section, placed on the home page for development.
24
+ </p>
25
+ {%- capture ks_scheme_options -%}
26
+ {%- for scheme in settings.color_schemes -%}
27
+ <option value="{{ scheme.id }}"{% if scheme.id == ks_scheme %} selected{% endif %}>{{ scheme.id }}</option>
28
+ {%- endfor -%}
29
+ {%- endcapture -%}
30
+ {%- capture ks_scheme_control -%}
31
+ {% render 'native-select', id: 'ks-scheme', options: ks_scheme_options %}
32
+ {%- endcapture -%}
33
+ <div class="bl-ks__scheme-control">
34
+ {% render 'field', label: 'Colour scheme', id: 'ks-scheme', description: 'Every component below re-renders in the chosen scheme. Status schemes are modes, never variants.', control: ks_scheme_control %}
35
+ </div>
36
+ </header>
37
+
38
+ {%- comment -%} option lists shared by the Native select and Field sections {%- endcomment -%}
39
+ {%- liquid
40
+ capture ks_fruit
41
+ echo '<option>Apple</option><option>Banana</option><option>Blueberry</option><option>Grapes</option>'
42
+ endcapture
43
+ capture ks_fruit_placeholder
44
+ echo '<option value="" disabled selected>Select a fruit</option>'
45
+ echo ks_fruit
46
+ endcapture
47
+ capture ks_fruit_grouped
48
+ echo '<optgroup label="Fruit">'
49
+ echo ks_fruit
50
+ echo '</optgroup><optgroup label="Vegetables"><option>Aubergine</option><option>Broccoli</option></optgroup>'
51
+ endcapture
52
+ -%}
53
+
54
+ {% comment %} ---- Accordion ---- {% endcomment %}
55
+ <section class="bl-ks__section">
56
+ <h2 class="bl-ks__heading">Accordion</h2>
57
+ {%- capture ks_accordion_items -%}
58
+ {% render 'accordion-item', title: 'What are your shipping options?', content: '<p>Standard (5-7 days), express (2-3 days) and overnight.</p>', name: 'ks-accordion', open: true %}
59
+ {% render 'accordion-item', title: 'What is your return policy?', content: '<p>Returns accepted within 30 days, unused and in the original packaging.</p>', name: 'ks-accordion' %}
60
+ {% render 'accordion-item', title: 'How can I contact support?', content: '<p>Email us, or <a href="#">start a chat</a>.</p>', name: 'ks-accordion' %}
61
+ {%- endcapture -%}
62
+ {%- assign ks_accordion_contained = ks_accordion_items | replace: '"ks-accordion"', '"ks-accordion-contained"' -%}
63
+ {%- assign ks_accordion_split = ks_accordion_items | replace: '"ks-accordion"', '"ks-accordion-split"' -%}
64
+ {%- capture ks_accordion_multiple -%}
65
+ {% render 'accordion-item', title: 'What are your shipping options?', content: '<p>Standard (5-7 days), express (2-3 days) and overnight.</p>', open: true %}
66
+ {% render 'accordion-item', title: 'What is your return policy?', content: '<p>Returns accepted within 30 days, unused and in the original packaging.</p>' %}
67
+ {% render 'accordion-item', title: 'How can I contact support?', content: '<p>Email us, or <a href="#">start a chat</a>.</p>', open: true %}
68
+ {%- endcapture -%}
69
+ <div style="display: grid; gap: 2rem; max-width: 36rem;">
70
+ <div>
71
+ <h3 class="bl-ks__subheading">Default</h3>
72
+ {% render 'accordion', items: ks_accordion_items %}
73
+ </div>
74
+ <div>
75
+ <h3 class="bl-ks__subheading">Multiple (no shared name)</h3>
76
+ {% render 'accordion', items: ks_accordion_multiple %}
77
+ </div>
78
+ <div>
79
+ <h3 class="bl-ks__subheading">Contained</h3>
80
+ {% render 'accordion', items: ks_accordion_contained, variant: 'contained' %}
81
+ </div>
82
+ <div>
83
+ <h3 class="bl-ks__subheading">Split</h3>
84
+ {% render 'accordion', items: ks_accordion_split, variant: 'split' %}
85
+ </div>
86
+ </div>
87
+ </section>
88
+
89
+ {% comment %} ---- Alert ---- {% endcomment %}
90
+ <section class="bl-ks__section">
91
+ <h2 class="bl-ks__heading">Alert</h2>
92
+ <div style="display: grid; gap: 1rem; max-width: 36rem;">
93
+ {% render 'alert', icon: 'info', title: 'Your plan renews on 1 November', description: '<p>We will charge the card ending 4242.</p>' %}
94
+ {% render 'alert', variant: 'destructive', icon: 'error', title: 'Payment failed', description: '<p>Your card was declined. <a href="#">Contact support</a>.</p>' %}
95
+ {%- capture ks_alert_action -%}{% render 'button', label: 'Reload', variant: 'outline', size: 'xs' %}{%- endcapture -%}
96
+ {% render 'alert', icon: 'info', title: 'A new version is available', description: 'Reload to get the latest changes.', action: ks_alert_action %}
97
+ {% render 'alert', icon: 'success', title: 'Order placed', description: 'A confirmation is on its way.', scheme: 'success' %}
98
+ {% render 'alert', icon: 'warning', title: 'Low stock', description: 'Only 2 left.', scheme: 'warning' %}
99
+ </div>
100
+ </section>
101
+
102
+ {% comment %} ---- Avatar ---- {% endcomment %}
103
+ <section class="bl-ks__section">
104
+ <h2 class="bl-ks__heading">Avatar</h2>
105
+ {%- assign ks_avatar_sizes = 'xs,sm,md,lg,xl' | split: ',' -%}
106
+ <h3 class="bl-ks__subheading">Sizes, icon and status</h3>
107
+ <div class="bl-ks__row">
108
+ {%- for s in ks_avatar_sizes -%}{% render 'avatar', fallback: 'JD', alt: 'Jordan Diaz', size: s %}{%- endfor -%}
109
+ {% render 'avatar', icon: 'user', alt: 'Guest' %}
110
+ {% render 'avatar', fallback: 'JD', size: 'lg', badge: 'dot' %}
111
+ {% render 'avatar', fallback: 'JD', size: 'lg', badge: 'success', badge_label: 'online' %}
112
+ {% render 'avatar', fallback: 'JD', size: 'lg', badge: 'warning', badge_label: 'away' %}
113
+ {% render 'avatar', fallback: 'JD', size: 'lg', badge: 'error', badge_label: 'busy' %}
114
+ </div>
115
+ <h3 class="bl-ks__subheading">Group</h3>
116
+ <div style="display: grid; gap: 1rem; justify-items: start;">
117
+ {%- assign ks_group_sizes = 'sm,md,lg' | split: ',' -%}
118
+ {%- for s in ks_group_sizes -%}
119
+ {%- capture ks_people -%}
120
+ {% render 'avatar', fallback: 'AB', size: s %}
121
+ {% render 'avatar', fallback: 'CD', size: s %}
122
+ {% render 'avatar', fallback: 'EF', size: s %}
123
+ {%- endcapture -%}
124
+ {% render 'avatar-group', content: ks_people, count: 3 %}
125
+ {%- endfor -%}
126
+ </div>
127
+ <h3 class="bl-ks__subheading">The signed-in customer</h3>
128
+ <div class="bl-ks__row">
129
+ {%- if customer -%}
130
+ {%- for s in ks_avatar_sizes -%}{% render 'avatar', customer: customer, size: s %}{%- endfor -%}
131
+ {%- else -%}
132
+ <p>Sign in to see the customer avatar (customer | avatar, or the customer's initials).</p>
133
+ {%- endif -%}
134
+ </div>
135
+ </section>
136
+
137
+ {% comment %} ---- Badge ---- {% endcomment %}
138
+ <section class="bl-ks__section">
139
+ <h2 class="bl-ks__heading">Badge</h2>
140
+ {%- assign ks_badge_variants = 'default,secondary,destructive,outline,ghost,link' | split: ',' -%}
141
+ <h3 class="bl-ks__subheading">Variants and sizes</h3>
142
+ <div class="bl-ks__row">
143
+ {%- for v in ks_badge_variants -%}{% render 'badge', label: v, variant: v %}{%- endfor -%}
144
+ </div>
145
+ <div class="bl-ks__row">
146
+ {%- for v in ks_badge_variants -%}{% render 'badge', label: v, variant: v, size: 'sm' %}{%- endfor -%}
147
+ </div>
148
+ <h3 class="bl-ks__subheading">Icons, links and status</h3>
149
+ <div class="bl-ks__row">
150
+ {% render 'badge', label: 'Verified', icon: 'check' %}
151
+ {% render 'badge', label: 'Beta', variant: 'secondary', icon: 'arrow-right', icon_position: 'end' %}
152
+ {% render 'badge', label: 'Link badge', href: '/' %}
153
+ {% render 'badge', label: 'Paid', scheme: 'success' %}
154
+ {% render 'badge', label: 'Pending', scheme: 'warning' %}
155
+ {% render 'badge', label: 'Failed', scheme: 'error' %}
156
+ </div>
157
+ </section>
158
+
159
+ {% comment %} ---- Breadcrumb ---- {% endcomment %}
160
+ <section class="bl-ks__section">
161
+ <h2 class="bl-ks__heading">Breadcrumb</h2>
162
+ <p class="bl-ks__note">
163
+ The breadcrumb snippet builds its trail from the template, so it renders nothing on this page. It sits at the top
164
+ of the product, collection, blog, article, page and search sections; a product reached through a collection shows
165
+ that collection in the middle.
166
+ {%- assign ks_bc_collection = collections.all -%}
167
+ {%- assign ks_bc_product = ks_bc_collection.products.first -%}
168
+ {%- if ks_bc_product %}
169
+ Try <a href="{{ ks_bc_product.url | within: ks_bc_collection }}">{{ ks_bc_product.title | escape }}</a>.
170
+ {%- endif %}
171
+ </p>
172
+ </section>
173
+
174
+ {% comment %} ---- Button ---- {% endcomment %}
175
+ <section class="bl-ks__section">
176
+ <h2 class="bl-ks__heading">Button</h2>
177
+
178
+ <h3 class="bl-ks__subheading">Variants</h3>
179
+ <div class="bl-ks__row">
180
+ {%- for v in button_variants -%}
181
+ {% render 'button', label: v, variant: v %}
182
+ {%- endfor -%}
183
+ </div>
184
+
185
+ <h3 class="bl-ks__subheading">Sizes</h3>
186
+ <div class="bl-ks__row">
187
+ {%- for s in button_sizes -%}
188
+ {% render 'button', label: s, size: s %}
189
+ {%- endfor -%}
190
+ </div>
191
+
192
+ <h3 class="bl-ks__subheading">Icons and states</h3>
193
+ <div class="bl-ks__row">
194
+ {% render 'button', label: 'Leading icon', icon: 'plus' %}
195
+ {% render 'button', label: 'Trailing icon', icon: 'arrow-right', icon_position: 'end', variant: 'secondary' %}
196
+ {% render 'button', label: 'Settings', icon: 'settings', icon_only: true, variant: 'outline' %}
197
+ {% render 'button', label: 'Disabled', disabled: true %}
198
+ {% render 'button', label: 'Link', href: '/', variant: 'link' %}
199
+ </div>
200
+ </section>
201
+
202
+ {% comment %} ---- Button group ---- {% endcomment %}
203
+ <section class="bl-ks__section">
204
+ <h2 class="bl-ks__heading">Button group</h2>
205
+ <p class="bl-ks__note">
206
+ Joins buttons into one unit. It owns no geometry: every number comes from the buttons inside it, so
207
+ changing their size changes the group, corners included.
208
+ </p>
209
+ {%- liquid
210
+ capture ks_bg_three
211
+ render 'button', label: 'Left', variant: 'outline'
212
+ render 'button', label: 'Middle', variant: 'outline'
213
+ render 'button', label: 'Right', variant: 'outline'
214
+ endcapture
215
+ capture ks_bg_text
216
+ echo '<span class="bl-button-group__text">https://</span>'
217
+ render 'button', label: 'example.com', variant: 'outline'
218
+ endcapture
219
+ capture ks_bg_sep
220
+ render 'button', label: 'Save'
221
+ echo '<span class="bl-button-group__separator"></span>'
222
+ render 'button', label: 'Options', icon: 'more-vertical', icon_only: true
223
+ endcapture
224
+ -%}
225
+ <div class="bl-ks__stack">
226
+ {% render 'button-group', content: ks_bg_three %}
227
+ {% render 'button-group', content: ks_bg_three, orientation: 'vertical' %}
228
+ {% render 'button-group', content: ks_bg_text %}
229
+ {% render 'button-group', content: ks_bg_sep %}
230
+ </div>
231
+ </section>
232
+
233
+ {% comment %} ---- Card ---- {% endcomment %}
234
+ <section class="bl-ks__section">
235
+ <h2 class="bl-ks__heading">Card</h2>
236
+ <div style="display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: flex-start;">
237
+ <div style="width: 20rem;">
238
+ {% render 'card', content: 'Cards hold one subject. Compose only the regions you need.' %}
239
+ </div>
240
+ <div style="width: 20rem;">
241
+ {%- capture ks_card_media -%}{{ 'image' | placeholder_svg_tag }}{%- endcapture -%}
242
+ {%- capture ks_card_footer -%}{% render 'button', label: 'View event', size: 'sm' %}{%- endcapture -%}
243
+ {% render 'card', media: ks_card_media, title: 'Design systems meetup', title_tag: 'h3', description: 'A practical talk on component APIs.', footer: ks_card_footer %}
244
+ </div>
245
+ <div style="width: 24rem;">
246
+ {%- capture ks_card_action -%}{% render 'button', label: 'Sign up', variant: 'link' %}{%- endcapture -%}
247
+ {%- capture ks_card_footer2 -%}{% render 'button', label: 'Sign in' %}{% render 'button', label: 'Sign in with Google', variant: 'outline' %}{%- endcapture -%}
248
+ {% render 'card', title: 'Sign in to your account', description: 'Enter your email below to sign in.', action: ks_card_action, content: '<p>Fields go here.</p>', footer: ks_card_footer2, footer_vertical: true %}
249
+ </div>
250
+ <div style="width: 20rem;">
251
+ {% render 'card', title: 'Team members', description: 'Invite people to collaborate.', bordered: true, content: 'No members yet.' %}
252
+ </div>
253
+ <div style="width: 18rem;">
254
+ {%- capture ks_card_footer3 -%}{% render 'button', label: 'Upgrade', variant: 'outline', size: 'sm' %}{%- endcapture -%}
255
+ {% render 'card', size: 'sm', title: 'Storage', description: '12 GB of 15 GB used.', content: 'Upgrade for more space.', footer: ks_card_footer3 %}
256
+ </div>
257
+ </div>
258
+ </section>
259
+
260
+ {% comment %} ---- Checkbox ---- {% endcomment %}
261
+ <section class="bl-ks__section">
262
+ <h2 class="bl-ks__heading">Checkbox</h2>
263
+
264
+ <h3 class="bl-ks__subheading">States</h3>
265
+ <div class="bl-ks__row bl-ks__row--tight">
266
+ {% render 'checkbox', id: 'ks-cb-default' %}
267
+ {% render 'checkbox', id: 'ks-cb-checked', checked: true %}
268
+ {% render 'checkbox', id: 'ks-cb-mixed', indeterminate: true %}
269
+ {% render 'checkbox', id: 'ks-cb-invalid', invalid: true %}
270
+ {% render 'checkbox', id: 'ks-cb-invalid-checked', invalid: true, checked: true %}
271
+ {% render 'checkbox', id: 'ks-cb-disabled', disabled: true %}
272
+ {% render 'checkbox', id: 'ks-cb-disabled-checked', disabled: true, checked: true %}
273
+ </div>
274
+
275
+ <h3 class="bl-ks__subheading">With labels</h3>
276
+ <div class="bl-ks__choices">
277
+ <div class="bl-ks__choice">
278
+ {% render 'checkbox', id: 'ks-cb-disks', name: 'desktop[]', value: 'disks', checked: true %}
279
+ <label for="ks-cb-disks">Hard disks</label>
280
+ </div>
281
+ <div class="bl-ks__choice">
282
+ {% render 'checkbox', id: 'ks-cb-external', name: 'desktop[]', value: 'external', checked: true %}
283
+ <label for="ks-cb-external">External disks</label>
284
+ </div>
285
+ <div class="bl-ks__choice">
286
+ {% render 'checkbox', id: 'ks-cb-media', name: 'desktop[]', value: 'media' %}
287
+ <label for="ks-cb-media">CDs, DVDs and iPods</label>
288
+ </div>
289
+ </div>
290
+ </section>
291
+
292
+ {% comment %} ---- Dialog ---- {% endcomment %}
293
+ <section class="bl-ks__section">
294
+ <h2 class="bl-ks__heading">Dialog</h2>
295
+ <div class="bl-ks__row">
296
+ {%- capture ks_dialog_body -%}<p>Dialog content goes here.</p><p>A second paragraph, spaced by the dialog gap.</p>{%- endcapture -%}
297
+ {%- capture ks_dialog_footer -%}{% render 'button', label: 'Continue' %}{%- endcapture -%}
298
+ {% render 'dialog', id: 'ks-dialog', trigger: 'Edit profile', title: 'Edit profile', description: 'Make changes to your profile here. Click save when you are done.', content: ks_dialog_body, footer: ks_dialog_footer, close_label: 'Cancel' %}
299
+ {%- capture ks_dialog_long -%}{%- for i in (1..12) -%}<p>{{ i }}. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>{%- endfor -%}{%- endcapture -%}
300
+ {% render 'dialog', id: 'ks-dialog-long', trigger: 'Terms of service', trigger_variant: 'default', title: 'Terms of service', content: ks_dialog_long, hide_close: true, close_label: 'Close' %}
301
+ </div>
302
+ </section>
303
+
304
+ {% comment %} ---- Field ---- {% endcomment %}
305
+ <section class="bl-ks__section">
306
+ <h2 class="bl-ks__heading">Field</h2>
307
+ <div class="bl-ks__stack bl-ks__stack--narrow">
308
+ {%- capture ks_field_email -%}
309
+ {% render 'input', type: 'email', id: 'ks-field-email', placeholder: 'you@example.com' %}
310
+ {%- endcapture -%}
311
+ {% render 'field',
312
+ label: 'Email',
313
+ id: 'ks-field-email',
314
+ description: 'We only use this to reply.',
315
+ control: ks_field_email
316
+ %}
317
+
318
+ {%- capture ks_field_invalid -%}
319
+ {% render 'input', type: 'email', id: 'ks-field-invalid', value: 'not-an-email', invalid: true %}
320
+ {%- endcapture -%}
321
+ {% render 'field',
322
+ label: 'Email',
323
+ id: 'ks-field-invalid',
324
+ error: 'Enter a valid email address.',
325
+ control: ks_field_invalid
326
+ %}
327
+
328
+ {%- capture ks_field_switchy -%}
329
+ {% render 'checkbox', id: 'ks-field-marketing', checked: true %}
330
+ {%- endcapture -%}
331
+ {% render 'field',
332
+ label: 'Email me about new products',
333
+ id: 'ks-field-marketing',
334
+ description: 'No more than once a month.',
335
+ orientation: 'horizontal',
336
+ control: ks_field_switchy
337
+ %}
338
+ </div>
339
+
340
+ <h3 class="bl-ks__subheading">Option cards</h3>
341
+ <p class="bl-ks__note">The whole card is the label; selected tints it (field/option-card/*).</p>
342
+ <div class="bl-ks__stack bl-ks__stack--narrow">
343
+ {%- capture ks_card_pro -%}{% render 'checkbox', id: 'ks-card-pro', checked: true %}{%- endcapture -%}
344
+ {% render 'field', card: true, id: 'ks-card-pro', label: 'Pro', description: 'Everything in Starter, plus unlimited projects.', control: ks_card_pro %}
345
+ {%- capture ks_card_team -%}{% render 'checkbox', id: 'ks-card-team' %}{%- endcapture -%}
346
+ {% render 'field', card: true, id: 'ks-card-team', label: 'Team', description: 'Shared billing and role-based access.', control: ks_card_team %}
347
+ </div>
348
+ <div class="bl-ks__stack bl-ks__stack--narrow" role="radiogroup" aria-label="Plan">
349
+ {%- capture ks_card_monthly -%}{% render 'radio', id: 'ks-card-monthly', name: 'ks-card-plan', value: 'monthly', checked: true %}{%- endcapture -%}
350
+ {% render 'field', card: true, id: 'ks-card-monthly', label: 'Monthly', description: 'Billed every month.', control: ks_card_monthly %}
351
+ {%- capture ks_card_yearly -%}{% render 'radio', id: 'ks-card-yearly', name: 'ks-card-plan', value: 'yearly' %}{%- endcapture -%}
352
+ {% render 'field', card: true, id: 'ks-card-yearly', label: 'Yearly', description: 'Two months free.', control: ks_card_yearly %}
353
+ </div>
354
+ <div class="bl-ks__stack bl-ks__stack--narrow">
355
+ {%- capture ks_card_start -%}{% render 'switch', id: 'ks-card-start', checked: true %}{%- endcapture -%}
356
+ {% render 'field', card: true, control_position: 'start', id: 'ks-card-start', label: 'Control first', description: "control_position: 'start' puts the control before the text.", control: ks_card_start %}
357
+ </div>
358
+ </section>
359
+
360
+ {% comment %} ---- Field separator ---- {% endcomment %}
361
+ <section class="bl-ks__section">
362
+ <h2 class="bl-ks__heading">Field separator</h2>
363
+ <p class="bl-ks__note">
364
+ A rule between groups of fields, with an optional caption sitting in a gap in the middle of it. There is
365
+ no standalone Separator on Shopify -- sections draw their own rules -- so this is the one place Baseline
366
+ ships one.
367
+ </p>
368
+ <div class="bl-ks__stack bl-ks__stack--narrow">
369
+ {% render 'input', placeholder: 'Above the rule' %}
370
+ {% render 'field-separator' %}
371
+ {% render 'input', placeholder: 'Below a plain rule' %}
372
+ {% render 'field-separator', label: 'or' %}
373
+ {% render 'input', placeholder: 'Below a captioned rule' %}
374
+ </div>
375
+ </section>
376
+
377
+ {% comment %} ---- Icon ---- {% endcomment %}
378
+ <section class="bl-ks__section">
379
+ <h2 class="bl-ks__heading">Icon</h2>
380
+ <p class="bl-ks__note">The active set, resolved at build time from Figma.</p>
381
+ <div class="bl-ks__icons">
382
+ {% render 'icon', name: 'check' %}
383
+ {% render 'icon', name: 'close' %}
384
+ {% render 'icon', name: 'chevron-down' %}
385
+ {% render 'icon', name: 'search' %}
386
+ {% render 'icon', name: 'cart' %}
387
+ {% render 'icon', name: 'user' %}
388
+ {% render 'icon', name: 'settings' %}
389
+ {% render 'icon', name: 'warning' %}
390
+ {% render 'icon', name: 'success' %}
391
+ {% render 'icon', name: 'minus' %}
392
+ </div>
393
+ </section>
394
+
395
+ {% comment %} ---- Input ---- {% endcomment %}
396
+ <section class="bl-ks__section">
397
+ <h2 class="bl-ks__heading">Input</h2>
398
+ <div class="bl-ks__stack bl-ks__stack--narrow">
399
+ {% render 'input', placeholder: 'Placeholder...' %}
400
+ {% render 'input', type: 'email', value: 'example@email.com' %}
401
+ {% render 'input', type: 'password', value: 'correct horse battery staple' %}
402
+ {% render 'input', type: 'search', placeholder: 'Search...' %}
403
+ {% render 'input', value: 'example@email.com', invalid: true %}
404
+ {% render 'input', placeholder: 'Disabled', disabled: true %}
405
+ {% render 'input', type: 'file' %}
406
+ </div>
407
+ </section>
408
+
409
+ {% comment %} ---- Input group ---- {% endcomment %}
410
+ <section class="bl-ks__section">
411
+ <h2 class="bl-ks__heading">Input group</h2>
412
+ <p class="bl-ks__note">
413
+ Things inside a control's box. The group draws the border and the focus ring, and the control inside goes
414
+ borderless. Anything sitting beside a control rather than inside it is Button Group, not this.
415
+ </p>
416
+ {%- liquid
417
+ capture ks_ig_search
418
+ render 'input', type: 'search', placeholder: 'Search...'
419
+ endcapture
420
+ capture ks_ig_amount
421
+ render 'input', placeholder: '0.00'
422
+ endcapture
423
+ capture ks_ig_invalid
424
+ render 'input', value: 'Not quite right', invalid: true
425
+ endcapture
426
+ capture ks_ig_message
427
+ render 'textarea', placeholder: 'Describe the problem...', rows: 3
428
+ endcapture
429
+ capture ks_ig_icon
430
+ render 'icon', name: 'search'
431
+ endcapture
432
+ capture ks_ig_go
433
+ render 'button', label: 'Go', variant: 'secondary', size: 'xs'
434
+ endcapture
435
+ capture ks_ig_usd
436
+ echo '<span>USD</span>'
437
+ endcapture
438
+ capture ks_ig_count
439
+ echo '<span>0 / 280</span>'
440
+ endcapture
441
+ -%}
442
+ <div class="bl-ks__stack bl-ks__stack--narrow">
443
+ {% render 'input-group', control: ks_ig_search, start: ks_ig_icon %}
444
+ {% render 'input-group', control: ks_ig_search, end: ks_ig_go %}
445
+ {% render 'input-group', control: ks_ig_amount, end: ks_ig_usd %}
446
+ {% render 'input-group', control: ks_ig_invalid, start: ks_ig_icon %}
447
+ {% render 'input-group', control: ks_ig_message, end: ks_ig_count, layout: 'textarea' %}
448
+ </div>
449
+ </section>
450
+
451
+ {% comment %} ---- Item ---- {% endcomment %}
452
+ <section class="bl-ks__section">
453
+ <h2 class="bl-ks__heading">Item</h2>
454
+ <div style="display: flex; flex-wrap: wrap; gap: 2rem; align-items: flex-start;">
455
+ <div style="display: grid; gap: 1rem; width: 24rem;">
456
+ {%- capture ks_item_action -%}{% render 'button', label: 'Action', variant: 'outline', size: 'sm' %}{%- endcapture -%}
457
+ {% render 'item', title: 'Basic item', description: 'A simple item with a title and a description.', actions: ks_item_action %}
458
+ {% render 'item', variant: 'outline', icon: 'success', title: 'Your profile has been verified', description: 'With a description the media aligns to the top.' %}
459
+ {% render 'item', variant: 'muted', title: 'Muted', description: 'The muted variant: muted at 50 %.' %}
460
+ {% render 'item', variant: 'outline', href: '#', title: 'Visit the documentation', description: 'The whole row is the link.' %}
461
+ {% render 'item', variant: 'outline', size: 'xs', title: 'Size xs', description: 'Tighter, with text/xs.' %}
462
+ </div>
463
+ <div style="width: 24rem;">
464
+ {%- capture ks_item_rows -%}
465
+ {%- for product in collections.all.products limit: 3 -%}
466
+ {%- capture ks_item_buy -%}{% render 'button', label: 'View', variant: 'ghost', size: 'sm', href: product.url %}{%- endcapture -%}
467
+ {%- assign ks_item_price = product.price | money -%}
468
+ {% render 'item', size: 'sm', title: product.title, description: product.vendor, image: product.featured_image, aside: ks_item_price, actions: ks_item_buy %}
469
+ {%- endfor -%}
470
+ {%- endcapture -%}
471
+ {% render 'item-group', content: ks_item_rows %}
472
+ </div>
473
+ </div>
474
+ </section>
475
+
476
+ {% comment %} ---- Media ---- {% endcomment %}
477
+ <section class="bl-ks__section">
478
+ <h2 class="bl-ks__heading">Media</h2>
479
+ <div style="display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: flex-start;">
480
+ <div style="width: 20rem;">
481
+ {% render 'media', ratio: 1.5, caption: 'A placeholder at 3:2 with a caption.' %}
482
+ </div>
483
+ <div style="width: 24rem;">
484
+ {% render 'media', ratio: 1.7778, video_url: 'https://www.youtube.com/watch?v=aqz-KE-bpKQ', title: 'Big Buck Bunny', caption: 'YouTube, loaded on play.' %}
485
+ </div>
486
+ <div style="width: 24rem;">
487
+ {% render 'media', ratio: 1.7778, video_url: 'https://www.youtube.com/watch?v=aqz-KE-bpKQ', title: 'Big Buck Bunny', caption: 'Opens in a dialog; closing it stops the video.', playback: 'dialog', id: 'ks-media-dialog' %}
488
+ </div>
489
+ {%- assign ks_video = null -%}
490
+ {%- for product in collections.all.products -%}
491
+ {%- for m in product.media -%}
492
+ {%- if m.media_type == 'video' or m.media_type == 'external_video' -%}
493
+ {%- assign ks_video = m -%}
494
+ {%- break -%}
495
+ {%- endif -%}
496
+ {%- endfor -%}
497
+ {%- if ks_video -%}{%- break -%}{%- endif -%}
498
+ {%- endfor -%}
499
+ <div style="width: 24rem;">
500
+ {%- if ks_video -%}
501
+ {% render 'media', video: ks_video, caption: 'Product video media from the store.' %}
502
+ {%- else -%}
503
+ <p>No product has video media on this store; add one to see a Shopify-hosted video here.</p>
504
+ {%- endif -%}
505
+ </div>
506
+ <div style="width: 20rem;">
507
+ {%- capture ks_media_card -%}{% render 'media', ratio: 1.7778, video_url: 'https://vimeo.com/76979871', title: 'The New Vimeo Player' %}{%- endcapture -%}
508
+ {% render 'card', media: ks_media_card, title: 'Product tour', title_tag: 'h3', description: 'Vimeo inside a card.' %}
509
+ </div>
510
+ </div>
511
+ </section>
512
+
513
+ {% comment %} ---- Meter ---- {% endcomment %}
514
+ <section class="bl-ks__section">
515
+ <h2 class="bl-ks__heading">Meter</h2>
516
+ <div style="display: grid; gap: 1rem; max-width: 20rem;">
517
+ {% render 'meter', value: 12, max: 15, label: 'Storage', value_text: '12 GB of 15 GB' %}
518
+ {% render 'meter', value: 4.2, max: 5, label: 'Rating', value_text: '4.2 out of 5' %}
519
+ {% render 'meter', value: 92, low: 50, high: 80, optimum: 20, label: 'Disk usage', show_value: true, scheme: 'error' %}
520
+ </div>
521
+ </section>
522
+
523
+ {% comment %} ---- Native select ---- {% endcomment %}
524
+ <section class="bl-ks__section">
525
+ <h2 class="bl-ks__heading">Native select</h2>
526
+ <p class="bl-ks__note">
527
+ The browser owns the option list. Shopify has no panel component: the designed panel is React-only, and
528
+ that gets revisited if customizable select elements land in browsers.
529
+ </p>
530
+ <div class="bl-ks__stack bl-ks__stack--narrow">
531
+ {% render 'native-select', id: 'ks-sel-placeholder', options: ks_fruit_placeholder %}
532
+ {% render 'native-select', id: 'ks-sel-filled', options: ks_fruit %}
533
+ {% render 'native-select', id: 'ks-sel-grouped', options: ks_fruit_grouped %}
534
+ {% render 'native-select', id: 'ks-sel-invalid', options: ks_fruit, invalid: true %}
535
+ {% render 'native-select', id: 'ks-sel-disabled', options: ks_fruit, disabled: true %}
536
+ {% render 'native-select', id: 'ks-sel-multiple', options: ks_fruit, multiple: true %}
537
+ </div>
538
+ </section>
539
+
540
+ {% comment %} ---- Pagination ---- {% endcomment %}
541
+ <section class="bl-ks__section">
542
+ <h2 class="bl-ks__heading">Pagination</h2>
543
+ <p class="bl-ks__note">
544
+ The pagination snippet renders Shopify's paginate object, so the store's products paged one at a time give it
545
+ something to page through. Collection, blog and article comment pages use it in place of default_pagination.
546
+ </p>
547
+ {%- paginate collections.all.products by 1 -%}
548
+ <h3 class="bl-ks__subheading">Default</h3>
549
+ {% render 'pagination', paginate: paginate %}
550
+ <h3 class="bl-ks__subheading">Bordered</h3>
551
+ {% render 'pagination', paginate: paginate, variant: 'bordered' %}
552
+ <h3 class="bl-ks__subheading">Grouped</h3>
553
+ {% render 'pagination', paginate: paginate, variant: 'grouped' %}
554
+ {%- endpaginate -%}
555
+ </section>
556
+
557
+ {% comment %} ---- Popover ---- {% endcomment %}
558
+ <section class="bl-ks__section">
559
+ <h2 class="bl-ks__heading">Popover</h2>
560
+ <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-block: 1rem;">
561
+ {% render 'popover', id: 'ks-popover', trigger: 'Open popover', align: 'start', title: 'Dimensions', description: 'Set the dimensions for the layer.' %}
562
+ {% render 'popover', id: 'ks-popover-shipping', trigger: 'Shipping details', trigger_variant: 'link', align: 'start', title: 'Shipping', description: 'Free over $50. Ships in 1-2 business days.' %}
563
+ </div>
564
+ <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-block: 1rem;">
565
+ {%- for a in (1..3) -%}
566
+ {%- case a -%}{%- when 1 -%}{%- assign al = 'start' -%}{%- when 2 -%}{%- assign al = 'center' -%}{%- else -%}{%- assign al = 'end' -%}{%- endcase -%}
567
+ {%- assign pid = 'ks-popover-align-' | append: al -%}
568
+ {%- assign plabel = 'Aligned to ' | append: al -%}
569
+ {% render 'popover', id: pid, trigger: al, trigger_size: 'sm', align: al, label: plabel, content: plabel %}
570
+ {%- endfor -%}
571
+ </div>
572
+ <div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; padding-block: 6rem;">
573
+ {%- assign ks_sides = 'top,right,bottom,left' | split: ',' -%}
574
+ {%- for sd in ks_sides -%}
575
+ {%- assign pid = 'ks-popover-side-' | append: sd -%}
576
+ {% render 'popover', id: pid, trigger: sd, side: sd, title: 'Dimensions', description: 'Set the dimensions for the layer.' %}
577
+ {%- endfor -%}
578
+ </div>
579
+ </section>
580
+
581
+ {% comment %} ---- Progress ---- {% endcomment %}
582
+ <section class="bl-ks__section">
583
+ <h2 class="bl-ks__heading">Progress</h2>
584
+ <div style="display: grid; gap: 1rem; max-width: 20rem;">
585
+ {% render 'progress', value: 0, aria_label: 'Upload 0%', id: 'ks-progress-0' %}
586
+ {% render 'progress', value: 50, aria_label: 'Upload 50%', id: 'ks-progress-50' %}
587
+ {% render 'progress', value: 56, label: 'Uploading', show_value: true %}
588
+ {% render 'progress', value: 3, max: 4, label: 'Checkout', value_text: 'Step 3 of 4' %}
589
+ {% render 'progress', label: 'Preparing files' %}
590
+ {% render 'progress', value: 64, label: 'Saved', show_value: true, scheme: 'success' %}
591
+ </div>
592
+ </section>
593
+
594
+ {% comment %} ---- Radio ---- {% endcomment %}
595
+ <section class="bl-ks__section">
596
+ <h2 class="bl-ks__heading">Radio</h2>
597
+
598
+ <h3 class="bl-ks__subheading">States</h3>
599
+ {%- comment -%}
600
+ Each state gets its own name on purpose: radios sharing a name deselect one another, so one group here
601
+ would collapse the sampler to a single checked box.
602
+ {%- endcomment -%}
603
+ <div class="bl-ks__row bl-ks__row--tight">
604
+ {% render 'radio', name: 'ks-r-a', id: 'ks-r-default', value: 'off' %}
605
+ {% render 'radio', name: 'ks-r-b', id: 'ks-r-checked', value: 'on', checked: true %}
606
+ {% render 'radio', name: 'ks-r-c', id: 'ks-r-invalid', value: 'off', invalid: true %}
607
+ {% render 'radio', name: 'ks-r-d', id: 'ks-r-invalid-checked', value: 'on', invalid: true, checked: true %}
608
+ {% render 'radio', name: 'ks-r-e', id: 'ks-r-disabled', value: 'off', disabled: true %}
609
+ {% render 'radio', name: 'ks-r-f', id: 'ks-r-disabled-checked', value: 'on', disabled: true, checked: true %}
610
+ </div>
611
+
612
+ <h3 class="bl-ks__subheading">A group</h3>
613
+ <div role="radiogroup" aria-label="Spacing" class="bl-ks__choices">
614
+ <div class="bl-ks__choice">
615
+ {% render 'radio', name: 'ks-spacing', id: 'ks-spacing-default', value: 'default', checked: true %}
616
+ <label for="ks-spacing-default">Default</label>
617
+ </div>
618
+ <div class="bl-ks__choice">
619
+ {% render 'radio', name: 'ks-spacing', id: 'ks-spacing-comfortable', value: 'comfortable' %}
620
+ <label for="ks-spacing-comfortable">Comfortable</label>
621
+ </div>
622
+ <div class="bl-ks__choice">
623
+ {% render 'radio', name: 'ks-spacing', id: 'ks-spacing-compact', value: 'compact' %}
624
+ <label for="ks-spacing-compact">Compact</label>
625
+ </div>
626
+ </div>
627
+ </section>
628
+
629
+ {% comment %} ---- Sheet ---- {% endcomment %}
630
+ <section class="bl-ks__section">
631
+ <h2 class="bl-ks__heading">Sheet</h2>
632
+ <div class="bl-ks__row">
633
+ {%- capture ks_sheet_body -%}<p>Sheet content goes here.</p>{%- endcapture -%}
634
+ {%- capture ks_sheet_footer -%}{% render 'button', label: 'Save changes' %}{%- endcapture -%}
635
+ {%- assign ks_sides = 'right,left,top,bottom' | split: ',' -%}
636
+ {%- for s in ks_sides -%}
637
+ {%- assign ks_sheet_id = 'ks-sheet-' | append: s -%}
638
+ {% render 'sheet', id: ks_sheet_id, trigger: s, side: s, title: 'Edit profile', description: 'Make changes to your profile here.', content: ks_sheet_body, footer: ks_sheet_footer, close_label: 'Close' %}
639
+ {%- endfor -%}
640
+ </div>
641
+ </section>
642
+
643
+ {% comment %} ---- Spinner ---- {% endcomment %}
644
+ <section class="bl-ks__section">
645
+ <h2 class="bl-ks__heading">Spinner</h2>
646
+ <div class="bl-ks__row">
647
+ {% render 'spinner' %}
648
+ <span style="color: var(--primary)">{% render 'spinner' %}</span>
649
+ <span style="color: var(--muted-foreground)">{% render 'spinner' %}</span>
650
+ </div>
651
+ </section>
652
+
653
+ {% comment %} ---- Switch ---- {% endcomment %}
654
+ <section class="bl-ks__section">
655
+ <h2 class="bl-ks__heading">Switch</h2>
656
+ <p class="bl-ks__note">
657
+ A switch applies its change immediately. If the setting needs a Save button beside it, it is a checkbox.
658
+ </p>
659
+
660
+ <h3 class="bl-ks__subheading">States</h3>
661
+ <div class="bl-ks__row bl-ks__row--tight">
662
+ {% render 'switch', id: 'ks-sw-off' %}
663
+ {% render 'switch', id: 'ks-sw-on', checked: true %}
664
+ {% render 'switch', id: 'ks-sw-invalid', invalid: true %}
665
+ {% render 'switch', id: 'ks-sw-invalid-on', invalid: true, checked: true %}
666
+ {% render 'switch', id: 'ks-sw-disabled', disabled: true %}
667
+ {% render 'switch', id: 'ks-sw-disabled-on', disabled: true, checked: true %}
668
+ </div>
669
+
670
+ <h3 class="bl-ks__subheading">Sizes</h3>
671
+ <div class="bl-ks__row bl-ks__row--tight">
672
+ {% render 'switch', id: 'ks-sw-sm-off', size: 'sm' %}
673
+ {% render 'switch', id: 'ks-sw-sm-on', size: 'sm', checked: true %}
674
+ {% render 'switch', id: 'ks-sw-md-off', size: 'md' %}
675
+ {% render 'switch', id: 'ks-sw-md-on', size: 'md', checked: true %}
676
+ </div>
677
+
678
+ <h3 class="bl-ks__subheading">With labels</h3>
679
+ <div class="bl-ks__choices">
680
+ <div class="bl-ks__choice">
681
+ {% render 'switch', id: 'ks-sw-2fa', name: 'two_factor', checked: true %}
682
+ <label for="ks-sw-2fa">Ask for a code at every sign-in</label>
683
+ </div>
684
+ <div class="bl-ks__choice">
685
+ {% render 'switch', id: 'ks-sw-digest', name: 'digest' %}
686
+ <label for="ks-sw-digest">Send a weekly summary</label>
687
+ </div>
688
+ </div>
689
+ </section>
690
+
691
+ {% comment %} ---- Textarea ---- {% endcomment %}
692
+ <section class="bl-ks__section">
693
+ <h2 class="bl-ks__heading">Textarea</h2>
694
+ <p class="bl-ks__note">
695
+ The same control box as Input with a floor instead of a fixed height. It grows with its content where
696
+ field-sizing is supported, and keeps its rows height and scrolls where it is not.
697
+ </p>
698
+ <div class="bl-ks__stack bl-ks__stack--narrow">
699
+ {% render 'textarea', id: 'ks-ta-default', placeholder: 'Type your message here.' %}
700
+ {% render 'textarea', id: 'ks-ta-filled', value: 'A filled textarea.' %}
701
+ {% render 'textarea', id: 'ks-ta-invalid', value: 'Not quite right.', invalid: true %}
702
+ {% render 'textarea', id: 'ks-ta-disabled', placeholder: 'Disabled', disabled: true %}
703
+ {% render 'textarea', id: 'ks-ta-rows', rows: 6, value: 'rows sets the starting height; min-height is the floor beneath it.' %}
704
+ </div>
705
+ </section>
706
+
707
+ {% comment %} ---- Carousel (the React demos' order: default, sizes, loop, vertical) ---- {% endcomment %}
708
+ <section class="bl-ks__section" id="ks-carousel">
709
+ <h2 class="bl-ks__heading">Carousel</h2>
710
+ {%- capture ks_slides -%}
711
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;aspect-ratio:1;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:2.25rem;font-weight:600;">1</div>' %}
712
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;aspect-ratio:1;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:2.25rem;font-weight:600;">2</div>' %}
713
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;aspect-ratio:1;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:2.25rem;font-weight:600;">3</div>' %}
714
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;aspect-ratio:1;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:2.25rem;font-weight:600;">4</div>' %}
715
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;aspect-ratio:1;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:2.25rem;font-weight:600;">5</div>' %}
716
+ {%- endcapture -%}
717
+ {%- capture ks_vslides -%}
718
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;height:100%;padding:1.5rem;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:1.875rem;font-weight:600;">1</div>' %}
719
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;height:100%;padding:1.5rem;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:1.875rem;font-weight:600;">2</div>' %}
720
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;height:100%;padding:1.5rem;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:1.875rem;font-weight:600;">3</div>' %}
721
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;height:100%;padding:1.5rem;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:1.875rem;font-weight:600;">4</div>' %}
722
+ {% render 'carousel-item', content: '<div style="display:flex;align-items:center;justify-content:center;height:100%;padding:1.5rem;border:1px solid var(--border);border-radius:var(--bl-radius-xl);font-size:1.875rem;font-weight:600;">5</div>' %}
723
+ {%- endcapture -%}
724
+ <div style="max-width: 20rem; margin: 2rem auto;">{% render 'carousel', items: ks_slides, aria_label: 'Default' %}</div>
725
+ <div style="max-width: 24rem; margin: 2rem auto;">{% render 'carousel', items: ks_slides, aria_label: 'Sizes', per_view: 2, dots: false %}</div>
726
+ <div style="max-width: 20rem; margin: 2rem auto;">{% render 'carousel', items: ks_slides, aria_label: 'Loop', loop: true %}</div>
727
+ <div style="max-width: 20rem; margin: 5rem auto;">{% render 'carousel', items: ks_vslides, aria_label: 'Vertical', orientation: 'vertical', class: 'ks-carousel-vertical' %}</div>
728
+ <style>/* as the React demo: the track (CarouselContent) is 270px high, two slides per view */ .ks-carousel-vertical .bl-carousel__track { height: 270px; } .ks-carousel-vertical .bl-carousel__slide { flex-basis: 50%; }</style>
729
+ </section>
730
+
731
+ {% comment %} ---- Sidebar menu: the header's mobile menu (a Sheet below md), composed by hand ---- {% endcomment %}
732
+ <section class="bl-ks__section" id="ks-sidebar-menu">
733
+ <h2 class="bl-ks__heading">Sidebar menu (mobile menu)</h2>
734
+ {%- capture ks_sm_products -%}
735
+ {% render 'sidebar-menu-sub-link', title: 'New arrivals', url: '#new' %}
736
+ {% render 'sidebar-menu-sub-link', title: 'Sale', url: '#sale', current: true %}
737
+ {%- endcapture -%}
738
+ {%- capture ks_sm_about -%}
739
+ {% render 'sidebar-menu-sub-link', title: 'Our story', url: '#story' %}
740
+ {% render 'sidebar-menu-sub-link', title: 'Careers', url: '#careers' %}
741
+ {%- endcapture -%}
742
+ {%- capture ks_sm_items -%}
743
+ {% render 'sidebar-menu-item', title: 'Home', url: '#home', current: true %}
744
+ {% render 'sidebar-menu-item', title: 'Products', children: ks_sm_products, open: true %}
745
+ {% render 'sidebar-menu-item', title: 'About', children: ks_sm_about %}
746
+ {% render 'sidebar-menu-item', title: 'Contact', url: '#contact' %}
747
+ {%- endcapture -%}
748
+ {%- capture ks_sm -%}{% render 'sidebar-menu', items: ks_sm_items %}{%- endcapture -%}
749
+ <div style="margin-block: 1rem;">{% render 'sheet', id: 'ks-mobile-menu', trigger: 'Menu', trigger_variant: 'outline', trigger_icon: 'menu', trigger_icon_only: true, side: 'left', title: 'Store', content: ks_sm, class: 'bl-sidebar-sheet' %}</div>
750
+ </section>
751
+
752
+ {% comment %} ---- Navigation Menu (the React demo; the header renders the store's menu the same way) ---- {% endcomment %}
753
+ <section class="bl-ks__section" id="ks-navigation">
754
+ <h2 class="bl-ks__heading">Navigation Menu</h2>
755
+ {%- capture ks_nav_start -%}
756
+ {% render 'navigation-menu-link', title: 'Introduction', url: '#introduction', current: true, description: 'Re-usable components built with Base UI and Tailwind CSS.' %}
757
+ {% render 'navigation-menu-link', title: 'Installation', url: '#installation', badge: 'New', description: 'How to install dependencies and structure your app.' %}
758
+ {% render 'navigation-menu-link', title: 'Typography', url: '#typography', description: 'Styles for headings, paragraphs, lists...etc' %}
759
+ {%- endcapture -%}
760
+ {%- capture ks_nav_components -%}
761
+ {% render 'navigation-menu-link', title: 'Alert Dialog', url: '#alert-dialog', description: 'A modal dialog that interrupts the user with important content and expects a response.' %}
762
+ {% render 'navigation-menu-link', title: 'Hover Card', url: '#hover-card', description: 'For sighted users to preview content available behind a link.' %}
763
+ {% render 'navigation-menu-link', title: 'Tabs', url: '#tabs', description: 'A set of layered sections of content that are displayed one at a time.' %}
764
+ {%- endcapture -%}
765
+ {%- capture ks_nav_icons -%}
766
+ {% render 'navigation-menu-link', title: 'Backlog', url: '#backlog', icon: 'error' %}
767
+ {% render 'navigation-menu-link', title: 'To Do', url: '#to-do', icon: 'circle' %}
768
+ {% render 'navigation-menu-link', title: 'Done', url: '#done', icon: 'success' %}
769
+ {%- endcapture -%}
770
+ {%- capture ks_nav_items -%}
771
+ {% render 'navigation-menu-item', id: 'ks-nav-getting-started', title: 'Getting started', content: ks_nav_start %}
772
+ {% render 'navigation-menu-item', id: 'ks-nav-components', title: 'Components', content: ks_nav_components %}
773
+ {% render 'navigation-menu-item', id: 'ks-nav-with-icon', title: 'With Icon', content: ks_nav_icons %}
774
+ {% render 'navigation-menu-item', title: 'Docs', url: '#docs' %}
775
+ {%- endcapture -%}
776
+ <div style="margin-block: 1rem 16rem;">{% render 'navigation-menu', items: ks_nav_items, aria_label: 'Kitchen sink' %}</div>
777
+ </section>
778
+
779
+ {% comment %} ---- Tabs (the React demos' order: default, vertical, icons, line, line-vertical, line-icons) ---- {% endcomment %}
780
+ <section class="bl-ks__section">
781
+ <h2 class="bl-ks__heading">Tabs</h2>
782
+ {%- capture ks_tabs_panel_overview -%}<p>View your key metrics and recent project activity. You have 12 active projects and 3 pending tasks.</p>{%- endcapture -%}
783
+ {%- capture ks_tabs_panel_analytics -%}<p>Track performance and user engagement metrics. Page views are up 25% compared to last month.</p>{%- endcapture -%}
784
+ {%- capture ks_tabs_panel_reports -%}<p>Generate and download your detailed reports. You have 5 reports ready to export.</p>{%- endcapture -%}
785
+ {%- capture ks_tabs_panel_settings -%}<p>Manage your account preferences and options. Configure notifications, security, and themes.</p>{%- endcapture -%}
786
+ {%- assign ks_tabs_looks = 'default,line' | split: ',' -%}
787
+ {%- for ks_look in ks_tabs_looks -%}
788
+ {%- for ks_orient in (1..2) -%}
789
+ {%- if ks_orient == 1 -%}{%- assign ks_o = 'horizontal' -%}{%- else -%}{%- assign ks_o = 'vertical' -%}{%- endif -%}
790
+ {%- assign ks_p = 'ks-tabs-' | append: ks_look | append: '-' | append: ks_o -%}
791
+ {%- assign ks_id1 = ks_p | append: '-overview' -%}
792
+ {%- assign ks_id2 = ks_p | append: '-analytics' -%}
793
+ {%- assign ks_id3 = ks_p | append: '-reports' -%}
794
+ {%- assign ks_id4 = ks_p | append: '-settings' -%}
795
+ {%- capture ks_tabs -%}
796
+ {% render 'tab', id: ks_id1, label: 'Overview', content: ks_tabs_panel_overview %}
797
+ {% render 'tab', id: ks_id2, label: 'Analytics', content: ks_tabs_panel_analytics %}
798
+ {% render 'tab', id: ks_id3, label: 'Reports', content: ks_tabs_panel_reports %}
799
+ {% render 'tab', id: ks_id4, label: 'Settings', content: ks_tabs_panel_settings %}
800
+ {%- endcapture -%}
801
+ <div style="max-width: 28rem; margin-block: 1rem;">{% render 'tabs', items: ks_tabs, variant: ks_look, orientation: ks_o, aria_label: 'Project' %}</div>
802
+ {%- endfor -%}
803
+ {%- assign ks_p = 'ks-tabs-' | append: ks_look | append: '-icons' -%}
804
+ {%- assign ks_id1 = ks_p | append: '-preview' -%}
805
+ {%- assign ks_id2 = ks_p | append: '-code' -%}
806
+ {%- assign ks_id3 = ks_p | append: '-share' -%}
807
+ {%- capture ks_tabs -%}
808
+ {% render 'tab', id: ks_id1, label: 'Preview', icon: 'eye', content: '<p>The rendered component.</p>' %}
809
+ {% render 'tab', id: ks_id2, label: 'Code', icon: 'file', content: '<p>Its source.</p>' %}
810
+ {% render 'tab', id: ks_id3, label: 'Share', icon: 'share', icon_position: 'end', disabled: true, content: '<p>A link to it.</p>' %}
811
+ {%- endcapture -%}
812
+ <div style="margin-block: 1rem;">{% render 'tabs', items: ks_tabs, variant: ks_look, aria_label: 'View' %}</div>
813
+ {%- endfor -%}
814
+ </section>
815
+
816
+ {% comment %} ---- Toggle ---- {% endcomment %}
817
+ <section class="bl-ks__section">
818
+ <h2 class="bl-ks__heading">Toggle</h2>
819
+ <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-block: 1rem;">
820
+ {% render 'toggle', icon: 'star', aria_label: 'Toggle bookmark', size: 'sm', variant: 'outline' %}
821
+ {% render 'toggle', label: 'Bold', aria_label: 'Toggle bold', variant: 'outline', pressed: true %}
822
+ {% render 'toggle', label: 'Italic', icon: 'edit', aria_label: 'Toggle italic' %}
823
+ {% render 'toggle', label: 'Disabled', aria_label: 'Toggle disabled', disabled: true %}
824
+ {% render 'toggle', label: 'Disabled', aria_label: 'Toggle disabled outline', variant: 'outline', disabled: true %}
825
+ </div>
826
+ {%- capture ks_format -%}
827
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-format', value: 'bold', label: 'Bold', aria_label: 'Toggle bold', variant: 'outline' %}
828
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-format', value: 'italic', label: 'Italic', aria_label: 'Toggle italic', variant: 'outline' %}
829
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-format', value: 'strikethrough', label: 'Strike', aria_label: 'Toggle strikethrough', variant: 'outline' %}
830
+ {%- endcapture -%}
831
+ {%- capture ks_weight -%}
832
+ {% render 'toggle', slot: 'toggle-group-item', type: 'radio', name: 'toggle-group-weight', value: 'light', label: 'Light', variant: 'outline' %}
833
+ {% render 'toggle', slot: 'toggle-group-item', type: 'radio', name: 'toggle-group-weight', value: 'normal', label: 'Normal', variant: 'outline', pressed: true %}
834
+ {% render 'toggle', slot: 'toggle-group-item', type: 'radio', name: 'toggle-group-weight', value: 'medium', label: 'Medium', variant: 'outline' %}
835
+ {% render 'toggle', slot: 'toggle-group-item', type: 'radio', name: 'toggle-group-weight', value: 'bold', label: 'Bold', variant: 'outline' %}
836
+ {%- endcapture -%}
837
+ {%- capture ks_vertical -%}
838
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-vertical', value: 'bold', label: 'Bold', variant: 'outline', pressed: true %}
839
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-vertical', value: 'italic', label: 'Italic', variant: 'outline' %}
840
+ {% render 'toggle', slot: 'toggle-group-item', name: 'toggle-group-vertical', value: 'strikethrough', label: 'Strike', variant: 'outline' %}
841
+ {%- endcapture -%}
842
+ <div style="display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: flex-start; margin-block: 1rem;">
843
+ {% render 'toggle-group', items: ks_format, aria_label: 'Formatting' %}
844
+ {% render 'toggle-group', items: ks_weight, spacing: 0, aria_label: 'Font weight' %}
845
+ {% render 'toggle-group', items: ks_vertical, spacing: 0, orientation: 'vertical', aria_label: 'Formatting' %}
846
+ </div>
847
+ </section>
848
+ </div>
849
+
850
+ {% stylesheet %}
851
+ /* Layout only. Every component draws itself from its own snippet; nothing here restyles a component, so this
852
+ page cannot mask a bug in one. */
853
+ .bl-ks {
854
+ background-color: var(--background);
855
+ color: var(--foreground);
856
+ transition: background-color 150ms, color 150ms;
857
+ display: grid;
858
+ grid-template-columns: var(--content-grid);
859
+ padding: 48px 0;
860
+ }
861
+
862
+ .bl-ks > * {
863
+ grid-column: 2;
864
+ }
865
+
866
+ .bl-ks__header {
867
+ margin-bottom: 40px;
868
+ }
869
+
870
+ .bl-ks__title {
871
+ margin: 0;
872
+ font-family: var(--bl-font-sans);
873
+ font-size: var(--bl-text-3xl);
874
+ font-weight: 600;
875
+ color: var(--foreground);
876
+ }
877
+
878
+ .bl-ks__lede {
879
+ margin: 8px 0 0;
880
+ color: var(--muted-foreground);
881
+ font-family: var(--bl-font-sans);
882
+ font-size: var(--bl-text-sm);
883
+ }
884
+
885
+ .bl-ks__section {
886
+ padding: 28px 0;
887
+ border-top: 1px solid var(--border);
888
+ }
889
+
890
+ .bl-ks__heading {
891
+ margin: 0 0 16px;
892
+ font-family: var(--bl-font-sans);
893
+ font-size: var(--bl-text-xl);
894
+ font-weight: 600;
895
+ color: var(--foreground);
896
+ }
897
+
898
+ .bl-ks__subheading {
899
+ margin: 24px 0 10px;
900
+ font-family: var(--bl-font-sans);
901
+ font-size: var(--bl-text-sm);
902
+ font-weight: 600;
903
+ color: var(--muted-foreground);
904
+ }
905
+
906
+ .bl-ks__note {
907
+ margin: 0 0 14px;
908
+ color: var(--muted-foreground);
909
+ font-family: var(--bl-font-sans);
910
+ font-size: var(--bl-text-sm);
911
+ }
912
+
913
+ .bl-ks__row {
914
+ display: flex;
915
+ flex-wrap: wrap;
916
+ align-items: center;
917
+ gap: 12px;
918
+ }
919
+
920
+ .bl-ks__row--tight {
921
+ gap: 16px;
922
+ }
923
+
924
+ .bl-ks__stack {
925
+ display: flex;
926
+ flex-direction: column;
927
+ gap: 12px;
928
+ }
929
+
930
+ .bl-ks__stack--narrow {
931
+ max-width: 24rem;
932
+ }
933
+
934
+ .bl-ks__choices {
935
+ display: flex;
936
+ flex-direction: column;
937
+ gap: var(--bl-field-group-gap-compact);
938
+ max-width: 24rem;
939
+ }
940
+
941
+ .bl-ks__choice {
942
+ display: flex;
943
+ align-items: center;
944
+ gap: var(--bl-label-gap);
945
+ }
946
+
947
+ .bl-ks__choice label {
948
+ font-family: var(--bl-font-sans);
949
+ font-size: var(--bl-label-font-size);
950
+ line-height: var(--bl-label-line-height);
951
+ color: var(--foreground);
952
+ }
953
+
954
+ .bl-ks__icons {
955
+ display: flex;
956
+ flex-wrap: wrap;
957
+ gap: 16px;
958
+ color: var(--foreground);
959
+ font-size: 24px;
960
+ }
961
+
962
+
963
+ .bl-ks__scheme-control {
964
+ max-width: 20rem;
965
+ margin-top: 24px;
966
+ }
967
+ {% endstylesheet %}
968
+
969
+ {% javascript %}
970
+ /* The kitchen sink's scheme switcher: swaps the section's color-<id> class, which every snippet's colours read
971
+ (ADR-0007). Development surface only; nothing else in the theme depends on it. */
972
+ document.addEventListener('change', function (event) {
973
+ var select = event.target;
974
+ if (!(select instanceof HTMLSelectElement) || select.id !== 'ks-scheme') return;
975
+ var root = select.closest('[data-bl-ks]');
976
+ if (!root) return;
977
+ root.className = root.className.replace(/(^|\s)color-\S+/g, '').trim() + ' color-' + select.value;
978
+ });
979
+ {% endjavascript %}
980
+
981
+ {% schema %}
982
+ {
983
+ "name": "Baseline kitchen sink",
984
+ "settings": [
985
+ { "type": "color_scheme", "id": "color_scheme", "label": "t:baseline.color_scheme", "default": "scheme-1" }
986
+ ]
987
+ }
988
+ {% endschema %}