├── .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 |
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 |
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 |
25 | ',
26 | );
27 |
--------------------------------------------------------------------------------
/inc/patterns/hidden-404.php:
--------------------------------------------------------------------------------
1 | __( '404 content', 'wabi' ),
7 | 'inserter' => false,
8 | 'content' => '
9 |
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 |
36 |
37 |
38 | ',
39 | );
40 |
41 |
--------------------------------------------------------------------------------
/parts/header-accent.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 |
--------------------------------------------------------------------------------
/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 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
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 |
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 |
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 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
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 |
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 | [](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 | 
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 | 
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 | 
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 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
' . esc_html__( 'WordPress block theme for storytellers', 'wabi' ) . '
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
' . esc_html__( 'Block-based markdown editor for WordPress', 'wabi' ) . '
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
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 |
--------------------------------------------------------------------------------