rebly-sections 1.0.1 → 1.2.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.
- package/assets/data/block-patterns.csv +160 -0
- package/assets/data/component-library/GDPR-modal.liquid +183 -0
- package/assets/data/component-library/Ishi_parallaxblockstyle1.liquid +331 -0
- package/assets/data/component-library/_index.csv +157 -19
- package/assets/data/component-library/about.liquid +1557 -0
- package/assets/data/component-library/adv-header.liquid +344 -0
- package/assets/data/component-library/adv-navigation.liquid +542 -0
- package/assets/data/component-library/announcement-bar.liquid +42 -60
- package/assets/data/component-library/article.liquid +242 -0
- package/assets/data/component-library/axeo-perfume-cosmetics-store-shopify-theme-about.liquid +1557 -0
- package/assets/data/component-library/basel-gl_newsletter_pets.liquid +612 -0
- package/assets/data/component-library/bixbang-fullpackage-collection-template.liquid +990 -0
- package/assets/data/component-library/blog-sidebar-article.liquid +51 -0
- package/assets/data/component-library/blog-sidebar-deals.liquid +189 -0
- package/assets/data/component-library/blog-sidebar-instagram.liquid +126 -0
- package/assets/data/component-library/blog-sidebar-tags.liquid +30 -0
- package/assets/data/component-library/blog.liquid +371 -0
- package/assets/data/component-library/brands-page.liquid +114 -0
- package/assets/data/component-library/cake-shop-shopify-theme-for-bakery-and-cafe-home-support-blo.liquid +780 -0
- package/assets/data/component-library/collection-template-promotion.liquid +1139 -0
- package/assets/data/component-library/collection-template.liquid +146 -0
- package/assets/data/component-library/contact-us.liquid +663 -0
- package/assets/data/component-library/contact.liquid +256 -0
- package/assets/data/component-library/copyright_payment.liquid +95 -0
- package/assets/data/component-library/custom-content.liquid +832 -0
- package/assets/data/component-library/faq-template-3.liquid +1014 -0
- package/assets/data/component-library/footer-model-1.liquid +503 -0
- package/assets/data/component-library/footer-model-10.liquid +210 -0
- package/assets/data/component-library/footer-model-2.liquid +460 -0
- package/assets/data/component-library/footer-model-3.liquid +548 -0
- package/assets/data/component-library/footer-model-4.liquid +455 -0
- package/assets/data/component-library/footer-model-5.liquid +407 -0
- package/assets/data/component-library/footer-model-6.liquid +543 -0
- package/assets/data/component-library/footer-model-7.liquid +345 -0
- package/assets/data/component-library/footer-model-8.liquid +279 -0
- package/assets/data/component-library/footer-model-9.liquid +376 -0
- package/assets/data/component-library/gallery.liquid +236 -0
- package/assets/data/component-library/gecko-shopify-v5-7-6-nulled-manual_blog.liquid +720 -0
- package/assets/data/component-library/gl_newsletter_pets.liquid +612 -0
- package/assets/data/component-library/gp-logo-list.liquid +362 -0
- package/assets/data/component-library/grid-banner-type-3-b.liquid +655 -0
- package/assets/data/component-library/header-model-1.liquid +427 -0
- package/assets/data/component-library/header-model-10.liquid +599 -0
- package/assets/data/component-library/header-model-2.liquid +633 -0
- package/assets/data/component-library/header-model-3.liquid +415 -0
- package/assets/data/component-library/header-model-4.liquid +754 -0
- package/assets/data/component-library/header-model-5.liquid +562 -0
- package/assets/data/component-library/header-model-6.liquid +713 -0
- package/assets/data/component-library/header-model-7.liquid +743 -0
- package/assets/data/component-library/header-model-8.liquid +500 -0
- package/assets/data/component-library/header-model-9.liquid +506 -0
- package/assets/data/component-library/home-blog-posts-1.liquid +399 -0
- package/assets/data/component-library/home-blog-posts-2.liquid +393 -0
- package/assets/data/component-library/home-blog-posts-3.liquid +545 -0
- package/assets/data/component-library/home-brand-slider.liquid +224 -0
- package/assets/data/component-library/home-circled-block.liquid +332 -0
- package/assets/data/component-library/home-contact-block-1.liquid +395 -0
- package/assets/data/component-library/home-contact-block-2.liquid +372 -0
- package/assets/data/component-library/home-content-block-1.liquid +320 -0
- package/assets/data/component-library/home-donut-chart.liquid +335 -0
- package/assets/data/component-library/home-fade-in-banner.liquid +277 -0
- package/assets/data/component-library/home-faq-model.liquid +323 -0
- package/assets/data/component-library/home-featured-blog.liquid +1462 -0
- package/assets/data/component-library/home-featured-collections.liquid +484 -0
- package/assets/data/component-library/home-gallery-block1.liquid +276 -0
- package/assets/data/component-library/home-gallery-block2.liquid +396 -0
- package/assets/data/component-library/home-grid-banner-type-1.liquid +371 -0
- package/assets/data/component-library/home-grid-banner-type-2.liquid +362 -0
- package/assets/data/component-library/home-grid-banner-type-3.liquid +374 -0
- package/assets/data/component-library/home-grid-banner-type-4.liquid +900 -0
- package/assets/data/component-library/home-grid-banner-type-5.liquid +368 -0
- package/assets/data/component-library/home-grid-banner-type-6.liquid +382 -0
- package/assets/data/component-library/home-grid-banner-type-7.liquid +371 -0
- package/assets/data/component-library/home-hotspot-with-product-carousel.liquid +1425 -0
- package/assets/data/component-library/home-image-gallery.liquid +1087 -0
- package/assets/data/component-library/home-instagram.liquid +356 -0
- package/assets/data/component-library/home-newsletter.liquid +246 -0
- package/assets/data/component-library/home-number-counter.liquid +790 -0
- package/assets/data/component-library/home-price-table.liquid +416 -0
- package/assets/data/component-library/home-pricing-table.liquid +1076 -0
- package/assets/data/component-library/home-product-grid.liquid +413 -0
- package/assets/data/component-library/home-product-tab-1.liquid +528 -0
- package/assets/data/component-library/home-product-tab-2.liquid +342 -0
- package/assets/data/component-library/home-product-tab-3.liquid +357 -0
- package/assets/data/component-library/home-product-vertical-carousel.liquid +477 -0
- package/assets/data/component-library/home-quotes-1.liquid +274 -0
- package/assets/data/component-library/home-quotes-2.liquid +239 -0
- package/assets/data/component-library/home-quotes-3.liquid +244 -0
- package/assets/data/component-library/home-quotes-4.liquid +258 -0
- package/assets/data/component-library/home-slider-width-promo-images.liquid +1377 -0
- package/assets/data/component-library/home-slideshow-type-1.liquid +656 -0
- package/assets/data/component-library/home-slideshow-type-2.liquid +570 -0
- package/assets/data/component-library/home-specification-block-1.liquid +468 -0
- package/assets/data/component-library/home-specification-block-2.liquid +291 -0
- package/assets/data/component-library/home-specification-block-3.liquid +429 -0
- package/assets/data/component-library/home-support-block.liquid +392 -0
- package/assets/data/component-library/home-testimonial.liquid +1348 -0
- package/assets/data/component-library/home-video-banner.liquid +317 -0
- package/assets/data/component-library/home-wide-banner.liquid +327 -0
- package/assets/data/component-library/icon-with-content.liquid +478 -0
- package/assets/data/component-library/instafeed.liquid +1 -0
- package/assets/data/component-library/kea-ecommerce-interior-furniture-shopify-theme-about.liquid +1300 -0
- package/assets/data/component-library/kidslife-responsive-shopify-theme-home-number-counter.liquid +729 -0
- package/assets/data/component-library/logo-bar.liquid +314 -0
- package/assets/data/component-library/lookbook.liquid +367 -0
- package/assets/data/component-library/manual_blog.liquid +724 -0
- package/assets/data/component-library/navigation-etc.liquid +642 -0
- package/assets/data/component-library/newsletter.liquid +246 -0
- package/assets/data/component-library/order-form.liquid +96 -0
- package/assets/data/component-library/page-catev1-template.liquid +344 -0
- package/assets/data/component-library/popup_video.liquid +396 -0
- package/assets/data/component-library/product-sidebar-bestsellers.liquid +99 -0
- package/assets/data/component-library/product-sidebar-deals.liquid +158 -0
- package/assets/data/component-library/product-template-2.liquid +629 -0
- package/assets/data/component-library/product-template-3.liquid +670 -0
- package/assets/data/component-library/product-template-4.liquid +627 -0
- package/assets/data/component-library/product-template-5.liquid +652 -0
- package/assets/data/component-library/product-template.liquid +698 -0
- package/assets/data/component-library/rich-text.liquid +541 -0
- package/assets/data/component-library/section-countdown-v2.liquid +215 -0
- package/assets/data/component-library/services.liquid +596 -0
- package/assets/data/component-library/shipping_info.liquid +327 -0
- package/assets/data/component-library/sidebar-bestsellers.liquid +109 -0
- package/assets/data/component-library/sidebar-category.liquid +105 -0
- package/assets/data/component-library/sidebar-colors.liquid +104 -0
- package/assets/data/component-library/single_product_feature.liquid +1892 -0
- package/assets/data/component-library/social-links-menu.liquid +244 -0
- package/assets/data/component-library/someone-purchased.liquid +190 -0
- package/assets/data/component-library/special-offer-area.liquid +530 -0
- package/assets/data/component-library/theno-minimal-clean-watch-store-shopify-theme-page-catev1-te.liquid +344 -0
- package/assets/data/component-library/top-bar-type-1.liquid +200 -0
- package/assets/data/component-library/top-bar-type-10.liquid +395 -0
- package/assets/data/component-library/top-bar-type-11.liquid +395 -0
- package/assets/data/component-library/top-bar-type-2.liquid +106 -0
- package/assets/data/component-library/top-bar-type-3.liquid +205 -0
- package/assets/data/component-library/top-countdown-bar.liquid +116 -0
- package/assets/data/component-library/trixe-solar-responsive-shopify-template-home-image-gallery.liquid +783 -0
- package/assets/data/component-library/trixe-solar-responsive-shopify-template-home-pricing-table.liquid +1043 -0
- package/assets/data/component-library/trixe-solar-responsive-shopify-template-home-testimonial.liquid +1338 -0
- package/assets/data/component-library/video.liquid +511 -0
- package/assets/data/component-library/waffy-spices-dry-fruits-store-shopify-theme-v-1-1-contact-us.liquid +523 -0
- package/assets/data/design-tokens.csv +93 -57
- package/assets/data/schema-library.csv +48 -46
- package/assets/data/settings-profiles.csv +235 -0
- package/assets/data/shopify-best-practices.csv +58 -36
- package/assets/scripts/backfill-component-index.py +102 -0
- package/assets/scripts/core.py +30 -8
- package/assets/scripts/fix-schema-library.py +42 -0
- package/assets/scripts/kb-analyzer-helpers.py +136 -0
- package/assets/scripts/kb-analyzer.py +186 -0
- package/assets/scripts/kb-builder.py +32 -63
- package/assets/scripts/kb-constants.py +62 -0
- package/assets/scripts/kb-extractor-helpers.py +178 -0
- package/assets/scripts/kb-extractor.py +106 -170
- package/assets/scripts/kb-synthesizer.py +251 -0
- package/assets/scripts/quality-gate-checks.py +55 -0
- package/assets/scripts/quality-gate.py +56 -2
- package/assets/scripts/section-generator-helpers.py +74 -0
- package/assets/scripts/section-generator.py +59 -49
- package/assets/templates/generation-prompt.md +78 -14
- package/package.json +1 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
Section Type,Setting ID,Setting Type,Label,Default,Required,Notes,Frequency Rank
|
|
2
|
+
about,margin_top,range,Margin Top,,True,Appears in 147/657 about sections,1
|
|
3
|
+
about,margin_bottom,range,Margin Bottom,,True,Appears in 147/657 about sections,2
|
|
4
|
+
about,bg_breadcrumb,text,Bg Breadcrumb,,True,Appears in 112/657 about sections,3
|
|
5
|
+
about,title,text,Title,,False,Appears in 100/657 about sections,4
|
|
6
|
+
about,enable_s_servicebox,checkbox,Enable S Servicebox,,False,Appears in 99/657 about sections,5
|
|
7
|
+
about,bg_image,image_picker,Bg Image,,False,Appears in 95/657 about sections,6
|
|
8
|
+
about,enable_intro,checkbox,Enable Intro,,False,Appears in 94/657 about sections,7
|
|
9
|
+
about,ins_userid,text,Ins Userid,,False,Appears in 81/657 about sections,8
|
|
10
|
+
about,ins_access_token,text,Ins Access Token,,False,Appears in 81/657 about sections,9
|
|
11
|
+
about,ins_limit_number,range,Ins Limit Number,,False,Appears in 81/657 about sections,10
|
|
12
|
+
announcement,display_top_bar,checkbox,Display Top Bar,,True,Appears in 122/333 announcement sections,1
|
|
13
|
+
announcement,top_bar_bg,checkbox,Top Bar Bg,,True,Appears in 122/333 announcement sections,2
|
|
14
|
+
announcement,top_bar_links,url,Top Bar Links,,True,Appears in 122/333 announcement sections,3
|
|
15
|
+
announcement,top_bar_link_hover,url,Top Bar Link Hover,,False,Appears in 122/333 announcement sections,4
|
|
16
|
+
announcement,top_bar_text,richtext,Top Bar Text,,False,Appears in 120/333 announcement sections,5
|
|
17
|
+
announcement,header_phone_value,checkbox,Header Phone Value,,False,Appears in 118/333 announcement sections,6
|
|
18
|
+
announcement,header_mail_value,checkbox,Header Mail Value,,False,Appears in 118/333 announcement sections,7
|
|
19
|
+
announcement,top_border_between_bars,checkbox,Top Border Between Bars,,False,Appears in 102/333 announcement sections,8
|
|
20
|
+
announcement,enable_sidebar_multiple_choice,checkbox,Enable Sidebar Multiple Choice,,False,Appears in 92/333 announcement sections,9
|
|
21
|
+
announcement,currency_icon,checkbox,Currency Icon,,False,Appears in 58/333 announcement sections,10
|
|
22
|
+
blog,select_blog,blog,Select Blog,,True,Appears in 397/895 blog sections,1
|
|
23
|
+
blog,blogs_limit,blog,Blogs Limit,,True,Appears in 397/895 blog sections,2
|
|
24
|
+
blog,margin_top,range,Margin Top,,True,Appears in 248/895 blog sections,3
|
|
25
|
+
blog,margin_bottom,range,Margin Bottom,,False,Appears in 248/895 blog sections,4
|
|
26
|
+
blog,show_author,checkbox,Show Author,,False,Appears in 197/895 blog sections,5
|
|
27
|
+
blog,blog_layout,blog,Blog Layout,,False,Appears in 189/895 blog sections,6
|
|
28
|
+
blog,enable_widget_cate,checkbox,Enable Widget Cate,,False,Appears in 182/895 blog sections,7
|
|
29
|
+
blog,enable_title,checkbox,Enable Title,,False,Appears in 178/895 blog sections,8
|
|
30
|
+
blog,widget_cate_menu,checkbox,Widget Cate Menu,,False,Appears in 177/895 blog sections,9
|
|
31
|
+
blog,widget_cate_title,text,Widget Cate Title,,False,Appears in 174/895 blog sections,10
|
|
32
|
+
collection,section_title,text,Section Title,,True,Appears in 8/30 collection sections,1
|
|
33
|
+
collection,bg_img,text,Bg Img,,True,Appears in 6/30 collection sections,2
|
|
34
|
+
collection,section_sub_title,text,Section Sub Title,,True,Appears in 6/30 collection sections,3
|
|
35
|
+
collection,heading_style_handle,select,Heading Style Handle,,False,Appears in 6/30 collection sections,4
|
|
36
|
+
collection,heading_left_position,select,Heading Left Position,,False,Appears in 6/30 collection sections,5
|
|
37
|
+
collection,product_column,product,Product Column,,False,Appears in 6/30 collection sections,6
|
|
38
|
+
collection,product_column_md,product,Product Column Md,,False,Appears in 6/30 collection sections,7
|
|
39
|
+
collection,title_color,color,Title Color,,False,Appears in 5/30 collection sections,8
|
|
40
|
+
collection,margin_top,range,Margin Top,,False,Appears in 5/30 collection sections,9
|
|
41
|
+
collection,margin_bottom,range,Margin Bottom,,False,Appears in 5/30 collection sections,10
|
|
42
|
+
countdown,margin_top,range,Margin Top,,True,Appears in 141/151 countdown sections,1
|
|
43
|
+
countdown,margin_bottom,range,Margin Bottom,,True,Appears in 141/151 countdown sections,2
|
|
44
|
+
countdown,timecountdow,range,Timecountdow,,True,Appears in 93/151 countdown sections,3
|
|
45
|
+
countdown,button_1,text,Button 1,,False,Appears in 92/151 countdown sections,4
|
|
46
|
+
countdown,url_button1,url,Url Button1,,False,Appears in 85/151 countdown sections,5
|
|
47
|
+
countdown,title_product,product,Title Product,,False,Appears in 85/151 countdown sections,6
|
|
48
|
+
countdown,url_product,url,Url Product,,False,Appears in 64/151 countdown sections,7
|
|
49
|
+
countdown,img_bg_countdown,range,Img Bg Countdown,,False,Appears in 62/151 countdown sections,8
|
|
50
|
+
countdown,price_sale,text,Price Sale,,False,Appears in 59/151 countdown sections,9
|
|
51
|
+
countdown,price_no_sale,text,Price No Sale,,False,Appears in 57/151 countdown sections,10
|
|
52
|
+
cta,layout,select,Layout,,True,Appears in 4/90 cta sections,1
|
|
53
|
+
cta,heading,text,Heading,,True,Appears in 4/90 cta sections,2
|
|
54
|
+
cta,title,text,Title,,True,Appears in 3/90 cta sections,3
|
|
55
|
+
cta,bg_color,color,Bg Color,,False,Appears in 3/90 cta sections,4
|
|
56
|
+
cta,text_color,color,Text Color,,False,Appears in 3/90 cta sections,5
|
|
57
|
+
cta,effect,text,Effect,,False,Appears in 3/90 cta sections,6
|
|
58
|
+
cta,au_time,text,Au Time,,False,Appears in 3/90 cta sections,7
|
|
59
|
+
cta,cl_bg,text,Cl Bg,,False,Appears in 3/90 cta sections,8
|
|
60
|
+
cta,image,image_picker,Image,,False,Appears in 3/90 cta sections,9
|
|
61
|
+
cta,hide_bgimg,checkbox,Hide Bgimg,,False,Appears in 3/90 cta sections,10
|
|
62
|
+
faq,section_description,richtext,Section Description,,True,Appears in 66/248 faq sections,1
|
|
63
|
+
faq,section_title,text,Section Title,,True,Appears in 45/248 faq sections,2
|
|
64
|
+
faq,enable_slide,checkbox,Enable Slide,,True,Appears in 38/248 faq sections,3
|
|
65
|
+
faq,bg_breadcrumb,text,Bg Breadcrumb,,False,Appears in 38/248 faq sections,4
|
|
66
|
+
faq,enable_asked,checkbox,Enable Asked,,False,Appears in 38/248 faq sections,5
|
|
67
|
+
faq,title_asked,text,Title Asked,,False,Appears in 38/248 faq sections,6
|
|
68
|
+
faq,description_asked,richtext,Description Asked,,False,Appears in 38/248 faq sections,7
|
|
69
|
+
faq,enable_newsletter,checkbox,Enable Newsletter,,False,Appears in 38/248 faq sections,8
|
|
70
|
+
faq,newsletter_placeholder_input,text,Newsletter Placeholder Input,,False,Appears in 38/248 faq sections,9
|
|
71
|
+
faq,iconmail,text,Iconmail,,False,Appears in 38/248 faq sections,10
|
|
72
|
+
features,title,text,Title,,True,Appears in 166/343 features sections,1
|
|
73
|
+
features,collection,collection,Collection,,True,Appears in 64/343 features sections,2
|
|
74
|
+
features,background_color,color,Background Color,,True,Appears in 43/343 features sections,3
|
|
75
|
+
features,section_title,text,Section Title,,False,Appears in 39/343 features sections,4
|
|
76
|
+
features,grid,text,Grid,,False,Appears in 38/343 features sections,5
|
|
77
|
+
features,margin,range,Margin,,False,Appears in 34/343 features sections,6
|
|
78
|
+
features,full,text,Full,,False,Appears in 31/343 features sections,7
|
|
79
|
+
features,blog,blog,Blog,,False,Appears in 30/343 features sections,8
|
|
80
|
+
features,heading_position,select,Heading Position,,False,Appears in 29/343 features sections,9
|
|
81
|
+
features,padding,range,Padding,,False,Appears in 29/343 features sections,10
|
|
82
|
+
footer,copyright,checkbox,Copyright,,True,Appears in 275/504 footer sections,1
|
|
83
|
+
footer,footer_show_methods_of_payment,checkbox,Footer Show Methods Of Payment,,True,Appears in 236/504 footer sections,2
|
|
84
|
+
footer,footer_social_enable,checkbox,Footer Social Enable,,True,Appears in 220/504 footer sections,3
|
|
85
|
+
footer,payment_icon_1,checkbox,Payment Icon 1,,False,Appears in 214/504 footer sections,4
|
|
86
|
+
footer,payment_icon_2,checkbox,Payment Icon 2,,False,Appears in 214/504 footer sections,5
|
|
87
|
+
footer,payment_icon_3,checkbox,Payment Icon 3,,False,Appears in 214/504 footer sections,6
|
|
88
|
+
footer,payment_icon_4,checkbox,Payment Icon 4,,False,Appears in 214/504 footer sections,7
|
|
89
|
+
footer,payment_icon_5,checkbox,Payment Icon 5,,False,Appears in 214/504 footer sections,8
|
|
90
|
+
footer,payment_icon_6,checkbox,Payment Icon 6,,False,Appears in 214/504 footer sections,9
|
|
91
|
+
footer,payment_icon_7,checkbox,Payment Icon 7,,False,Appears in 211/504 footer sections,10
|
|
92
|
+
gallery,full,text,Full,,True,Appears in 63/215 gallery sections,1
|
|
93
|
+
gallery,background_color,color,Background Color,,True,Appears in 63/215 gallery sections,2
|
|
94
|
+
gallery,margin,range,Margin,,True,Appears in 62/215 gallery sections,3
|
|
95
|
+
gallery,heading_position,select,Heading Position,,False,Appears in 61/215 gallery sections,4
|
|
96
|
+
gallery,padding,range,Padding,,False,Appears in 59/215 gallery sections,5
|
|
97
|
+
gallery,image,image_picker,Image,,False,Appears in 59/215 gallery sections,6
|
|
98
|
+
gallery,spacing_both_ends,range,Spacing Both Ends,,False,Appears in 58/215 gallery sections,7
|
|
99
|
+
gallery,section_heading,text,Section Heading,,False,Appears in 58/215 gallery sections,8
|
|
100
|
+
gallery,section_sub_heading,text,Section Sub Heading,,False,Appears in 58/215 gallery sections,9
|
|
101
|
+
gallery,section_description,richtext,Section Description,,False,Appears in 58/215 gallery sections,10
|
|
102
|
+
header,display_search,header,Display Search,,True,Appears in 241/637 header sections,1
|
|
103
|
+
header,logo_text,image_picker,Logo Text,,True,Appears in 231/637 header sections,2
|
|
104
|
+
header,menubar_links,url,Menubar Links,,True,Appears in 231/637 header sections,3
|
|
105
|
+
header,menubar_links_hover,url,Menubar Links Hover,,False,Appears in 231/637 header sections,4
|
|
106
|
+
header,menu_active,header,Menu Active,,False,Appears in 231/637 header sections,5
|
|
107
|
+
header,menubar_dropdown_bg,header,Menubar Dropdown Bg,,False,Appears in 231/637 header sections,6
|
|
108
|
+
header,menubar_dropdown_caption,header,Menubar Dropdown Caption,,False,Appears in 231/637 header sections,7
|
|
109
|
+
header,menubar_dropdown_caption_hover,header,Menubar Dropdown Caption Hover,,False,Appears in 231/637 header sections,8
|
|
110
|
+
header,menubar_dropdown_links,url,Menubar Dropdown Links,,False,Appears in 231/637 header sections,9
|
|
111
|
+
header,menubar_dropdown_links_hover,url,Menubar Dropdown Links Hover,,False,Appears in 231/637 header sections,10
|
|
112
|
+
hero,margin_top,range,Margin Top,,True,Appears in 1371/2150 hero sections,1
|
|
113
|
+
hero,margin_bottom,range,Margin Bottom,,True,Appears in 1371/2150 hero sections,2
|
|
114
|
+
hero,img_banner1,text,Img Banner1,,True,Appears in 434/2150 hero sections,3
|
|
115
|
+
hero,button_1,text,Button 1,,False,Appears in 388/2150 hero sections,4
|
|
116
|
+
hero,url_banner1,url,Url Banner1,,False,Appears in 336/2150 hero sections,5
|
|
117
|
+
hero,img_banner2,text,Img Banner2,,False,Appears in 318/2150 hero sections,6
|
|
118
|
+
hero,title_1,text,Title 1,,False,Appears in 296/2150 hero sections,7
|
|
119
|
+
hero,url_banner2,url,Url Banner2,,False,Appears in 276/2150 hero sections,8
|
|
120
|
+
hero,button_2,text,Button 2,,False,Appears in 261/2150 hero sections,9
|
|
121
|
+
hero,url_button1,url,Url Button1,,False,Appears in 254/2150 hero sections,10
|
|
122
|
+
hero,heading_font,font_picker,Heading Font,,False,Typography control for hero heading,11
|
|
123
|
+
hero,heading_size,select,Heading Size,,False,Small/Medium/Large heading scale,12
|
|
124
|
+
hero,heading_tag,select,Heading Tag,,False,H1/H2/H3 for SEO hierarchy,13
|
|
125
|
+
hero,color_scheme,color_scheme,Color Scheme,,False,Theme-wide color scheme,14
|
|
126
|
+
logo,title,text,Title,,True,Appears in 19/32 logo sections,1
|
|
127
|
+
logo,logo_max_width,image_picker,Logo Max Width,,True,Appears in 7/32 logo sections,2
|
|
128
|
+
logo,logo,image_picker,Logo,,True,Appears in 6/32 logo sections,3
|
|
129
|
+
logo,title_color,color,Title Color,,False,Appears in 5/32 logo sections,4
|
|
130
|
+
logo,style,select,Style,,False,Appears in 2/32 logo sections,5
|
|
131
|
+
logo,logos_in_rows,image_picker,Logos In Rows,,False,Appears in 2/32 logo sections,6
|
|
132
|
+
logo,logo_per_slide_desktop,image_picker,Logo Per Slide Desktop,,False,Appears in 1/32 logo sections,7
|
|
133
|
+
logo,logo_per_slide_tablet,image_picker,Logo Per Slide Tablet,,False,Appears in 1/32 logo sections,8
|
|
134
|
+
logo,logo_per_slide_mobile,image_picker,Logo Per Slide Mobile,,False,Appears in 1/32 logo sections,9
|
|
135
|
+
logo,fullwidth,range,Fullwidth,,False,Appears in 1/32 logo sections,10
|
|
136
|
+
map,bg_breadcrumb,text,Bg Breadcrumb,,True,Appears in 109/311 map sections,1
|
|
137
|
+
map,enable_s_contactform,checkbox,Enable S Contactform,,True,Appears in 86/311 map sections,2
|
|
138
|
+
map,contactform_name,text,Contactform Name,,True,Appears in 86/311 map sections,3
|
|
139
|
+
map,contactform_email,text,Contactform Email,,False,Appears in 86/311 map sections,4
|
|
140
|
+
map,contactform_content,richtext,Contactform Content,,False,Appears in 86/311 map sections,5
|
|
141
|
+
map,contactform_btn,text,Contactform Btn,,False,Appears in 86/311 map sections,6
|
|
142
|
+
map,contactform_subject,text,Contactform Subject,,False,Appears in 76/311 map sections,7
|
|
143
|
+
map,describe,text,Describe,,False,Appears in 58/311 map sections,8
|
|
144
|
+
map,enable_map,checkbox,Enable Map,,False,Appears in 56/311 map sections,9
|
|
145
|
+
map,enable_info,checkbox,Enable Info,,False,Appears in 44/311 map sections,10
|
|
146
|
+
newsletter,margin_top,range,Margin Top,,True,Appears in 160/399 newsletter sections,1
|
|
147
|
+
newsletter,margin_bottom,range,Margin Bottom,,True,Appears in 160/399 newsletter sections,2
|
|
148
|
+
newsletter,title_newletter,text,Title Newletter,,True,Appears in 130/399 newsletter sections,3
|
|
149
|
+
newsletter,content_newletter,richtext,Content Newletter,,False,Appears in 108/399 newsletter sections,4
|
|
150
|
+
newsletter,title,text,Title,,False,Appears in 104/399 newsletter sections,5
|
|
151
|
+
newsletter,color_title,color,Color Title,,False,Appears in 68/399 newsletter sections,6
|
|
152
|
+
newsletter,color_content,color,Color Content,,False,Appears in 67/399 newsletter sections,7
|
|
153
|
+
newsletter,bg_newsletters,text,Bg Newsletters,,False,Appears in 54/399 newsletter sections,8
|
|
154
|
+
newsletter,select_style,select,Select Style,,False,Appears in 49/399 newsletter sections,9
|
|
155
|
+
newsletter,select_width,range,Select Width,,False,Appears in 49/399 newsletter sections,10
|
|
156
|
+
other,margin_top,range,Margin Top,,True,Appears in 760/1838 other sections,1
|
|
157
|
+
other,margin_bottom,range,Margin Bottom,,True,Appears in 750/1838 other sections,2
|
|
158
|
+
other,ins_userid,text,Ins Userid,,True,Appears in 318/1838 other sections,3
|
|
159
|
+
other,ins_access_token,text,Ins Access Token,,False,Appears in 318/1838 other sections,4
|
|
160
|
+
other,ins_limit_number,range,Ins Limit Number,,False,Appears in 318/1838 other sections,5
|
|
161
|
+
other,title,text,Title,,False,Appears in 208/1838 other sections,6
|
|
162
|
+
other,item_icon,text,Item Icon,,False,Appears in 155/1838 other sections,7
|
|
163
|
+
other,bg_breadcrumb,text,Bg Breadcrumb,,False,Appears in 154/1838 other sections,8
|
|
164
|
+
other,padding,range,Padding,,False,Appears in 128/1838 other sections,9
|
|
165
|
+
other,margin,range,Margin,,False,Appears in 117/1838 other sections,10
|
|
166
|
+
pricing,full,text,Full,,True,Appears in 9/16 pricing sections,1
|
|
167
|
+
pricing,spacing_both_ends,range,Spacing Both Ends,,True,Appears in 9/16 pricing sections,2
|
|
168
|
+
pricing,padding,range,Padding,,True,Appears in 9/16 pricing sections,3
|
|
169
|
+
pricing,margin,range,Margin,,False,Appears in 9/16 pricing sections,4
|
|
170
|
+
pricing,show_background_image,image_picker,Show Background Image,,False,Appears in 9/16 pricing sections,5
|
|
171
|
+
pricing,background_image,image_picker,Background Image,,False,Appears in 9/16 pricing sections,6
|
|
172
|
+
pricing,background_style,select,Background Style,,False,Appears in 9/16 pricing sections,7
|
|
173
|
+
pricing,enable_overlay,checkbox,Enable Overlay,,False,Appears in 9/16 pricing sections,8
|
|
174
|
+
pricing,background_color,color,Background Color,,False,Appears in 9/16 pricing sections,9
|
|
175
|
+
pricing,overlay_transparency,text,Overlay Transparency,,False,Appears in 9/16 pricing sections,10
|
|
176
|
+
product-grid,margin_top,range,Margin Top,,True,Appears in 1062/2508 product-grid sections,1
|
|
177
|
+
product-grid,margin_bottom,range,Margin Bottom,,True,Appears in 1062/2508 product-grid sections,2
|
|
178
|
+
product-grid,products_limit,product,Products Limit,,True,Appears in 471/2508 product-grid sections,3
|
|
179
|
+
product-grid,select_collection,collection,Select Collection,,False,Appears in 469/2508 product-grid sections,4
|
|
180
|
+
product-grid,title,text,Title,,False,Appears in 389/2508 product-grid sections,5
|
|
181
|
+
product-grid,bg_breadcrumb,text,Bg Breadcrumb,,False,Appears in 356/2508 product-grid sections,6
|
|
182
|
+
product-grid,color_title,color,Color Title,,False,Appears in 231/2508 product-grid sections,7
|
|
183
|
+
product-grid,prod_per_row,range,Prod Per Row,,False,Appears in 203/2508 product-grid sections,8
|
|
184
|
+
product-grid,title_section_product,product,Title Section Product,,False,Appears in 196/2508 product-grid sections,9
|
|
185
|
+
product-grid,enable_info_collection,collection,Enable Info Collection,,False,Appears in 165/2508 product-grid sections,10
|
|
186
|
+
rich-text,background_color,color,Background Color,,True,Appears in 48/203 rich-text sections,1
|
|
187
|
+
rich-text,title,text,Title,,True,Appears in 39/203 rich-text sections,2
|
|
188
|
+
rich-text,padding,range,Padding,,True,Appears in 38/203 rich-text sections,3
|
|
189
|
+
rich-text,bg_color,color,Bg Color,,False,Appears in 28/203 rich-text sections,4
|
|
190
|
+
rich-text,margin,range,Margin,,False,Appears in 27/203 rich-text sections,5
|
|
191
|
+
rich-text,full,text,Full,,False,Appears in 25/203 rich-text sections,6
|
|
192
|
+
rich-text,section_title,text,Section Title,,False,Appears in 25/203 rich-text sections,7
|
|
193
|
+
rich-text,background_image,image_picker,Background Image,,False,Appears in 24/203 rich-text sections,8
|
|
194
|
+
rich-text,newsletter_enable,checkbox,Newsletter Enable,,False,Appears in 24/203 rich-text sections,9
|
|
195
|
+
rich-text,newsletter_form_heading,text,Newsletter Form Heading,,False,Appears in 23/203 rich-text sections,10
|
|
196
|
+
sidebar,status,select,Status,,True,Appears in 8/11 sidebar sections,1
|
|
197
|
+
sidebar,position,select,Position,,True,Appears in 8/11 sidebar sections,2
|
|
198
|
+
sidebar,width,range,Width,,True,Appears in 4/11 sidebar sections,3
|
|
199
|
+
sidebar,height,range,Height,,False,Appears in 4/11 sidebar sections,4
|
|
200
|
+
sidebar,button_style,select,Button Style,,False,Appears in 4/11 sidebar sections,5
|
|
201
|
+
sidebar,widget_text,richtext,Widget Text,,False,Appears in 4/11 sidebar sections,6
|
|
202
|
+
sidebar,page_url,url,Page Url,,False,Appears in 4/11 sidebar sections,7
|
|
203
|
+
sidebar,tabs,select,Tabs,,False,Appears in 4/11 sidebar sections,8
|
|
204
|
+
sidebar,small_header,select,Small Header,,False,Appears in 4/11 sidebar sections,9
|
|
205
|
+
sidebar,hide_cover,checkbox,Hide Cover,,False,Appears in 4/11 sidebar sections,10
|
|
206
|
+
stats,full,checkbox,Full,,True,Appears in 18/21 stats sections,1
|
|
207
|
+
stats,spacing_both_ends,range,Spacing Both Ends,,True,Appears in 18/21 stats sections,2
|
|
208
|
+
stats,padding,range,Padding,,True,Appears in 18/21 stats sections,3
|
|
209
|
+
stats,margin,range,Margin,,False,Appears in 18/21 stats sections,4
|
|
210
|
+
stats,show_background_image,image_picker,Show Background Image,,False,Appears in 18/21 stats sections,5
|
|
211
|
+
stats,background_image,image_picker,Background Image,,False,Appears in 18/21 stats sections,6
|
|
212
|
+
stats,background_style,select,Background Style,,False,Appears in 18/21 stats sections,7
|
|
213
|
+
stats,enable_overlay,checkbox,Enable Overlay,,False,Appears in 18/21 stats sections,8
|
|
214
|
+
stats,background_color,color,Background Color,,False,Appears in 18/21 stats sections,9
|
|
215
|
+
stats,overlay_transparency,checkbox,Overlay Transparency,,False,Appears in 18/21 stats sections,10
|
|
216
|
+
testimonial,margin_top,range,Margin Top,,True,Appears in 100/254 testimonial sections,1
|
|
217
|
+
testimonial,margin_bottom,range,Margin Bottom,,True,Appears in 100/254 testimonial sections,2
|
|
218
|
+
testimonial,title,text,Title,,True,Appears in 59/254 testimonial sections,3
|
|
219
|
+
testimonial,section_title,text,Section Title,,False,Appears in 56/254 testimonial sections,4
|
|
220
|
+
testimonial,background_color,color,Background Color,,False,Appears in 40/254 testimonial sections,5
|
|
221
|
+
testimonial,margin,range,Margin,,False,Appears in 36/254 testimonial sections,6
|
|
222
|
+
testimonial,testimonial_bg,text,Testimonial Bg,,False,Appears in 35/254 testimonial sections,7
|
|
223
|
+
testimonial,full,text,Full,,False,Appears in 34/254 testimonial sections,8
|
|
224
|
+
testimonial,arrows,text,Arrows,,False,Appears in 33/254 testimonial sections,9
|
|
225
|
+
testimonial,dots,text,Dots,,False,Appears in 32/254 testimonial sections,10
|
|
226
|
+
video,title,text,Title,,True,Appears in 30/68 video sections,1
|
|
227
|
+
video,margin_top,range,Margin Top,,True,Appears in 25/68 video sections,2
|
|
228
|
+
video,margin_bottom,range,Margin Bottom,,True,Appears in 25/68 video sections,3
|
|
229
|
+
video,video_bg,video_url,Video Bg,,False,Appears in 22/68 video sections,4
|
|
230
|
+
video,section_video_url,url,Section Video Url,,False,Appears in 22/68 video sections,5
|
|
231
|
+
video,video_url,url,Video Url,,False,Appears in 21/68 video sections,6
|
|
232
|
+
video,image,image_picker,Image,,False,Appears in 12/68 video sections,7
|
|
233
|
+
video,sub_title,text,Sub Title,,False,Appears in 11/68 video sections,8
|
|
234
|
+
video,button_1,text,Button 1,,False,Appears in 10/68 video sections,9
|
|
235
|
+
video,url_banner,url,Url Banner,,False,Appears in 10/68 video sections,10
|
|
@@ -1,36 +1,58 @@
|
|
|
1
|
-
No,Rule,Category,Severity,Keywords,Description,Do,Dont,Code Example
|
|
2
|
-
1,Use JSON templates,os2-architecture,critical,
|
|
3
|
-
2,Presets required,os2-architecture,critical,
|
|
4
|
-
3,Use render not include,performance,critical,
|
|
5
|
-
4,block.shopify_attributes required,schema,critical,
|
|
6
|
-
5,App blocks support,os2-architecture,high,
|
|
7
|
-
6,Scope CSS to section ID,css,critical,
|
|
8
|
-
7,Lazy load images,images,high,
|
|
9
|
-
8,Always include alt text,accessibility,critical,
|
|
10
|
-
9,Use semantic HTML,accessibility,high,
|
|
11
|
-
10,ARIA labels for interactive elements,accessibility,high,
|
|
12
|
-
11,Limit section settings,schema,high,
|
|
13
|
-
12,Use image_picker with width/height,images,high,
|
|
14
|
-
13,Responsive images with image_url,images,high,
|
|
15
|
-
14,No hardcoded colors,css,high,
|
|
16
|
-
15,Mobile-first CSS,css,high,
|
|
17
|
-
16,Defer non-critical JavaScript,javascript,high,
|
|
18
|
-
17,Use section.settings not hardcoded text,schema,critical,
|
|
19
|
-
18,Unique section IDs,schema,high,
|
|
20
|
-
19,Color scheme support,os2-architecture,high,
|
|
21
|
-
20,Keyboard navigation support,accessibility,high,
|
|
22
|
-
21,Use aspect-ratio CSS,images,high,
|
|
23
|
-
22,Limit block types to 16,schema,high,
|
|
24
|
-
23,Enable section everywhere,os2-architecture,high,
|
|
25
|
-
24,Preload hero images,performance,high,
|
|
26
|
-
25,Minify inline JavaScript,javascript,high,
|
|
27
|
-
26,Use content_for_index,os2-architecture,high,
|
|
28
|
-
27,Valid JSON schema,schema,critical,
|
|
29
|
-
28,Translatable strings,seo,high,
|
|
30
|
-
29,Structured data for SEO,seo,high,
|
|
31
|
-
30,forloop.index for unique IDs,schema,high,
|
|
32
|
-
31,Avoid liquid in CSS files,css,high,
|
|
33
|
-
32,Use paginate for long lists,performance,high,
|
|
34
|
-
33,section.blocks loop order,schema,high,
|
|
35
|
-
34,Lazy-load videos,performance,high,
|
|
36
|
-
35,Remove unused assets,performance,high,
|
|
1
|
+
No,Rule,Category,Severity,Keywords,Description,Do,Dont,Code Example
|
|
2
|
+
1,Use JSON templates,os2-architecture,critical,json templates os2 sections theme editor,OS2.0 themes must use JSON templates for section-based customization,Use .json template files in /templates/,Use .liquid template files for page templates,
|
|
3
|
+
2,Presets required,os2-architecture,critical,presets theme editor add section visibility,Every section must have non-empty presets array for Theme Editor visibility,Include presets: [{name: 'Section Name'}],Omit presets array from schema,
|
|
4
|
+
3,Use render not include,performance,critical,render include snippet partial performance deprecated,render tag is isolated and faster; include is deprecated and shares scope,{% render 'snippet' %},{% include 'snippet' %},
|
|
5
|
+
4,block.shopify_attributes required,schema,critical,block attributes theme editor interaction click targeting,All block wrapper elements must include block.shopify_attributes for Theme Editor click targeting,<div {{ block.shopify_attributes }}>,<div class='block'>,
|
|
6
|
+
5,App blocks support,os2-architecture,high,app blocks third-party extension type app,Include @app block type to allow third-party app integrations,blocks: [{ type: '@app' }],Omit @app from blocks array,
|
|
7
|
+
6,Scope CSS to section ID,css,critical,css scope section id specificity conflict leakage,CSS must be scoped to section ID to prevent style leakage across sections,#shopify-section-{{ section.id }} .title {},.title { color: red; },
|
|
8
|
+
7,Lazy load images,images,high,lazy load image performance lcp loading attribute,Use loading=lazy on all images except hero/above-fold to improve performance,<img loading='lazy' src='...' alt='...'>,<img src='...' alt='...'>,
|
|
9
|
+
8,Always include alt text,accessibility,critical,alt text image accessibility screen reader a11y,All images must have descriptive alt text for screen reader accessibility,<img src='...' alt='{{ block.settings.image_alt | escape }}'>,<img src='...'>,
|
|
10
|
+
9,Use semantic HTML,accessibility,high,semantic html heading landmark section article a11y,Use proper semantic HTML elements for accessibility and SEO,"<section>, <article>, <h2>, <nav>","<div class='section'>, <div class='heading'>",
|
|
11
|
+
10,ARIA labels for interactive elements,accessibility,high,aria label button link interactive element a11y wcag,Interactive elements without visible text must have aria-label,<button aria-label='Close menu'>X</button>,<button>X</button>,
|
|
12
|
+
11,Limit section settings,schema,high,settings count performance theme editor limit,Sections should have 20 or fewer settings to keep Theme Editor manageable,Group related settings into blocks,Add every possible setting to section-level schema,
|
|
13
|
+
12,Use image_picker with width/height,images,high,image_picker width height aspect ratio responsive,Always pair image_picker with width and height settings for responsive images,Add image_width and image_height number settings,Use fixed pixel dimensions in CSS only,
|
|
14
|
+
13,Responsive images with image_url,images,high,image_url responsive srcset width filter shopify cdn,Use Shopify image_url filter with width parameter for responsive images,{{ image | image_url: width: 800 }},{{ image.src }},
|
|
15
|
+
14,No hardcoded colors,css,high,hardcoded color hex rgb css variable token design system,Use CSS variables or design tokens instead of hardcoded color values,color: var(--color-foreground),color: #333333,
|
|
16
|
+
15,Mobile-first CSS,css,high,mobile first responsive breakpoint media query min-width,"Write base styles for mobile, use min-width media queries for larger screens",@media (min-width: 750px) { ... },@media (max-width: 750px) { ... },
|
|
17
|
+
16,Defer non-critical JavaScript,javascript,high,defer javascript performance async non-critical load,Non-critical JS should use defer or async attribute to avoid render blocking,<script src='...' defer>,<script src='...'>,
|
|
18
|
+
17,Use section.settings not hardcoded text,schema,critical,section settings hardcoded text content customizable,"All user-facing text must come from schema settings, not hardcoded in Liquid",{{ section.settings.heading }},<h2>Our Products</h2>,
|
|
19
|
+
18,Unique section IDs,schema,high,section id unique namespace conflict css js,Use section.id to namespace CSS and JS to avoid conflicts between section instances,section-{{ section.id }},my-section,
|
|
20
|
+
19,Color scheme support,os2-architecture,high,color scheme picker background foreground os2 theme editor,Sections should support color_scheme setting for theme-wide color customization,Include color_scheme setting with type: color_scheme,Hardcode background and text colors,
|
|
21
|
+
20,Keyboard navigation support,accessibility,high,keyboard navigation focus tab order interactive a11y wcag,All interactive elements must be keyboard accessible with visible focus states,button:focus-visible { outline: 2px solid; },button:focus { outline: none; },
|
|
22
|
+
21,Use aspect-ratio CSS,images,high,aspect ratio css image video embed responsive layout shift,Use CSS aspect-ratio to prevent layout shift while images load,aspect-ratio: 16 / 9,Use padding-top hack for aspect ratio,
|
|
23
|
+
22,Limit block types to 16,schema,high,block types limit maximum theme editor performance,Sections should have no more than 16 block types defined in schema,Keep block types focused and minimal,Add many redundant block type variations,
|
|
24
|
+
23,Enable section everywhere,os2-architecture,high,enabled on templates json section groups everywhere,Sections should work in section groups to appear on any page template,Add section to section groups in JSON templates,Hardcode section to specific template only,
|
|
25
|
+
24,Preload hero images,performance,high,preload hero image lcp performance above-fold critical resource,Hero/above-fold images should use fetchpriority=high and preload link,<img fetchpriority='high' loading='eager' ...>,<img loading='lazy' ...> for hero images,
|
|
26
|
+
25,Minify inline JavaScript,javascript,high,minify javascript inline performance whitespace,Inline JS in sections should be minimal and deferred to external files when possible,Use external JS files loaded via defer,Write large inline <script> blocks in section files,
|
|
27
|
+
26,Use content_for_index,os2-architecture,high,content_for_index homepage sections index json template,Homepage template must use content_for_index tag instead of hardcoded sections,{% content_for_index %},{% section 'featured-products' %},
|
|
28
|
+
27,Valid JSON schema,schema,critical,json schema valid syntax parse error theme editor crash,Section schema must be valid JSON or the Theme Editor will fail to load,Validate JSON with a linter before deploying,Write schema JSON without validation,
|
|
29
|
+
28,Translatable strings,seo,high,t translation i18n locale string shopify translate,User-facing strings should use Shopify translation filters for multi-language support,{{ 'sections.hero.title' | t }},{{ 'Welcome to our store' }},
|
|
30
|
+
29,Structured data for SEO,seo,high,structured data json-ld schema org seo rich snippets,Add JSON-LD structured data to relevant sections like product and article,<script type='application/ld+json'>...</script>,Skip structured data markup,
|
|
31
|
+
30,forloop.index for unique IDs,schema,high,forloop index unique id accessibility aria html attribute,Use forloop.index to generate unique IDs when rendering blocks in loops,id='tab-{{ forloop.index }}',id='tab-1' hardcoded,
|
|
32
|
+
31,Avoid liquid in CSS files,css,high,liquid css performance dynamic styles inline style attribute,Avoid using Liquid variables in .css files; use CSS variables set via inline styles,style='--color: {{ settings.color }}',Liquid in .css asset files,
|
|
33
|
+
32,Use paginate for long lists,performance,high,paginate pagination collection loop performance limit,Use Shopify paginate tag for collection loops to avoid loading all products,{% paginate collection.products by 12 %},{% for product in collection.products %},
|
|
34
|
+
33,section.blocks loop order,schema,high,blocks loop order theme editor drag drop sortable,Always loop blocks via section.blocks to respect Theme Editor sort order,{% for block in section.blocks %},Hardcode block rendering order,
|
|
35
|
+
34,Lazy-load videos,performance,high,video lazy load autoplay performance bandwidth,Videos should be lazy-loaded and not autoplay with sound by default,<video loading='lazy' muted autoplay playsinline>,<video autoplay>,
|
|
36
|
+
35,Remove unused assets,performance,high,unused assets css javascript dead code performance bundle size,Remove unused CSS and JS assets to reduce page weight and improve load time,Audit and remove unused snippet files and assets,Leave unused Liquid snippets and JS files in theme,
|
|
37
|
+
36,Block shopify_attributes,blocks,critical,block shopify_attributes wrapper attributes,All block wrapper elements must include block.shopify_attributes for editor integration,Add {{ block.shopify_attributes }} to every block wrapper div,Omit shopify_attributes from block wrappers,
|
|
38
|
+
37,Block type limit,blocks,important,block limit max_blocks count,Set explicit max_blocks to prevent excessive block additions,Set max_blocks: 16 for typical repeatable content,Allow unlimited blocks (default 50) for UI-heavy sections,
|
|
39
|
+
38,Block name clarity,blocks,recommended,block name label descriptive,Use descriptive block type names visible in theme editor,"Use type: ""testimonial"" name: ""Testimonial""","Use cryptic block type names like ""item1"" or ""block""",
|
|
40
|
+
39,App block support,blocks,important,app block @app third party extension,Include @app block type to allow third-party app injection,"Add {""type"": ""@app""} to blocks array",Omit @app blocks — limits merchant customization,
|
|
41
|
+
40,Image srcset responsive,performance,critical,image srcset responsive sizes width,Use srcset and sizes attributes for responsive images,Use image_url with width param + srcset for responsive loading,Use fixed-size images without srcset,
|
|
42
|
+
41,Preload above-fold,performance,important,preload hero above fold LCP critical,Preload hero/above-fold images for faster LCP,"Add fetchpriority=""high"" to hero images",Lazy-load hero images,
|
|
43
|
+
42,Font display swap,performance,important,font display swap loading custom fonts,Use font-display: swap for custom fonts to prevent FOIT,Set font-display: swap in @font-face declarations,Use font-display: block which delays text rendering,
|
|
44
|
+
43,Defer non-critical JS,performance,important,defer javascript async script non-critical,Defer non-essential JavaScript to avoid blocking render,Use defer attribute or load scripts at end of body,Put heavy JS in <head> without defer,
|
|
45
|
+
44,No Liquid in CSS/JS,performance,critical,liquid css javascript style script inline,Never use Liquid tags inside CSS or JS — prevents caching,Use CSS custom properties set via inline style attribute,Use {{ settings.color }} inside <style> blocks,
|
|
46
|
+
45,Aria labels interactive,accessibility,critical,aria label button link interactive accessible a11y,All interactive elements must have accessible names,Add aria-label to icon-only buttons and links,Use icon-only buttons without text or aria-label,
|
|
47
|
+
46,Focus visible styles,accessibility,important,focus visible outline keyboard navigation a11y,Ensure visible focus indicators for keyboard navigation,Style :focus-visible with visible outline or ring,Remove focus outlines with outline: none,
|
|
48
|
+
47,Color contrast ratio,accessibility,important,color contrast WCAG ratio text background a11y,Maintain 4.5:1 contrast ratio for text on backgrounds,Test color combinations against WCAG 2.1 AA standards,Use low-contrast text like light gray on white,
|
|
49
|
+
48,Semantic heading hierarchy,accessibility,important,heading hierarchy h1 h2 h3 semantic structure,Use proper heading hierarchy — no skipping levels,Use h1 > h2 > h3 in logical document order,Use h3 inside a section when h2 has not been used,
|
|
50
|
+
49,Alt text images,accessibility,critical,alt text image description screen reader a11y,All content images must have descriptive alt text,Use image.alt or provide fallback alt text setting,"Leave alt="""" on content images (only valid for decorative)",
|
|
51
|
+
50,Structured data JSON-LD,seo,recommended,structured data schema.org json-ld rich snippets,"Add JSON-LD structured data for products, articles, FAQs","Include <script type=""application/ld+json""> with schema.org markup",Rely solely on meta tags without structured data,
|
|
52
|
+
51,Heading per section,seo,important,heading h2 section title SEO crawl hierarchy,Each section should have a configurable heading element,Use a heading_tag setting (h2/h3/h4) for section headings,Hardcode heading levels — breaks hierarchy across sections,
|
|
53
|
+
52,Image alt from settings,seo,important,image alt text setting SEO accessible,Provide alt text settings or use Shopify image.alt,"Output alt=""{{ section.settings.image.alt | escape }}""",Omit alt attributes on section images,
|
|
54
|
+
53,Typography controls required,schema,high,"font_picker heading typography control",Sections with heading text should include font_picker setting,Include font_picker setting for primary heading,Hardcode font-family in CSS only,
|
|
55
|
+
54,Heading tag configurable,seo,high,"heading tag h1 h2 h3 SEO hierarchy select",Heading level must be configurable via select setting for SEO,Add heading_tag select setting (h1/h2/h3/h4),Hardcode <h1> or <h2> without merchant control,
|
|
56
|
+
55,Color scheme over color picker,os2-architecture,high,"color_scheme color picker theme consistency",Prefer color_scheme setting over individual color pickers for theme consistency,Use type: color_scheme for section colors,Use individual color pickers for every color,
|
|
57
|
+
56,Button styling controls,schema,high,"button style color background CTA",CTA buttons should have configurable style/color settings,Add button_style select and button color settings,Hardcode button background and text colors,
|
|
58
|
+
57,No hardcoded font sizes,css,high,"font size hardcoded clamp responsive typography",Font sizes should use clamp() or CSS vars — never fixed px,Use clamp() or CSS custom properties for font-size,Use fixed px values like font-size: 48px,
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Backfill _index.csv with entries for all .liquid files in component-library/.
|
|
3
|
+
|
|
4
|
+
Scans all *.liquid files, parses schema, generates index rows for files
|
|
5
|
+
not already present in _index.csv. Preserves existing rows unchanged.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import csv
|
|
9
|
+
import importlib.util
|
|
10
|
+
import sys
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
# Dynamic import of kb-builder for classify/score functions
|
|
14
|
+
_scripts = Path(__file__).parent
|
|
15
|
+
_spec = importlib.util.spec_from_file_location('kb_builder', _scripts / 'kb-builder.py')
|
|
16
|
+
_mod = importlib.util.module_from_spec(_spec)
|
|
17
|
+
_spec.loader.exec_module(_mod)
|
|
18
|
+
parse_liquid_section = _mod.parse_liquid_section
|
|
19
|
+
classify_section = _mod.classify_section
|
|
20
|
+
score_completeness = _mod.score_completeness
|
|
21
|
+
extract_ui_style_keywords = _mod.extract_ui_style_keywords
|
|
22
|
+
|
|
23
|
+
INDEX_FIELDNAMES = [
|
|
24
|
+
'No', 'Name', 'Slug', 'Category', 'Keywords', 'Difficulty',
|
|
25
|
+
'Blocks Used', 'Settings Count', 'ui_style_keywords', 'File',
|
|
26
|
+
'Description', 'Completeness', 'Has Presets', 'Has App Block'
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def backfill(data_dir: Path):
|
|
31
|
+
"""Scan component-library/ and add missing entries to _index.csv."""
|
|
32
|
+
component_dir = data_dir / 'component-library'
|
|
33
|
+
index_path = component_dir / '_index.csv'
|
|
34
|
+
|
|
35
|
+
# Load existing index slugs
|
|
36
|
+
existing = {}
|
|
37
|
+
max_no = 0
|
|
38
|
+
if index_path.exists():
|
|
39
|
+
with open(index_path, newline='', encoding='utf-8') as f:
|
|
40
|
+
for row in csv.DictReader(f):
|
|
41
|
+
slug = row.get('Slug', '')
|
|
42
|
+
if slug:
|
|
43
|
+
existing[slug] = row
|
|
44
|
+
try:
|
|
45
|
+
max_no = max(max_no, int(row.get('No', 0)))
|
|
46
|
+
except (ValueError, TypeError):
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
# Find all .liquid files not in index
|
|
50
|
+
liquid_files = sorted(component_dir.glob('*.liquid'))
|
|
51
|
+
added = 0
|
|
52
|
+
|
|
53
|
+
for lf in liquid_files:
|
|
54
|
+
slug = lf.stem
|
|
55
|
+
if slug in existing:
|
|
56
|
+
continue
|
|
57
|
+
|
|
58
|
+
parsed = parse_liquid_section(lf)
|
|
59
|
+
if parsed:
|
|
60
|
+
section_type = parsed['section_type']
|
|
61
|
+
completeness = parsed['completeness']
|
|
62
|
+
schema_name = parsed['schema_name']
|
|
63
|
+
else:
|
|
64
|
+
# Fallback for files without valid schema
|
|
65
|
+
section_type = classify_section(slug, slug)
|
|
66
|
+
completeness = 0
|
|
67
|
+
schema_name = slug.replace('-', ' ').title()
|
|
68
|
+
|
|
69
|
+
max_no += 1
|
|
70
|
+
existing[slug] = {
|
|
71
|
+
'No': max_no,
|
|
72
|
+
'Name': schema_name,
|
|
73
|
+
'Slug': slug,
|
|
74
|
+
'Category': section_type,
|
|
75
|
+
'Keywords': f"{slug.replace('-', ' ')} {section_type}",
|
|
76
|
+
'Difficulty': 'intermediate',
|
|
77
|
+
'Blocks Used': parsed['blocks_used'] if parsed else '',
|
|
78
|
+
'Settings Count': parsed['settings_count'] if parsed else 0,
|
|
79
|
+
'ui_style_keywords': parsed['ui_style_keywords'] if parsed else slug.replace('-', ' '),
|
|
80
|
+
'File': f"{slug}.liquid",
|
|
81
|
+
'Description': f"{schema_name} section",
|
|
82
|
+
'Completeness': completeness,
|
|
83
|
+
'Has Presets': str(parsed['has_presets']) if parsed else 'False',
|
|
84
|
+
'Has App Block': str(parsed['has_app_block']) if parsed else 'False',
|
|
85
|
+
}
|
|
86
|
+
added += 1
|
|
87
|
+
|
|
88
|
+
# Rewrite index with all entries (sorted by No)
|
|
89
|
+
rows = sorted(existing.values(), key=lambda r: int(r.get('No', 0) or 0))
|
|
90
|
+
with open(index_path, 'w', newline='', encoding='utf-8') as f:
|
|
91
|
+
writer = csv.DictWriter(f, fieldnames=INDEX_FIELDNAMES)
|
|
92
|
+
writer.writeheader()
|
|
93
|
+
writer.writerows(rows)
|
|
94
|
+
|
|
95
|
+
total = len(rows)
|
|
96
|
+
print(f"Backfill complete: {added} new entries added, {total} total in index")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
if __name__ == '__main__':
|
|
100
|
+
default_data = Path(__file__).parent.parent / 'data'
|
|
101
|
+
data_dir = Path(sys.argv[1]) if len(sys.argv) > 1 else default_data
|
|
102
|
+
backfill(data_dir)
|
package/assets/scripts/core.py
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import csv
|
|
6
6
|
import re
|
|
7
|
+
import sys
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from math import log
|
|
9
10
|
from collections import defaultdict
|
|
@@ -41,6 +42,16 @@ CSV_CONFIG = {
|
|
|
41
42
|
"file": "shopify-best-practices.csv",
|
|
42
43
|
"search_cols": ["Rule", "Category", "Keywords", "Description"],
|
|
43
44
|
"output_cols": ["Rule", "Category", "Severity", "Description", "Do", "Dont", "Code Example"]
|
|
45
|
+
},
|
|
46
|
+
"block-patterns": {
|
|
47
|
+
"file": "block-patterns.csv",
|
|
48
|
+
"search_cols": ["Category", "Block Type", "Common Settings", "Use Case"],
|
|
49
|
+
"output_cols": ["Category", "Block Type", "Common Settings", "Use Case", "JSON Example", "Frequency Rank"]
|
|
50
|
+
},
|
|
51
|
+
"settings-profiles": {
|
|
52
|
+
"file": "settings-profiles.csv",
|
|
53
|
+
"search_cols": ["Section Type", "Setting ID", "Notes"],
|
|
54
|
+
"output_cols": ["Section Type", "Setting ID", "Setting Type", "Label", "Default", "Required", "Notes", "Frequency Rank"]
|
|
44
55
|
}
|
|
45
56
|
}
|
|
46
57
|
|
|
@@ -114,7 +125,7 @@ def _load_csv(filepath):
|
|
|
114
125
|
return list(csv.DictReader(f))
|
|
115
126
|
|
|
116
127
|
|
|
117
|
-
def _search_csv(filepath, search_cols, output_cols, query, max_results):
|
|
128
|
+
def _search_csv(filepath, search_cols, output_cols, query, max_results, min_score=0.0):
|
|
118
129
|
"""Core search function using BM25"""
|
|
119
130
|
if not filepath.exists():
|
|
120
131
|
return []
|
|
@@ -126,11 +137,20 @@ def _search_csv(filepath, search_cols, output_cols, query, max_results):
|
|
|
126
137
|
bm25.fit(documents)
|
|
127
138
|
ranked = bm25.score(query)
|
|
128
139
|
|
|
140
|
+
# Filter by min_score threshold
|
|
141
|
+
candidates = [(idx, score) for idx, score in ranked[:max_results * 2] if score > 0]
|
|
142
|
+
if min_score > 0:
|
|
143
|
+
filtered = [(idx, score) for idx, score in candidates if score >= min_score]
|
|
144
|
+
if len(candidates) != len(filtered):
|
|
145
|
+
print(f"[DEBUG] BM25: filtered {len(candidates) - len(filtered)} low-score results (threshold={min_score})", file=sys.stderr)
|
|
146
|
+
candidates = filtered
|
|
147
|
+
|
|
129
148
|
results = []
|
|
130
|
-
for idx, score in
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
149
|
+
for idx, score in candidates[:max_results]:
|
|
150
|
+
row = data[idx]
|
|
151
|
+
entry = {col: row.get(col, "") for col in output_cols if col in row}
|
|
152
|
+
entry['_score'] = score
|
|
153
|
+
results.append(entry)
|
|
134
154
|
|
|
135
155
|
return results
|
|
136
156
|
|
|
@@ -142,7 +162,9 @@ domain_keywords = {
|
|
|
142
162
|
"tokens": ["token", "spacing", "color", "font", "breakpoint", "shadow", "variable", "css var", "design token"],
|
|
143
163
|
"components": ["section", "hero", "testimonial", "faq", "product grid", "cta", "newsletter", "gallery", "feature", "component", "pattern"],
|
|
144
164
|
"themes": ["theme", "dawn", "impulse", "impact", "craft", "detect", "dna", "theme profile"],
|
|
145
|
-
"practices": ["best practice", "performance", "accessibility", "seo", "os2", "lazy load", "responsive", "a11y"]
|
|
165
|
+
"practices": ["best practice", "performance", "accessibility", "seo", "os2", "lazy load", "responsive", "a11y"],
|
|
166
|
+
"block-patterns": ["block", "blocks", "block type", "block config", "block pattern", "block setting"],
|
|
167
|
+
"settings-profiles": ["profile", "settings profile", "recommended settings", "section settings", "setting profile"]
|
|
146
168
|
}
|
|
147
169
|
|
|
148
170
|
|
|
@@ -154,7 +176,7 @@ def detect_domain(query):
|
|
|
154
176
|
return best if scores[best] > 0 else "components"
|
|
155
177
|
|
|
156
178
|
|
|
157
|
-
def search(query, domain=None, max_results=MAX_RESULTS):
|
|
179
|
+
def search(query, domain=None, max_results=MAX_RESULTS, min_score=0.0):
|
|
158
180
|
"""Main search function with auto-domain detection"""
|
|
159
181
|
if domain is None:
|
|
160
182
|
domain = detect_domain(query)
|
|
@@ -165,7 +187,7 @@ def search(query, domain=None, max_results=MAX_RESULTS):
|
|
|
165
187
|
if not filepath.exists():
|
|
166
188
|
return {"error": f"File not found: {filepath}", "domain": domain}
|
|
167
189
|
|
|
168
|
-
results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results)
|
|
190
|
+
results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results, min_score=min_score)
|
|
169
191
|
|
|
170
192
|
return {
|
|
171
193
|
"domain": domain,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""One-time script to remove filler stub rows from schema-library.csv.
|
|
3
|
+
|
|
4
|
+
Keeps only rows where the 'No' field is a valid integer (real data rows).
|
|
5
|
+
Rows like 'header,basic,,,,,...' have non-numeric 'No' values and are filler.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import csv
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def fix_schema_library(csv_path: Path):
|
|
14
|
+
"""Read CSV, keep only rows with numeric 'No' field, rewrite file."""
|
|
15
|
+
rows = []
|
|
16
|
+
with open(csv_path, newline='', encoding='utf-8') as f:
|
|
17
|
+
reader = csv.DictReader(f)
|
|
18
|
+
fieldnames = reader.fieldnames
|
|
19
|
+
for row in reader:
|
|
20
|
+
no_val = row.get('No', '').strip()
|
|
21
|
+
try:
|
|
22
|
+
int(no_val)
|
|
23
|
+
rows.append(row)
|
|
24
|
+
except (ValueError, TypeError):
|
|
25
|
+
continue # skip filler rows
|
|
26
|
+
|
|
27
|
+
with open(csv_path, 'w', newline='', encoding='utf-8') as f:
|
|
28
|
+
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
29
|
+
writer.writeheader()
|
|
30
|
+
writer.writerows(rows)
|
|
31
|
+
|
|
32
|
+
print(f"Kept {len(rows)} data rows (removed filler stubs)")
|
|
33
|
+
print(f"Total lines: {len(rows) + 1} (header + data)")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == '__main__':
|
|
37
|
+
default_path = Path(__file__).parent.parent / 'data' / 'schema-library.csv'
|
|
38
|
+
csv_path = Path(sys.argv[1]) if len(sys.argv) > 1 else default_path
|
|
39
|
+
if not csv_path.exists():
|
|
40
|
+
print(f"File not found: {csv_path}")
|
|
41
|
+
sys.exit(1)
|
|
42
|
+
fix_schema_library(csv_path)
|