├── .nvmrc ├── parts ├── header.html ├── footer.html ├── footer-w-posts.html ├── header-accent.html ├── loop-alt.html ├── header-w-button.html ├── header-accent-w-button.html └── loop.html ├── .gitignore ├── .stylelintrc.json ├── screenshot.png ├── templates ├── blank.html ├── index.html ├── 404.html ├── template-no-title.html ├── archive.html ├── search.html ├── page.html └── single.html ├── .gitattributes ├── assets ├── images │ ├── 404.jpg │ ├── project.jpg │ ├── project-2.jpg │ └── project-3.jpg ├── fonts │ ├── Inter-VariableFont_slnt,wght.ttf │ └── LICENSE.txt ├── js │ ├── build │ │ ├── accent-color.asset.php │ │ └── accent-color.js │ ├── block-styles.js │ └── accent-color.js └── css │ └── accent-color.css ├── .artifactignore ├── index.php ├── phpstan.neon.dist ├── .editorconfig ├── composer.json ├── .github └── workflows │ └── deploy.yml ├── inc ├── patterns │ ├── footer-w-posts.php │ ├── loop-alt.php │ ├── headline.php │ ├── footer-default.php │ ├── subscribe-form.php │ ├── hidden-404.php │ ├── headline-hero.php │ ├── loop-alt-headline.php │ ├── header-default.php │ ├── header-accent.php │ ├── header-w-button.php │ ├── header-accent-w-button.php │ └── columns-projects.php ├── block-patterns.php └── accent-color.php ├── package.json ├── phpcs.xml.dist ├── bin └── build-zip.sh ├── readme.txt ├── README.md ├── styles ├── aoi.json ├── pinku.json └── dark.json ├── functions.php ├── style.css ├── theme.json └── composer.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /parts/header.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | vendor 3 | build 4 | js/build 5 | *.DS_Store 6 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-recommended" 3 | } 4 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/screenshot.png -------------------------------------------------------------------------------- /templates/blank.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /assets/images/404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/assets/images/404.jpg -------------------------------------------------------------------------------- /assets/images/project.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/assets/images/project.jpg -------------------------------------------------------------------------------- /assets/images/project-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/assets/images/project-2.jpg -------------------------------------------------------------------------------- /assets/images/project-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/assets/images/project-3.jpg -------------------------------------------------------------------------------- /assets/fonts/Inter-VariableFont_slnt,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/richtabor/wabi/HEAD/assets/fonts/Inter-VariableFont_slnt,wght.ttf -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /parts/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /parts/footer-w-posts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/js/build/accent-color.asset.php: -------------------------------------------------------------------------------- 1 | array('wp-components', 'wp-compose', 'wp-data', 'wp-editPost', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'ddb8993d834d481a931d'); 2 | -------------------------------------------------------------------------------- /.artifactignore: -------------------------------------------------------------------------------- 1 | .github 2 | .gitignore 3 | .nvmrc 4 | .stylelint.json 5 | composer.json 6 | composer.lock 7 | .editorconfig 8 | package-lock.json 9 | package.json 10 | phpcs.xml.dist 11 | phpstan.neon.dist 12 | README.md 13 | bin/ 14 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | # WordPress Coding Standards 5 | # https://make.wordpress.org/core/handbook/coding-standards/ 6 | 7 | root = true 8 | 9 | [*] 10 | charset = utf-8 11 | end_of_line = lf 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | indent_style = tab 15 | 16 | [*.yml] 17 | indent_style = space 18 | indent_size = 2 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /templates/template-no-title.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /templates/archive.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "richtabor/wabi", 3 | "type": "package", 4 | "description": "WordPress default theme for 2022.", 5 | "keywords": [ 6 | "WordPress", 7 | "Themes" 8 | ], 9 | "homepage": "https://github.com/richtabor/wabi", 10 | "license": "GPL-2.0-or-later", 11 | "require": { 12 | "php": ">=5.6" 13 | }, 14 | "require-dev": { 15 | "szepeviktor/phpstan-wordpress": "^0.7.7", 16 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", 17 | "wptrt/wpthemereview": "^0.2.1", 18 | "php-parallel-lint/php-parallel-lint": "^1.3" 19 | }, 20 | "scripts": { 21 | "analyze": "@php ./vendor/bin/phpstan analyze", 22 | "lint": "@php ./vendor/bin/parallel-lint --exclude .git --exclude vendor .", 23 | "standards:check": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs", 24 | "standards:fix": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /templates/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | # Triggers the workflow only for the main branch 5 | push: 6 | branches: [ main ] 7 | 8 | # Allows you to run this workflow manually from the Actions tab 9 | workflow_dispatch: 10 | 11 | jobs: 12 | FTP-Deploy-Action: 13 | name: FTP-Deploy-Action 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@master 17 | 18 | - name: Build Project 19 | run: | 20 | npm install 21 | npm run build --if-present 22 | 23 | - name: FTP-Deploy-Action 24 | uses: SamKirkland/FTP-Deploy-Action@2.0.0 25 | env: 26 | FTP_SERVER: ${{ secrets.FTP_SERVER }} 27 | FTP_USERNAME: ${{ secrets.FTP_USERNAME }} 28 | FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} 29 | REMOTE_DIR: wp-content/themes/wabi 30 | METHOD: sftp 31 | PORT: 22 32 | ARGS: --delete --exclude-glob=.git*/** --exclude-glob=.git** --exclude-glob=node_modules/** --exclude-glob=*.dist --exclude=composer.json --exclude=package.json --exclude=package-lock.json --exclude=README.md 33 | -------------------------------------------------------------------------------- /templates/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 |
19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /inc/patterns/footer-w-posts.php: -------------------------------------------------------------------------------- 1 | __( 'Footer with posts', 'wabi' ), 7 | 'categories' => array( 'wabi', 'footer' ), 8 | 'blockTypes' => array( 'core/template-part/footer' ), 9 | 'content' => ' 10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | ', 28 | ); 29 | -------------------------------------------------------------------------------- /inc/patterns/loop-alt.php: -------------------------------------------------------------------------------- 1 | __( 'Loop, alternate', 'wabi' ), 7 | 'categories' => array( 'wabi', 'query' ), 8 | 'blockTypes' => array( 'core/query-loop' ), 9 | 'content' => ' 10 | 11 |
12 |
13 | 14 |
15 |
16 | 17 |
18 |
19 | 20 |
21 |
22 | 23 | ', 24 | ); 25 | 26 | -------------------------------------------------------------------------------- /inc/patterns/headline.php: -------------------------------------------------------------------------------- 1 | __( 'Large headline', 'wabi' ), 7 | 'categories' => array( 'wabi', 'text' ), 8 | 'blockTypes' => array( 'core/heading' ), 9 | 'content' => ' 10 | 11 |
12 | 13 | 14 | 15 | 16 |

' . esc_html__( 'Designer, developer and all-around product peep.', 'wabi' ) . '

17 | 18 | 19 | 20 | 21 |
22 | ', 23 | ); 24 | -------------------------------------------------------------------------------- /inc/patterns/footer-default.php: -------------------------------------------------------------------------------- 1 | __( 'Footer', 'wabi' ), 7 | 'categories' => array( 'wabi', 'footer' ), 8 | 'blockTypes' => array( 'core/template-part/footer' ), 9 | 'content' => ' 10 | 11 |
12 |
13 | 14 | 15 |

16 | Proudly powered by WordPress

17 |
18 | 19 | 20 | 21 | 22 |
23 | ', 24 | ); 25 | -------------------------------------------------------------------------------- /inc/patterns/subscribe-form.php: -------------------------------------------------------------------------------- 1 | __( 'Subscribe form', 'wabi' ), 7 | 'categories' => array( 'wabi' ), 8 | 'content' => ' 9 | 10 |
11 |

' . esc_html__( 'Sign up for free content', 'wabi' ) . '' . esc_html__( 'Thousands of folks (3000+) regularly get my posts in their inbox. For free.', 'wabi' ) . '

12 | 13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 | 22 |

' . esc_html__( 'By subscribing, you agree with my Terms & Privacy Policy.', 'wabi' ) . '

23 |
24 |
25 | ', 26 | ); 27 | -------------------------------------------------------------------------------- /inc/patterns/hidden-404.php: -------------------------------------------------------------------------------- 1 | __( '404 content', 'wabi' ), 7 | 'inserter' => false, 8 | 'content' => ' 9 |
' . esc_html__( 'Two–masted Schooner with Dory (1894) by Winslow Homer', 'wabi' ) . ' 15 |
16 | 17 |

404

18 | 19 | 20 | 21 |

' . esc_html__( 'Whoops, that page is gone', 'wabi' ) . '

22 | 23 |
24 |
25 | ', 26 | ); 27 | -------------------------------------------------------------------------------- /assets/css/accent-color.css: -------------------------------------------------------------------------------- 1 | .components-panel__row.edit-post-post-author { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .components-wabi-accent-color { 6 | width: 246px !important; 7 | gap: 3px; 8 | padding: 2px !important; 9 | } 10 | 11 | .components-wabi-accent-color [role="presentation"] { 12 | display: none; 13 | } 14 | 15 | .components-wabi-accent-color > div { 16 | min-width: calc(14.285% - 3px); 17 | } 18 | 19 | .components-wabi-accent-color .components-toggle-group-control-option-base { 20 | background: var(--wp--custom--color--accent); 21 | border-radius: 2px; 22 | } 23 | 24 | .components-wabi-accent-color .components-toggle-group-control-option-base svg { 25 | filter: invert(1) contrast(999) saturate(999); 26 | mix-blend-mode: hard-light; 27 | } 28 | 29 | .components-wabi-accent-color .components-toggle-group-control-option-base:after { 30 | border: 1px solid transparent; 31 | bottom: -1px; 32 | border-radius: 3px; 33 | box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2); 34 | content: ""; 35 | left: -1px; 36 | position: absolute; 37 | right: -1px; 38 | top: -1px; 39 | } 40 | 41 | .components-wabi-accent-color-row { 42 | flex-direction: column; 43 | justify-content: start; 44 | margin-bottom: 12px; 45 | } 46 | 47 | .components-wabi-accent-color-row .components-button.is-small { 48 | align-self: flex-start; 49 | margin-top: 5px; 50 | } 51 | 52 | .components-circular-option-picker__option-wrapper .components-circular-option-picker__option[aria-label="Color: Accent"] { 53 | box-shadow: none !important; 54 | background-image: conic-gradient(var(--wp--preset--color--primary), var(--wp--preset--color--secondary), var(--wp--preset--color--tertiary), var(--wp--preset--color--quarternary), var(--wp--preset--color--quinary), var(--wp--preset--color--senary)) !important; 55 | } 56 | -------------------------------------------------------------------------------- /inc/patterns/headline-hero.php: -------------------------------------------------------------------------------- 1 | __( 'Hero Headline', 'wabi' ), 7 | 'categories' => array( 'wabi' ), 8 | 'blockTypes' => array( 'core/cover' ), 9 | 'content' => ' 10 | 11 |
12 |
13 |

' . esc_html__( 'Page Heading', 'wabi' ) . '

14 | 15 | 16 | 17 |

' . esc_html__( 'Add a sub title right here', 'wabi' ) . '

18 |
19 |
20 | ', 21 | ); 22 | -------------------------------------------------------------------------------- /assets/js/block-styles.js: -------------------------------------------------------------------------------- 1 | wp.domReady( () => { 2 | wp.blocks.registerBlockStyle( 3 | 'core/query-pagination', { 4 | name: 'buttons', 5 | label: 'Buttons', 6 | } 7 | ); 8 | wp.blocks.registerBlockStyle( 9 | 'core/post-author', { 10 | name: 'avatar-only', 11 | label: 'Avatar Only', 12 | } 13 | ); 14 | wp.blocks.registerBlockStyle( 15 | 'core/column', { 16 | name: 'rounded', 17 | label: 'Rounded', 18 | } 19 | ); 20 | wp.blocks.registerBlockStyle( 21 | 'core/post-terms', { 22 | name: 'buttons', 23 | label: 'Buttons', 24 | } 25 | ); 26 | wp.blocks.registerBlockStyle( 27 | 'core/button', { 28 | name: 'transparent', 29 | label: 'Transparent', 30 | } 31 | ); 32 | wp.blocks.registerBlockStyle( 33 | 'core/image', { 34 | name: 'bottom-right', 35 | label: 'Bottom Right', 36 | } 37 | ); 38 | wp.blocks.registerBlockStyle( 39 | 'core/image', { 40 | name: 'bottom-left', 41 | label: 'Bottom Left', 42 | } 43 | ); 44 | wp.blocks.registerBlockStyle( 45 | 'core/image', { 46 | name: 'center', 47 | label: 'Center' 48 | } 49 | ); 50 | wp.blocks.registerBlockStyle( 51 | 'ideabox/image-comparison', { 52 | name: 'bottom-right', 53 | label: 'Bottom Right', 54 | } 55 | ); 56 | wp.blocks.registerBlockStyle( 57 | 'ideabox/image-comparison', { 58 | name: 'bottom-left', 59 | label: 'Bottom Left', 60 | } 61 | ); 62 | wp.blocks.registerBlockStyle( 63 | 'ideabox/image-comparison', { 64 | name: 'center', 65 | label: 'Center' 66 | } 67 | ); 68 | wp.blocks.registerBlockStyle( 69 | 'core/video', { 70 | name: 'bottom-right', 71 | label: 'Bottom Right', 72 | } 73 | ); 74 | wp.blocks.registerBlockStyle( 75 | 'core/video', { 76 | name: 'bottom-left', 77 | label: 'Bottom Left', 78 | } 79 | ); 80 | wp.blocks.registerBlockStyle( 81 | 'core/video', { 82 | name: 'center', 83 | label: 'Center' 84 | } 85 | ); 86 | } ); 87 | -------------------------------------------------------------------------------- /inc/patterns/loop-alt-headline.php: -------------------------------------------------------------------------------- 1 | __( 'Loop, alternate with headline', 'wabi' ), 7 | 'categories' => array( 'wabi', 'query' ), 8 | 'blockTypes' => array( 'core/query-loop' ), 9 | 'content' => ' 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

' . esc_html__( 'Designer, developer and all-around product peep.', 'wabi' ) . '

20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 |
30 |
31 | 32 |
33 |
34 | 35 |
36 |
37 | 38 | ', 39 | ); 40 | 41 | -------------------------------------------------------------------------------- /parts/header-accent.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 |
19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
31 | 32 | -------------------------------------------------------------------------------- /parts/loop-alt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 |
12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 |

·

20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wabi", 3 | "version": "1.1.0", 4 | "description": "", 5 | "author": "richtabor", 6 | "license": "GPL-2.0-or-later", 7 | "bugs": { 8 | "url": "https://github.com/richtabor/wabi/issues" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/richtabor/wabi.git" 13 | }, 14 | "homepage": "https://richtabor/wabi", 15 | "devDependencies": { 16 | "@wordpress/icons": "^6.2.0", 17 | "@wordpress/scripts": "^24.5.0", 18 | "@wordpress/stylelint-config": "^19.1.0", 19 | "replace-in-files-cli": "^1.0.0", 20 | "stylelint": "^13.13.1" 21 | }, 22 | "scripts": { 23 | "start": "wp-scripts start assets/js/accent-color.js --output-path=assets/js/build", 24 | "build": "wp-scripts build assets/js/accent-color.js --output-path=assets/js/build", 25 | "build:zip": "NO_CHECKS=true bash ./bin/build-zip.sh", 26 | "lint:css": "stylelint **/*.css --fix -i .gitignore", 27 | "release:version": "replace-in-files --regex='Version: \\d+\\.\\d+\\.\\d+' --replacement='Version: '${npm_package_version}'' style.css && replace-in-files --regex='Stable tag: \\d+\\.\\d+\\.\\d+' --replacement='Stable tag: '${npm_package_version}'' readme.txt", 28 | "release:patch": "npm run build && git push && npm version patch --no-git-tag-version && npm run release:version && git add -u && npm run commit:version && npm run make:tag && npm run commit:tag && npm run build:zip", 29 | "release:minor": "npm run build && git push && npm version minor --no-git-tag-version && npm run release:version && git add -u && npm run commit:version && npm run make:tag && npm run commit:tag && npm run build:zip", 30 | "make:tag": "git tag ${npm_package_version}", 31 | "commit:tag": "git push --tags", 32 | "commit:version": "git commit -m 'Version bump to '${npm_package_version}''", 33 | "packages-update": "wp-scripts packages-update" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /inc/patterns/header-default.php: -------------------------------------------------------------------------------- 1 | __( 'Header', 'wabi' ), 7 | 'categories' => array( 'header' ), 8 | 'blockTypes' => array( 'core/template-part/header' ), 9 | 'content' => ' 10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 22 |
23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
31 |
32 | ', 33 | ); 34 | -------------------------------------------------------------------------------- /phpcs.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | Apply WordPress Coding Standards to all files 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | . 27 | 28 | 29 | 30 | 31 | 32 | 33 | warning 34 | 35 | 36 | warning 37 | 38 | 39 | warning 40 | 41 | 42 | warning 43 | 44 | 45 | warning 46 | 47 | 48 | 49 | /vendor/* 50 | /node_modules/* 51 | 52 | 53 | 54 | * 55 | 56 | 57 | 58 | 59 | * 60 | 61 | 62 | -------------------------------------------------------------------------------- /parts/header-w-button.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
6 | 7 |
8 | 9 | 10 | 11 | 12 | 19 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 36 | 37 |
38 | 39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 | -------------------------------------------------------------------------------- /inc/patterns/header-accent.php: -------------------------------------------------------------------------------- 1 | __( 'Header, accent color', 'wabi' ), 7 | 'categories' => array( 'wabi', 'header' ), 8 | 'content' => ' 9 | 10 |
11 |
12 |
13 | 14 | 15 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
31 |
32 | 33 |
34 | ', 35 | ); 36 | -------------------------------------------------------------------------------- /inc/patterns/header-w-button.php: -------------------------------------------------------------------------------- 1 | __( 'Header with button', 'wabi' ), 7 | 'categories' => array( 'wabi', 'header' ), 8 | 'content' => ' 9 | 10 |
11 |
12 |
13 | 14 | 15 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 35 | 36 |
37 |
38 |
39 | ', 40 | ); 41 | -------------------------------------------------------------------------------- /parts/header-accent-w-button.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
6 | 7 |
8 | 9 | 10 | 11 | 12 | 19 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 36 | 37 |
38 | 39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 | -------------------------------------------------------------------------------- /inc/block-patterns.php: -------------------------------------------------------------------------------- 1 | array( 'label' => __( 'Wabi', 'wabi' ) ), 20 | 'footer' => array( 'label' => __( 'Footers', 'wabi' ) ), 21 | 'header' => array( 'label' => __( 'Headers', 'wabi' ) ), 22 | 'query' => array( 'label' => __( 'Query', 'wabi' ) ), 23 | ); 24 | 25 | /** 26 | * Filters the theme block pattern categories. 27 | * 28 | * @since Wabi 1.0 29 | * 30 | * @param array[] $block_pattern_categories { 31 | * An associative array of block pattern categories, keyed by category name. 32 | * 33 | * @type array[] $properties { 34 | * An array of block category properties. 35 | * 36 | * @type string $label A human-readable label for the pattern category. 37 | * } 38 | * } 39 | */ 40 | $block_pattern_categories = apply_filters( 'wabi_block_pattern_categories', $block_pattern_categories ); 41 | 42 | foreach ( $block_pattern_categories as $name => $properties ) { 43 | 44 | if ( ! WP_Block_Pattern_Categories_Registry::get_instance()->is_registered( $name ) ) { 45 | register_block_pattern_category( $name, $properties ); 46 | } 47 | } 48 | 49 | $block_patterns = array( 50 | 'header-default', 51 | 'header-w-button', 52 | 'header-accent', 53 | 'header-accent-w-button', 54 | 'footer-default', 55 | 'footer-w-posts', 56 | 'headline', 57 | 'headline-hero', 58 | 'hidden-404', 59 | 'loop-alt', 60 | 'loop-alt-headline', 61 | 'columns-projects', 62 | 'subscribe-form', 63 | ); 64 | 65 | /** 66 | * Filters the theme block patterns. 67 | * 68 | * @since Wabi 1.0 69 | * 70 | * @param array $block_patterns List of block patterns by name. 71 | */ 72 | // $block_patterns = apply_filters( 'wabi_block_patterns', $block_patterns ); 73 | 74 | foreach ( $block_patterns as $block_pattern ) { 75 | $pattern_file = get_theme_file_path( '/inc/patterns/' . $block_pattern . '.php' ); 76 | 77 | register_block_pattern( 78 | 'wabi/' . $block_pattern, 79 | require $pattern_file 80 | ); 81 | 82 | } 83 | 84 | } 85 | 86 | endif; 87 | 88 | add_action( 'init', 'wabi_register_block_patterns', 9 ); 89 | -------------------------------------------------------------------------------- /parts/loop.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 |
12 | 13 | 14 | 15 |
16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | -------------------------------------------------------------------------------- /assets/js/build/accent-color.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";var e=window.wp.element,t=window.wp.plugins,n=window.wp.editPost,a=window.wp.i18n,c=window.wp.data,o=function(t){let{icon:n,size:a=24,...c}=t;return(0,e.cloneElement)(n,{width:a,height:a,...c})},r=window.wp.primitives,l=(0,e.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(r.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"})),i=window.wp.components;const s=(0,window.wp.compose.compose)([(0,c.withSelect)((e=>({postType:e("core/editor").getCurrentPostType()}))),(0,c.withDispatch)((e=>{const{editPost:t}=e("core/editor");return{editPost:t}}))])((t=>{let{postType:r,editPost:s}=t;if("post"!==r)return null;const[u,p]=function(t){const{editPost:n}=(0,c.useDispatch)("core/editor");return[(0,c.useSelect)((e=>e("core/editor").getEditedPostAttribute("meta")?.[t]),[t]),(0,e.useCallback)((e=>{n({meta:{[t]:e}})}),[n,t])]}("wabi_accentColor"),m=(0,e.createElement)(o,{icon:l,size:28});return(0,e.createElement)(n.PluginPostStatusInfo,null,(0,e.createElement)(i.PanelRow,{className:"components-wabi-accent-color-row"},(0,e.createElement)(i.__experimentalToggleGroupControl,{value:u,className:"components-wabi-accent-color",onChange:e=>{p(e),document.body.classList.remove("is-primary-accent","is-secondary-accent","is-tertiary-accent","is-quarternary-accent","is-quinary-accent","is-senary-accent","is-background-accent"),document.body.classList.toggle(e)},label:(0,a.__)("Accent color"),isBlock:!0},(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-primary-accent",value:"is-primary-accent",label:"is-primary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-secondary-accent",value:"is-secondary-accent",label:"is-secondary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-tertiary-accent",value:"is-tertiary-accent",label:"is-tertiary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-quarternary-accent",value:"is-quarternary-accent",label:"is-quarternary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-quinary-accent",value:"is-quinary-accent",label:"is-quinary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-senary-accent",value:"is-senary-accent",label:"is-senary-accent"==u?m:null}),(0,e.createElement)(i.__experimentalToggleGroupControlOption,{className:"is-background-accent",value:"is-background-accent",label:"is-background-accent"==u?m:null}))))}));(0,t.registerPlugin)("wabi-colors",{render:s})}(); -------------------------------------------------------------------------------- /inc/patterns/header-accent-w-button.php: -------------------------------------------------------------------------------- 1 | __( 'Header, accent color with button', 'wabi' ), 7 | 'categories' => array( 'wabi', 'header' ), 8 | 'content' => ' 9 | 10 |
11 |
12 |
13 | 14 | 15 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 35 | 36 |
37 |
38 |
39 | ', 40 | ); 41 | -------------------------------------------------------------------------------- /templates/single.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 | 23 | 24 | 25 |
26 | 27 |
28 | 29 |
30 | 31 | 32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | 43 | 44 | 45 |
46 | 47 |
48 | 49 |
50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /bin/build-zip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Enable nicer messaging for build status. 4 | BLUE_BOLD='\033[1;34m'; 5 | GREEN_BOLD='\033[1;32m'; 6 | RED_BOLD='\033[1;31m'; 7 | YELLOW_BOLD='\033[1;33m'; 8 | COLOR_RESET='\033[0m'; 9 | error () { 10 | echo -e "\n${RED_BOLD}$1${COLOR_RESET}\n" 11 | } 12 | status () { 13 | echo -e "\n${BLUE_BOLD}$1${COLOR_RESET}\n" 14 | } 15 | success () { 16 | echo -e "\n${GREEN_BOLD}$1${COLOR_RESET}\n" 17 | } 18 | warning () { 19 | echo -e "\n${YELLOW_BOLD}$1${COLOR_RESET}\n" 20 | } 21 | 22 | # Exit if any command fails. 23 | set -e 24 | 25 | # Change to the expected directory. 26 | cd "$(dirname "$0")" 27 | cd .. 28 | 29 | # Remove old build directory. 30 | if test -d build; 31 | then 32 | rm -r build; 33 | status "Removing older build directory" 34 | fi 35 | 36 | if [ -z "$NO_CHECKS" ]; then 37 | # Make sure there are no changes in the working tree. Release builds should be 38 | # traceable to a particular commit and reliably reproducible. (This is not 39 | # totally true at the moment because we download nightly vendor scripts). 40 | changed= 41 | if ! git diff --exit-code > /dev/null; then 42 | changed="file(s) modified" 43 | elif ! git diff --cached --exit-code > /dev/null; then 44 | changed="file(s) staged" 45 | fi 46 | if [ ! -z "$changed" ]; then 47 | git status 48 | error "ERROR: Cannot build plugin zip with dirty working tree. ☝️ 49 | Commit your changes and try again." 50 | exit 1 51 | fi 52 | 53 | # Do a dry run of the repository reset. Prompting the user for a list of all 54 | # files that will be removed should prevent them from losing important files! 55 | status "Resetting the repository to pristine condition. ✨" 56 | to_clean=$(git clean -xdf --exclude="local.json" --dry-run) 57 | if [ ! -z "$to_clean" ]; then 58 | echo $to_clean 59 | warning "🚨 About to delete everything above! Is this okay? 🚨" 60 | echo -n "[y]es/[N]o: " 61 | read answer 62 | if [ "$answer" != "${answer#[Yy]}" ]; then 63 | # Remove ignored files to reset repository to pristine condition. Previous 64 | # test ensures that changed files abort the plugin build. 65 | status "Cleaning working directory… 🛀" 66 | git clean -xdf --exclude="local.json" 67 | else 68 | error "Fair enough; aborting. Tidy up your repo and try again. 🙂" 69 | exit 1 70 | fi 71 | fi 72 | fi 73 | 74 | status "Installing dependencies…" 75 | 76 | PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install 77 | 78 | status "Generating build…" 79 | 80 | npm run build 81 | 82 | mkdir -p build 83 | 84 | # Build the theme zip 85 | status "Creating theme zip… 🤐" 86 | toplevelFiles=$(ls *.{txt,php,png,css}) 87 | themeJson=$(ls theme.json) 88 | incFiles=$(ls inc/*.php) 89 | patterns=$(ls inc/patterns/*.php) 90 | templates=$(ls templates/*.html) 91 | styles=$(ls styles/*.json) 92 | parts=$(ls parts/*.html) 93 | assets=$(ls assets/**/*.{js,css,ttf,txt,jpg}) 94 | assetsJs=$(ls assets/js/build/*.{js,php}) 95 | 96 | zip -r ./build/wabi.zip \ 97 | $toplevelFiles \ 98 | $themeJson \ 99 | $incFiles \ 100 | $patterns \ 101 | $templates \ 102 | $parts \ 103 | $styles \ 104 | $assets \ 105 | $assetsJs \ 106 | 107 | unzip ./build/wabi.zip -d "./build/wabi/" 108 | 109 | status "You've built the theme ✅" 110 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | === Wabi === 2 | Contributors: richtabor 3 | Requires at least: 5.9 4 | Tested up to: 6.1 5 | Requires PHP: 5.6 6 | Stable tag: 1.1.0 7 | License: GPLv2 or later 8 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 9 | 10 | == Description == 11 | 12 | Share your authentic self with Wabi, a WordPress block theme designed to help you tell your story best. Wabi foregrounds the simplistic design language of storytelling through clean lines, beautiful typography and a dynamic accent color system. 13 | 14 | And with multiple style variants (light, dark, and dynamic color schemes), Wabi is one of the most expressive and adaptable writing theme yet. 15 | 16 | == Changelog == 17 | 18 | = 1.1 = 19 | * Add support for WordPress 6.1 spacing presets 20 | * Add spacing presets throughout templates and patterns 21 | * Add support for default and constrained layouts 22 | * Load font via theme.json 23 | * Combine style.css and theme.css stylesheets 24 | * Rename colors to more friendly "Accent" labels 25 | * Remove style guide and typography patterns 26 | 27 | = 1.0.4 = 28 | * Add titles to style variations 29 | * Add pattern markup directly to header template parts 30 | * Fix accent color selector, WP 6.0 31 | * Fix menu color on single post mobile 32 | 33 | = 1.0.3 = 34 | * Fix wide/full alignment on single 35 | * Tweak to allow terms to wrap properly 36 | 37 | = 1.0.2 = 38 | * Fix preloaded font asset name 39 | * Fix heading block spacing within the edior 40 | * Tweak medium spacing value 41 | 42 | = 1.0.1 = 43 | * Improve image compression 44 | * Improve spacing with footer parts 45 | 46 | = 1.0 = 47 | * Released: February 18, 2022 48 | 49 | == Copyright == 50 | 51 | Wabi WordPress Theme, (C) 2021 Rich Tabor 52 | 53 | Wabi is a derivative work of the code from the 54 | Twenty Twenty-Two WordPress Theme, which is licensed GPLv2. 55 | 56 | Wabi therefore is also distributed under the terms of the GNU GPL. 57 | 58 | This program is free software: you can redistribute it and/or modify 59 | it under the terms of the GNU General Public License as published by 60 | the Free Software Foundation, either version 2 of the License, or 61 | (at your option) any later version. 62 | 63 | This program is distributed in the hope that it will be useful, 64 | but WITHOUT ANY WARRANTY; without even the implied warranty of 65 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 66 | GNU General Public License for more details. 67 | 68 | This theme bundles the following third-party resources: 69 | 70 | Inter Font 71 | Copyright (c) 2016-2020 The Inter Project Authors. 72 | License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 73 | Source: https://rsms.me/inter/ 74 | 75 | "Two–masted Schooner with Dory (1894)" by Winslow Homer. CC0 76 | https://www.rawpixel.com/image/3052183/free-illustration-image-watercolor-painting-art 77 | 78 | "Green mountains from Momoyogusa–Flowers of a Hundred Generations (1909)" by Kamisaka Sekka. CCO 79 | https://www.rawpixel.com/image/2049878/japanese-woodcut-print-kamisaka-sekka 80 | 81 | "Mount Fuji from Momoyogusa–Flowers of a Hundred Generations (1909)" by Kamisaka Sekka. CC0 82 | https://www.rawpixel.com/image/2049919/japanese-woodcut-print-kamisaka-sekka 83 | 84 | "Waves and sun from Momoyogusa–Flowers of a Hundred Generations (1909)" by Kamisaka Sekka. CC0 85 | https://www.rawpixel.com/image/2049906/japanese-woodcut-print-kamisaka-sekka 86 | 87 | "Birds from Momoyogusa–Flowers of a Hundred Generations (ca. 1909–1910)" by Kamisaka Sekka. CC0 88 | https://www.rawpixel.com/image/2049872/japanese-woodcut-print-kamisaka-sekka 89 | 90 | Modified versions of the above images were created specifically for Wabi. CC0. 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Wabi Block Theme 2 | 3 | [![Deploy](https://github.com/richtabor/wabi/actions/workflows/deploy.yml/badge.svg)](https://github.com/richtabor/wabi/actions/workflows/deploy.yml) 4 | 5 | Share your authentic self with [Wabi](https://richtabor.com/wabi), a WordPress block theme designed to help you tell your story best. Wabi foregrounds the simplistic design language of storytelling through clean lines, beautiful typography and a dynamic accent color system. And with multiple style variants (light, dark, and dynamic color schemes), Wabi is the most expressive and adaptable writing theme yet. 6 | 7 | [Learn more and view the live demo on richtabor.com →](https://richtabor.com/wabi) 8 | 9 | ![Wabi WordPress Block Theme](https://user-images.githubusercontent.com/1813435/155023023-a1c04695-9c77-4a2b-a74c-5e79c6183728.jpg) 10 | 11 | 12 | ## Dynamic accent colors 13 | With Wabi, you may pick an accent color for each post and “theme” that content, providing a clever design layer to compliment the theme’s minimal style. Each post can have one of six different accent colors, all of which you may tailor within the new Global Styles interface.  14 | 15 | ![Accent color picker in the Wabi block theme](https://user-images.githubusercontent.com/1813435/155022647-67c46cf0-8fec-4ede-991f-5b685a29959b.jpg) 16 | 17 | ## Style variants 18 | 19 | With multiple style variants (light, dark, and two dynamic color schemes — aoi and pinku) at your fingertips, Method is the most expressive and adaptable writing theme yet. To apply one of these styles, head into the new Site Editor experience, then select the Styles icon at the top right of the toolbar. You’ll see the new Styles sidebar, which you’ll be able to change your theme’s style from.  20 | 21 | ![Style variants in the Wabi block theme](https://user-images.githubusercontent.com/1813435/155022541-bef46ac7-cb00-4188-b025-b32032cfd885.jpg) 22 | 23 | # Development Guide 24 | 25 | To get started with development: 26 | 27 | 1. Set up a WordPress instance, we recommend [wp-env](https://developer.wordpress.org/block-editor/handbook/tutorials/devenv/) or [Local](https://localwp.com/) as an alternative to docker. 28 | 2. Clone, or download, this repository into your `/wp-content/themes/` directory 29 | 30 | ## Requirements 31 | 32 | - WordPress 5.9+ 33 | - PHP 5.6+ 34 | - License: [GPLv2](http://www.gnu.org/licenses/gpl-2.0.html) or later 35 | 36 | Some theme features / PRs may require Gutenberg trunk and will be described or tagged accordingly. 37 | 38 | To optionally run tests locally, you will also need: 39 | 40 | - [Node.js](https://nodejs.org/en/) 41 | - [Composer](https://getcomposer.org/) 42 | 43 | You can install the test-specific development dependencies by running `npm i && composer install`. The following test commands are then available: 44 | 45 | - `npm run lint:css` lints and autofixes where possible the CSS 46 | - `composer run analyze [filename.php]` statically analyzes PHP for bugs 47 | - `composer run lint` checks PHP for syntax errors 48 | - `composer run standards:check` checks PHP for standards errors according to [WordPress coding standards](https://developer.wordpress.org/coding-standards/) 49 | - `composer run standards:fix` attempts to automatically fix errors 50 | 51 | ## Resources 52 | 53 | - [Setting up a development environment](https://developer.wordpress.org/block-editor/handbook/tutorials/devenv/) 54 | - [Block Theme documentation](https://developer.wordpress.org/block-editor/how-to-guides/themes/block-theme-overview) 55 | - [Global Styles & theme.json documentation](https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-json/) 56 | - [The Ultimate Guide to WordPress Block Templates in Gutenberg](https://richtabor.com/gutenberg-block-templates/) 57 | - [A Primer on Full Site Editing for WordPress Theme Developers](https://richtabor.com/full-site-editing/) 58 | 59 | ## Demo Site 60 | 61 | My blog, located at [richtabor.com](https://richtabor.com) is using Wabi. 62 | -------------------------------------------------------------------------------- /inc/patterns/columns-projects.php: -------------------------------------------------------------------------------- 1 | __( 'Projects, three columns', 'wabi' ), 7 | 'categories' => array( 'wabi' ), 8 | 'blockTypes' => array( 'core/heading' ), 9 | 'content' => ' 10 | 11 |
12 |
13 |
14 |
' . esc_html__( 'August Macke\'s Landscape with children and goats', 'wabi' ) . '
15 | 16 | 17 | 18 |
19 |

' . esc_html__( 'Wabi Theme →', 'wabi' ) . '

20 | 21 | 22 | 23 |

' . esc_html__( 'WordPress block theme for storytellers', 'wabi' ) . '

24 |
25 |
26 | 27 | 28 | 29 |
30 |
' . esc_html__( 'August Macke\'s Landscape with children and goats', 'wabi' ) . '
31 | 32 | 33 | 34 |
35 |

' . esc_html__( 'Iceberg →', 'wabi' ) . '

36 | 37 | 38 | 39 |

' . esc_html__( 'Block-based markdown editor for WordPress', 'wabi' ) . '

40 |
41 |
42 | 43 | 44 | 45 |
46 | 47 | 48 | 49 | 50 |
' . esc_html__( 'August Macke\'s Landscape with children and goats', 'wabi' ) . '
51 | 52 | 53 | 54 |
55 |

' . esc_html__( 'Alana →', 'wabi' ) . '

56 | 57 | 58 | 59 |

' . esc_html__( '100’s of powerful commands for WordPress', 'wabi' ) . '

60 | 61 |
62 |
63 |
64 |
65 | ', 66 | ); 67 | -------------------------------------------------------------------------------- /styles/aoi.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "title": "Aoi", 4 | "settings": { 5 | "color": { 6 | "duotone": [ 7 | { 8 | "colors": [ 9 | "#003353", 10 | "#92CCFF" 11 | ], 12 | "slug": "primary-and-secondary", 13 | "name": "Primary and Secondary" 14 | }, 15 | { 16 | "colors": [ 17 | "#233240", 18 | "#B8C8DA" 19 | ], 20 | "slug": "tertiary-and-quarternary", 21 | "name": "Tertiary and Quarternary" 22 | }, 23 | { 24 | "colors": [ 25 | "#382A4A", 26 | "#D2BFE6" 27 | ], 28 | "slug": "quinary-and-senary", 29 | "name": "Quinary and Senary" 30 | }, 31 | { 32 | "colors": [ 33 | "#1b1b1f", 34 | "#ffffff" 35 | ], 36 | "slug": "foreground-and-background", 37 | "name": "Foreground and background" 38 | }, 39 | { 40 | "colors": [ 41 | "#ffffff", 42 | "#FBFCFF" 43 | ], 44 | "slug": "background-and-background-alt", 45 | "name": "Background and Background Alt" 46 | } 47 | ], 48 | "palette": [ 49 | { 50 | "slug": "primary", 51 | "color": "#003353", 52 | "name": "Accent 1" 53 | }, 54 | { 55 | "slug": "secondary", 56 | "color": "#92CCFF", 57 | "name": "Accent 2" 58 | }, 59 | { 60 | "slug": "tertiary", 61 | "color": "#233240", 62 | "name": "Accent 3" 63 | }, 64 | { 65 | "slug": "quarternary", 66 | "color": "#B8C8DA", 67 | "name": "Accent 4" 68 | }, 69 | { 70 | "slug": "quinary", 71 | "color": "#382A4A", 72 | "name": "Accent 5" 73 | }, 74 | { 75 | "slug": "senary", 76 | "color": "#D2BFE6", 77 | "name": "Accent 6" 78 | }, 79 | { 80 | "slug": "foreground", 81 | "color": "#1b1b1f", 82 | "name": "Contrast" 83 | }, 84 | { 85 | "slug": "foreground-alt", 86 | "color": "#75767c", 87 | "name": "Contrast 2" 88 | }, 89 | { 90 | "slug": "background", 91 | "color": "#ffffff", 92 | "name": "Base" 93 | }, 94 | { 95 | "slug": "background-alt", 96 | "color": "#e7e7e9", 97 | "name": "Base 2" 98 | }, 99 | { 100 | "slug": "accent", 101 | "color": "var(--wp--custom--color--accent)", 102 | "name": "Accent" 103 | } 104 | ] 105 | }, 106 | "custom": { 107 | "color": { 108 | "hero-text": "var(--wp--custom--color--accent-alt)" 109 | } 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /styles/pinku.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "title": "Pinku", 4 | "settings": { 5 | "color": { 6 | "duotone": [ 7 | { 8 | "colors": [ 9 | "#003353", 10 | "#92CCFF" 11 | ], 12 | "slug": "primary-and-secondary", 13 | "name": "Primary and Secondary" 14 | }, 15 | { 16 | "colors": [ 17 | "#233240", 18 | "#B8C8DA" 19 | ], 20 | "slug": "tertiary-and-quarternary", 21 | "name": "Tertiary and Quarternary" 22 | }, 23 | { 24 | "colors": [ 25 | "#382A4A", 26 | "#D2BFE6" 27 | ], 28 | "slug": "quinary-and-senary", 29 | "name": "Quinary and Senary" 30 | }, 31 | { 32 | "colors": [ 33 | "#1b1b1f", 34 | "#ffffff" 35 | ], 36 | "slug": "foreground-and-background", 37 | "name": "Foreground and background" 38 | }, 39 | { 40 | "colors": [ 41 | "#ffffff", 42 | "#FBFCFF" 43 | ], 44 | "slug": "background-and-background-alt", 45 | "name": "Background and Background Alt" 46 | } 47 | ], 48 | "palette": [ 49 | { 50 | "slug": "primary", 51 | "color": "#5F1129", 52 | "name": "Accent 1" 53 | }, 54 | { 55 | "slug": "secondary", 56 | "color": "#FFB2C1", 57 | "name": "Accent 2" 58 | }, 59 | { 60 | "slug": "tertiary", 61 | "color": "#E4BDC2", 62 | "name": "Accent 3" 63 | }, 64 | { 65 | "slug": "quarternary", 66 | "color": "#43292E", 67 | "name": "Accent 4" 68 | }, 69 | { 70 | "slug": "quinary", 71 | "color": "#EABE90", 72 | "name": "Accent 5" 73 | }, 74 | { 75 | "slug": "senary", 76 | "color": "#452B08", 77 | "name": "Accent 6" 78 | }, 79 | { 80 | "slug": "foreground", 81 | "color": "#1b1b1f", 82 | "name": "Contrast" 83 | }, 84 | { 85 | "slug": "foreground-alt", 86 | "color": "#75767c", 87 | "name": "Contrast 2" 88 | }, 89 | { 90 | "slug": "background", 91 | "color": "#ffffff", 92 | "name": "Base" 93 | }, 94 | { 95 | "slug": "background-alt", 96 | "color": "#e7e7e9", 97 | "name": "Base 2" 98 | }, 99 | { 100 | "slug": "accent", 101 | "color": "var(--wp--custom--color--accent)", 102 | "name": "Accent" 103 | } 104 | ] 105 | }, 106 | "custom": { 107 | "color": { 108 | "hero-text": "var(--wp--custom--color--accent-alt)" 109 | } 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /assets/fonts/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-2020 The Inter Project Authors. 2 | "Inter" is trademark of Rasmus Andersson. 3 | https://github.com/rsms/inter 4 | 5 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 6 | This license is copied below, and is also available with a FAQ at: 7 | http://scripts.sil.org/OFL 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION AND CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /inc/accent-color.php: -------------------------------------------------------------------------------- 1 | $default, 28 | 'object_subtype' => 'post', 29 | 'show_in_rest' => true, 30 | 'single' => true, 31 | 'type' => 'string', 32 | 'auth_callback' => function() { 33 | return current_user_can( 'edit_posts' ); 34 | }, 35 | ) 36 | ); 37 | } 38 | 39 | endif; 40 | 41 | add_action( 'init', 'wabi_register_meta' ); 42 | 43 | if ( ! function_exists( 'wabi_accent_color_editor_assets' ) ) : 44 | 45 | /** 46 | * Enqueue block editor scripts and styles scripts. 47 | * 48 | * @since Wabi 1.0 49 | * 50 | * @return void 51 | */ 52 | function wabi_accent_color_editor_assets() { 53 | 54 | wp_enqueue_style( 'wabi-accent-color-styles', get_theme_file_uri( '/assets/css/accent-color.css' ), array(), null ); 55 | wp_enqueue_script( 'wabi-accent-color', get_theme_file_uri( '/assets/js/build/accent-color.js' ), array( 'wp-blocks' ), wp_get_theme()->get( 'Version' ), true ); 56 | 57 | } 58 | 59 | endif; 60 | 61 | add_action( 'enqueue_block_editor_assets', 'wabi_accent_color_editor_assets' ); 62 | 63 | if ( ! function_exists( 'wabi_add_accent_body_class' ) ) : 64 | 65 | /** 66 | * Add accent color class to the body. 67 | */ 68 | function wabi_add_accent_body_class( $classes ) { 69 | global $post; 70 | 71 | if ( ! $post ) { 72 | return $classes; 73 | } 74 | 75 | if ( is_home() ) { 76 | return $classes; 77 | } 78 | 79 | $classes[] = get_post_meta( $post->ID, 'wabi_accentColor', true ); 80 | 81 | return $classes; 82 | } 83 | 84 | endif; 85 | 86 | add_filter( 'body_class', 'wabi_add_accent_body_class' ); 87 | 88 | if ( ! function_exists( 'wabi_add_accent_post_class' ) ) : 89 | 90 | /** 91 | * Add accent color class to posts on the posts page. 92 | */ 93 | function wabi_add_accent_post_class( $classes ) { 94 | 95 | global $post; 96 | 97 | if ( ! $post ) { 98 | return $classes; 99 | } 100 | 101 | $classes[] = get_post_meta( $post->ID, 'wabi_accentColor', true ); 102 | 103 | return $classes; 104 | 105 | } 106 | 107 | endif; 108 | 109 | add_filter( 'post_class', 'wabi_add_accent_post_class' ); 110 | 111 | if ( ! function_exists( 'wabi_add_accent_admin_body_class' ) ) : 112 | 113 | /** 114 | * Add accent color class within the editor. 115 | */ 116 | function wabi_add_accent_admin_body_class( $classes ) { 117 | global $post; 118 | 119 | if ( ! $post ) { 120 | return $classes; 121 | } 122 | 123 | $classes .= get_post_meta( $post->ID, 'wabi_accentColor', true ); 124 | 125 | return $classes; 126 | 127 | } 128 | 129 | endif; 130 | 131 | add_filter( 'admin_body_class', 'wabi_add_accent_admin_body_class' ); 132 | 133 | if ( ! function_exists( 'wabi_theme_meta_tag' ) ) : 134 | 135 | /** 136 | * Add meta tag to match the post's accent color 137 | */ 138 | function wabi_theme_meta_tag() { 139 | 140 | if ( ! is_singular() ) { 141 | return; 142 | } 143 | 144 | global $post; 145 | 146 | $palette = wp_get_global_settings( array( 'color', 'palette' ) ); 147 | $primary = $palette['theme'][0]['color']; 148 | $secondary = $palette['theme'][1]['color']; 149 | $tertiary = $palette['theme'][2]['color']; 150 | $quarternary = $palette['theme'][3]['color']; 151 | $quinary = $palette['theme'][4]['color']; 152 | $senary = $palette['theme'][5]['color']; 153 | 154 | $color = get_post_meta( $post->ID, 'wabi_accentColor', true ); 155 | 156 | switch ( $color ) { 157 | case 'is-primary-accent': 158 | $color = esc_attr( $primary ); 159 | break; 160 | case 'is-secondary-accent': 161 | $color = esc_attr( $secondary ); 162 | break; 163 | case 'is-tertiary-accent': 164 | $color = esc_attr( $tertiary ); 165 | break; 166 | case 'is-quarternary-accent': 167 | $color = esc_attr( $quarternary ); 168 | break; 169 | case 'is-quinary-accent': 170 | $color = esc_attr( $quinary ); 171 | break; 172 | case 'is-senary-accent': 173 | $color = esc_attr( $senary ); 174 | break; 175 | } 176 | 177 | echo ''; 178 | } 179 | 180 | endif; 181 | 182 | add_action( 'wp_head', 'wabi_theme_meta_tag' ); 183 | -------------------------------------------------------------------------------- /assets/js/accent-color.js: -------------------------------------------------------------------------------- 1 | /** 2 | * WordPress dependencies 3 | */ 4 | import { registerPlugin } from '@wordpress/plugins'; 5 | import { PluginPostStatusInfo } from '@wordpress/editPost'; 6 | import { __ } from '@wordpress/i18n'; 7 | import { withSelect, withDispatch } from '@wordpress/data'; 8 | import { Icon, check } from '@wordpress/icons'; 9 | import { 10 | PanelRow, 11 | __experimentalToggleGroupControl as ToggleGroupControl, 12 | __experimentalToggleGroupControlOption as ToggleGroupControlOption } from '@wordpress/components'; 13 | import { compose } from '@wordpress/compose'; 14 | import { useCallback } from '@wordpress/element'; 15 | import { useSelect, useDispatch } from '@wordpress/data'; 16 | 17 | /** 18 | * usePostMeta 19 | * 20 | * Hook that allows you to easily consume and update Post Meta values 21 | * 22 | * @return {Object} meta values and setMetaValue function 23 | */ 24 | function usePostMeta( fieldName ) { 25 | const { editPost } = useDispatch('core/editor'); 26 | const value = useSelect( 27 | (select) => select('core/editor').getEditedPostAttribute('meta')?.[fieldName], 28 | [fieldName], 29 | ); 30 | const editValue = useCallback( 31 | (newValue) => { 32 | editPost({ meta: { [fieldName]: newValue } }); 33 | }, 34 | [editPost, fieldName], 35 | ); 36 | return [value, editValue]; 37 | } 38 | 39 | const WabiColors = ( { postType, editPost } ) => { 40 | 41 | // Only show this on post and page post types 42 | if ( 'post' !== postType ) { 43 | return null; 44 | } 45 | 46 | const [ color, setColor ] = usePostMeta( 'wabi_accentColor' ); 47 | 48 | const checkIcon = 49 | 50 | return( 51 | 52 | 53 | { 57 | setColor( newColor ); 58 | document.body.classList.remove('is-primary-accent','is-secondary-accent', 'is-tertiary-accent','is-quarternary-accent','is-quinary-accent','is-senary-accent','is-background-accent'); 59 | document.body.classList.toggle( newColor ); 60 | } } 61 | label={ __( 'Accent color' ) } 62 | isBlock 63 | > 64 | 69 | 74 | 79 | 84 | 89 | 94 | 99 | 100 | 101 | 102 | ); 103 | } 104 | 105 | const WabiColorswithSelect = compose( [ 106 | withSelect( ( select ) => { 107 | return { 108 | postType: select( 'core/editor' ).getCurrentPostType(), 109 | }; 110 | } ), 111 | withDispatch( ( dispatch ) => { 112 | const { editPost } = dispatch( 'core/editor' ); 113 | return { editPost }; 114 | } ), 115 | ] )( WabiColors ); 116 | 117 | registerPlugin( 'wabi-colors', { render: WabiColorswithSelect } ); 118 | -------------------------------------------------------------------------------- /styles/dark.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "title": "Dark", 4 | "settings": { 5 | "color": { 6 | "duotone": [ 7 | { 8 | "colors": [ 9 | "#000000", 10 | "#363A6D" 11 | ], 12 | "slug": "black-and-primary", 13 | "name": "Black and primary" 14 | }, 15 | { 16 | "colors": [ 17 | "#000000", 18 | "#2C466B" 19 | ], 20 | "slug": "black-and-secondary", 21 | "name": "Black and secondary" 22 | }, 23 | { 24 | "colors": [ 25 | "#000000", 26 | "#254F59" 27 | ], 28 | "slug": "black-and-tertiary", 29 | "name": "Black and Tertiary" 30 | }, 31 | { 32 | "colors": [ 33 | "#000000", 34 | "#4f442b" 35 | ], 36 | "slug": "black-and-quarternary", 37 | "name": "Black and Quarternary" 38 | }, 39 | { 40 | "colors": [ 41 | "#000000", 42 | "#773722" 43 | ], 44 | "slug": "black-and-quinary", 45 | "name": "Black and Quinary" 46 | }, 47 | { 48 | "colors": [ 49 | "#000000", 50 | "#773f46" 51 | ], 52 | "slug": "black-and-senary", 53 | "name": "Black and Senary" 54 | }, 55 | { 56 | "colors": [ 57 | "#000000", 58 | "#ffffff" 59 | ], 60 | "slug": "black-and-white", 61 | "name": "Black and white" 62 | }, 63 | { 64 | "colors": [ 65 | "#111113", 66 | "#1E1F24" 67 | ], 68 | "slug": "background-and-background-alt", 69 | "name": "Background and Background Alt" 70 | } 71 | ], 72 | "palette": [ 73 | { 74 | "slug": "primary", 75 | "color": "#363A6D", 76 | "name": "Accent 1" 77 | }, 78 | { 79 | "slug": "secondary", 80 | "color": "#2C466B", 81 | "name": "Accent 2" 82 | }, 83 | { 84 | "slug": "tertiary", 85 | "color": "#254F59", 86 | "name": "Accent 3" 87 | }, 88 | { 89 | "slug": "quarternary", 90 | "color": "#4f442b", 91 | "name": "Accent 4" 92 | }, 93 | { 94 | "slug": "quinary", 95 | "color": "#773722", 96 | "name": "Accent 5" 97 | }, 98 | { 99 | "slug": "senary", 100 | "color": "#773f46", 101 | "name": "Accent 6" 102 | }, 103 | { 104 | "slug": "foreground", 105 | "color": "#e2e2e9", 106 | "name": "Contrast" 107 | }, 108 | { 109 | "slug": "foreground-alt", 110 | "color": "#a0a6b4", 111 | "name": "Contrast 2" 112 | }, 113 | { 114 | "slug": "background", 115 | "color": "#111113", 116 | "name": "Base" 117 | }, 118 | { 119 | "slug": "background-alt", 120 | "color": "#1E1F24", 121 | "name": "Base 2" 122 | }, 123 | { 124 | "slug": "accent", 125 | "color": "var(--wp--custom--color--accent)", 126 | "name": "Accent" 127 | } 128 | ] 129 | }, 130 | "custom": { 131 | "color": { 132 | "hero-text": "#ffffff" 133 | } 134 | } 135 | }, 136 | "styles": { 137 | "color": { 138 | "text": "var(--wp--preset--color--foreground-alt)" 139 | }, 140 | "elements": { 141 | "h1": { 142 | "color": { 143 | "text": "var(--wp--preset--color--foreground)" 144 | } 145 | }, 146 | "h2": { 147 | "color": { 148 | "text": "var(--wp--preset--color--foreground)" 149 | } 150 | }, 151 | "h3": { 152 | "color": { 153 | "text": "var(--wp--preset--color--foreground)" 154 | } 155 | }, 156 | "h4": { 157 | "color": { 158 | "text": "var(--wp--preset--color--foreground)" 159 | } 160 | }, 161 | "h5": { 162 | "color": { 163 | "text": "var(--wp--preset--color--foreground)" 164 | } 165 | }, 166 | "h6": { 167 | "color": { 168 | "text": "var(--wp--preset--color--foreground)" 169 | } 170 | }, 171 | "link": { 172 | "color": { 173 | "text": "var(--wp--preset--color--foreground)" 174 | } 175 | } 176 | } 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | get( 'Version' ); 45 | $version_string = is_string( $theme_version ) ? $theme_version : false; 46 | 47 | // Register main stylesheet. 48 | wp_register_style( 49 | 'wabi-style', 50 | get_template_directory_uri() . '/style.css', 51 | array(), 52 | $version_string 53 | ); 54 | 55 | // Enqueue main stylesheet. 56 | wp_enqueue_style( 'wabi-style' ); 57 | 58 | // Add inline styles. 59 | wp_add_inline_style( 'wabi-style', wabi_accent_colors() ); 60 | 61 | } 62 | 63 | endif; 64 | 65 | add_action( 'wp_enqueue_scripts', 'wabi_styles' ); 66 | 67 | if ( ! function_exists( 'wabi_block_styles' ) ) : 68 | /** 69 | * Enqueue block style scripts. 70 | * 71 | * @since Wabi 1.0 72 | * 73 | * @return void 74 | */ 75 | function wabi_block_styles() { 76 | $theme_version = wp_get_theme()->get( 'Version' ); 77 | $version_string = is_string( $theme_version ) ? $theme_version : false; 78 | 79 | wp_enqueue_script( 80 | 'wabi-block-styles', 81 | get_theme_file_uri( '/assets/js/block-styles.js' ), 82 | array( 'wp-blocks' ), 83 | $theme_version, 84 | true 85 | ); 86 | 87 | } 88 | 89 | endif; 90 | 91 | add_action( 'enqueue_block_editor_assets', 'wabi_block_styles' ); 92 | 93 | if ( ! function_exists( 'wabi_inline_editor_styles' ) ) : 94 | 95 | /** 96 | * Enqueue editor styles. 97 | * 98 | * @since Wabi 1.0 99 | * 100 | * @return void 101 | */ 102 | function wabi_inline_editor_styles() { 103 | 104 | // Add editor styles inline. 105 | wp_add_inline_style( 'wp-block-library', wabi_editor_styles() ); 106 | wp_add_inline_style( 'wp-block-library', wabi_accent_colors() ); 107 | } 108 | 109 | endif; 110 | 111 | add_action( 'admin_init', 'wabi_inline_editor_styles' ); 112 | 113 | if ( ! function_exists( 'wabi_accent_colors' ) ) : 114 | 115 | /** 116 | * Set accent color variables. 117 | * Called by functions wabi_styles() and wabi_inline_editor_styles() above. 118 | * 119 | * @since Wabi 1.0 120 | * 121 | * @return string 122 | */ 123 | function wabi_accent_colors() { 124 | 125 | return ' 126 | .is-primary-accent { 127 | --wp--custom--color--accent: var(--wp--preset--color--primary); 128 | --wp--custom--color--accent-alt: var(--wp--preset--color--secondary); 129 | } 130 | 131 | .is-secondary-accent { 132 | --wp--custom--color--accent: var(--wp--preset--color--secondary); 133 | --wp--custom--color--accent-alt: var(--wp--preset--color--primary); 134 | } 135 | 136 | .is-tertiary-accent { 137 | --wp--custom--color--accent: var(--wp--preset--color--tertiary); 138 | --wp--custom--color--accent-alt: var(--wp--preset--color--quarternary); 139 | } 140 | 141 | .is-quarternary-accent { 142 | --wp--custom--color--accent: var(--wp--preset--color--quarternary); 143 | --wp--custom--color--accent-alt: var(--wp--preset--color--tertiary); 144 | } 145 | 146 | .is-quinary-accent { 147 | --wp--custom--color--accent: var(--wp--preset--color--quinary); 148 | --wp--custom--color--accent-alt: var(--wp--preset--color--senary); 149 | } 150 | 151 | .is-senary-accent { 152 | --wp--custom--color--accent: var(--wp--preset--color--senary); 153 | --wp--custom--color--accent-alt: var(--wp--preset--color--quinary); 154 | } 155 | 156 | .is-background-accent { 157 | --wp--custom--color--accent: var(--wp--preset--color--background); 158 | --wp--custom--color--accent-alt: var(--wp--preset--color--foreground); 159 | } 160 | '; 161 | 162 | } 163 | 164 | endif; 165 | 166 | if ( ! function_exists( 'wabi_editor_styles' ) ) : 167 | 168 | /** 169 | * Get editor styles. 170 | * Called by function wabi_inline_editor_styles() above. 171 | * 172 | * @since Wabi 1.0 173 | * 174 | * @return string 175 | */ 176 | function wabi_editor_styles() { 177 | 178 | $palette = wp_get_global_settings( array( 'layout', 'wideSize' ) ); 179 | 180 | return " 181 | .post-type-post:not(.is-iceberg) .edit-post-visual-editor__post-title-wrapper { 182 | margin-top: 0 !important; 183 | padding-bottom: var(--wp--preset--spacing--30); 184 | padding-top: var(--wp--preset--spacing--30); 185 | margin-bottom: 3.5rem !important; 186 | } 187 | 188 | .post-type-post:not(.is-iceberg) .edit-post-visual-editor__post-title-wrapper { 189 | background: var(--wp--custom--color--accent); 190 | } 191 | 192 | .post-type-post:not(.is-iceberg) .edit-post-visual-editor__post-title-wrapper > * { 193 | max-width: $palette !important; 194 | } 195 | 196 | .post-type-post:not(.is-iceberg) .edit-post-visual-editor__post-title-wrapper { 197 | margin-top: 0 !important; 198 | padding-bottom: var(--wp--preset--spacing--30); 199 | padding-top: var(--wp--preset--spacing--30); 200 | margin-bottom: 3.5rem !important; 201 | } 202 | 203 | .post-type-post:not(.is-iceberg) .edit-post-visual-editor__post-title-wrapper h1 { 204 | color: var(--wp--custom--color--hero-text); 205 | } 206 | 207 | .editor-styles-wrapper .block-editor-block-list__layout.is-root-container > p + h1, 208 | .editor-styles-wrapper .block-editor-block-list__layout.is-root-container > p + h2, 209 | .editor-styles-wrapper .block-editor-block-list__layout.is-root-container > p + h3, 210 | .editor-styles-wrapper .block-editor-block-list__layout.is-root-container > p + h4 { 211 | margin-top: var(--wp--preset--spacing--60) !important; 212 | } 213 | 214 | .is-primary-accent .editor-styles-wrapper { 215 | --wp--custom--color--accent: var(--wp--preset--color--primary); 216 | --wp--custom--color--accent-alt: var(--wp--preset--color--secondary); 217 | } 218 | 219 | .is-secondary-accent .editor-styles-wrapper { 220 | --wp--custom--color--accent: var(--wp--preset--color--secondary); 221 | --wp--custom--color--accent-alt: var(--wp--preset--color--primary); 222 | } 223 | 224 | .is-tertiary-accent .editor-styles-wrapper { 225 | --wp--custom--color--accent: var(--wp--preset--color--tertiary); 226 | --wp--custom--color--accent-alt: var(--wp--preset--color--quarternary); 227 | } 228 | 229 | .is-quarternary-accent .editor-styles-wrapper { 230 | --wp--custom--color--accent: var(--wp--preset--color--quarternary); 231 | --wp--custom--color--accent-alt: var(--wp--preset--color--tertiary); 232 | } 233 | 234 | .is-quinary-accent .editor-styles-wrapper { 235 | --wp--custom--color--accent: var(--wp--preset--color--quinary); 236 | --wp--custom--color--accent-alt: var(--wp--preset--color--senary); 237 | } 238 | 239 | .is-senary-accent .editor-styles-wrapper { 240 | --wp--custom--color--accent: var(--wp--preset--color--senary); 241 | --wp--custom--color--accent-alt: var(--wp--preset--color--quinary); 242 | } 243 | 244 | .is-background-accent .editor-styles-wrapper { 245 | --wp--custom--color--accent: var(--wp--preset--color--background); 246 | --wp--custom--color--accent-alt: var(--wp--preset--color--background); 247 | } 248 | "; 249 | 250 | } 251 | 252 | endif; 253 | 254 | // Add block patterns 255 | require get_template_directory() . '/inc/block-patterns.php'; 256 | 257 | // Add accent color functionality 258 | require get_template_directory() . '/inc/accent-color.php'; 259 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: Wabi 3 | Theme URI: https://richtabor.com/wabi 4 | Author: RichTabor.com 5 | Author URI: https://richtabor.com 6 | Description: Share your authentic self with Wabi, a WordPress block theme designed to help you tell your story best. Wabi foregrounds the simplistic design language of storytelling through clean lines, beautiful typography and a dynamic accent color system. And with multiple style variants (light, dark, and dynamic color schemes), Wabi is the most expressive and adaptable writing theme yet. 7 | Requires at least: 5.9 8 | Tested up to: 6.1 9 | Requires PHP: 5.6 10 | Version: 1.1.0 11 | License: GNU General Public License v2 or later 12 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 13 | Text Domain: wabi 14 | Tags: one-column, custom-colors, custom-menu, custom-logo, editor-style, featured-images, full-site-editing, block-patterns, rtl-language-support, wide-blocks, block-styles 15 | 16 | Wabi is a derivative work of the code from the 17 | Twenty Twenty-Two WordPress Theme, which is licensed GPLv2. 18 | 19 | Wabi therefore is also distributed under the terms of the GNU GPL. 20 | */ 21 | 22 | /* 23 | * Text and navigation link styles. 24 | * Necessary until the following issue is resolved in Gutenberg: 25 | * https://github.com/WordPress/gutenberg/issues/27075 26 | */ 27 | 28 | a { 29 | text-decoration-thickness: 2px; 30 | text-underline-offset: 0.25ch; 31 | } 32 | 33 | a:hover, 34 | a:focus { 35 | text-decoration-thickness: 4px; 36 | } 37 | 38 | a:active { 39 | text-decoration-thickness: 2px; 40 | } 41 | 42 | h1 a { 43 | text-decoration: none; 44 | text-underline-offset: 0.1ch; 45 | } 46 | 47 | h1 a:hover { 48 | text-decoration: underline; 49 | text-decoration-thickness: 8px; 50 | text-decoration-color: var(--wp--custom--color--accent); 51 | } 52 | 53 | .wp-block-site-title a:hover { 54 | text-decoration-color: var(--wp--preset--color--foreground); 55 | text-decoration-thickness: 4px; 56 | } 57 | 58 | .wp-block-navigation .wp-block-navigation-item a:hover, 59 | .wp-block-navigation .wp-block-navigation-item a:focus { 60 | text-decoration: underline; 61 | text-decoration-style: solid; 62 | } 63 | 64 | footer .wp-block-query .wp-block-post-title a { 65 | text-decoration: none; 66 | } 67 | 68 | footer .wp-block-query .wp-block-post-title a:hover, 69 | footer .wp-block-query .wp-block-post-title a:focus { 70 | text-decoration: underline; 71 | text-decoration-style: solid; 72 | text-decoration-color: var(--wp--custom--color--accent); 73 | } 74 | 75 | /* 76 | * Heading styles. 77 | * Slight modifications to spacing around headings to help 78 | * distinguish content sections within the post content only. 79 | * 80 | * Using !important as the blockGap value overrides it without. 81 | */ 82 | 83 | .wp-block-post-content p+h1:not([style*="margin-top"]), 84 | .wp-block-post-content p+h2:not([style*="margin-top"]), 85 | .wp-block-post-content p+h3:not([style*="margin-top"]), 86 | .wp-block-post-content p+h4:not([style*="margin-top"]), 87 | .wp-block-post-content span+h1:not([style*="margin-top"]), 88 | .wp-block-post-content span+h2:not([style*="margin-top"]), 89 | .wp-block-post-content span+h3:not([style*="margin-top"]), 90 | .wp-block-post-content span+h4:not([style*="margin-top"]) { 91 | margin-top: var(--wp--preset--spacing--60) !important; 92 | } 93 | 94 | /* 95 | * Colossal font size. 96 | * If added to the theme.json file, it makes the font size control not great. 97 | */ 98 | .font-size-colossal { 99 | font-size: var(--wp--custom--typography--font-size--colossal) !important; 100 | } 101 | 102 | /* 103 | * Code styles. 104 | * Slight tweaks to the code blocks. 105 | */ 106 | .wp-block-code { 107 | overflow: hidden; 108 | overflow-x: auto; 109 | white-space: pre; 110 | } 111 | 112 | p code { 113 | background: rgba(209, 209, 209, 0.25); 114 | border-radius: 4px; 115 | border: 1px solid rgba(58, 58, 58, 0.25); 116 | display: inline-block; 117 | font-size: 72.5%; 118 | padding: 0.05rem 0.5rem; 119 | position: relative; 120 | top: -2px; 121 | color: var(--wp--custom--color--code); 122 | } 123 | 124 | p code a { 125 | color: var(--wp--custom--color--code); 126 | text-decoration-thickness: 1px !important; 127 | } 128 | 129 | /* 130 | * Search input styles. 131 | * A bit hacky but core does not support styling 132 | * inputs via theme.json or block styles. 133 | */ 134 | 135 | header .wp-block-search { 136 | background: var(--wp--preset--color--background-alt); 137 | } 138 | 139 | header .wp-block-search__input { 140 | border: 0; 141 | background: transparent; 142 | color: currentcolor; 143 | z-index: 3; 144 | position: relative; 145 | padding: 12px; 146 | line-height: 1; 147 | } 148 | 149 | /* Remove hard-coded border. */ 150 | header .wp-block-search.wp-block-search__button-inside .wp-block-search__inside-wrapper { 151 | border: 0; 152 | } 153 | 154 | header .wp-block-search.wp-block-search__button-inside .wp-block-search__inside-wrapper .wp-block-search__input { 155 | padding: 12px; 156 | } 157 | 158 | header .wp-block-search__button { 159 | cursor: pointer; 160 | } 161 | 162 | header .has-accent-background-color .wp-block-search { 163 | background-color: var(--wp--custom--color--hero-text, var(--wp--preset--color--foreground)); 164 | color: var(--wp--preset--color--accent); 165 | } 166 | 167 | header .has-accent-background-color .wp-block-search__input::placeholder { 168 | color: var(--wp--preset--color--accent); 169 | } 170 | 171 | header .has-accent-background-color .wp-block-search__input::-ms-input-placeholder { 172 | color: var(--wp--preset--color--accent); 173 | } 174 | 175 | header .has-accent-background-color .wp-block-search__input:-ms-input-placeholder { 176 | color: var(--wp--preset--color--accent); 177 | } 178 | 179 | /* 180 | * Add more gap between items in the loop block. 181 | * Once the block supports blockGap, this can be removed. 182 | */ 183 | 184 | @media (min-width: 600px) { 185 | 186 | .wp-block-post-template.is-flex-container, 187 | .wp-block-query-loop.is-flex-container { 188 | gap: 4rem; 189 | } 190 | 191 | .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li { 192 | width: calc(33.33333% - 3rem); 193 | } 194 | } 195 | 196 | /* 197 | * Responsive menu container padding. 198 | * This ensures the responsive container inherits the same 199 | * spacing defined above. This behavior may be built into 200 | * the Block Editor in the future. 201 | */ 202 | 203 | .wp-block-navigation__responsive-container.is-menu-open { 204 | padding-top: var(--wp--style--root--padding-right); 205 | padding-bottom: var(--wp--style--root--padding-right); 206 | padding-right: var(--wp--style--root--padding-right); 207 | padding-left: var(--wp--style--root--padding-right); 208 | } 209 | 210 | /* 211 | * Image block, within post content. 212 | * Add additional margin to the image block, so that 213 | * it displays with the same spacing as paragraphs do. 214 | */ 215 | 216 | .wp-block-post-content p+.wp-block-image { 217 | margin-top: calc(var(--wp--style--block-gap) * 1.1) !important; 218 | margin-bottom: calc(var(--wp--style--block-gap) * 1.1) !important; 219 | } 220 | 221 | /* 222 | * Image block, when alignfull within post content. 223 | */ 224 | 225 | .wp-block-post-content p+.wp-block-image.alignfull { 226 | margin-top: var(--wp--preset--spacing--60) !important; 227 | margin-bottom: var(--wp--preset--spacing--60) !important; 228 | } 229 | 230 | /* 231 | * Featured image styles. 232 | * Add styles to the post featured image so its 233 | * different than other block themes. 234 | */ 235 | 236 | .blog .wp-block-post-featured-image { 237 | background-color: var(--wp--custom--color--accent); 238 | } 239 | 240 | .wp-block-post-featured-image a:hover img { 241 | opacity: 0.75; 242 | } 243 | 244 | /* 245 | * Post author styles. 246 | * Minor tweaks to customize the appearance of the 247 | * core/post-author block. 248 | */ 249 | 250 | .is-style-avatar-only .wp-block-post-author__content { 251 | display: none; 252 | } 253 | 254 | .wp-block-post-author__content { 255 | align-self: center; 256 | } 257 | 258 | .wp-block-post-author__avatar img { 259 | border-radius: 100%; 260 | vertical-align: bottom; 261 | } 262 | 263 | /* 264 | * Post excerpt styles. 265 | * Remove excess margin from the block. 266 | */ 267 | 268 | .wp-block-post-excerpt__excerpt { 269 | margin-top: initial; 270 | margin-bottom: initial; 271 | } 272 | 273 | /* 274 | * Social link styles. 275 | * Use currentColor for social links to better support style variants. 276 | * Remove the social link transform transition. 277 | */ 278 | 279 | .wp-block-social-links.is-style-logos-only>.wp-social-link { 280 | color: currentColor; 281 | } 282 | 283 | .wp-block-social-link { 284 | transition: none; 285 | transform: none !important; 286 | } 287 | 288 | /* 289 | * Query Pagination styles. 290 | * Remove margin that throws this off alignment. 291 | */ 292 | 293 | .wp-block-query-pagination>.wp-block-query-pagination-previous { 294 | margin-left: 0; 295 | margin-right: 0; 296 | } 297 | 298 | /* 299 | * Registered block styles. 300 | * Applied to easily add accent colored borders 301 | * to media (core/image, core/video an ideabox/image-comparison blocks). 302 | */ 303 | 304 | .is-style-center, 305 | .is-style-bottom-left, 306 | .is-style-bottom-right { 307 | --spacing: var(--wp--preset--spacing--40); 308 | border-radius: var(--wp--custom--img-radius, 10px); 309 | } 310 | 311 | .is-style-center.alignfull, 312 | .is-style-bottom-left.alignfull, 313 | .is-style-bottom-right.alignfull, 314 | .wp-block[data-align="full"]>.is-style-center, 315 | .wp-block[data-align="full"]>.is-style-bottom-left, 316 | .wp-block[data-align="full"]>.is-style-bottom-right { 317 | border-radius: 0; 318 | } 319 | 320 | .is-style-bottom-left { 321 | border-bottom-left-radius: 0; 322 | } 323 | 324 | .is-style-bottom-left img, 325 | .is-style-bottom-left video { 326 | background: var(--wp--custom--color--accent); 327 | padding-right: var(--spacing); 328 | padding-top: var(--spacing); 329 | } 330 | 331 | .is-style-bottom-right { 332 | border-bottom-right-radius: 0; 333 | } 334 | 335 | .is-style-bottom-right img, 336 | .is-style-bottom-right video { 337 | background: var(--wp--custom--color--accent); 338 | padding-left: var(--spacing); 339 | padding-top: var(--spacing); 340 | } 341 | 342 | .is-style-center img, 343 | .is-style-center video { 344 | background: var(--wp--custom--color--accent); 345 | padding-left: var(--spacing); 346 | padding-right: var(--spacing); 347 | padding-top: var(--spacing); 348 | } 349 | 350 | .is-style-transparent .wp-block-button__link { 351 | background-color: transparent; 352 | color: var(--wp--preset--color--foreground); 353 | } 354 | 355 | .is-style-buttons .page-numbers { 356 | display: inline-flex; 357 | font-size: var(--wp--preset--font-size--small); 358 | height: 36px; 359 | width: 36px; 360 | align-items: center; 361 | justify-content: center; 362 | } 363 | 364 | .is-style-buttons.wp-block-post-terms { 365 | display: flex; 366 | gap: 0.3rem; 367 | flex-wrap: wrap; 368 | } 369 | 370 | .is-style-buttons.wp-block-post-terms>a { 371 | display: inline-block; 372 | position: relative 373 | } 374 | 375 | .is-style-buttons.wp-block-post-terms .wp-block-post-terms__separator { 376 | display: none; 377 | } 378 | 379 | .is-style-buttons .page-numbers, 380 | .is-style-buttons .wp-block-query-pagination-next, 381 | .is-style-buttons .wp-block-query-pagination-previous, 382 | .is-style-buttons.wp-block-post-terms>a { 383 | background-color: var(--wp--preset--color--background-alt); 384 | padding: 0.35rem 0.65rem 0.35rem; 385 | border-radius: 6px; 386 | text-decoration: none; 387 | position: relative; 388 | line-height: var(--wp--custom--typography--line-height--normal); 389 | } 390 | 391 | .is-style-buttons .page-numbers::after, 392 | .is-style-buttons .wp-block-query-pagination-next::after, 393 | .is-style-buttons .wp-block-query-pagination-previous::after, 394 | .is-style-buttons.wp-block-post-terms>a::after { 395 | background-color: rgba(83, 83, 83, 0.1); 396 | border-radius: 6px; 397 | bottom: 0; 398 | content: ''; 399 | left: 0; 400 | opacity: 0; 401 | position: absolute; 402 | right: 0; 403 | top: 0; 404 | transition: opacity 200ms cubic-bezier(0.7, 0, 0.3, 1); 405 | } 406 | 407 | .is-style-buttons .page-numbers:hover::after, 408 | .is-style-buttons .wp-block-query-pagination-next:hover::after, 409 | .is-style-buttons .wp-block-query-pagination-previous:hover::after, 410 | .is-style-buttons.wp-block-post-terms>a:hover::after { 411 | opacity: 1; 412 | } 413 | 414 | .wp-block-image.is-style-rounded img { 415 | border-radius: var(--wp--custom--img-radius, 10px); 416 | } 417 | 418 | .wp-block-column.is-style-rounded { 419 | border-radius: var(--wp--custom--img-radius, 10px); 420 | } 421 | 422 | /* 423 | * Hacks to ensure alternate accent colors display 424 | * properly on styles that do not support them. 425 | */ 426 | .single-post .has-accent-alt-color { 427 | color: var(--wp--custom--color--hero-text, #000000); 428 | } 429 | 430 | .single-post .has-accent-alt-color a { 431 | color: var(--wp--custom--color--hero-text, #000000); 432 | } 433 | 434 | .single-post .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open { 435 | color: var(--wp--custom--color--hero-text, #000000); 436 | } 437 | 438 | /* 439 | * Footer. 440 | */ 441 | 442 | footer { 443 | margin-top: 0 !important; 444 | } 445 | 446 | /* 447 | * Custom styles for subscribe form patterns. 448 | */ 449 | 450 | .subscribe-form form { 451 | background-color: #fff; 452 | border-radius: 80px; 453 | display: flex; 454 | align-items: center; 455 | padding: 0.5rem 0 0.75rem; 456 | } 457 | 458 | .subscribe-form input { 459 | width: 100%; 460 | border: 0; 461 | background-color: #fff; 462 | margin-left: 1.5rem; 463 | vertical-align: middle; 464 | line-height: 1; 465 | padding: 0 8px 0 0; 466 | flex-basis: 100%; 467 | font-size: var(--wp--preset--font-size--large); 468 | } 469 | 470 | .subscribe-form input:focus { 471 | outline: 0; 472 | 473 | } 474 | 475 | .subscribe-form input[type="submit"] { 476 | color: #000; 477 | border-radius: 100px; 478 | flex-basis: 15%; 479 | padding: 0.25rem; 480 | margin-right: 0.25rem; 481 | transition: color 100ms cubic-bezier(0.7, 0, 0.3, 1); 482 | } 483 | 484 | .subscribe-form input[type="submit"]:hover { 485 | color: var(--wp--custom--color--accent); 486 | } 487 | 488 | /* 489 | * Utility styles. 490 | * A couple utilities that are used throughout patterns and parts 491 | * where core does not support these functionalities. 492 | */ 493 | 494 | .my-0 { 495 | margin-bottom: 0 !important; 496 | margin-top: 0 !important; 497 | } 498 | 499 | .mt-0 { 500 | margin-top: 0 !important; 501 | } 502 | 503 | .mt-0 .wp-block-post-template { 504 | margin-top: 0 !important; 505 | } 506 | 507 | .items-start { 508 | align-items: flex-start !important; 509 | } 510 | 511 | .relative { 512 | position: relative; 513 | } 514 | 515 | @media (min-width: 781px) { 516 | .hide-on-desktop { 517 | display: none !important; 518 | } 519 | } 520 | 521 | @media (max-width: 782px) { 522 | .hide-on-tablet { 523 | display: none !important; 524 | } 525 | } 526 | 527 | @media (max-width: 599px) { 528 | .hide-on-mobile { 529 | display: none !important; 530 | } 531 | } 532 | -------------------------------------------------------------------------------- /theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "customTemplates": [ 4 | { 5 | "name": "blank", 6 | "title": "Blank", 7 | "postTypes": [ 8 | "page", 9 | "post" 10 | ] 11 | }, 12 | { 13 | "name": "template-no-title", 14 | "title": "Page, No Title", 15 | "postTypes": [ 16 | "page" 17 | ] 18 | } 19 | ], 20 | "settings": { 21 | "appearanceTools": true, 22 | "color": { 23 | "defaultPalette": false, 24 | "defaultGradients": false, 25 | "duotone": [ 26 | { 27 | "colors": [ 28 | "#000000", 29 | "#abacca" 30 | ], 31 | "slug": "black-and-primary", 32 | "name": "Black and primary" 33 | }, 34 | { 35 | "colors": [ 36 | "#000000", 37 | "#a8bed2" 38 | ], 39 | "slug": "black-and-secondary", 40 | "name": "Black and secondary" 41 | }, 42 | { 43 | "colors": [ 44 | "#000000", 45 | "#a4beb2" 46 | ], 47 | "slug": "black-and-tertiary", 48 | "name": "Black and Tertiary" 49 | }, 50 | { 51 | "colors": [ 52 | "#000000", 53 | "#eaca96" 54 | ], 55 | "slug": "black-and-quarternary", 56 | "name": "Black and Quarternary" 57 | }, 58 | { 59 | "colors": [ 60 | "#000000", 61 | "#e9aa95" 62 | ], 63 | "slug": "black-and-quinary", 64 | "name": "Black and Quinary" 65 | }, 66 | { 67 | "colors": [ 68 | "#000000", 69 | "#eeb8b0" 70 | ], 71 | "slug": "black-and-senary", 72 | "name": "Black and Senary" 73 | }, 74 | { 75 | "colors": [ 76 | "#000000", 77 | "#ffffff" 78 | ], 79 | "slug": "black-and-white", 80 | "name": "Black and white" 81 | }, 82 | { 83 | "colors": [ 84 | "#ffffff", 85 | "#e7e7e9" 86 | ], 87 | "slug": "background-and-background-alt", 88 | "name": "Background and Background Alt" 89 | } 90 | ], 91 | "gradients": [ 92 | { 93 | "slug": "vertical-base-to-accent", 94 | "gradient": "linear-gradient(to bottom, var(--wp--custom--color--accent) 50%, var(--wp--preset--color--background) 50%)", 95 | "name": "Vertical base to accent" 96 | } 97 | ], 98 | "palette": [ 99 | { 100 | "slug": "primary", 101 | "color": "#abacca", 102 | "name": "Accent 1" 103 | }, 104 | { 105 | "slug": "secondary", 106 | "color": "#a8bed2", 107 | "name": "Accent 2" 108 | }, 109 | { 110 | "slug": "tertiary", 111 | "color": "#a4beb2", 112 | "name": "Accent 3" 113 | }, 114 | { 115 | "slug": "quarternary", 116 | "color": "#eaca96", 117 | "name": "Accent 4" 118 | }, 119 | { 120 | "slug": "quinary", 121 | "color": "#e9aa95", 122 | "name": "Accent 5" 123 | }, 124 | { 125 | "slug": "senary", 126 | "color": "#eeb8b0", 127 | "name": "Accent 6" 128 | }, 129 | { 130 | "slug": "foreground", 131 | "color": "#000000", 132 | "name": "Contrast" 133 | }, 134 | { 135 | "slug": "foreground-alt", 136 | "color": "#555555", 137 | "name": "Contrast Alt" 138 | }, 139 | { 140 | "slug": "background", 141 | "color": "#ffffff", 142 | "name": "Base" 143 | }, 144 | { 145 | "slug": "background-alt", 146 | "color": "#e7e7e9", 147 | "name": "Base Alt" 148 | }, 149 | { 150 | "slug": "accent", 151 | "color": "var(--wp--custom--color--accent)", 152 | "name": "Post Accent" 153 | } 154 | ] 155 | }, 156 | "custom": { 157 | "color": { 158 | "accent": "var(--wp--preset--color--primary)", 159 | "code": "#ce365c" 160 | }, 161 | "img-radius": "10px", 162 | "typography": { 163 | "font-size": { 164 | "huge": "clamp(2.25rem, 4vw, 2.75rem)", 165 | "colossal": "clamp(4rem, 13vw, 10rem)" 166 | }, 167 | "line-height": { 168 | "tiny": 1.15, 169 | "small": 1.2, 170 | "medium": 1.4, 171 | "normal": 1.725 172 | } 173 | } 174 | }, 175 | "layout": { 176 | "contentSize": "40rem", 177 | "wideSize": "52rem" 178 | }, 179 | "spacing": { 180 | "spacingScale": { 181 | "steps": 7 182 | }, 183 | "spacingSizes": [ 184 | { 185 | "size": "min(20px, 1vw)", 186 | "slug": "10", 187 | "name": "1" 188 | }, 189 | { 190 | "size": "min(30px, 2vw)", 191 | "slug": "20", 192 | "name": "2" 193 | }, 194 | { 195 | "size": "min(40px, 4vw)", 196 | "slug": "30", 197 | "name": "3 (Outer)" 198 | }, 199 | { 200 | "size": "min(50px, 6vw)", 201 | "slug": "40", 202 | "name": "4" 203 | }, 204 | { 205 | "size": "min(60px, 10vw)", 206 | "slug": "50", 207 | "name": "5" 208 | }, 209 | { 210 | "size": "min(70px, 12vw)", 211 | "slug": "60", 212 | "name": "6" 213 | }, 214 | { 215 | "size": "min(80px, 14vw)", 216 | "slug": "70", 217 | "name": "7" 218 | } 219 | ] 220 | }, 221 | "typography": { 222 | "dropCap": false, 223 | "fontFamilies": [ 224 | { 225 | "fontFace": [ 226 | { 227 | "fontFamily": "Inter", 228 | "fontStretch": "normal", 229 | "fontStyle": "normal", 230 | "fontWeight": "200 900", 231 | "src": [ 232 | "file:./assets/fonts/Inter-VariableFont_slnt,wght.ttf" 233 | ] 234 | } 235 | ], 236 | "fontFamily": "\"Inter\", sans-serif", 237 | "name": "Inter", 238 | "slug": "body" 239 | } 240 | ], 241 | "fontSizes": [ 242 | { 243 | "size": "1.05rem", 244 | "slug": "small" 245 | }, 246 | { 247 | "size": "clamp(1.05rem, 2vw, 1.275rem)", 248 | "slug": "medium" 249 | }, 250 | { 251 | "size": "clamp(1.45rem, 2vw, 2rem)", 252 | "slug": "large" 253 | }, 254 | { 255 | "size": "clamp(1.75rem, 3vw, 2.25rem)", 256 | "slug": "x-large", 257 | "name": "1X Large" 258 | }, 259 | { 260 | "size": "clamp(2.25rem, 8.5vw, 5rem)", 261 | "slug": "xx-large", 262 | "name": "2X Large" 263 | } 264 | ] 265 | }, 266 | "useRootPaddingAwareAlignments": true 267 | }, 268 | "styles": { 269 | "blocks": { 270 | "core/post-title": { 271 | "typography": { 272 | "lineHeight": "var(--wp--custom--typography--line-height--tiny)", 273 | "fontSize": "var(--wp--preset--font-size--xx-large)" 274 | } 275 | }, 276 | "core/navigation": { 277 | "typography": { 278 | "fontSize": "var(--wp--preset--font-size--small)" 279 | } 280 | }, 281 | "core/search": { 282 | "border": { 283 | "radius": "12px" 284 | }, 285 | "typography": { 286 | "fontSize": "1rem" 287 | } 288 | }, 289 | "core/code": { 290 | "border": { 291 | "width": "0", 292 | "radius": "10px" 293 | }, 294 | "color": { 295 | "background": "var(--wp--preset--color--background-alt)", 296 | "text": "var(--wp--preset--color--foreground)" 297 | }, 298 | "spacing": { 299 | "padding": { 300 | "top": "var(--wp--preset--spacing--30)", 301 | "bottom": "var(--wp--preset--spacing--30)", 302 | "right": "var(--wp--preset--spacing--30)", 303 | "left": "var(--wp--preset--spacing--30)" 304 | } 305 | }, 306 | "typography": { 307 | "lineHeight": "2", 308 | "fontSize": "clamp(0.85rem, 1vw, 1rem)", 309 | "fontFamily": "monospace" 310 | } 311 | }, 312 | "core/post-comments": { 313 | "spacing": { 314 | "padding": { 315 | "top": "var(--wp--preset--spacing--20)" 316 | } 317 | } 318 | }, 319 | "core/pullquote": { 320 | "border": { 321 | "width": "1px 0" 322 | } 323 | }, 324 | "core/query-title": { 325 | "typography": { 326 | "fontSize": "var(--wp--preset--font-size--large)" 327 | } 328 | }, 329 | "core/quote": { 330 | "border": { 331 | "width": "1px" 332 | } 333 | }, 334 | "core/site-title": { 335 | "color": { 336 | "text": "var(--wp--preset--color--foreground)" 337 | }, 338 | "elements": { 339 | "link": { 340 | "color": { 341 | "text": "var(--wp--preset--color--foreground)" 342 | }, 343 | "typography": { 344 | "textDecoration": "none" 345 | } 346 | } 347 | }, 348 | "typography": { 349 | "fontFamily": "var(--wp--preset--font-family--body)", 350 | "lineHeight": "var(--wp--custom--typography--line-height--normal)", 351 | "fontSize": "var(--wp--preset--font-size--medium)", 352 | "fontWeight": "600" 353 | } 354 | }, 355 | "tabor/share-on-twitter": { 356 | "border": { 357 | "radius": "10px", 358 | "color": "var(--wp--preset--color--background-alt)", 359 | "width": "2px" 360 | }, 361 | "typography": { 362 | "fontSize": "var(--wp--preset--font-size--large)", 363 | "lineHeight": "var(--wp--custom--typography--line-height--medium)" 364 | } 365 | } 366 | }, 367 | "color": { 368 | "background": "var(--wp--preset--color--background)", 369 | "text": "var(--wp--preset--color--foreground)" 370 | }, 371 | "elements": { 372 | "button" : { 373 | "border": { 374 | "radius": "8px" 375 | }, 376 | "color": { 377 | "background": "var(--wp--preset--color--foreground)", 378 | "text": "var(--wp--preset--color--background)" 379 | }, 380 | "spacing": { 381 | "padding": { 382 | "top": "min(1rem, 1.75vw)", 383 | "right": "min(1.75rem, 4vw)", 384 | "bottom": "min(1rem, 1.75vw)", 385 | "left": "min(1.75rem, 4vw)" 386 | } 387 | }, 388 | "typography": { 389 | "fontSize": "1.15rem" 390 | }, 391 | ":hover": { 392 | "color": { 393 | "background": "var(--wp--preset--color--foreground-alt)", 394 | "text": "var(--wp--preset--color--background)" 395 | } 396 | } 397 | }, 398 | "caption": { 399 | "color": { 400 | "text": "var(--wp--preset--color--foreground-alt)" 401 | }, 402 | "typography": { 403 | "fontSize": "14px" 404 | } 405 | }, 406 | "h1": { 407 | "color": { 408 | "text": "var(--wp--preset--color--foreground)" 409 | }, 410 | "typography": { 411 | "fontWeight": "600", 412 | "lineHeight": "var(--wp--custom--typography--line-height--tiny)", 413 | "fontSize": "var(--wp--preset--font-size--xx-large)", 414 | "letterSpacing": "-0.025em" 415 | } 416 | }, 417 | "h2": { 418 | "color": { 419 | "text": "var(--wp--preset--color--foreground)" 420 | }, 421 | "typography": { 422 | "fontWeight": "600", 423 | "lineHeight": "var(--wp--custom--typography--line-height--tiny)", 424 | "fontSize": "var(--wp--preset--font-size--x-large)", 425 | "letterSpacing": "-0.025em" 426 | } 427 | }, 428 | "h3": { 429 | "color": { 430 | "text": "var(--wp--preset--color--foreground)" 431 | }, 432 | "typography": { 433 | "fontWeight": "600", 434 | "lineHeight": "var(--wp--custom--typography--line-height--small)", 435 | "fontSize": "var(--wp--preset--font-size--large)", 436 | "letterSpacing": "-0.055em" 437 | } 438 | }, 439 | "h4": { 440 | "color": { 441 | "text": "var(--wp--preset--color--foreground)" 442 | }, 443 | "typography": { 444 | "fontWeight": "600", 445 | "lineHeight": "var(--wp--custom--typography--line-height--small)", 446 | "fontSize": "var(--wp--preset--font-size--medium)", 447 | "letterSpacing": "-0.055em" 448 | } 449 | }, 450 | "h5": { 451 | "color": { 452 | "text": "var(--wp--preset--color--foreground-alt)" 453 | }, 454 | "typography": { 455 | "fontWeight": "600", 456 | "lineHeight": "var(--wp--custom--typography--line-height--normal)", 457 | "fontSize": "var(--wp--preset--font-size--medium)" 458 | } 459 | }, 460 | "h6": { 461 | "color": { 462 | "text": "var(--wp--preset--color--foreground)" 463 | }, 464 | "typography": { 465 | "fontWeight": "600", 466 | "lineHeight": "var(--wp--custom--typography--line-height--normal)", 467 | "fontSize": "var(--wp--preset--font-size--small)", 468 | "textTransform": "uppercase", 469 | "letterSpacing": "0.05rem" 470 | } 471 | }, 472 | "link": { 473 | "color": { 474 | "text": "var(--wp--preset--color--foreground)" 475 | }, 476 | ":hover": { 477 | "color": { 478 | "text": "var(--wp--preset--color--foreground)" 479 | } 480 | } 481 | } 482 | }, 483 | "spacing": { 484 | "blockGap": "var(--wp--preset--spacing--30)", 485 | "padding": { 486 | "right": "var(--wp--preset--spacing--30)", 487 | "left": "var(--wp--preset--spacing--30)" 488 | } 489 | }, 490 | "typography": { 491 | "fontFamily": "var(--wp--preset--font-family--body)", 492 | "lineHeight": "var(--wp--custom--typography--line-height--normal)", 493 | "fontSize": "var(--wp--preset--font-size--medium)", 494 | "fontWeight": "400" 495 | } 496 | }, 497 | "templateParts": [ 498 | { 499 | "name": "header", 500 | "title": "Header", 501 | "area": "header" 502 | }, 503 | { 504 | "name": "header-accent", 505 | "title": "Header (Accent)", 506 | "area": "header" 507 | }, 508 | { 509 | "name": "header-w-button", 510 | "title": "Header (with Button)", 511 | "area": "header" 512 | }, 513 | { 514 | "name": "header-accent-w-button", 515 | "title": "Header (Accent with Button)", 516 | "area": "header" 517 | }, 518 | { 519 | "name": "footer", 520 | "title": "Footer", 521 | "area": "footer" 522 | }, 523 | { 524 | "name": "footer-w-posts", 525 | "title": "Footer (Posts)", 526 | "area": "footer" 527 | }, 528 | { 529 | "name": "loop", 530 | "title": "Loop", 531 | "area": "uncategorized" 532 | }, 533 | { 534 | "name": "loop-alt", 535 | "title": "Loop, Alternate", 536 | "area": "uncategorized" 537 | } 538 | ] 539 | } 540 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "5be47a42f50b1f98d99d9e39901c7c61", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "dealerdirect/phpcodesniffer-composer-installer", 12 | "version": "v0.7.2", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", 16 | "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", 21 | "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "composer-plugin-api": "^1.0 || ^2.0", 26 | "php": ">=5.3", 27 | "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" 28 | }, 29 | "require-dev": { 30 | "composer/composer": "*", 31 | "php-parallel-lint/php-parallel-lint": "^1.3.1", 32 | "phpcompatibility/php-compatibility": "^9.0" 33 | }, 34 | "type": "composer-plugin", 35 | "extra": { 36 | "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" 37 | }, 38 | "autoload": { 39 | "psr-4": { 40 | "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Franck Nijhof", 50 | "email": "franck.nijhof@dealerdirect.com", 51 | "homepage": "http://www.frenck.nl", 52 | "role": "Developer / IT Manager" 53 | }, 54 | { 55 | "name": "Contributors", 56 | "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" 57 | } 58 | ], 59 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin", 60 | "homepage": "http://www.dealerdirect.com", 61 | "keywords": [ 62 | "PHPCodeSniffer", 63 | "PHP_CodeSniffer", 64 | "code quality", 65 | "codesniffer", 66 | "composer", 67 | "installer", 68 | "phpcbf", 69 | "phpcs", 70 | "plugin", 71 | "qa", 72 | "quality", 73 | "standard", 74 | "standards", 75 | "style guide", 76 | "stylecheck", 77 | "tests" 78 | ], 79 | "support": { 80 | "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", 81 | "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" 82 | }, 83 | "time": "2022-02-04T12:51:07+00:00" 84 | }, 85 | { 86 | "name": "php-parallel-lint/php-parallel-lint", 87 | "version": "v1.3.1", 88 | "source": { 89 | "type": "git", 90 | "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", 91 | "reference": "761f3806e30239b5fcd90a0a45d41dc2138de192" 92 | }, 93 | "dist": { 94 | "type": "zip", 95 | "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/761f3806e30239b5fcd90a0a45d41dc2138de192", 96 | "reference": "761f3806e30239b5fcd90a0a45d41dc2138de192", 97 | "shasum": "" 98 | }, 99 | "require": { 100 | "ext-json": "*", 101 | "php": ">=5.3.0" 102 | }, 103 | "replace": { 104 | "grogy/php-parallel-lint": "*", 105 | "jakub-onderka/php-parallel-lint": "*" 106 | }, 107 | "require-dev": { 108 | "nette/tester": "^1.3 || ^2.0", 109 | "php-parallel-lint/php-console-highlighter": "~0.3", 110 | "squizlabs/php_codesniffer": "^3.6" 111 | }, 112 | "suggest": { 113 | "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" 114 | }, 115 | "bin": [ 116 | "parallel-lint" 117 | ], 118 | "type": "library", 119 | "autoload": { 120 | "classmap": [ 121 | "./" 122 | ] 123 | }, 124 | "notification-url": "https://packagist.org/downloads/", 125 | "license": [ 126 | "BSD-2-Clause" 127 | ], 128 | "authors": [ 129 | { 130 | "name": "Jakub Onderka", 131 | "email": "ahoj@jakubonderka.cz" 132 | } 133 | ], 134 | "description": "This tool check syntax of PHP files about 20x faster than serial check.", 135 | "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", 136 | "support": { 137 | "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", 138 | "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.1" 139 | }, 140 | "time": "2021-08-13T05:35:13+00:00" 141 | }, 142 | { 143 | "name": "php-stubs/wordpress-stubs", 144 | "version": "v5.9.0", 145 | "source": { 146 | "type": "git", 147 | "url": "https://github.com/php-stubs/wordpress-stubs.git", 148 | "reference": "0fa8dd9a1bd2a1b60e85afc6c798fca1f599cc1b" 149 | }, 150 | "dist": { 151 | "type": "zip", 152 | "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/0fa8dd9a1bd2a1b60e85afc6c798fca1f599cc1b", 153 | "reference": "0fa8dd9a1bd2a1b60e85afc6c798fca1f599cc1b", 154 | "shasum": "" 155 | }, 156 | "replace": { 157 | "giacocorsiglia/wordpress-stubs": "*" 158 | }, 159 | "require-dev": { 160 | "nikic/php-parser": "< 4.12.0", 161 | "php": "~7.3 || ~8.0", 162 | "php-stubs/generator": "^0.8.0", 163 | "phpdocumentor/reflection-docblock": "^5.3", 164 | "phpstan/phpstan": "^1.2" 165 | }, 166 | "suggest": { 167 | "paragonie/sodium_compat": "Pure PHP implementation of libsodium", 168 | "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 169 | "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan" 170 | }, 171 | "type": "library", 172 | "notification-url": "https://packagist.org/downloads/", 173 | "license": [ 174 | "MIT" 175 | ], 176 | "description": "WordPress function and class declaration stubs for static analysis.", 177 | "homepage": "https://github.com/php-stubs/wordpress-stubs", 178 | "keywords": [ 179 | "PHPStan", 180 | "static analysis", 181 | "wordpress" 182 | ], 183 | "support": { 184 | "issues": "https://github.com/php-stubs/wordpress-stubs/issues", 185 | "source": "https://github.com/php-stubs/wordpress-stubs/tree/v5.9.0" 186 | }, 187 | "time": "2022-01-26T00:27:45+00:00" 188 | }, 189 | { 190 | "name": "phpcompatibility/php-compatibility", 191 | "version": "9.3.5", 192 | "source": { 193 | "type": "git", 194 | "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", 195 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" 196 | }, 197 | "dist": { 198 | "type": "zip", 199 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", 200 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", 201 | "shasum": "" 202 | }, 203 | "require": { 204 | "php": ">=5.3", 205 | "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" 206 | }, 207 | "conflict": { 208 | "squizlabs/php_codesniffer": "2.6.2" 209 | }, 210 | "require-dev": { 211 | "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" 212 | }, 213 | "suggest": { 214 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", 215 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 216 | }, 217 | "type": "phpcodesniffer-standard", 218 | "notification-url": "https://packagist.org/downloads/", 219 | "license": [ 220 | "LGPL-3.0-or-later" 221 | ], 222 | "authors": [ 223 | { 224 | "name": "Wim Godden", 225 | "homepage": "https://github.com/wimg", 226 | "role": "lead" 227 | }, 228 | { 229 | "name": "Juliette Reinders Folmer", 230 | "homepage": "https://github.com/jrfnl", 231 | "role": "lead" 232 | }, 233 | { 234 | "name": "Contributors", 235 | "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" 236 | } 237 | ], 238 | "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", 239 | "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", 240 | "keywords": [ 241 | "compatibility", 242 | "phpcs", 243 | "standards" 244 | ], 245 | "support": { 246 | "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", 247 | "source": "https://github.com/PHPCompatibility/PHPCompatibility" 248 | }, 249 | "time": "2019-12-27T09:44:58+00:00" 250 | }, 251 | { 252 | "name": "phpcompatibility/phpcompatibility-paragonie", 253 | "version": "1.3.1", 254 | "source": { 255 | "type": "git", 256 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", 257 | "reference": "ddabec839cc003651f2ce695c938686d1086cf43" 258 | }, 259 | "dist": { 260 | "type": "zip", 261 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/ddabec839cc003651f2ce695c938686d1086cf43", 262 | "reference": "ddabec839cc003651f2ce695c938686d1086cf43", 263 | "shasum": "" 264 | }, 265 | "require": { 266 | "phpcompatibility/php-compatibility": "^9.0" 267 | }, 268 | "require-dev": { 269 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7", 270 | "paragonie/random_compat": "dev-master", 271 | "paragonie/sodium_compat": "dev-master" 272 | }, 273 | "suggest": { 274 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 275 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 276 | }, 277 | "type": "phpcodesniffer-standard", 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "LGPL-3.0-or-later" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "Wim Godden", 285 | "role": "lead" 286 | }, 287 | { 288 | "name": "Juliette Reinders Folmer", 289 | "role": "lead" 290 | } 291 | ], 292 | "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", 293 | "homepage": "http://phpcompatibility.com/", 294 | "keywords": [ 295 | "compatibility", 296 | "paragonie", 297 | "phpcs", 298 | "polyfill", 299 | "standards" 300 | ], 301 | "support": { 302 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", 303 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" 304 | }, 305 | "time": "2021-02-15T10:24:51+00:00" 306 | }, 307 | { 308 | "name": "phpcompatibility/phpcompatibility-wp", 309 | "version": "2.1.3", 310 | "source": { 311 | "type": "git", 312 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", 313 | "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308" 314 | }, 315 | "dist": { 316 | "type": "zip", 317 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/d55de55f88697b9cdb94bccf04f14eb3b11cf308", 318 | "reference": "d55de55f88697b9cdb94bccf04f14eb3b11cf308", 319 | "shasum": "" 320 | }, 321 | "require": { 322 | "phpcompatibility/php-compatibility": "^9.0", 323 | "phpcompatibility/phpcompatibility-paragonie": "^1.0" 324 | }, 325 | "require-dev": { 326 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7" 327 | }, 328 | "suggest": { 329 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 330 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 331 | }, 332 | "type": "phpcodesniffer-standard", 333 | "notification-url": "https://packagist.org/downloads/", 334 | "license": [ 335 | "LGPL-3.0-or-later" 336 | ], 337 | "authors": [ 338 | { 339 | "name": "Wim Godden", 340 | "role": "lead" 341 | }, 342 | { 343 | "name": "Juliette Reinders Folmer", 344 | "role": "lead" 345 | } 346 | ], 347 | "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", 348 | "homepage": "http://phpcompatibility.com/", 349 | "keywords": [ 350 | "compatibility", 351 | "phpcs", 352 | "standards", 353 | "wordpress" 354 | ], 355 | "support": { 356 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", 357 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" 358 | }, 359 | "time": "2021-12-30T16:37:40+00:00" 360 | }, 361 | { 362 | "name": "phpstan/phpstan", 363 | "version": "0.12.99", 364 | "source": { 365 | "type": "git", 366 | "url": "https://github.com/phpstan/phpstan.git", 367 | "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7" 368 | }, 369 | "dist": { 370 | "type": "zip", 371 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7", 372 | "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7", 373 | "shasum": "" 374 | }, 375 | "require": { 376 | "php": "^7.1|^8.0" 377 | }, 378 | "conflict": { 379 | "phpstan/phpstan-shim": "*" 380 | }, 381 | "bin": [ 382 | "phpstan", 383 | "phpstan.phar" 384 | ], 385 | "type": "library", 386 | "extra": { 387 | "branch-alias": { 388 | "dev-master": "0.12-dev" 389 | } 390 | }, 391 | "autoload": { 392 | "files": [ 393 | "bootstrap.php" 394 | ] 395 | }, 396 | "notification-url": "https://packagist.org/downloads/", 397 | "license": [ 398 | "MIT" 399 | ], 400 | "description": "PHPStan - PHP Static Analysis Tool", 401 | "support": { 402 | "issues": "https://github.com/phpstan/phpstan/issues", 403 | "source": "https://github.com/phpstan/phpstan/tree/0.12.99" 404 | }, 405 | "funding": [ 406 | { 407 | "url": "https://github.com/ondrejmirtes", 408 | "type": "github" 409 | }, 410 | { 411 | "url": "https://github.com/phpstan", 412 | "type": "github" 413 | }, 414 | { 415 | "url": "https://www.patreon.com/phpstan", 416 | "type": "patreon" 417 | }, 418 | { 419 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 420 | "type": "tidelift" 421 | } 422 | ], 423 | "time": "2021-09-12T20:09:55+00:00" 424 | }, 425 | { 426 | "name": "squizlabs/php_codesniffer", 427 | "version": "3.6.2", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 431 | "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", 436 | "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "ext-simplexml": "*", 441 | "ext-tokenizer": "*", 442 | "ext-xmlwriter": "*", 443 | "php": ">=5.4.0" 444 | }, 445 | "require-dev": { 446 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 447 | }, 448 | "bin": [ 449 | "bin/phpcs", 450 | "bin/phpcbf" 451 | ], 452 | "type": "library", 453 | "extra": { 454 | "branch-alias": { 455 | "dev-master": "3.x-dev" 456 | } 457 | }, 458 | "notification-url": "https://packagist.org/downloads/", 459 | "license": [ 460 | "BSD-3-Clause" 461 | ], 462 | "authors": [ 463 | { 464 | "name": "Greg Sherwood", 465 | "role": "lead" 466 | } 467 | ], 468 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 469 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 470 | "keywords": [ 471 | "phpcs", 472 | "standards" 473 | ], 474 | "support": { 475 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", 476 | "source": "https://github.com/squizlabs/PHP_CodeSniffer", 477 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" 478 | }, 479 | "time": "2021-12-12T21:44:58+00:00" 480 | }, 481 | { 482 | "name": "symfony/polyfill-php73", 483 | "version": "v1.24.0", 484 | "source": { 485 | "type": "git", 486 | "url": "https://github.com/symfony/polyfill-php73.git", 487 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" 488 | }, 489 | "dist": { 490 | "type": "zip", 491 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", 492 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", 493 | "shasum": "" 494 | }, 495 | "require": { 496 | "php": ">=7.1" 497 | }, 498 | "type": "library", 499 | "extra": { 500 | "branch-alias": { 501 | "dev-main": "1.23-dev" 502 | }, 503 | "thanks": { 504 | "name": "symfony/polyfill", 505 | "url": "https://github.com/symfony/polyfill" 506 | } 507 | }, 508 | "autoload": { 509 | "files": [ 510 | "bootstrap.php" 511 | ], 512 | "psr-4": { 513 | "Symfony\\Polyfill\\Php73\\": "" 514 | }, 515 | "classmap": [ 516 | "Resources/stubs" 517 | ] 518 | }, 519 | "notification-url": "https://packagist.org/downloads/", 520 | "license": [ 521 | "MIT" 522 | ], 523 | "authors": [ 524 | { 525 | "name": "Nicolas Grekas", 526 | "email": "p@tchwork.com" 527 | }, 528 | { 529 | "name": "Symfony Community", 530 | "homepage": "https://symfony.com/contributors" 531 | } 532 | ], 533 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 534 | "homepage": "https://symfony.com", 535 | "keywords": [ 536 | "compatibility", 537 | "polyfill", 538 | "portable", 539 | "shim" 540 | ], 541 | "support": { 542 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" 543 | }, 544 | "funding": [ 545 | { 546 | "url": "https://symfony.com/sponsor", 547 | "type": "custom" 548 | }, 549 | { 550 | "url": "https://github.com/fabpot", 551 | "type": "github" 552 | }, 553 | { 554 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 555 | "type": "tidelift" 556 | } 557 | ], 558 | "time": "2021-06-05T21:20:04+00:00" 559 | }, 560 | { 561 | "name": "szepeviktor/phpstan-wordpress", 562 | "version": "v0.7.7", 563 | "source": { 564 | "type": "git", 565 | "url": "https://github.com/szepeviktor/phpstan-wordpress.git", 566 | "reference": "bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72" 567 | }, 568 | "dist": { 569 | "type": "zip", 570 | "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72", 571 | "reference": "bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72", 572 | "shasum": "" 573 | }, 574 | "require": { 575 | "php": "^7.1 || ^8.0", 576 | "php-stubs/wordpress-stubs": "^4.7 || ^5.0", 577 | "phpstan/phpstan": "^0.12.26", 578 | "symfony/polyfill-php73": "^1.12.0" 579 | }, 580 | "require-dev": { 581 | "composer/composer": "^1.10.22", 582 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7", 583 | "php-parallel-lint/php-parallel-lint": "^1.1", 584 | "phpstan/phpstan-strict-rules": "^0.12", 585 | "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.6" 586 | }, 587 | "type": "phpstan-extension", 588 | "extra": { 589 | "phpstan": { 590 | "includes": [ 591 | "extension.neon" 592 | ] 593 | } 594 | }, 595 | "autoload": { 596 | "psr-4": { 597 | "SzepeViktor\\PHPStan\\WordPress\\": "src/" 598 | } 599 | }, 600 | "notification-url": "https://packagist.org/downloads/", 601 | "license": [ 602 | "MIT" 603 | ], 604 | "description": "WordPress extensions for PHPStan", 605 | "keywords": [ 606 | "PHPStan", 607 | "code analyse", 608 | "code analysis", 609 | "static analysis", 610 | "wordpress" 611 | ], 612 | "support": { 613 | "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues", 614 | "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v0.7.7" 615 | }, 616 | "funding": [ 617 | { 618 | "url": "https://www.paypal.me/szepeviktor", 619 | "type": "custom" 620 | } 621 | ], 622 | "time": "2021-07-14T09:19:15+00:00" 623 | }, 624 | { 625 | "name": "wp-coding-standards/wpcs", 626 | "version": "2.3.0", 627 | "source": { 628 | "type": "git", 629 | "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", 630 | "reference": "7da1894633f168fe244afc6de00d141f27517b62" 631 | }, 632 | "dist": { 633 | "type": "zip", 634 | "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", 635 | "reference": "7da1894633f168fe244afc6de00d141f27517b62", 636 | "shasum": "" 637 | }, 638 | "require": { 639 | "php": ">=5.4", 640 | "squizlabs/php_codesniffer": "^3.3.1" 641 | }, 642 | "require-dev": { 643 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", 644 | "phpcompatibility/php-compatibility": "^9.0", 645 | "phpcsstandards/phpcsdevtools": "^1.0", 646 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 647 | }, 648 | "suggest": { 649 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." 650 | }, 651 | "type": "phpcodesniffer-standard", 652 | "notification-url": "https://packagist.org/downloads/", 653 | "license": [ 654 | "MIT" 655 | ], 656 | "authors": [ 657 | { 658 | "name": "Contributors", 659 | "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" 660 | } 661 | ], 662 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", 663 | "keywords": [ 664 | "phpcs", 665 | "standards", 666 | "wordpress" 667 | ], 668 | "support": { 669 | "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", 670 | "source": "https://github.com/WordPress/WordPress-Coding-Standards", 671 | "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" 672 | }, 673 | "time": "2020-05-13T23:57:56+00:00" 674 | }, 675 | { 676 | "name": "wptrt/wpthemereview", 677 | "version": "0.2.1", 678 | "source": { 679 | "type": "git", 680 | "url": "https://github.com/WPTT/WPThemeReview.git", 681 | "reference": "462e59020dad9399ed2fe8e61f2a21b5e206e420" 682 | }, 683 | "dist": { 684 | "type": "zip", 685 | "url": "https://api.github.com/repos/WPTT/WPThemeReview/zipball/462e59020dad9399ed2fe8e61f2a21b5e206e420", 686 | "reference": "462e59020dad9399ed2fe8e61f2a21b5e206e420", 687 | "shasum": "" 688 | }, 689 | "require": { 690 | "php": ">=5.4", 691 | "phpcompatibility/phpcompatibility-wp": "^2.0", 692 | "squizlabs/php_codesniffer": "^3.3.1", 693 | "wp-coding-standards/wpcs": "^2.2.0" 694 | }, 695 | "require-dev": { 696 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", 697 | "phpcompatibility/php-compatibility": "^9.0", 698 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0", 699 | "roave/security-advisories": "dev-master" 700 | }, 701 | "suggest": { 702 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." 703 | }, 704 | "type": "phpcodesniffer-standard", 705 | "notification-url": "https://packagist.org/downloads/", 706 | "license": [ 707 | "MIT" 708 | ], 709 | "authors": [ 710 | { 711 | "name": "Theme Review Team", 712 | "homepage": "https://make.wordpress.org/themes/handbook/", 713 | "role": "Strategy and rule setting" 714 | }, 715 | { 716 | "name": "Ulrich Pogson", 717 | "homepage": "https://github.com/grappler", 718 | "role": "Lead developer" 719 | }, 720 | { 721 | "name": "Juliette Reinders Folmer", 722 | "homepage": "https://github.com/jrfnl", 723 | "role": "Lead developer" 724 | }, 725 | { 726 | "name": "Denis Žoljom", 727 | "homepage": "https://github.com/dingo-d", 728 | "role": "Plugin integration lead" 729 | }, 730 | { 731 | "name": "Contributors", 732 | "homepage": "https://github.com/WPTRT/WPThemeReview/graphs/contributors" 733 | } 734 | ], 735 | "description": "PHP_CodeSniffer rules (sniffs) to verify theme compliance with the rules for theme hosting on wordpress.org", 736 | "homepage": "https://make.wordpress.org/themes/handbook/review/", 737 | "keywords": [ 738 | "phpcs", 739 | "standards", 740 | "themes", 741 | "wordpress" 742 | ], 743 | "support": { 744 | "issues": "https://github.com/WPTRT/WPThemeReview/issues", 745 | "source": "https://github.com/WPTRT/WPThemeReview" 746 | }, 747 | "time": "2019-11-17T20:05:55+00:00" 748 | } 749 | ], 750 | "aliases": [], 751 | "minimum-stability": "stable", 752 | "stability-flags": [], 753 | "prefer-stable": false, 754 | "prefer-lowest": false, 755 | "platform": { 756 | "php": ">=5.6" 757 | }, 758 | "platform-dev": [], 759 | "plugin-api-version": "2.1.0" 760 | } 761 | --------------------------------------------------------------------------------