├── .github ├── CODEOWNERS └── workflows │ ├── dev.yml │ ├── main.yml │ └── stage.yml ├── docs └── fresh.md ├── post-deploy.sh ├── readme.md └── wp-content └── themes └── your-roots-theme-name-here ├── .editorconfig ├── .gitignore ├── LICENSE.md ├── README.md ├── app ├── Providers │ └── ThemeServiceProvider.php ├── View │ └── Composers │ │ ├── App.php │ │ ├── Comments.php │ │ └── Post.php ├── filters.php └── setup.php ├── bud.config.js ├── composer.json ├── functions.php ├── index.php ├── jsconfig.json ├── package.json ├── resources ├── fonts │ └── .gitkeep ├── images │ └── .gitkeep ├── scripts │ ├── app.js │ ├── editor.js │ └── filters │ │ └── button.filter.js ├── styles │ ├── app.css │ └── editor.css └── views │ ├── 404.blade.php │ ├── components │ └── alert.blade.php │ ├── forms │ └── search.blade.php │ ├── index.blade.php │ ├── layouts │ └── app.blade.php │ ├── page.blade.php │ ├── partials │ ├── comments.blade.php │ ├── content-page.blade.php │ ├── content-search.blade.php │ ├── content-single.blade.php │ ├── content.blade.php │ ├── entry-meta.blade.php │ └── page-header.blade.php │ ├── search.blade.php │ ├── sections │ ├── footer.blade.php │ ├── header.blade.php │ └── sidebar.blade.php │ ├── single.blade.php │ └── template-custom.blade.php ├── screenshot.png ├── style.css ├── tailwind.config.js ├── theme.json └── yarn.lock /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @wpengine/webstack 2 | 3 | #jira:CA is where issues related to this repository should be ticketed 4 | -------------------------------------------------------------------------------- /.github/workflows/dev.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to WPEngine - DEV 2 | env: 3 | WPE_SSHG_KEY_PRIVATE: ${{ secrets.WPE_SSHG_KEY_PRIVATE }} 4 | WPE_INSTALL_NAME: ${{ secrets.DEV_ENVIRONMENT }} 5 | THEME_NAME: ${{ secrets.THEME_NAME }} 6 | on: 7 | push: 8 | branches: 9 | - dev 10 | jobs: 11 | js-build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | 15 | - name: Check out the git repo 16 | uses: actions/checkout@v4 17 | 18 | - name: Setup Node 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: 20 22 | cache: 'yarn' 23 | cache-dependency-path: wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock 24 | 25 | - name: Install Yarn 26 | run: npm install -g yarn 27 | 28 | - name: Check for yarn.lock file 29 | run: | 30 | if [ ! -f wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock ]; then 31 | echo "yarn.lock file is missing. Please ensure it exists in the specified directory." 32 | exit 1 33 | fi 34 | 35 | - name: Install js/css dependencies 36 | run: yarn install 37 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 38 | 39 | - name: Build js/css 40 | run: yarn build 41 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 42 | 43 | - name: Clean up node modules (not needed to deploy) 44 | run: rm -rf wp-content/themes/${{ secrets.THEME_NAME }}/node_modules 45 | 46 | - name: Deploy to WPE 47 | uses: wpengine/github-action-wpe-site-deploy@v3 48 | with: 49 | SCRIPT: post-deploy.sh 50 | WPE_ENV: ${{ secrets.DEV_ENVIRONMENT }} 51 | 52 | php-build: 53 | runs-on: ubuntu-latest 54 | container: php:8.2-alpine 55 | steps: 56 | 57 | - name: Check out the git repo 58 | uses: actions/checkout@v4 59 | 60 | - name: Set up Composer cache 61 | uses: actions/cache@v3 62 | with: 63 | path: ~/.composer/cache 64 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 65 | restore-keys: | 66 | ${{ runner.os }}-composer- 67 | 68 | - name: Install Composer 69 | run: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 70 | 71 | - name: Install PHP dependencies 72 | run: | 73 | cd wp-content/themes/${{ secrets.THEME_NAME }} 74 | composer install --prefer-dist --no-scripts --no-interaction --optimize-autoloader 75 | 76 | - name: Deploy to wpengine.com 77 | uses: wpengine/github-action-wpe-site-deploy@v3 78 | with: 79 | SCRIPT: post-deploy.sh 80 | WPE_ENV: ${{ secrets.DEV_ENVIRONMENT }} 81 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to WPEngine - PROD 2 | env: 3 | WPE_SSHG_KEY_PRIVATE: ${{ secrets.WPE_SSHG_KEY_PRIVATE }} 4 | WPE_INSTALL_NAME: ${{ secrets.PROD_ENVIRONMENT }} 5 | THEME_NAME: ${{ secrets.THEME_NAME }} 6 | on: 7 | push: 8 | branches: 9 | - main 10 | jobs: 11 | js-build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | 15 | - name: Check out the git repo 16 | uses: actions/checkout@v4 17 | 18 | - name: Setup Node 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: 20 22 | cache: 'yarn' 23 | cache-dependency-path: wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock 24 | 25 | - name: Install Yarn 26 | run: npm install -g yarn 27 | 28 | - name: Check for yarn.lock file 29 | run: | 30 | if [ ! -f wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock ]; then 31 | echo "yarn.lock file is missing. Please ensure it exists in the specified directory." 32 | exit 1 33 | fi 34 | 35 | - name: Install js/css dependencies 36 | run: yarn install 37 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 38 | 39 | - name: Build js/css 40 | run: yarn build 41 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 42 | 43 | - name: Clean up node modules (not needed to deploy) 44 | run: rm -rf wp-content/themes/${{ secrets.THEME_NAME }}/node_modules 45 | 46 | - name: Deploy to WPE 47 | uses: wpengine/github-action-wpe-site-deploy@v3 48 | with: 49 | SCRIPT: post-deploy.sh 50 | WPE_ENV: ${{ secrets.PROD_ENVIRONMENT }} 51 | 52 | php-build: 53 | runs-on: ubuntu-latest 54 | container: php:8.2-alpine 55 | steps: 56 | 57 | - name: Check out the git repo 58 | uses: actions/checkout@v4 59 | 60 | - name: Set up Composer cache 61 | uses: actions/cache@v3 62 | with: 63 | path: ~/.composer/cache 64 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 65 | restore-keys: | 66 | ${{ runner.os }}-composer- 67 | 68 | - name: Install Composer 69 | run: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 70 | 71 | - name: Install PHP dependencies 72 | run: | 73 | cd wp-content/themes/${{ secrets.THEME_NAME }} 74 | composer install --prefer-dist --no-scripts --no-interaction --optimize-autoloader 75 | 76 | - name: Deploy to wpengine.com 77 | uses: wpengine/github-action-wpe-site-deploy@v3 78 | with: 79 | SCRIPT: post-deploy.sh 80 | WPE_ENV: ${{ secrets.PROD_ENVIRONMENT }} 81 | -------------------------------------------------------------------------------- /.github/workflows/stage.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to WPEngine - STAGE 2 | env: 3 | WPE_SSHG_KEY_PRIVATE: ${{ secrets.WPE_SSHG_KEY_PRIVATE }} 4 | WPE_INSTALL_NAME: ${{ secrets.STG_ENVIRONMENT }} 5 | THEME_NAME: ${{ secrets.THEME_NAME }} 6 | on: 7 | push: 8 | branches: 9 | - stage 10 | jobs: 11 | js-build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | 15 | - name: Check out the git repo 16 | uses: actions/checkout@v4 17 | 18 | - name: Setup Node 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: 20 22 | cache: 'yarn' 23 | cache-dependency-path: wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock 24 | 25 | - name: Install Yarn 26 | run: npm install -g yarn 27 | 28 | - name: Check for yarn.lock file 29 | run: | 30 | if [ ! -f wp-content/themes/${{ secrets.THEME_NAME }}/yarn.lock ]; then 31 | echo "yarn.lock file is missing. Please ensure it exists in the specified directory." 32 | exit 1 33 | fi 34 | 35 | - name: Install js/css dependencies 36 | run: yarn install 37 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 38 | 39 | - name: Build js/css 40 | run: yarn build 41 | working-directory: wp-content/themes/${{ secrets.THEME_NAME }} 42 | 43 | - name: Clean up node modules (not needed to deploy) 44 | run: rm -rf wp-content/themes/${{ secrets.THEME_NAME }}/node_modules 45 | 46 | - name: Deploy to WPE 47 | uses: wpengine/github-action-wpe-site-deploy@v3 48 | with: 49 | SCRIPT: post-deploy.sh 50 | WPE_ENV: ${{ secrets.STG_ENVIRONMENT }} 51 | 52 | php-build: 53 | runs-on: ubuntu-latest 54 | container: php:8.2-alpine 55 | steps: 56 | 57 | - name: Check out the git repo 58 | uses: actions/checkout@v4 59 | 60 | - name: Set up Composer cache 61 | uses: actions/cache@v3 62 | with: 63 | path: ~/.composer/cache 64 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 65 | restore-keys: | 66 | ${{ runner.os }}-composer- 67 | 68 | - name: Install Composer 69 | run: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 70 | 71 | - name: Install PHP dependencies 72 | run: | 73 | cd wp-content/themes/${{ secrets.THEME_NAME }} 74 | composer install --prefer-dist --no-scripts --no-interaction --optimize-autoloader 75 | 76 | - name: Deploy to wpengine.com 77 | uses: wpengine/github-action-wpe-site-deploy@v3 78 | with: 79 | SCRIPT: post-deploy.sh 80 | WPE_ENV: ${{ secrets.STG_ENVIRONMENT }} 81 | -------------------------------------------------------------------------------- /docs/fresh.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # Steps to recreate your own theme on your own github repo 6 | 7 | 1. [Create a wp engine site](https://my.wpengine.com/bulk_sites) if you don't already have one at wpengine.com. We'll use `"your-wp-install-name"` as an example. 8 | 9 | 2. Back on your machine, create your install directory that'll house the wordpress theme 10 | ```bash 11 | mkdir your-wp-install-name && cd your-wp-install-name 12 | ``` 13 | 14 | 3. Create the folder structure for the theme to ultimately be copied over 15 | ```bash 16 | mkdir -p wp-content/themes && cd wp-content/themes 17 | ``` 18 | 19 | 4. Within the themes directory, create your new theme using composer 20 | ```bash 21 | composer create-project roots/sage your-roots-theme-name-here 22 | ``` 23 | 24 | 5. With your new theme, you need acorn, the best way to install is also composer 25 | ```bash 26 | cd your-roots-theme-name-here && composer require roots/acorn 27 | ``` 28 | 29 | 6. [Add "post-autoload-dump" script](https://github.com/wpengine/example-sage-theme/blob/main/wp-content/themes/your-roots-theme-name-here/composer.json#L63-L65) that'll run after every composer update command to the `composer.json` 30 | 31 | 7. Create the directory structure for the github action 32 | ```bash 33 | mkdir -p .github/workflows/ && cd .github/workflows/ 34 | ``` 35 | 36 | 8. Add the github action that'll deploy the theme 37 | ```bash 38 | wget https://github.com/wpengine/example-sage-theme/blob/main/.github/workflows/action.yml 39 | ``` 40 | 41 | 9. Update just these sections of the `action.yml` file 42 | ```yml 43 | name: Deploy to WP Engine 44 | env: 45 | WPE_SSHG_KEY_PRIVATE: ${{ secrets.WPE_SSHG_KEY_PRIVATE }} # We'll add this later 46 | WPE_INSTALL_NAME: your-wp-install-name 47 | THEME_NAME: your-roots-theme-name-here 48 | ``` 49 | 50 | 10. [Create and add an ssh-gateway private key](https://wpengine.com/support/ssh-gateway/#Create_SSH_Key) to [your repo's github secrets](https://wpengine.com/support/github-action-deploy/#Setup_Instructions) and the [my.wpengine.com](https://my.wpengine.com) portal. 51 | 52 | 11. Add a [`post-deploy.sh`](../post-deploy.sh) script to run [wp-cli](https://wpengine.com/resources/on-demand-webinar-developers-bada-wp-cli/) commands like, `wp acorn view:cache` to compile the Sage templates once deployed. 53 | ```bash 54 | cd ../../ && wget https://github.com/wpengine/example-sage-theme/blob/main/post-deploy.sh 55 | ``` 56 | 57 | 12. And your done! With the action setup, it will now auto deploy and run the `post-deploy.sh` script. Just git commit and git push to your repo! 58 | 59 |
60 |




61 | 62 |




63 |

Still need help or have questions? Contact support!

64 | Log in to your account to get expert one-on-one help, 24 hours a day, 7 days a week, 365 days a year. 65 |
66 | -------------------------------------------------------------------------------- /post-deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Check if the theme is already active, and activate it if not 4 | if ! wp theme is-active your-roots-theme-here; then 5 | echo "Activating the theme..." 6 | wp theme activate your-roots-theme-here 7 | else 8 | echo "The theme is already active." 9 | fi 10 | 11 | # Check if the wp acorn command is available 12 | if wp acorn &> /dev/null; then 13 | echo "wp acorn command is available" 14 | 15 | # Clear Acorn cache before caching views 16 | echo "Clearing Acorn cache..." 17 | wp acorn optimize:clear 18 | 19 | # Run wp acorn view:cache command 20 | echo "Running wp acorn view:cache..." 21 | if ! wp acorn view:cache; then 22 | echo "Failed to cache views" >&2 23 | exit 1 24 | fi 25 | else 26 | echo "wp acorn command is not available" 27 | fi -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # WP Engine Example Sage Theme 2 | 3 |

4 | 5 | 6 |

7 | 8 | An example of how write beautiful and modern templates, with modern CI/CD practices using github actions and the Roots/Sage theme using [wpengine.com](https://wpengine.com) 9 | 10 | To produce beautiful themes like 11 | ```blade 12 | 13 | {{ __('Skip to content') }} 14 | 15 | 16 |
17 |
18 | @include('sections.header') 19 |
20 | 21 |
22 | @yield('content') 23 |
24 | 25 | @include('sections.footer') 26 |
27 | ``` 28 | 29 | ## To get started 30 | You can either [clone and modify this repo](#clone-this-repo) as a starter or [copy these steps to recreate a fresh install on your own](docs/fresh.md). 31 | 32 | ## Clone this repo 33 | 34 | 1. First clone this repo with a sage theme 35 | ```bash 36 | git clone https://github.com/wpengine/example-sage-theme 37 | cd 38 | ``` 39 | 40 | 2. Setup a new ssh private key in GithHub and WP Engine via https://wpengine.com/support/github-action-deploy/#Setup_Instructions 41 | 42 | 43 | 3. Add GitHub Action Secrets 44 | 45 | Add the following secrets to your repo: 46 | - `WPE_SSHG_KEY_PRIVATE`: Your SSH private key. 47 | - `THEME_NAME`: The name of your WordPress theme in `wp-content/themes/{theme-name}`. 48 | - `DEV_ENVIRONMENT`: Your WPEngine site's development environment name (e.g., `sitename-dev`). 49 | - `STG_ENVIRONMENT`: Your WPEngine site's staging environment name (e.g., `sitename-stg`). 50 | - `PROD_ENVIRONMENT`: Your WPEngine site's production environment name (e.g., `sitename`). 51 | 52 | 53 | 4. Push the repo to your own GitHub and the [post-deploy.sh](post-deploy.sh) will activate the theme if it's not already, and clear the cache during [GitHub deploys](.github/workflows/action.yml#L55-L58) 🎉. 54 | 55 | ## Frequently Asked Questions 56 | - I thought WP Engine doesn't support Sage/Roots theme? 57 | - Sage was never fully supported due to the way Sage out of the box conflicted with our security best practices. In late 2022, we started to make changes to fully support pre-compiling Sage templates to enable official support if they follow the way this repo deploys with [`post-deploy.sh`](https://github.com/wpengine/example-sage-theme/blob/main/post-deploy.sh) script, that ultimately runs `wp acorn view:cache`. 58 | - Sage wasn't supported until late 2022? 59 | - There have been ways of running Sage on WP Engine prior using customization or other means, but this approach is our offically supported way. 60 | - What about Timber/Twig themes? 61 | - Those themes are also supported! Just [disable filesystem caching](https://timber.github.io/docs/guides/hosts-servers/#wordpress-vip) and let our other, more advanced, caching mechanisms take the place of that. 62 | - Why not just disable filesystem caching on Sage the same way? 63 | - That's probably another great alternative, but it requires more effort/customization then many of our customers want, if that is a route you want to go, please be sure to let our support team know when you've made progress there and we'd love to add docs on how to accomplish that as well! 64 | - I have more questions or need more help! 65 | - [Log in to your account](https://my.wpengine.com) to get expert one-on-one help, 24 hours a day, 7 days a week, 365 days a year. 66 | 67 | ## Alternatives 68 | 69 | Also check out [local, our effortless way to develop WordPress sites locally](https://localwp.com/). Just be sure to run 70 | ```bash 71 | wp acorn view:cache 72 | ``` 73 | after pushing changes to wpengine.com. 74 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 2 9 | trim_trailing_whitespace = true 10 | quote_type = single 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [*.php] 16 | indent_size = 4 17 | 18 | [*.blade.php] 19 | indent_size = 2 20 | 21 | [resources/views/**.php] 22 | indent_size = 2 23 | 24 | [index.php] 25 | indent_size = 2 26 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /vendor 3 | /public 4 | .env 5 | .budfiles 6 | npm-debug.log 7 | yarn-error.log 8 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) Roots Software Foundation LLC 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Sage 4 | 5 |

6 | 7 |

8 | 9 | Packagist Installs 10 | 11 | 12 | 13 | Build Status 14 | 15 | 16 | 17 | Follow Roots 18 | 19 |

20 | 21 |

Advanced WordPress starter theme with Tailwind CSS and Laravel Blade

22 | 23 |

24 | Website    Documentation    Releases    Community 25 |

26 | 27 | ## Sponsors 28 | 29 | Sage is an open source project and completely free to use. If you've benefited from our projects and would like to support our future endeavors, please consider [sponsoring Roots](https://github.com/sponsors/roots). 30 | 31 |
32 | KM Digital Carrot WordPress.com Worksite Safety Copia Digital Freave 40Q 33 |
34 | 35 | ## Overview 36 | 37 | Sage is a WordPress starter theme with block editor support. 38 | 39 | - Harness the power of [Laravel](https://laravel.com) and its available packages thanks to [Acorn](https://github.com/roots/acorn) 40 | - Clean, efficient theme templating utilizing [Laravel Blade](https://laravel.com/docs/master/blade) 41 | - Modern frontend development workflow powered by [Bud](https://bud.js.org/) 42 | - Out of the box support for [Tailwind CSS](https://tailwindcss.com/) 43 | 44 | ## Getting Started 45 | 46 | See the [Sage installation documentation](https://roots.io/sage/docs/installation/). 47 | 48 | ## Stay Connected 49 | 50 | - Join us on Discord by [sponsoring us on GitHub](https://github.com/sponsors/roots) 51 | - Participate on [Roots Discourse](https://discourse.roots.io/) 52 | - Follow [@rootswp on Twitter](https://twitter.com/rootswp) 53 | - Read the [Roots Blog](https://roots.io/blog/) 54 | - Subscribe to the [Roots Newsletter](https://roots.io/newsletter/) 55 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/app/Providers/ThemeServiceProvider.php: -------------------------------------------------------------------------------- 1 | $this->siteName(), 27 | ]; 28 | } 29 | 30 | /** 31 | * Returns the site name. 32 | * 33 | * @return string 34 | */ 35 | public function siteName() 36 | { 37 | return get_bloginfo('name', 'display'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/app/View/Composers/Comments.php: -------------------------------------------------------------------------------- 1 | $this->title(), 27 | 'responses' => $this->responses(), 28 | 'previous' => $this->previous(), 29 | 'next' => $this->next(), 30 | 'paginated' => $this->paginated(), 31 | 'closed' => $this->closed(), 32 | ]; 33 | } 34 | 35 | /** 36 | * The comment title. 37 | * 38 | * @return string 39 | */ 40 | public function title() 41 | { 42 | return sprintf( 43 | /* translators: %1$s is replaced with the number of comments and %2$s with the post title */ 44 | _nx('%1$s response to “%2$s”', '%1$s responses to “%2$s”', get_comments_number(), 'comments title', 'sage'), 45 | get_comments_number() === 1 ? _x('One', 'comments title', 'sage') : number_format_i18n(get_comments_number()), 46 | get_the_title() 47 | ); 48 | } 49 | 50 | /** 51 | * Retrieve the comments. 52 | * 53 | * @return string 54 | */ 55 | public function responses() 56 | { 57 | if (! have_comments()) { 58 | return; 59 | } 60 | 61 | return wp_list_comments([ 62 | 'style' => 'ol', 63 | 'short_ping' => true, 64 | 'echo' => false, 65 | ]); 66 | } 67 | 68 | /** 69 | * The previous comments link. 70 | * 71 | * @return string 72 | */ 73 | public function previous() 74 | { 75 | if (! get_previous_comments_link()) { 76 | return; 77 | } 78 | 79 | return get_previous_comments_link( 80 | __('← Older comments', 'sage') 81 | ); 82 | } 83 | 84 | /** 85 | * The next comments link. 86 | * 87 | * @return string 88 | */ 89 | public function next() 90 | { 91 | if (! get_next_comments_link()) { 92 | return; 93 | } 94 | 95 | return get_next_comments_link( 96 | __('Newer comments →', 'sage') 97 | ); 98 | } 99 | 100 | /** 101 | * Determine if the comments are paginated. 102 | * 103 | * @return bool 104 | */ 105 | public function paginated() 106 | { 107 | return get_comment_pages_count() > 1 && get_option('page_comments'); 108 | } 109 | 110 | /** 111 | * Determine if the comments are closed. 112 | * 113 | * @return bool 114 | */ 115 | public function closed() 116 | { 117 | return ! comments_open() && get_comments_number() != '0' && post_type_supports(get_post_type(), 'comments'); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/app/View/Composers/Post.php: -------------------------------------------------------------------------------- 1 | $this->title(), 29 | 'pagination' => $this->pagination(), 30 | ]; 31 | } 32 | 33 | /** 34 | * Retrieve the post title. 35 | * 36 | * @return string 37 | */ 38 | public function title() 39 | { 40 | if ($this->view->name() !== 'partials.page-header') { 41 | return get_the_title(); 42 | } 43 | 44 | if (is_home()) { 45 | if ($home = get_option('page_for_posts', true)) { 46 | return get_the_title($home); 47 | } 48 | 49 | return __('Latest Posts', 'sage'); 50 | } 51 | 52 | if (is_archive()) { 53 | return get_the_archive_title(); 54 | } 55 | 56 | if (is_search()) { 57 | return sprintf( 58 | /* translators: %s is replaced with the search query */ 59 | __('Search Results for %s', 'sage'), 60 | get_search_query() 61 | ); 62 | } 63 | 64 | if (is_404()) { 65 | return __('Not Found', 'sage'); 66 | } 67 | 68 | return get_the_title(); 69 | } 70 | 71 | /** 72 | * Retrieve the pagination links. 73 | * 74 | * @return string 75 | */ 76 | public function pagination() 77 | { 78 | return wp_link_pages([ 79 | 'echo' => 0, 80 | 'before' => '

'.__('Pages:', 'sage'), 81 | 'after' => '

', 82 | ]); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/app/filters.php: -------------------------------------------------------------------------------- 1 | %s', get_permalink(), __('Continued', 'sage')); 16 | }); 17 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/app/setup.php: -------------------------------------------------------------------------------- 1 | enqueue(); 18 | }, 100); 19 | 20 | /** 21 | * Register the theme assets with the block editor. 22 | * 23 | * @return void 24 | */ 25 | add_action('enqueue_block_editor_assets', function () { 26 | bundle('editor')->enqueue(); 27 | }, 100); 28 | 29 | /** 30 | * Register the initial theme setup. 31 | * 32 | * @return void 33 | */ 34 | add_action('after_setup_theme', function () { 35 | /** 36 | * Disable full-site editing support. 37 | * 38 | * @link https://wptavern.com/gutenberg-10-5-embeds-pdfs-adds-verse-block-color-options-and-introduces-new-patterns 39 | */ 40 | remove_theme_support('block-templates'); 41 | 42 | /** 43 | * Register the navigation menus. 44 | * 45 | * @link https://developer.wordpress.org/reference/functions/register_nav_menus/ 46 | */ 47 | register_nav_menus([ 48 | 'primary_navigation' => __('Primary Navigation', 'sage'), 49 | ]); 50 | 51 | /** 52 | * Disable the default block patterns. 53 | * 54 | * @link https://developer.wordpress.org/block-editor/developers/themes/theme-support/#disabling-the-default-block-patterns 55 | */ 56 | remove_theme_support('core-block-patterns'); 57 | 58 | /** 59 | * Enable plugins to manage the document title. 60 | * 61 | * @link https://developer.wordpress.org/reference/functions/add_theme_support/#title-tag 62 | */ 63 | add_theme_support('title-tag'); 64 | 65 | /** 66 | * Enable post thumbnail support. 67 | * 68 | * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ 69 | */ 70 | add_theme_support('post-thumbnails'); 71 | 72 | /** 73 | * Enable responsive embed support. 74 | * 75 | * @link https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-support/#responsive-embedded-content 76 | */ 77 | add_theme_support('responsive-embeds'); 78 | 79 | /** 80 | * Enable HTML5 markup support. 81 | * 82 | * @link https://developer.wordpress.org/reference/functions/add_theme_support/#html5 83 | */ 84 | add_theme_support('html5', [ 85 | 'caption', 86 | 'comment-form', 87 | 'comment-list', 88 | 'gallery', 89 | 'search-form', 90 | 'script', 91 | 'style', 92 | ]); 93 | 94 | /** 95 | * Enable selective refresh for widgets in customizer. 96 | * 97 | * @link https://developer.wordpress.org/reference/functions/add_theme_support/#customize-selective-refresh-widgets 98 | */ 99 | add_theme_support('customize-selective-refresh-widgets'); 100 | }, 20); 101 | 102 | /** 103 | * Register the theme sidebars. 104 | * 105 | * @return void 106 | */ 107 | add_action('widgets_init', function () { 108 | $config = [ 109 | 'before_widget' => '
', 110 | 'after_widget' => '
', 111 | 'before_title' => '

', 112 | 'after_title' => '

', 113 | ]; 114 | 115 | register_sidebar([ 116 | 'name' => __('Primary', 'sage'), 117 | 'id' => 'sidebar-primary', 118 | ] + $config); 119 | 120 | register_sidebar([ 121 | 'name' => __('Footer', 'sage'), 122 | 'id' => 'sidebar-footer', 123 | ] + $config); 124 | }); 125 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/bud.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Compiler configuration 3 | * 4 | * @see {@link https://roots.io/sage/docs sage documentation} 5 | * @see {@link https://bud.js.org/learn/config bud.js configuration guide} 6 | * 7 | * @type {import('@roots/bud').Config} 8 | */ 9 | export default async (app) => { 10 | /** 11 | * Application assets & entrypoints 12 | * 13 | * @see {@link https://bud.js.org/reference/bud.entry} 14 | * @see {@link https://bud.js.org/reference/bud.assets} 15 | */ 16 | app 17 | .entry('app', ['@scripts/app', '@styles/app']) 18 | .entry('editor', ['@scripts/editor', '@styles/editor']) 19 | .assets(['images']); 20 | 21 | /** 22 | * Set public path 23 | * 24 | * @see {@link https://bud.js.org/reference/bud.setPublicPath} 25 | */ 26 | app.setPublicPath('/app/themes/sage/public/'); 27 | 28 | /** 29 | * Development server settings 30 | * 31 | * @see {@link https://bud.js.org/reference/bud.setUrl} 32 | * @see {@link https://bud.js.org/reference/bud.setProxyUrl} 33 | * @see {@link https://bud.js.org/reference/bud.watch} 34 | */ 35 | app 36 | .setUrl('http://localhost:3000') 37 | .setProxyUrl('http://example.test') 38 | .watch(['resources/views', 'app']); 39 | 40 | /** 41 | * Generate WordPress `theme.json` 42 | * 43 | * @note This overwrites `theme.json` on every build. 44 | * 45 | * @see {@link https://bud.js.org/extensions/sage/theme.json} 46 | * @see {@link https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-json} 47 | */ 48 | app.wpjson 49 | .setSettings({ 50 | background: { 51 | backgroundImage: true, 52 | }, 53 | color: { 54 | custom: false, 55 | customDuotone: false, 56 | customGradient: false, 57 | defaultDuotone: false, 58 | defaultGradients: false, 59 | defaultPalette: false, 60 | duotone: [], 61 | }, 62 | custom: { 63 | spacing: {}, 64 | typography: { 65 | 'font-size': {}, 66 | 'line-height': {}, 67 | }, 68 | }, 69 | spacing: { 70 | padding: true, 71 | units: ['px', '%', 'em', 'rem', 'vw', 'vh'], 72 | }, 73 | typography: { 74 | customFontSize: false, 75 | }, 76 | }) 77 | .useTailwindColors() 78 | .useTailwindFontFamily() 79 | .useTailwindFontSize(); 80 | }; 81 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "roots/sage", 3 | "type": "wordpress-theme", 4 | "license": "MIT", 5 | "description": "WordPress starter theme with a modern development workflow", 6 | "homepage": "https://roots.io/sage/", 7 | "authors": [ 8 | { 9 | "name": "Ben Word", 10 | "email": "ben@benword.com", 11 | "homepage": "https://github.com/retlehs" 12 | }, 13 | { 14 | "name": "Scott Walkinshaw", 15 | "email": "scott.walkinshaw@gmail.com", 16 | "homepage": "https://github.com/swalkinshaw" 17 | }, 18 | { 19 | "name": "QWp6t", 20 | "email": "hi@qwp6t.me", 21 | "homepage": "https://github.com/qwp6t" 22 | }, 23 | { 24 | "name": "Brandon Nifong", 25 | "email": "brandon@tendency.me", 26 | "homepage": "https://github.com/log1x" 27 | } 28 | ], 29 | "keywords": [ 30 | "wordpress" 31 | ], 32 | "support": { 33 | "issues": "https://github.com/roots/sage/issues", 34 | "forum": "https://discourse.roots.io/" 35 | }, 36 | "autoload": { 37 | "psr-4": { 38 | "App\\": "app/" 39 | } 40 | }, 41 | "require": { 42 | "php": ">=8.1", 43 | "roots/acorn": "^4.3" 44 | }, 45 | "require-dev": { 46 | "laravel/pint": "^1.13" 47 | }, 48 | "suggest": { 49 | "log1x/sage-directives": "A collection of useful Blade directives for WordPress and Sage (^1.0)." 50 | }, 51 | "config": { 52 | "optimize-autoloader": true, 53 | "preferred-install": "dist", 54 | "sort-packages": true 55 | }, 56 | "minimum-stability": "dev", 57 | "prefer-stable": true, 58 | "extra": { 59 | "acorn": { 60 | "providers": [ 61 | "App\\Providers\\ThemeServiceProvider" 62 | ] 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/functions.php: -------------------------------------------------------------------------------- 1 | composer install.', 'sage')); 16 | } 17 | 18 | require $composer; 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Register The Bootloader 23 | |-------------------------------------------------------------------------- 24 | | 25 | | The first thing we will do is schedule a new Acorn application container 26 | | to boot when WordPress is finished loading the theme. The application 27 | | serves as the "glue" for all the components of Laravel and is 28 | | the IoC container for the system binding all of the various parts. 29 | | 30 | */ 31 | 32 | if (! function_exists('\Roots\bootloader')) { 33 | wp_die( 34 | __('You need to install Acorn to use this theme.', 'sage'), 35 | '', 36 | [ 37 | 'link_url' => 'https://roots.io/acorn/docs/installation/', 38 | 'link_text' => __('Acorn Docs: Installation', 'sage'), 39 | ] 40 | ); 41 | } 42 | 43 | \Roots\bootloader()->boot(); 44 | 45 | /* 46 | |-------------------------------------------------------------------------- 47 | | Register Sage Theme Files 48 | |-------------------------------------------------------------------------- 49 | | 50 | | Out of the box, Sage ships with categorically named theme files 51 | | containing common functionality and setup to be bootstrapped with your 52 | | theme. Simply add (or remove) files from the array below to change what 53 | | is registered alongside Sage. 54 | | 55 | */ 56 | 57 | collect(['setup', 'filters']) 58 | ->each(function ($file) { 59 | if (! locate_template($file = "app/{$file}.php", true, true)) { 60 | wp_die( 61 | /* translators: %s is replaced with the relative file path */ 62 | sprintf(__('Error locating %s for inclusion.', 'sage'), $file) 63 | ); 64 | } 65 | }); 66 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/index.php: -------------------------------------------------------------------------------- 1 | render(); 4 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@roots/bud/config/jsconfig.json", 4 | "@roots/sage/config/jsconfig.json" 5 | ], 6 | "compilerOptions": { 7 | "baseUrl": "resources", 8 | /** 9 | * Resolve aliases 10 | */ 11 | "paths": { 12 | "@fonts/*": ["fonts/*"], 13 | "@images/*": ["images/*"], 14 | "@scripts/*": ["scripts/*"], 15 | "@styles/*": ["styles/*"] 16 | }, 17 | /** 18 | * Type definitions 19 | */ 20 | "types": [ 21 | "@roots/bud", 22 | "@roots/bud-react", 23 | "@roots/bud-postcss", 24 | "@roots/bud-preset-recommend", 25 | "@roots/bud-preset-wordpress", 26 | "@roots/bud-tailwindcss", 27 | "@roots/bud-wordpress-theme-json", 28 | "@roots/sage" 29 | ] 30 | }, 31 | "files": ["bud.config.js"], 32 | "include": ["resources"], 33 | "exclude": ["node_modules", "public"] 34 | } 35 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sage", 3 | "private": true, 4 | "browserslist": [ 5 | "extends @roots/browserslist-config" 6 | ], 7 | "engines": { 8 | "node": ">=20.0.0" 9 | }, 10 | "type": "module", 11 | "scripts": { 12 | "dev": "bud dev", 13 | "build": "bud build", 14 | "translate": "npm run translate:pot && npm run translate:update", 15 | "translate:pot": "wp i18n make-pot . ./resources/lang/sage.pot --include=\"theme.json,patterns,app,resources\"", 16 | "translate:update": "for file in ./resources/lang/*.po; do wp i18n update-po ./resources/lang/sage.pot $file; done", 17 | "translate:compile": "npm run translate:mo && npm run translate:js", 18 | "translate:js": "wp i18n make-json ./resources/lang --pretty-print", 19 | "translate:mo": "wp i18n make-mo ./resources/lang ./resources/lang" 20 | }, 21 | "devDependencies": { 22 | "@roots/bud": "6.20.0", 23 | "@roots/bud-tailwindcss": "6.20.0", 24 | "@roots/sage": "6.20.0" 25 | }, 26 | "dependencies": {} 27 | } 28 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/fonts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wpengine/example-sage-theme/912378f6a643c806973334369c1cceebc7bd2e11/wp-content/themes/your-roots-theme-name-here/resources/fonts/.gitkeep -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wpengine/example-sage-theme/912378f6a643c806973334369c1cceebc7bd2e11/wp-content/themes/your-roots-theme-name-here/resources/images/.gitkeep -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/scripts/app.js: -------------------------------------------------------------------------------- 1 | import domReady from '@roots/sage/client/dom-ready'; 2 | 3 | /** 4 | * Application entrypoint 5 | */ 6 | domReady(async () => { 7 | // ... 8 | }); 9 | 10 | /** 11 | * @see {@link https://webpack.js.org/api/hot-module-replacement/} 12 | */ 13 | if (import.meta.webpackHot) import.meta.webpackHot.accept(console.error); 14 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/scripts/editor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @see {@link https://bud.js.org/extensions/bud-preset-wordpress/editor-integration/filters} 3 | */ 4 | roots.register.filters('@scripts/filters'); 5 | 6 | /** 7 | * @see {@link https://webpack.js.org/api/hot-module-replacement/} 8 | */ 9 | if (import.meta.webpackHot) import.meta.webpackHot.accept(console.error); 10 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/scripts/filters/button.filter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @see {@link https://developer.wordpress.org/block-editor/reference-guides/filters/block-filters/#blocks-registerblocktype} 3 | */ 4 | export const hook = 'blocks.registerBlockType'; 5 | 6 | /** 7 | * Filter handle 8 | */ 9 | export const name = 'sage/button'; 10 | 11 | /** 12 | * Filter callback 13 | * 14 | * @param {object} settings 15 | * @param {string} name 16 | * @returns modified settings 17 | */ 18 | export function callback(settings, name) { 19 | if (name !== 'core/button') return settings; 20 | 21 | return { 22 | ...settings, 23 | styles: [{ label: 'Outline', name: 'outline' }], 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/styles/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/styles/editor.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wpengine/example-sage-theme/912378f6a643c806973334369c1cceebc7bd2e11/wp-content/themes/your-roots-theme-name-here/resources/styles/editor.css -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('partials.page-header') 5 | 6 | @if (! have_posts()) 7 | 8 | {!! __('Sorry, but the page you are trying to view does not exist.', 'sage') !!} 9 | 10 | 11 | {!! get_search_form(false) !!} 12 | @endif 13 | @endsection 14 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/components/alert.blade.php: -------------------------------------------------------------------------------- 1 | @props([ 2 | 'type' => null, 3 | 'message' => null, 4 | ]) 5 | 6 | @php($class = match ($type) { 7 | 'success' => 'text-green-50 bg-green-400', 8 | 'caution' => 'text-yellow-50 bg-yellow-400', 9 | 'warning' => 'text-red-50 bg-red-400', 10 | default => 'text-indigo-50 bg-indigo-400', 11 | }) 12 | 13 |
merge(['class' => "px-2 py-1 {$class}"]) }}> 14 | {!! $message ?? $slot !!} 15 |
16 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/forms/search.blade.php: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('partials.page-header') 5 | 6 | @if (! have_posts()) 7 | 8 | {!! __('Sorry, no results were found.', 'sage') !!} 9 | 10 | 11 | {!! get_search_form(false) !!} 12 | @endif 13 | 14 | @while(have_posts()) @php(the_post()) 15 | @includeFirst(['partials.content-' . get_post_type(), 'partials.content']) 16 | @endwhile 17 | 18 | {!! get_the_posts_navigation() !!} 19 | @endsection 20 | 21 | @section('sidebar') 22 | @include('sections.sidebar') 23 | @endsection 24 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/layouts/app.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @php(do_action('get_header')) 7 | @php(wp_head()) 8 | 9 | 10 | 11 | @php(wp_body_open()) 12 | 13 |
14 | 15 | {{ __('Skip to content') }} 16 | 17 | 18 | @include('sections.header') 19 | 20 |
21 | @yield('content') 22 |
23 | 24 | @hasSection('sidebar') 25 | 28 | @endif 29 | 30 | @include('sections.footer') 31 |
32 | 33 | @php(do_action('get_footer')) 34 | @php(wp_footer()) 35 | 36 | 37 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/page.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @while(have_posts()) @php(the_post()) 5 | @include('partials.page-header') 6 | @includeFirst(['partials.content-page', 'partials.content']) 7 | @endwhile 8 | @endsection 9 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/comments.blade.php: -------------------------------------------------------------------------------- 1 | @if (! post_password_required()) 2 |
3 | @if ($responses) 4 |

5 | {!! $title !!} 6 |

7 | 8 |
    9 | {!! $responses !!} 10 |
11 | 12 | @if ($paginated) 13 | 28 | @endif 29 | @endif 30 | 31 | @if ($closed) 32 | 33 | {!! __('Comments are closed.', 'sage') !!} 34 | 35 | @endif 36 | 37 | @php(comment_form()) 38 |
39 | @endif 40 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/content-page.blade.php: -------------------------------------------------------------------------------- 1 | @php(the_content()) 2 | 3 | @if ($pagination) 4 | 7 | @endif 8 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/content-search.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 5 | {!! $title !!} 6 | 7 |

8 | 9 | @includeWhen(get_post_type() === 'post', 'partials.entry-meta') 10 |
11 | 12 |
13 | @php(the_excerpt()) 14 |
15 |
16 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/content-single.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | {!! $title !!} 5 |

6 | 7 | @include('partials.entry-meta') 8 |
9 | 10 |
11 | @php(the_content()) 12 |
13 | 14 | @if ($pagination) 15 |
16 | 19 |
20 | @endif 21 | 22 | @php(comments_template()) 23 |
24 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/content.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 5 | {!! $title !!} 6 | 7 |

8 | 9 | @include('partials.entry-meta') 10 |
11 | 12 |
13 | @php(the_excerpt()) 14 |
15 |
16 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/entry-meta.blade.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |

6 | {{ __('By', 'sage') }} 7 | 8 | {{ get_the_author() }} 9 | 10 |

11 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/partials/page-header.blade.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/search.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('partials.page-header') 5 | 6 | @if (! have_posts()) 7 | 8 | {!! __('Sorry, no results were found.', 'sage') !!} 9 | 10 | 11 | {!! get_search_form(false) !!} 12 | @endif 13 | 14 | @while(have_posts()) @php(the_post()) 15 | @include('partials.content-search') 16 | @endwhile 17 | 18 | {!! get_the_posts_navigation() !!} 19 | @endsection 20 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/sections/footer.blade.php: -------------------------------------------------------------------------------- 1 |
2 | @php(dynamic_sidebar('sidebar-footer')) 3 |
4 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/sections/header.blade.php: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/sections/sidebar.blade.php: -------------------------------------------------------------------------------- 1 | @php(dynamic_sidebar('sidebar-primary')) 2 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/single.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @while(have_posts()) @php(the_post()) 5 | @includeFirst(['partials.content-single-' . get_post_type(), 'partials.content-single']) 6 | @endwhile 7 | @endsection 8 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/resources/views/template-custom.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 2 | Template Name: Custom Template 3 | --}} 4 | 5 | @extends('layouts.app') 6 | 7 | @section('content') 8 | @while(have_posts()) @php(the_post()) 9 | @include('partials.page-header') 10 | @include('partials.content-page') 11 | @endwhile 12 | @endsection 13 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wpengine/example-sage-theme/912378f6a643c806973334369c1cceebc7bd2e11/wp-content/themes/your-roots-theme-name-here/screenshot.png -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: Sage Starter Theme 3 | Theme URI: https://roots.io/sage/ 4 | Description: Sage is a WordPress starter theme. 5 | Version: 10.8.2 6 | Author: Roots 7 | Author URI: https://roots.io/ 8 | Text Domain: sage 9 | License: MIT License 10 | License URI: https://opensource.org/licenses/MIT 11 | Requires PHP: 8.1 12 | Requires at least: 5.9 13 | */ 14 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} config */ 2 | const config = { 3 | content: ['./app/**/*.php', './resources/**/*.{php,vue,js}'], 4 | theme: { 5 | extend: { 6 | colors: {}, // Extend Tailwind's default colors 7 | }, 8 | }, 9 | plugins: [], 10 | }; 11 | 12 | export default config; 13 | -------------------------------------------------------------------------------- /wp-content/themes/your-roots-theme-name-here/theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "__generated__": "⚠️ This file is generated. Do not edit.", 3 | "$schema": "https://schemas.wp.org/trunk/theme.json", 4 | "version": 2, 5 | "settings": { 6 | "background": { 7 | "backgroundImage": true 8 | }, 9 | "color": { 10 | "custom": false, 11 | "customDuotone": false, 12 | "customGradient": false, 13 | "defaultDuotone": false, 14 | "defaultGradients": false, 15 | "defaultPalette": false, 16 | "duotone": [], 17 | "palette": [ 18 | { 19 | "color": "inherit", 20 | "name": "Inherit", 21 | "slug": "inherit" 22 | }, 23 | { 24 | "color": "currentcolor", 25 | "name": "Current", 26 | "slug": "current" 27 | }, 28 | { 29 | "color": "transparent", 30 | "name": "Transparent", 31 | "slug": "transparent" 32 | }, 33 | { 34 | "color": "#000", 35 | "name": "Black", 36 | "slug": "black" 37 | }, 38 | { 39 | "color": "#fff", 40 | "name": "White", 41 | "slug": "white" 42 | }, 43 | { 44 | "color": "#f8fafc", 45 | "name": "Slate 50", 46 | "slug": "slate-50" 47 | }, 48 | { 49 | "color": "#f1f5f9", 50 | "name": "Slate 100", 51 | "slug": "slate-100" 52 | }, 53 | { 54 | "color": "#e2e8f0", 55 | "name": "Slate 200", 56 | "slug": "slate-200" 57 | }, 58 | { 59 | "color": "#cbd5e1", 60 | "name": "Slate 300", 61 | "slug": "slate-300" 62 | }, 63 | { 64 | "color": "#94a3b8", 65 | "name": "Slate 400", 66 | "slug": "slate-400" 67 | }, 68 | { 69 | "color": "#64748b", 70 | "name": "Slate 500", 71 | "slug": "slate-500" 72 | }, 73 | { 74 | "color": "#475569", 75 | "name": "Slate 600", 76 | "slug": "slate-600" 77 | }, 78 | { 79 | "color": "#334155", 80 | "name": "Slate 700", 81 | "slug": "slate-700" 82 | }, 83 | { 84 | "color": "#1e293b", 85 | "name": "Slate 800", 86 | "slug": "slate-800" 87 | }, 88 | { 89 | "color": "#0f172a", 90 | "name": "Slate 900", 91 | "slug": "slate-900" 92 | }, 93 | { 94 | "color": "#020617", 95 | "name": "Slate 950", 96 | "slug": "slate-950" 97 | }, 98 | { 99 | "color": "#f9fafb", 100 | "name": "Gray 50", 101 | "slug": "gray-50" 102 | }, 103 | { 104 | "color": "#f3f4f6", 105 | "name": "Gray 100", 106 | "slug": "gray-100" 107 | }, 108 | { 109 | "color": "#e5e7eb", 110 | "name": "Gray 200", 111 | "slug": "gray-200" 112 | }, 113 | { 114 | "color": "#d1d5db", 115 | "name": "Gray 300", 116 | "slug": "gray-300" 117 | }, 118 | { 119 | "color": "#9ca3af", 120 | "name": "Gray 400", 121 | "slug": "gray-400" 122 | }, 123 | { 124 | "color": "#6b7280", 125 | "name": "Gray 500", 126 | "slug": "gray-500" 127 | }, 128 | { 129 | "color": "#4b5563", 130 | "name": "Gray 600", 131 | "slug": "gray-600" 132 | }, 133 | { 134 | "color": "#374151", 135 | "name": "Gray 700", 136 | "slug": "gray-700" 137 | }, 138 | { 139 | "color": "#1f2937", 140 | "name": "Gray 800", 141 | "slug": "gray-800" 142 | }, 143 | { 144 | "color": "#111827", 145 | "name": "Gray 900", 146 | "slug": "gray-900" 147 | }, 148 | { 149 | "color": "#030712", 150 | "name": "Gray 950", 151 | "slug": "gray-950" 152 | }, 153 | { 154 | "color": "#fafafa", 155 | "name": "Zinc 50", 156 | "slug": "zinc-50" 157 | }, 158 | { 159 | "color": "#f4f4f5", 160 | "name": "Zinc 100", 161 | "slug": "zinc-100" 162 | }, 163 | { 164 | "color": "#e4e4e7", 165 | "name": "Zinc 200", 166 | "slug": "zinc-200" 167 | }, 168 | { 169 | "color": "#d4d4d8", 170 | "name": "Zinc 300", 171 | "slug": "zinc-300" 172 | }, 173 | { 174 | "color": "#a1a1aa", 175 | "name": "Zinc 400", 176 | "slug": "zinc-400" 177 | }, 178 | { 179 | "color": "#71717a", 180 | "name": "Zinc 500", 181 | "slug": "zinc-500" 182 | }, 183 | { 184 | "color": "#52525b", 185 | "name": "Zinc 600", 186 | "slug": "zinc-600" 187 | }, 188 | { 189 | "color": "#3f3f46", 190 | "name": "Zinc 700", 191 | "slug": "zinc-700" 192 | }, 193 | { 194 | "color": "#27272a", 195 | "name": "Zinc 800", 196 | "slug": "zinc-800" 197 | }, 198 | { 199 | "color": "#18181b", 200 | "name": "Zinc 900", 201 | "slug": "zinc-900" 202 | }, 203 | { 204 | "color": "#09090b", 205 | "name": "Zinc 950", 206 | "slug": "zinc-950" 207 | }, 208 | { 209 | "color": "#fafafa", 210 | "name": "Neutral 50", 211 | "slug": "neutral-50" 212 | }, 213 | { 214 | "color": "#f5f5f5", 215 | "name": "Neutral 100", 216 | "slug": "neutral-100" 217 | }, 218 | { 219 | "color": "#e5e5e5", 220 | "name": "Neutral 200", 221 | "slug": "neutral-200" 222 | }, 223 | { 224 | "color": "#d4d4d4", 225 | "name": "Neutral 300", 226 | "slug": "neutral-300" 227 | }, 228 | { 229 | "color": "#a3a3a3", 230 | "name": "Neutral 400", 231 | "slug": "neutral-400" 232 | }, 233 | { 234 | "color": "#737373", 235 | "name": "Neutral 500", 236 | "slug": "neutral-500" 237 | }, 238 | { 239 | "color": "#525252", 240 | "name": "Neutral 600", 241 | "slug": "neutral-600" 242 | }, 243 | { 244 | "color": "#404040", 245 | "name": "Neutral 700", 246 | "slug": "neutral-700" 247 | }, 248 | { 249 | "color": "#262626", 250 | "name": "Neutral 800", 251 | "slug": "neutral-800" 252 | }, 253 | { 254 | "color": "#171717", 255 | "name": "Neutral 900", 256 | "slug": "neutral-900" 257 | }, 258 | { 259 | "color": "#0a0a0a", 260 | "name": "Neutral 950", 261 | "slug": "neutral-950" 262 | }, 263 | { 264 | "color": "#fafaf9", 265 | "name": "Stone 50", 266 | "slug": "stone-50" 267 | }, 268 | { 269 | "color": "#f5f5f4", 270 | "name": "Stone 100", 271 | "slug": "stone-100" 272 | }, 273 | { 274 | "color": "#e7e5e4", 275 | "name": "Stone 200", 276 | "slug": "stone-200" 277 | }, 278 | { 279 | "color": "#d6d3d1", 280 | "name": "Stone 300", 281 | "slug": "stone-300" 282 | }, 283 | { 284 | "color": "#a8a29e", 285 | "name": "Stone 400", 286 | "slug": "stone-400" 287 | }, 288 | { 289 | "color": "#78716c", 290 | "name": "Stone 500", 291 | "slug": "stone-500" 292 | }, 293 | { 294 | "color": "#57534e", 295 | "name": "Stone 600", 296 | "slug": "stone-600" 297 | }, 298 | { 299 | "color": "#44403c", 300 | "name": "Stone 700", 301 | "slug": "stone-700" 302 | }, 303 | { 304 | "color": "#292524", 305 | "name": "Stone 800", 306 | "slug": "stone-800" 307 | }, 308 | { 309 | "color": "#1c1917", 310 | "name": "Stone 900", 311 | "slug": "stone-900" 312 | }, 313 | { 314 | "color": "#0c0a09", 315 | "name": "Stone 950", 316 | "slug": "stone-950" 317 | }, 318 | { 319 | "color": "#fef2f2", 320 | "name": "Red 50", 321 | "slug": "red-50" 322 | }, 323 | { 324 | "color": "#fee2e2", 325 | "name": "Red 100", 326 | "slug": "red-100" 327 | }, 328 | { 329 | "color": "#fecaca", 330 | "name": "Red 200", 331 | "slug": "red-200" 332 | }, 333 | { 334 | "color": "#fca5a5", 335 | "name": "Red 300", 336 | "slug": "red-300" 337 | }, 338 | { 339 | "color": "#f87171", 340 | "name": "Red 400", 341 | "slug": "red-400" 342 | }, 343 | { 344 | "color": "#ef4444", 345 | "name": "Red 500", 346 | "slug": "red-500" 347 | }, 348 | { 349 | "color": "#dc2626", 350 | "name": "Red 600", 351 | "slug": "red-600" 352 | }, 353 | { 354 | "color": "#b91c1c", 355 | "name": "Red 700", 356 | "slug": "red-700" 357 | }, 358 | { 359 | "color": "#991b1b", 360 | "name": "Red 800", 361 | "slug": "red-800" 362 | }, 363 | { 364 | "color": "#7f1d1d", 365 | "name": "Red 900", 366 | "slug": "red-900" 367 | }, 368 | { 369 | "color": "#450a0a", 370 | "name": "Red 950", 371 | "slug": "red-950" 372 | }, 373 | { 374 | "color": "#fff7ed", 375 | "name": "Orange 50", 376 | "slug": "orange-50" 377 | }, 378 | { 379 | "color": "#ffedd5", 380 | "name": "Orange 100", 381 | "slug": "orange-100" 382 | }, 383 | { 384 | "color": "#fed7aa", 385 | "name": "Orange 200", 386 | "slug": "orange-200" 387 | }, 388 | { 389 | "color": "#fdba74", 390 | "name": "Orange 300", 391 | "slug": "orange-300" 392 | }, 393 | { 394 | "color": "#fb923c", 395 | "name": "Orange 400", 396 | "slug": "orange-400" 397 | }, 398 | { 399 | "color": "#f97316", 400 | "name": "Orange 500", 401 | "slug": "orange-500" 402 | }, 403 | { 404 | "color": "#ea580c", 405 | "name": "Orange 600", 406 | "slug": "orange-600" 407 | }, 408 | { 409 | "color": "#c2410c", 410 | "name": "Orange 700", 411 | "slug": "orange-700" 412 | }, 413 | { 414 | "color": "#9a3412", 415 | "name": "Orange 800", 416 | "slug": "orange-800" 417 | }, 418 | { 419 | "color": "#7c2d12", 420 | "name": "Orange 900", 421 | "slug": "orange-900" 422 | }, 423 | { 424 | "color": "#431407", 425 | "name": "Orange 950", 426 | "slug": "orange-950" 427 | }, 428 | { 429 | "color": "#fffbeb", 430 | "name": "Amber 50", 431 | "slug": "amber-50" 432 | }, 433 | { 434 | "color": "#fef3c7", 435 | "name": "Amber 100", 436 | "slug": "amber-100" 437 | }, 438 | { 439 | "color": "#fde68a", 440 | "name": "Amber 200", 441 | "slug": "amber-200" 442 | }, 443 | { 444 | "color": "#fcd34d", 445 | "name": "Amber 300", 446 | "slug": "amber-300" 447 | }, 448 | { 449 | "color": "#fbbf24", 450 | "name": "Amber 400", 451 | "slug": "amber-400" 452 | }, 453 | { 454 | "color": "#f59e0b", 455 | "name": "Amber 500", 456 | "slug": "amber-500" 457 | }, 458 | { 459 | "color": "#d97706", 460 | "name": "Amber 600", 461 | "slug": "amber-600" 462 | }, 463 | { 464 | "color": "#b45309", 465 | "name": "Amber 700", 466 | "slug": "amber-700" 467 | }, 468 | { 469 | "color": "#92400e", 470 | "name": "Amber 800", 471 | "slug": "amber-800" 472 | }, 473 | { 474 | "color": "#78350f", 475 | "name": "Amber 900", 476 | "slug": "amber-900" 477 | }, 478 | { 479 | "color": "#451a03", 480 | "name": "Amber 950", 481 | "slug": "amber-950" 482 | }, 483 | { 484 | "color": "#fefce8", 485 | "name": "Yellow 50", 486 | "slug": "yellow-50" 487 | }, 488 | { 489 | "color": "#fef9c3", 490 | "name": "Yellow 100", 491 | "slug": "yellow-100" 492 | }, 493 | { 494 | "color": "#fef08a", 495 | "name": "Yellow 200", 496 | "slug": "yellow-200" 497 | }, 498 | { 499 | "color": "#fde047", 500 | "name": "Yellow 300", 501 | "slug": "yellow-300" 502 | }, 503 | { 504 | "color": "#facc15", 505 | "name": "Yellow 400", 506 | "slug": "yellow-400" 507 | }, 508 | { 509 | "color": "#eab308", 510 | "name": "Yellow 500", 511 | "slug": "yellow-500" 512 | }, 513 | { 514 | "color": "#ca8a04", 515 | "name": "Yellow 600", 516 | "slug": "yellow-600" 517 | }, 518 | { 519 | "color": "#a16207", 520 | "name": "Yellow 700", 521 | "slug": "yellow-700" 522 | }, 523 | { 524 | "color": "#854d0e", 525 | "name": "Yellow 800", 526 | "slug": "yellow-800" 527 | }, 528 | { 529 | "color": "#713f12", 530 | "name": "Yellow 900", 531 | "slug": "yellow-900" 532 | }, 533 | { 534 | "color": "#422006", 535 | "name": "Yellow 950", 536 | "slug": "yellow-950" 537 | }, 538 | { 539 | "color": "#f7fee7", 540 | "name": "Lime 50", 541 | "slug": "lime-50" 542 | }, 543 | { 544 | "color": "#ecfccb", 545 | "name": "Lime 100", 546 | "slug": "lime-100" 547 | }, 548 | { 549 | "color": "#d9f99d", 550 | "name": "Lime 200", 551 | "slug": "lime-200" 552 | }, 553 | { 554 | "color": "#bef264", 555 | "name": "Lime 300", 556 | "slug": "lime-300" 557 | }, 558 | { 559 | "color": "#a3e635", 560 | "name": "Lime 400", 561 | "slug": "lime-400" 562 | }, 563 | { 564 | "color": "#84cc16", 565 | "name": "Lime 500", 566 | "slug": "lime-500" 567 | }, 568 | { 569 | "color": "#65a30d", 570 | "name": "Lime 600", 571 | "slug": "lime-600" 572 | }, 573 | { 574 | "color": "#4d7c0f", 575 | "name": "Lime 700", 576 | "slug": "lime-700" 577 | }, 578 | { 579 | "color": "#3f6212", 580 | "name": "Lime 800", 581 | "slug": "lime-800" 582 | }, 583 | { 584 | "color": "#365314", 585 | "name": "Lime 900", 586 | "slug": "lime-900" 587 | }, 588 | { 589 | "color": "#1a2e05", 590 | "name": "Lime 950", 591 | "slug": "lime-950" 592 | }, 593 | { 594 | "color": "#f0fdf4", 595 | "name": "Green 50", 596 | "slug": "green-50" 597 | }, 598 | { 599 | "color": "#dcfce7", 600 | "name": "Green 100", 601 | "slug": "green-100" 602 | }, 603 | { 604 | "color": "#bbf7d0", 605 | "name": "Green 200", 606 | "slug": "green-200" 607 | }, 608 | { 609 | "color": "#86efac", 610 | "name": "Green 300", 611 | "slug": "green-300" 612 | }, 613 | { 614 | "color": "#4ade80", 615 | "name": "Green 400", 616 | "slug": "green-400" 617 | }, 618 | { 619 | "color": "#22c55e", 620 | "name": "Green 500", 621 | "slug": "green-500" 622 | }, 623 | { 624 | "color": "#16a34a", 625 | "name": "Green 600", 626 | "slug": "green-600" 627 | }, 628 | { 629 | "color": "#15803d", 630 | "name": "Green 700", 631 | "slug": "green-700" 632 | }, 633 | { 634 | "color": "#166534", 635 | "name": "Green 800", 636 | "slug": "green-800" 637 | }, 638 | { 639 | "color": "#14532d", 640 | "name": "Green 900", 641 | "slug": "green-900" 642 | }, 643 | { 644 | "color": "#052e16", 645 | "name": "Green 950", 646 | "slug": "green-950" 647 | }, 648 | { 649 | "color": "#ecfdf5", 650 | "name": "Emerald 50", 651 | "slug": "emerald-50" 652 | }, 653 | { 654 | "color": "#d1fae5", 655 | "name": "Emerald 100", 656 | "slug": "emerald-100" 657 | }, 658 | { 659 | "color": "#a7f3d0", 660 | "name": "Emerald 200", 661 | "slug": "emerald-200" 662 | }, 663 | { 664 | "color": "#6ee7b7", 665 | "name": "Emerald 300", 666 | "slug": "emerald-300" 667 | }, 668 | { 669 | "color": "#34d399", 670 | "name": "Emerald 400", 671 | "slug": "emerald-400" 672 | }, 673 | { 674 | "color": "#10b981", 675 | "name": "Emerald 500", 676 | "slug": "emerald-500" 677 | }, 678 | { 679 | "color": "#059669", 680 | "name": "Emerald 600", 681 | "slug": "emerald-600" 682 | }, 683 | { 684 | "color": "#047857", 685 | "name": "Emerald 700", 686 | "slug": "emerald-700" 687 | }, 688 | { 689 | "color": "#065f46", 690 | "name": "Emerald 800", 691 | "slug": "emerald-800" 692 | }, 693 | { 694 | "color": "#064e3b", 695 | "name": "Emerald 900", 696 | "slug": "emerald-900" 697 | }, 698 | { 699 | "color": "#022c22", 700 | "name": "Emerald 950", 701 | "slug": "emerald-950" 702 | }, 703 | { 704 | "color": "#f0fdfa", 705 | "name": "Teal 50", 706 | "slug": "teal-50" 707 | }, 708 | { 709 | "color": "#ccfbf1", 710 | "name": "Teal 100", 711 | "slug": "teal-100" 712 | }, 713 | { 714 | "color": "#99f6e4", 715 | "name": "Teal 200", 716 | "slug": "teal-200" 717 | }, 718 | { 719 | "color": "#5eead4", 720 | "name": "Teal 300", 721 | "slug": "teal-300" 722 | }, 723 | { 724 | "color": "#2dd4bf", 725 | "name": "Teal 400", 726 | "slug": "teal-400" 727 | }, 728 | { 729 | "color": "#14b8a6", 730 | "name": "Teal 500", 731 | "slug": "teal-500" 732 | }, 733 | { 734 | "color": "#0d9488", 735 | "name": "Teal 600", 736 | "slug": "teal-600" 737 | }, 738 | { 739 | "color": "#0f766e", 740 | "name": "Teal 700", 741 | "slug": "teal-700" 742 | }, 743 | { 744 | "color": "#115e59", 745 | "name": "Teal 800", 746 | "slug": "teal-800" 747 | }, 748 | { 749 | "color": "#134e4a", 750 | "name": "Teal 900", 751 | "slug": "teal-900" 752 | }, 753 | { 754 | "color": "#042f2e", 755 | "name": "Teal 950", 756 | "slug": "teal-950" 757 | }, 758 | { 759 | "color": "#ecfeff", 760 | "name": "Cyan 50", 761 | "slug": "cyan-50" 762 | }, 763 | { 764 | "color": "#cffafe", 765 | "name": "Cyan 100", 766 | "slug": "cyan-100" 767 | }, 768 | { 769 | "color": "#a5f3fc", 770 | "name": "Cyan 200", 771 | "slug": "cyan-200" 772 | }, 773 | { 774 | "color": "#67e8f9", 775 | "name": "Cyan 300", 776 | "slug": "cyan-300" 777 | }, 778 | { 779 | "color": "#22d3ee", 780 | "name": "Cyan 400", 781 | "slug": "cyan-400" 782 | }, 783 | { 784 | "color": "#06b6d4", 785 | "name": "Cyan 500", 786 | "slug": "cyan-500" 787 | }, 788 | { 789 | "color": "#0891b2", 790 | "name": "Cyan 600", 791 | "slug": "cyan-600" 792 | }, 793 | { 794 | "color": "#0e7490", 795 | "name": "Cyan 700", 796 | "slug": "cyan-700" 797 | }, 798 | { 799 | "color": "#155e75", 800 | "name": "Cyan 800", 801 | "slug": "cyan-800" 802 | }, 803 | { 804 | "color": "#164e63", 805 | "name": "Cyan 900", 806 | "slug": "cyan-900" 807 | }, 808 | { 809 | "color": "#083344", 810 | "name": "Cyan 950", 811 | "slug": "cyan-950" 812 | }, 813 | { 814 | "color": "#f0f9ff", 815 | "name": "Sky 50", 816 | "slug": "sky-50" 817 | }, 818 | { 819 | "color": "#e0f2fe", 820 | "name": "Sky 100", 821 | "slug": "sky-100" 822 | }, 823 | { 824 | "color": "#bae6fd", 825 | "name": "Sky 200", 826 | "slug": "sky-200" 827 | }, 828 | { 829 | "color": "#7dd3fc", 830 | "name": "Sky 300", 831 | "slug": "sky-300" 832 | }, 833 | { 834 | "color": "#38bdf8", 835 | "name": "Sky 400", 836 | "slug": "sky-400" 837 | }, 838 | { 839 | "color": "#0ea5e9", 840 | "name": "Sky 500", 841 | "slug": "sky-500" 842 | }, 843 | { 844 | "color": "#0284c7", 845 | "name": "Sky 600", 846 | "slug": "sky-600" 847 | }, 848 | { 849 | "color": "#0369a1", 850 | "name": "Sky 700", 851 | "slug": "sky-700" 852 | }, 853 | { 854 | "color": "#075985", 855 | "name": "Sky 800", 856 | "slug": "sky-800" 857 | }, 858 | { 859 | "color": "#0c4a6e", 860 | "name": "Sky 900", 861 | "slug": "sky-900" 862 | }, 863 | { 864 | "color": "#082f49", 865 | "name": "Sky 950", 866 | "slug": "sky-950" 867 | }, 868 | { 869 | "color": "#eff6ff", 870 | "name": "Blue 50", 871 | "slug": "blue-50" 872 | }, 873 | { 874 | "color": "#dbeafe", 875 | "name": "Blue 100", 876 | "slug": "blue-100" 877 | }, 878 | { 879 | "color": "#bfdbfe", 880 | "name": "Blue 200", 881 | "slug": "blue-200" 882 | }, 883 | { 884 | "color": "#93c5fd", 885 | "name": "Blue 300", 886 | "slug": "blue-300" 887 | }, 888 | { 889 | "color": "#60a5fa", 890 | "name": "Blue 400", 891 | "slug": "blue-400" 892 | }, 893 | { 894 | "color": "#3b82f6", 895 | "name": "Blue 500", 896 | "slug": "blue-500" 897 | }, 898 | { 899 | "color": "#2563eb", 900 | "name": "Blue 600", 901 | "slug": "blue-600" 902 | }, 903 | { 904 | "color": "#1d4ed8", 905 | "name": "Blue 700", 906 | "slug": "blue-700" 907 | }, 908 | { 909 | "color": "#1e40af", 910 | "name": "Blue 800", 911 | "slug": "blue-800" 912 | }, 913 | { 914 | "color": "#1e3a8a", 915 | "name": "Blue 900", 916 | "slug": "blue-900" 917 | }, 918 | { 919 | "color": "#172554", 920 | "name": "Blue 950", 921 | "slug": "blue-950" 922 | }, 923 | { 924 | "color": "#eef2ff", 925 | "name": "Indigo 50", 926 | "slug": "indigo-50" 927 | }, 928 | { 929 | "color": "#e0e7ff", 930 | "name": "Indigo 100", 931 | "slug": "indigo-100" 932 | }, 933 | { 934 | "color": "#c7d2fe", 935 | "name": "Indigo 200", 936 | "slug": "indigo-200" 937 | }, 938 | { 939 | "color": "#a5b4fc", 940 | "name": "Indigo 300", 941 | "slug": "indigo-300" 942 | }, 943 | { 944 | "color": "#818cf8", 945 | "name": "Indigo 400", 946 | "slug": "indigo-400" 947 | }, 948 | { 949 | "color": "#6366f1", 950 | "name": "Indigo 500", 951 | "slug": "indigo-500" 952 | }, 953 | { 954 | "color": "#4f46e5", 955 | "name": "Indigo 600", 956 | "slug": "indigo-600" 957 | }, 958 | { 959 | "color": "#4338ca", 960 | "name": "Indigo 700", 961 | "slug": "indigo-700" 962 | }, 963 | { 964 | "color": "#3730a3", 965 | "name": "Indigo 800", 966 | "slug": "indigo-800" 967 | }, 968 | { 969 | "color": "#312e81", 970 | "name": "Indigo 900", 971 | "slug": "indigo-900" 972 | }, 973 | { 974 | "color": "#1e1b4b", 975 | "name": "Indigo 950", 976 | "slug": "indigo-950" 977 | }, 978 | { 979 | "color": "#f5f3ff", 980 | "name": "Violet 50", 981 | "slug": "violet-50" 982 | }, 983 | { 984 | "color": "#ede9fe", 985 | "name": "Violet 100", 986 | "slug": "violet-100" 987 | }, 988 | { 989 | "color": "#ddd6fe", 990 | "name": "Violet 200", 991 | "slug": "violet-200" 992 | }, 993 | { 994 | "color": "#c4b5fd", 995 | "name": "Violet 300", 996 | "slug": "violet-300" 997 | }, 998 | { 999 | "color": "#a78bfa", 1000 | "name": "Violet 400", 1001 | "slug": "violet-400" 1002 | }, 1003 | { 1004 | "color": "#8b5cf6", 1005 | "name": "Violet 500", 1006 | "slug": "violet-500" 1007 | }, 1008 | { 1009 | "color": "#7c3aed", 1010 | "name": "Violet 600", 1011 | "slug": "violet-600" 1012 | }, 1013 | { 1014 | "color": "#6d28d9", 1015 | "name": "Violet 700", 1016 | "slug": "violet-700" 1017 | }, 1018 | { 1019 | "color": "#5b21b6", 1020 | "name": "Violet 800", 1021 | "slug": "violet-800" 1022 | }, 1023 | { 1024 | "color": "#4c1d95", 1025 | "name": "Violet 900", 1026 | "slug": "violet-900" 1027 | }, 1028 | { 1029 | "color": "#2e1065", 1030 | "name": "Violet 950", 1031 | "slug": "violet-950" 1032 | }, 1033 | { 1034 | "color": "#faf5ff", 1035 | "name": "Purple 50", 1036 | "slug": "purple-50" 1037 | }, 1038 | { 1039 | "color": "#f3e8ff", 1040 | "name": "Purple 100", 1041 | "slug": "purple-100" 1042 | }, 1043 | { 1044 | "color": "#e9d5ff", 1045 | "name": "Purple 200", 1046 | "slug": "purple-200" 1047 | }, 1048 | { 1049 | "color": "#d8b4fe", 1050 | "name": "Purple 300", 1051 | "slug": "purple-300" 1052 | }, 1053 | { 1054 | "color": "#c084fc", 1055 | "name": "Purple 400", 1056 | "slug": "purple-400" 1057 | }, 1058 | { 1059 | "color": "#a855f7", 1060 | "name": "Purple 500", 1061 | "slug": "purple-500" 1062 | }, 1063 | { 1064 | "color": "#9333ea", 1065 | "name": "Purple 600", 1066 | "slug": "purple-600" 1067 | }, 1068 | { 1069 | "color": "#7e22ce", 1070 | "name": "Purple 700", 1071 | "slug": "purple-700" 1072 | }, 1073 | { 1074 | "color": "#6b21a8", 1075 | "name": "Purple 800", 1076 | "slug": "purple-800" 1077 | }, 1078 | { 1079 | "color": "#581c87", 1080 | "name": "Purple 900", 1081 | "slug": "purple-900" 1082 | }, 1083 | { 1084 | "color": "#3b0764", 1085 | "name": "Purple 950", 1086 | "slug": "purple-950" 1087 | }, 1088 | { 1089 | "color": "#fdf4ff", 1090 | "name": "Fuchsia 50", 1091 | "slug": "fuchsia-50" 1092 | }, 1093 | { 1094 | "color": "#fae8ff", 1095 | "name": "Fuchsia 100", 1096 | "slug": "fuchsia-100" 1097 | }, 1098 | { 1099 | "color": "#f5d0fe", 1100 | "name": "Fuchsia 200", 1101 | "slug": "fuchsia-200" 1102 | }, 1103 | { 1104 | "color": "#f0abfc", 1105 | "name": "Fuchsia 300", 1106 | "slug": "fuchsia-300" 1107 | }, 1108 | { 1109 | "color": "#e879f9", 1110 | "name": "Fuchsia 400", 1111 | "slug": "fuchsia-400" 1112 | }, 1113 | { 1114 | "color": "#d946ef", 1115 | "name": "Fuchsia 500", 1116 | "slug": "fuchsia-500" 1117 | }, 1118 | { 1119 | "color": "#c026d3", 1120 | "name": "Fuchsia 600", 1121 | "slug": "fuchsia-600" 1122 | }, 1123 | { 1124 | "color": "#a21caf", 1125 | "name": "Fuchsia 700", 1126 | "slug": "fuchsia-700" 1127 | }, 1128 | { 1129 | "color": "#86198f", 1130 | "name": "Fuchsia 800", 1131 | "slug": "fuchsia-800" 1132 | }, 1133 | { 1134 | "color": "#701a75", 1135 | "name": "Fuchsia 900", 1136 | "slug": "fuchsia-900" 1137 | }, 1138 | { 1139 | "color": "#4a044e", 1140 | "name": "Fuchsia 950", 1141 | "slug": "fuchsia-950" 1142 | }, 1143 | { 1144 | "color": "#fdf2f8", 1145 | "name": "Pink 50", 1146 | "slug": "pink-50" 1147 | }, 1148 | { 1149 | "color": "#fce7f3", 1150 | "name": "Pink 100", 1151 | "slug": "pink-100" 1152 | }, 1153 | { 1154 | "color": "#fbcfe8", 1155 | "name": "Pink 200", 1156 | "slug": "pink-200" 1157 | }, 1158 | { 1159 | "color": "#f9a8d4", 1160 | "name": "Pink 300", 1161 | "slug": "pink-300" 1162 | }, 1163 | { 1164 | "color": "#f472b6", 1165 | "name": "Pink 400", 1166 | "slug": "pink-400" 1167 | }, 1168 | { 1169 | "color": "#ec4899", 1170 | "name": "Pink 500", 1171 | "slug": "pink-500" 1172 | }, 1173 | { 1174 | "color": "#db2777", 1175 | "name": "Pink 600", 1176 | "slug": "pink-600" 1177 | }, 1178 | { 1179 | "color": "#be185d", 1180 | "name": "Pink 700", 1181 | "slug": "pink-700" 1182 | }, 1183 | { 1184 | "color": "#9d174d", 1185 | "name": "Pink 800", 1186 | "slug": "pink-800" 1187 | }, 1188 | { 1189 | "color": "#831843", 1190 | "name": "Pink 900", 1191 | "slug": "pink-900" 1192 | }, 1193 | { 1194 | "color": "#500724", 1195 | "name": "Pink 950", 1196 | "slug": "pink-950" 1197 | }, 1198 | { 1199 | "color": "#fff1f2", 1200 | "name": "Rose 50", 1201 | "slug": "rose-50" 1202 | }, 1203 | { 1204 | "color": "#ffe4e6", 1205 | "name": "Rose 100", 1206 | "slug": "rose-100" 1207 | }, 1208 | { 1209 | "color": "#fecdd3", 1210 | "name": "Rose 200", 1211 | "slug": "rose-200" 1212 | }, 1213 | { 1214 | "color": "#fda4af", 1215 | "name": "Rose 300", 1216 | "slug": "rose-300" 1217 | }, 1218 | { 1219 | "color": "#fb7185", 1220 | "name": "Rose 400", 1221 | "slug": "rose-400" 1222 | }, 1223 | { 1224 | "color": "#f43f5e", 1225 | "name": "Rose 500", 1226 | "slug": "rose-500" 1227 | }, 1228 | { 1229 | "color": "#e11d48", 1230 | "name": "Rose 600", 1231 | "slug": "rose-600" 1232 | }, 1233 | { 1234 | "color": "#be123c", 1235 | "name": "Rose 700", 1236 | "slug": "rose-700" 1237 | }, 1238 | { 1239 | "color": "#9f1239", 1240 | "name": "Rose 800", 1241 | "slug": "rose-800" 1242 | }, 1243 | { 1244 | "color": "#881337", 1245 | "name": "Rose 900", 1246 | "slug": "rose-900" 1247 | }, 1248 | { 1249 | "color": "#4c0519", 1250 | "name": "Rose 950", 1251 | "slug": "rose-950" 1252 | } 1253 | ] 1254 | }, 1255 | "custom": { 1256 | "spacing": {}, 1257 | "typography": { 1258 | "font-size": {}, 1259 | "line-height": {} 1260 | } 1261 | }, 1262 | "spacing": { 1263 | "padding": true, 1264 | "units": [ 1265 | "px", 1266 | "%", 1267 | "em", 1268 | "rem", 1269 | "vw", 1270 | "vh" 1271 | ] 1272 | }, 1273 | "typography": { 1274 | "customFontSize": false, 1275 | "fontFamilies": [ 1276 | { 1277 | "fontFamily": "ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"", 1278 | "name": "Ui-sans-serif", 1279 | "slug": "sans" 1280 | }, 1281 | { 1282 | "fontFamily": "ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif", 1283 | "name": "Ui-serif", 1284 | "slug": "serif" 1285 | }, 1286 | { 1287 | "fontFamily": "ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace", 1288 | "name": "Ui-monospace", 1289 | "slug": "mono" 1290 | } 1291 | ], 1292 | "fontSizes": [ 1293 | { 1294 | "name": "xs", 1295 | "size": "0.75rem", 1296 | "slug": "xs" 1297 | }, 1298 | { 1299 | "name": "sm", 1300 | "size": "0.875rem", 1301 | "slug": "sm" 1302 | }, 1303 | { 1304 | "name": "base", 1305 | "size": "1rem", 1306 | "slug": "base" 1307 | }, 1308 | { 1309 | "name": "lg", 1310 | "size": "1.125rem", 1311 | "slug": "lg" 1312 | }, 1313 | { 1314 | "name": "xl", 1315 | "size": "1.25rem", 1316 | "slug": "xl" 1317 | }, 1318 | { 1319 | "name": "2xl", 1320 | "size": "1.5rem", 1321 | "slug": "2xl" 1322 | }, 1323 | { 1324 | "name": "3xl", 1325 | "size": "1.875rem", 1326 | "slug": "3xl" 1327 | }, 1328 | { 1329 | "name": "4xl", 1330 | "size": "2.25rem", 1331 | "slug": "4xl" 1332 | }, 1333 | { 1334 | "name": "5xl", 1335 | "size": "3rem", 1336 | "slug": "5xl" 1337 | }, 1338 | { 1339 | "name": "6xl", 1340 | "size": "3.75rem", 1341 | "slug": "6xl" 1342 | }, 1343 | { 1344 | "name": "7xl", 1345 | "size": "4.5rem", 1346 | "slug": "7xl" 1347 | }, 1348 | { 1349 | "name": "8xl", 1350 | "size": "6rem", 1351 | "slug": "8xl" 1352 | }, 1353 | { 1354 | "name": "9xl", 1355 | "size": "8rem", 1356 | "slug": "9xl" 1357 | } 1358 | ] 1359 | } 1360 | } 1361 | } --------------------------------------------------------------------------------