Cursor rule
.cursor/rules/schemas.mdc[object Object]
Cursor rules
Quality
81/100
Scores the file, not the repository.Length
508 words
11 headings · 5 code blocksRepository
428
— · pushed 17 days agoLast changed
3 days ago
First indexed 3 days ago.1234567# Schema Standards89Every section and block must include a `{% schema %}` tag with valid JSON structure.1011We write our schemas in the schemas folder and then run `pnpm run build:schemas` to push them to the `.liquid` files. This allows us to take advantage of Typescript for validation and reuse parts of schemas to avoid re-writing them many times.1213## Schema Structure1415```json16{17 "$schema": "http://json-schema.org/draft-07/schema#",18 "type": "object",19 "required": ["name", "settings"],20 "properties": {21 "name": {22 "type": "string",23 "maxLength": 5024 },25 "tag": {26 "type": "string",27 "enum": ["div", "section", "aside", "header", "footer", "main"]28 },29 "class": {30 "type": "string"31 },32 "settings": {33 "type": "array",34 "items": {35 "type": "object",36 "required": ["type", "id", "label"],37 "properties": {38 "type": {39 "enum": [40 "text",41 "textarea",42 "number",43 "range",44 "color",45 "checkbox",46 "select",47 "radio",48 "collection",49 "product",50 "blog",51 "page",52 "header",53 "paragraph",54 "image_picker",55 "font_picker",56 "video",57 "richtext"58 ]59 },60 "id": {61 "type": "string",62 "pattern": "^[a-z][a-z0-9_]*$"63 },64 "label": {65 "type": "string",66 "maxLength": 3067 },68 "visible_if": {69 "type": "string",70 "pattern": "\\{\\{\\s+[a-zA-Z_][a-zA-Z0-9_]*\\s+\\}\\}"71 }72 }73 }74 },75 "blocks": {76 "type": "array",77 "maxItems": 20,78 "items": {79 "type": "object",80 "required": ["type", "name", "settings"],81 "properties": {82 "type": {83 "type": "string",84 "pattern": "^(@theme|@app|[a-z][a-z0-9_]*)$"85 },86 "name": {87 "type": "string",88 "maxLength": 3089 },90 "settings": {91 "type": "array"92 }93 }94 }95 },96 "presets": {97 "type": "array",98 "items": {99 "type": "object",100 "required": ["name"],101 "properties": {102 "name": {103 "type": "string"104 },105 "settings": {106 "type": "object"107 }108 }109 }110 }111 }112}113```114115## Setting Types and Usage116117### Input settings118119These are the bulk of the settings with which the merchant will interact.120121See [input settings documentation](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/settings/input-settings)122123### Sidebar settings124125These are informative settings to guide the merchant.126127See [sidebar settings documentation](mdc:https:/shopify.dev/docs/storefronts/themes/architecture/settings/sidebar-settings)128129## Best practices130131### Label Guidelines132133- Keep labels concise (under 30 characters)134- Setting type provides context - "Columns" not "Number of columns"135- No verb-based labels for checkboxes136- Use title case: "Show Vendor" not "show vendor"137138### Translation Keys139140- Schema names must use valid translation keys: `'t:names.keyname'`141- Keys must exist in `locales/en.default.schema.json` under the `names` section142- **If a key doesn't exist, add it to the `names` section** (e.g., `"carousel": "Carousel"`)143- Run `pnpm run build:schemas` after making changes144145### Setting Organization Rules146147**1. Resource Pickers First**148149- Collection, product, blog, page pickers come first150- These are required for section functionality151152**2. Visual Impact Order**153154- Layout settings (columns, spacing)155- Typography settings (fonts, sizes)156- Color settings (background, text)157- Padding/margin last158159**3. Group settings using Headers**160161```json162{163 "type": "header",164 "content": "Layout"165}166```167168### Schema Structure169170**Minimal schema:**171172```javascript173export default {174 name: 't:names.section',175 settings: [176 /* settings array */177 ],178};179```180181**With presets (optional):**182183```javascript184export default {185 name: 't:names.section',186 settings: [187 /* settings array */188 ],189 presets: [{ name: 't:names.section', settings: {} }],190};191```192193## Nested Blocks in Presets194195When a block has nested `blocks`, you must include a `block_order` array.196197```javascript198blocks: {199 'product-details': {200 type: '_product-details',201 static: true,202 blocks: {203 header: {204 type: 'group',205 blocks: {206 title: { type: 'product-title' },207 price: { type: 'price' },208 },209 block_order: ['title', 'price'],210 },211 },212 block_order: ['header'],213 },214}215```216
Also in Shopify/horizon
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| Shopify/horizon.cursor/rules/accordion-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/animation-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/blocks.mdc · 428 | Cursor rules | stylearchtypesdatabase+2 | 62/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/breadcrumb-accessibility.mdc · 428 | Cursor rules | ui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/carousel-accessibility.mdc · 428 | Cursor rules | ui | 32/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/cart-drawer-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/chat-window-accessibility.mdc · 428 | Cursor rules | styleui | 24/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/color-contrast-accessibility.mdc · 428 | Cursor rules | lint-formatui | 44/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/color-swatch-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/commit-messages.mdc · 428 | Cursor rules | setuplint-formattypesgit | 62/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/css-standards.mdc · 428 | Cursor rules | stylearchuiperformance+3 | 49/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/disclosure-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/dropdown-navigation-accessibility.mdc · 428 | Cursor rules | styleui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/flip-card-accessibility.mdc · 428 | Cursor rules | styleui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/form-accessibility.mdc · 428 | Cursor rules | ui | 32/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/javascript-standards.mdc · 428 | Cursor rules | stylearchtypesui+2 | 54/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/landmark-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/liquid.mdc · 428 | Cursor rules | buildstyletypesdatabase+2 | 77/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/locales.mdc · 428 | Cursor rules | arch | 49/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/localization.mdc · 428 | Cursor rules | style | 54/100 | 3 days ago |
Diff against .cursor/rules/accordion-accessibility.mdc Diff against .cursor/rules/animation-accessibility.mdc Diff against .cursor/rules/blocks.mdc Diff against .cursor/rules/breadcrumb-accessibility.mdc Diff against .cursor/rules/carousel-accessibility.mdc Diff against .cursor/rules/cart-drawer-accessibility.mdc Diff against .cursor/rules/chat-window-accessibility.mdc Diff against .cursor/rules/color-contrast-accessibility.mdc Diff against .cursor/rules/color-swatch-accessibility.mdc Diff against .cursor/rules/commit-messages.mdc Diff against .cursor/rules/css-standards.mdc Diff against .cursor/rules/disclosure-accessibility.mdc Diff against .cursor/rules/dropdown-navigation-accessibility.mdc Diff against .cursor/rules/flip-card-accessibility.mdc Diff against .cursor/rules/form-accessibility.mdc Diff against .cursor/rules/javascript-standards.mdc Diff against .cursor/rules/landmark-accessibility.mdc Diff against .cursor/rules/liquid.mdc Diff against .cursor/rules/locales.mdc Diff against .cursor/rules/localization.mdc
