[
  {
    "path": ".browserslistrc",
    "content": "# Browsers that we support\n\n> 1%\nlast 2 versions\nFirefox ESR\nIE 11\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nindent_style = tab\n\n[{*.json,*.yml,.babelrc,.bowerrc,.browserslistrc,.postcssrc}]\nindent_style = space\nindent_size = 2\n\n[*.txt,wp-config-sample.php]\nend_of_line = crlf\n"
  },
  {
    "path": ".eslintignore",
    "content": "assets/js/vendor\nassets/js/admin/vendor\nassets/js/frontend/vendor\nassets/js/shared/vendor\nwebpack.config.babel.js\ntests\n"
  },
  {
    "path": ".eslintrc.json",
    "content": "{\n  \"extends\": \"@10up/eslint-config/wordpress\",\n  \"rules\": {},\n  \"globals\": {\n\t  \"module\": true,\n\t  \"process\": true\n  }\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\nbower_components\nrelease\nvendor\nphpunit.xml\n.idea\n\n# Project Files\ndist\nbackstop_data\n\n# Editors\n*.esproj\n*.tmproj\n*.tmproject\ntmtags\n.*.sw[a-z]\n*.un~\nSession.vim\n*.swp\n\n# Mac OSX\n.DS_Store\n._*\n.Spotlight-V100\n.Trashes\n\n# Windows\nThumbs.db\nDesktop.ini\n"
  },
  {
    "path": ".npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": ".nvmrc",
    "content": "12\n"
  },
  {
    "path": ".stylelintrc",
    "content": "{\n  \"extends\": \"@10up/stylelint-config\"\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2019 10up Inc. (https://10up.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# 10up Scaffold\n\n**DEPRECATED.** Use https://github.com/10up/wp-scaffold\n\n> At 10up, we strive to provide digital products that yield a top-notch user experience. In order to improve both our efficiency and consistency, we need to standardize what we use and how we use it. This theme scaffold allows us to share initial set up procedures to make sure all projects can get up and running as quickly as possible while closely adhering to 10up's high quality standards.\n\n[![Support Level](https://img.shields.io/badge/support-active-green.svg)](#support-level) [![MIT License](https://img.shields.io/github/license/10up/theme-scaffold.svg)](https://github.com/10up/theme-scaffold/blob/master/LICENSE.md)\n\n## Dependencies\n\n1. [Node@^8.11.0 & NPM](https://www.npmjs.com/get-npm) - Build packages and 3rd party dependencies are managed through NPM, so you will need that installed globally.\n2. [Webpack](https://webpack.js.org/) - Webpack is used to process the JavaScript, CSS, and other assets.\n3. [Composer](https://getcomposer.org/) - Composer is used to manage PHP.\n\n## Getting Started\n\n### Quick Start\nInstall 10up's command line tool for scaffolding new projects. You can download it from the [Project Scaffold repository](https://github.com/10up/project-scaffold). Setting up a new theme is as easy as running `create-10up theme theme-name-here` in the terminal!\n\nBrowsersync requires a local development URL. This is currently set in the `config/webpack.settings.js`, as `BrowserSyncConfig.proxy`.\n\n### Direct Install\n- Clone the repository\n- Rename folder theme-scaffold -> your project's name\n- If copying files manually to an existing theme directory instead of cloning directly from the repository, make sure to include the following files which may be hidden:\n\n```\n.babelrc\n.browserslistrc\n.editorconfig\n.eslintignore\n.eslintrc\n.gitignore\n```\n\nThe NPM commands will fail without these files present.\n\n- Do case-sensitive search/replace for the following:\n\n\t- TenUpScaffold\n\t- TENUP_SCAFFOLD\n\t- tenup-scaffold\n\t- tenup_scaffold\n\t- 10up Scaffold\n\n- `cd` into the theme folder\n- run `npm run start`\n\n## Webpack config\n\nWebpack config files can be found in `config` folder:\n\n- `webpack.config.dev.js`\n- `webpack.config.common.js`\n- `webpack.config.prod.js`\n- `webpack.settings.js`\n\nIn most cases `webpack.settings.js` is the main file which would change from project to project. For example adding or removing entry points for JS and CSS.\n\n## NPM Commands\n\n- `npm run start` (install dependencies)\n- `npm run watch` (watch)\n- `npm run build` (build all files)\n- `npm run build-release` (build all files for release)\n- `npm run dev` (build all files for development)\n- `npm run lint-release` (install dependencies and run linting)\n- `npm run lint-css` (lint CSS)\n- `npm run lint-js` (lint JS)\n- `npm run lint-php` (lint PHP)\n- `npm run lint` (run all lints)\n- `npm run format-js` (format JS using eslint)\n- `npm run format` (alias for `npm run format-js`)\n- `npm run test:a11y` (run accessibility tests)\n\n## Composer Commands\n\n- `composer install`* (install packages)\n- `composer update`* (update packages)\n- `composer lint` (lint PHP files)\n- `composer lint-fix` (lint PHP files and automatically correct coding standard violations)\n\n_* If your host machine's local version of PHP is <7.2, composer may produce the following, or similar, error message:_\n```\n Problem 1\n    - Installation request for 10up/wpacceptance dev-master -> satisfiable by 10up/wpacceptance[dev-master].\n    - 10up/wpacceptance dev-master requires php >=7.2 -> your PHP version (7.1.23) does not satisfy that requirement\n```\n_To suppress this error, add the flag `--ignore-platform-reqs` (ie. `composer install --ignore-platform-reqs`)._\n\n## Automated Style Guide\nThe Theme Scaffolding ships with a default style guide you can find in `/templates/page-styleguide.php`. This file contains all the basic HTML elements you would find at the very top of the cascade (headings, typography, tables, forms, etc.) These base elements will be styled and displayed as you naturally build out your CSS. The style guide also automatically pulls in the color variables used in the project. Any hex codes added into `/assets/css/frontend/global/variables.css` will be automatically displayed in the style guide. To set up your style guide, you just need to create a new page in WordPress and assign it the \"Style Guide\" template.\n\nIf you need to update the core styles that power the style guide they are located in `/assets/css/styleguide` and will naturally process with the rest of the CSS.\n\nAs your site grows you can add components to the style guide by updating `/templates/page-styleguide.php` as you see fit. All the JS and CSS for the site will already be included in the template, so everything should just work.\n\n## Automated Accessibility Testing\nAutomated accessibility testing in the Theme Scaffolding is done with [Pa11y](https://www.npmjs.com/package/pa11y) and is executed with the command `npm run test-a11y`. You can find any configuration options inside your `package.json` file inside the `testing` object. You will see default URL options (homepage, article, search-results), but you can add as many as you'd like. The default script runs over the `local` URL and any others will run with an argument like `npm run test-a11y production`, over a production URL. You can also add more template URLs for testing like `npm run a11y-test article-template`. Be sure to check with your systems person on a project to make sure accessibility tests are also hooked up through the deploy process.\n\nCompliance levels can also be updated through the `testing.accessibility.compliance` object in the `package.json` file. The default is WCAG Level A, but it can be updated to anything listed in the [pa11y documentation](https://github.com/pa11y/pa11y).\n\nThe test file lives in `/tests/accessibility/compliance/pa11y.js` if any edits are needed (such as staging credentials, if you're running tests in an environment that requires authentication).\n\n## Visual Regression Testing\nWe use [BackstopJS](https://github.com/garris/BackstopJS) to run our visual regression tests. BackstopJS requires just a few settings to work: a `scenarios` array that tells it which URL's to screenshot, a `viewports` array that tells it what breakpoints to use, and a `config` object for global settings.\n\nBegin by setting which URL's you'd like to test in the `testing.urls` object in `package.json`. You will see some default URL's (homepage, article, search-results), but you can add as many as you'd like. These URL's are read by `tests/visual/scenarios.js` to automatically produce the `scenarios` array that BackstopJS will use to take screenshots.\n\nYou can also create custom scenarios in `tests/visual/custom-scenarios.js`. Custom scenarios allow us to add specific options for specific URL's, for situations like hovering over an element to screenshot its hover state, or clicking a modal button and waiting for the modal to become visible.\n\nTo create a custom scenario, simply set the `urlName` property to match the property name in the `testing.urls` object, and then create an `options` object with your desired settings. A couple examples are provided in `tests/visual/custom-scenarios.js` and you can see a list of all available options in the [advanced scenarios](https://github.com/garris/BackstopJS#advanced-scenarios) section on GitHub.\n\nBackstopJS can take screenshots at various screen widths, so make sure to match the breakpoints in `tests/visual/viewports.js` with those in your theme.\n\nThough generally not necessary, you can customize the BackstopJS configuration by changing the settings in `tests/visual/config.js`.\n\nTo begin running BackstopJS visual regression tests, initialize its required files. This only needs to be done once on your local machine:\n\n`npm run test:visual-init`\n\nThen create a set of screenshots that will become the base reference images to run future tests against:\n\n`npm run test:visual-reference`\n\nAfter you've made changes and want to test for visual regressions:\n\n`npm run test:visual`\n\nFinally, if the new screenshots fail but contain desired changes, approve them for use as the new base reference images:\n\n`npm run test:visual-approve`\n\n## Automated Acceptance Testing\nAutomated acceptance testing in the Theme Scaffolding leverages [WP Acceptance](https://github.com/10up/wpacceptance) and is included in the project via Composer as a dev required package. Run the command `composer update` (see [Composer Commands](https://github.com/10up/theme-scaffold/tree/feature/docs-composer#composer-commands) above) to install the required packages. Refer to the [documentation](https://wpacceptance.readthedocs.io/en/latest/#wp-acceptance) to ensure your host machine has the necessary [requirements](https://wpacceptance.readthedocs.io/en/latest/#requirements). The Theme Scaffolding is already setup to work with WP Acceptance and a few example tests have been created to serve as examples.\n\nTo run the test suite, from the root of the repository, run `./vendor/bin/wpacceptance run`. WP Acceptance will automatically run the test suite in isolated docker containers. To write your own acceptance tests, refer to the [documentation](https://wpacceptance.readthedocs.io/en/latest/#writing-tests) and [cookbook](https://wpacceptance.readthedocs.io/en/latest/cookbook/).\n\n## Contributing\n\nWe don't know everything! We welcome pull requests and spirited, but respectful, debates. Please contribute via [pull requests on GitHub](https://github.com/10up/theme-scaffold/compare).\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b feature/my-new-feature`\n3. Commit your changes: `git commit -am 'Added some great feature!'`\n4. Push to the branch: `git push origin feature/my-new-feature`\n5. Submit a pull request\n\n## Learn more about the default packages used with this project\n\n- [10up Eslint config](https://www.npmjs.com/package/@10up/eslint-config)\n- [10up Stylelint config](https://www.npmjs.com/package/@10up/stylelint-config)\n- [Babel core](https://www.npmjs.com/package/@babel/core)\n- [Babel Eslint](https://www.npmjs.com/package/babel-eslint)\n- [Babel loader](https://www.npmjs.com/package/babel-loader)\n- [Babel preset env](https://www.npmjs.com/package/@babel/preset-env)\n- [Babel register](https://www.npmjs.com/package/@babel/register)\n- [Browsersync](https://browsersync.io/)\n- [BackstopJS](https://github.com/garris/BackstopJS)\n- [Can I Use DB](https://www.npmjs.com/package/caniuse-db)\n- [Clean Webpack plugin](https://www.npmjs.com/package/clean-webpack-plugin)\n- [Copy Webpack plugin](https://www.npmjs.com/package/copy-webpack-plugin)\n- [CSS loader](https://www.npmjs.com/package/css-loader)\n- [CSS nano](https://www.npmjs.com/package/cssnano)\n- [Eslint](https://www.npmjs.com/package/eslint)\n- [Eslint loader](https://www.npmjs.com/package/eslint-loader)\n- [Husky@next](https://www.npmjs.com/package/husky)\n- [Imagemin plugin for Webpack](https://github.com/Klathmon/imagemin-webpack-plugin)\n- [Lint Staged](https://www.npmjs.com/package/lint-staged)\n- [Mini CSS extract plugin](https://www.npmjs.com/package/mini-css-extract-plugin)\n- [Pa11y](https://www.npmjs.com/package/pa11y)\n- [PostCSS Import](https://www.npmjs.com/package/postcss-import)\n- [PostCSS loader](https://www.npmjs.com/package/postcss-loader)\n- [PostCSS preset-env](https://www.npmjs.com/package/postcss-preset-env)\n- [Stylelint](https://www.npmjs.com/package/stylelint)\n- [Stylelint config WordPress](https://www.npmjs.com/package/stylelint-config-wordpress)\n- [Stylelint declaration use variable](https://www.npmjs.com/package/stylelint-declaration-use-variable)\n- [Stylelint order](https://www.npmjs.com/package/stylelint-order)\n- [Stylelint Webpack plugin](https://www.npmjs.com/package/stylelint-webpack-plugin)\n- [Terser](https://www.npmjs.com/package/terser)\n- [Webpack](https://www.npmjs.com/package/webpack)\n- [Webpack CLI](https://www.npmjs.com/package/webpack-cli)\n- [Webpack fix style only entries](https://www.npmjs.com/package/webpack-fix-style-only-entries)\n- [Webpack merge](https://www.npmjs.com/package/webpack-merge)\n- [Webpackbar](https://www.npmjs.com/package/webpackbar)\n- [PHPCS](https://github.com/squizlabs/PHP_CodeSniffer)\n\n## Support Level\n\n**Active:** 10up is actively working on this, and we expect to continue work for the foreseeable future including keeping tested up to the most recent version of WordPress.  Bug reports, feature requests, questions, and pull requests are welcome.\n\n## Like what you see?\n\n<a href=\"http://10up.com/contact/\"><img src=\"https://10up.com/uploads/2016/10/10up-Github-Banner.png\" alt=\"Work with 10up, we create amazing websites and tools that make content management simple and fun using open source tools and platforms\"></a>\n"
  },
  {
    "path": "assets/css/admin/admin-style.css",
    "content": "/**\n * TenUpScaffold - Admin Styles\n * https://project-website.tld\n *\n */\n\n/**\n * Gutenberg blocks admin styles:\n * if block editor styles differ from front-end block styles,\n * create new partials here as needed\n */\n\n@import url(\"example-block-1.css\");\n\n/* @import url(\"example-block-2.css\"); */\n\n/* @import url(\"example-block-3.css\"); */\n"
  },
  {
    "path": "assets/css/admin/example-block-1.css",
    "content": "/* empty file */\n"
  },
  {
    "path": "assets/css/blocks/example-block-1.css",
    "content": "/**\n * TenUpScaffold: Gutenberg Blocks Styles\n * https://project-website.tld\n *\n */\n\n/**\n * Example block 1 front end styles\n */\n"
  },
  {
    "path": "assets/css/blocks/index.css",
    "content": "/**\n * TenUpScaffold: Gutenberg Blocks Styles\n * https://project-website.tld\n *\n */\n\n/**\n* Gutenberg blocks front-end styles:\n* create new partials here as needed\n*/\n\n/* @import url(\"example-block-1.css\"); */\n\n/* @import url(\"example-block-2.css\"); */\n\n/* @import url(\"example-block-3.css\"); */\n"
  },
  {
    "path": "assets/css/frontend/base/index.css",
    "content": "@import url(\"prefers-reduced-motion.css\");\n@import url(\"wordpress.css\");\n"
  },
  {
    "path": "assets/css/frontend/base/prefers-reduced-motion.css",
    "content": "/*\n * Resources on prefers-reduced-motion:\n * https://webkit.org/blog-files/prefers-reduced-motion/prm.htm\n * https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion\n */\n@media (prefers-reduced-motion: reduce) {\n\n\t*,\n\t*::before,\n\t*::after {\n\t\tanimation-duration: 0.001s !important;\n\t\ttransition-duration: 0.001s !important;\n\t}\n}\n"
  },
  {
    "path": "assets/css/frontend/base/wordpress.css",
    "content": "/* WordPress generated classes */\n\n.alignleft {\n\tfloat: left;\n\tmargin-right: 1rem;\n\ttext-align: left;\n}\n\n.alignright {\n\tfloat: right;\n\tmargin-left: 1rem;\n\ttext-align: right;\n}\n\n.aligncenter {\n\tclear: both;\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\ttext-align: center;\n}\n\n.wp-caption {\n\tmax-width: 100%;\n\n\t&.aligncenter {\n\t\ttext-align: center;\n\t}\n\n\t&.alignright {\n\t\ttext-align: right;\n\t}\n}\n\n.wp-caption-text {\n\tmargin: 0;\n}\n"
  },
  {
    "path": "assets/css/frontend/components/index.css",
    "content": "/* Components */\n"
  },
  {
    "path": "assets/css/frontend/editor-style.css",
    "content": "/**\n * TenUpScaffold - Editor Styles\n * https://project-website.tld\n *\n * Copyright (c) 2017 10up\n * Licensed under the MIT license.\n */\n\n/* Gutenberg blocks */\n\n/* @import url(\"../blocks/index.css\"); */\n"
  },
  {
    "path": "assets/css/frontend/global/colors.css",
    "content": "/*\n * Colors\n */\n:root {\n\t--c-black: #000;\n\t--c-white: #fff;\n}\n"
  },
  {
    "path": "assets/css/frontend/global/index.css",
    "content": "@import url(\"colors.css\");\n@import url(\"media-queries.css\");\n"
  },
  {
    "path": "assets/css/frontend/global/media-queries.css",
    "content": "/*\n * Media Queries\n */\n@custom-media --bp-tiny ( min-width: 25em ); /* 400px */\n@custom-media --bp-small ( min-width: 30em ); /* 480px */\n@custom-media --bp-medium ( min-width: 48em ); /* 768px */\n@custom-media --bp-large ( min-width: 64em ); /* 1024px */\n@custom-media --bp-xlarge ( min-width: 80em ); /* 1280px */\n@custom-media --bp-xxlarge ( min-width: 90em ); /* 1440px */\n\n/* WP Core Breakpoints (used for the admin bar for example) */\n@custom-media --wp-small ( min-width: 600px );\n@custom-media --wp-medium-max (max-width: 782px);\n"
  },
  {
    "path": "assets/css/frontend/layout/index.css",
    "content": "/* Layout */\n"
  },
  {
    "path": "assets/css/frontend/style.css",
    "content": "/**\n * TenUpScaffold\n * https://project-website.tld\n *\n */\n\n/* Resets - installed via NPM */\n@import url(\"normalize.css\");\n\n/* Global - global pieces like media queries, mixins and placholders */\n@import url(\"global/index.css\");\n\n/* Base - base styles such as fonts, typography, and wordpress overrides */\n@import url(\"base/index.css\");\n\n/* Layout - styles specific to layout */\n\n/* @import url(\"layout/index.css\"); */\n\n/* Templates */\n\n/* @import url(\"templates/index.css\"); */\n\n/* Components */\n\n/* @import url(\"components/index.css\"); */\n\n/* Gutenberg blocks */\n\n/* @import url(\"../blocks/index.css\"); */\n"
  },
  {
    "path": "assets/css/frontend/templates/index.css",
    "content": "/* Templates */\n"
  },
  {
    "path": "assets/css/shared/shared-style.css",
    "content": "/**\n * TenUpScaffold: Shared Styles\n * https://project-website.tld\n *\n */\n"
  },
  {
    "path": "assets/css/styleguide/styleguide.css",
    "content": ":root {\n\t--c-uikit-base: #fff;\n\t--c-uikit-accent: #767676;\n\t--c-uikit-hightlight: #f6f6f6;\n\t--c-uikit-border: #ccc;\n\t--c-uikit-primary: #000;\n\n\t@custom-media --bp-uikit-small (min-width: 40.625em);\n\n}\n\n.uikit__container {\n\tpadding-left: 20px;\n\tpadding-right: 20px;\n}\n\n.uikit__heading {\n\tborder-bottom: 1px solid var(--c-uikit-border);\n\tfont-size: 56px;\n\tfont-weight: 400;\n\tletter-spacing: 0.055em;\n\tmargin: 100px auto 130px;\n\tmax-width: 720px;\n\tpadding: 0;\n\ttext-align: center;\n\ttext-transform: uppercase;\n}\n\n.uikit__heading span {\n\tbackground: var(--c-uikit-base);\n\tdisplay: inline-block;\n\tpadding: 0 40px;\n}\n\n.uikit__content {\n\tmargin: auto;\n\tmax-width: 960px;\n}\n\n.uikit__block {\n\tmargin-bottom: -33px;\n}\n\n.uikit__colors {\n\tfont-family: \"Courier New\", monospace;\n\tlist-style: none;\n\tmargin: 0;\n\toverflow: hidden;\n\tpadding: 0;\n\ttext-align: center;\n}\n\n.uikit__color {\n\talign-items: center;\n\tborder: 1px solid var(--c-uikit-border);\n\tdisplay: flex;\n\tfloat: left;\n\tfont-size: 0.85em;\n\theight: 90px;\n\tjustify-content: center;\n\tmargin-bottom: 32px;\n\tmargin-right: 32px;\n\twidth: 90px;\n}\n\n.uikit__color--label {\n\tcolor: var(--c-primary);\n\tleft: -999em;\n\tmargin: 0;\n\tpadding: 0;\n\tposition: absolute;\n}\n\n.uikit__color--label.light {\n\tcolor: var(--c-uikit-base);\n}\n\n.uikit__icons {\n\ttext-align: center;\n}\n\n.uikit__icon {\n\talign-items: center;\n\tbackground: var(--c-uikit-hightlight);\n\tdisplay: flex;\n\tfloat: left;\n\theight: 62px;\n\tjustify-content: center;\n\tmargin-bottom: 32px;\n\tmargin-right: 32px;\n\twidth: 62px;\n}\n\n.uikit__icon--label {\n\tleft: -999em;\n\tposition: absolute;\n}\n\n.uikit__section > .heading {\n\tbox-sizing: border-box;\n\tcolor: var(--c-uikit-accent);\n\tdisplay: inline-block;\n\tfont-size: 14px;\n\tfont-weight: 400;\n\tmargin: 0;\n\tpadding: 0 40px 20px 0;\n\tvertical-align: top;\n\twidth: 100%;\n}\n\n.uikit__section > .heading > .toggle {\n\tbackground-color: transparent;\n\tborder: 0;\n\tcolor: inherit;\n\tcursor: pointer;\n\tfont-size: inherit;\n\tfont-weight: inherit;\n\toverflow: hidden;\n\tpadding: 0 18px 0 0;\n\tposition: relative;\n}\n\n.uikit__chevron-up,\n.uikit__chevron-down {\n\tfill: currentColor;\n\tposition: absolute;\n\tright: 0;\n\ttop: 50%;\n\ttransform: translate(0, -50%);\n}\n\n.uikit__chevron-up {\n\tdisplay: none;\n}\n\n.uikit__section > .heading > .toggle[aria-expanded=\"true\"] .uikit__chevron-up,\n.uikit__chevron-down {\n\tdisplay: block;\n}\n\n.uikit__section > .heading > .toggle[aria-expanded=\"true\"] .uikit__chevron-down {\n\tdisplay: none;\n}\n\n.uikit__section > .content {\n\tbox-sizing: border-box;\n\tdisplay: inline-block;\n\tmargin-bottom: 100px;\n\tvertical-align: top;\n\twidth: 100%;\n}\n\n.uikit__section > .content[hidden] {\n\tdisplay: none;\n}\n\n.uikit-mb-1 {\n\tmargin-bottom: 1em;\n}\n\n@media (--bp-uikit-small) {\n\n\t.uikit__section > .heading {\n\t\twidth: 145px;\n\t}\n\n\t.uikit__section.-secondary > .heading {\n\t\twidth: 100%;\n\t}\n\n\t.uikit__section > .content {\n\t\twidth: calc(100% - 150px);\n\t}\n\n\t.uikit__section.-secondary > .content {\n\t\twidth: 100%;\n\t}\n\n}\n"
  },
  {
    "path": "assets/fonts/font-name/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "assets/images/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "assets/js/admin/admin.js",
    "content": "// import foo from './bar'\n"
  },
  {
    "path": "assets/js/blocks/blocks.js",
    "content": "/**\n * Gutenberg block-specific JavaScript:\n * used on front-end and/or in editor\n */\n\n// import example-block-1 from './example-block-1';\n"
  },
  {
    "path": "assets/js/blocks/example-block-1.js",
    "content": "/**\n * Gutenberg block-specific JavaScript:\n * used on front-end and/or in editor\n */\n\n/**\n * Block 1 JavaScript\n */\n"
  },
  {
    "path": "assets/js/frontend/components/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "assets/js/frontend/frontend.js",
    "content": "// import foo from './components/bar';\n"
  },
  {
    "path": "assets/js/shared/shared.js",
    "content": "// import foo from './bar'\n"
  },
  {
    "path": "assets/js/styleguide/styleguide.js",
    "content": "import UIKitSection from './uikitsection';\n\nconst uiKitSection = new UIKitSection(document.querySelectorAll('.uikit__section h2.heading'));\nuiKitSection.init();\n"
  },
  {
    "path": "assets/js/styleguide/uikitsection.js",
    "content": "/**\n * @module UIKitSection\n *\n * @description\n *\n * Collapsible UI kit sections\n *\n */\nexport default class UIKitSection {\n\t/**\n\t * Initialize everything\n\t *\n\t * @param {Element[]} elements Section Heading elements.\n\t */\n\tconstructor(elements) {\n\t\t// Grab all the UI kit section headings\n\t\tthis.sectionHeadings = elements;\n\t}\n\n\t/**\n\t * Inits UI Kit Section\n\t */\n\tinit() {\n\t\t// Stop if there's no section heading\n\t\tif (!this.sectionHeadings) {\n\t\t\tconsole.error( 'Styleguide: No sections detected.'  ); // eslint-disable-line\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sectionHeadings.forEach((sectionHeading) => {\n\t\t\tthis.setupCollapsible(sectionHeading);\n\t\t});\n\t}\n\n\t/**\n\t * Create a button, add chevron SVG and inject in heading\n\t * Hide section content, set ARIA attributes\n\t *\n\t * @param   {Element} sectionHeading The UI Kit section heading\n\t *\n\t */\n\tsetupCollapsible(sectionHeading) {\n\t\t// Get section ID\n\t\tconst sectionID = sectionHeading.parentNode.id;\n\n\t\t// Default state\n\t\tlet expanded = true;\n\n\t\t// Check localStorage to see if we want to expand some sections by default\n\t\tif (localStorage) {\n\t\t\t// Override expanded state\n\t\t\texpanded = localStorage.getItem(`section-${sectionID}`) !== 'true' || false;\n\t\t}\n\n\t\t// Build the button, add the SVG chevron icons\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tsectionHeading.innerHTML = `\n\t\t\t<button class=\"toggle\" aria-expanded=\"${!expanded}\" id=\"toggle-${sectionID}\">\n\t\t\t\t<span>${sectionHeading.textContent}</span>\n\t\t\t\t<svg aria-hidden=\"true\" focusable=\"false\" class=\"uikit__chevron-up\" width=\"12\" height=\"7\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"3.3 4.5 11.4 7\" role=\"img\"><polygon points=\"9,4.5 3.3,10.1 4.8,11.5 9,7.3 13.2,11.5 14.7,10.1 \"></polygon></svg>\n\t\t\t\t<svg aria-hidden=\"true\" focusable=\"false\" class=\"uikit__chevron-down\" width=\"12\" height=\"7\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"3.3 6.5 11.4 7\" role=\"img\"><polygon points=\"9,13.5 14.7,7.9 13.2,6.5 9,10.7 4.8,6.5 3.3,7.9 \"></polygon></svg>\n\t\t\t</button>\n\t\t`;\n\n\t\t// Get the section content and hide it\n\t\tconst wrapper = sectionHeading.parentNode.querySelector('.content');\n\t\twrapper.hidden = expanded;\n\t\twrapper.setAttribute('aria-hidden', expanded);\n\t\twrapper.setAttribute('aria-labelledby', `toggle-${sectionID}`);\n\n\t\t// Assign click event to the button\n\t\tconst button = sectionHeading.querySelector('button');\n\t\tbutton.onclick = (e) => this.toggleCollapsible(e, wrapper, button);\n\t}\n\n\t/**\n\t * Toggles a section\n\t *\n\t * @param   {Object} e        The click event\n\t * @param   {Element} wrapper The UI Kit section content\n\t * @param   {Element} button  The UI Kit section toggle button\n\t *\n\t */\n\ttoggleCollapsible(e, wrapper, button) {\n\t\t// Expanded state as bool\n\t\tconst expanded = button.getAttribute('aria-expanded') === 'true' || false;\n\n\t\t// Toggle expanded state and visibility\n\t\tbutton.setAttribute('aria-expanded', !expanded);\n\t\t// eslint-disable-next-line no-param-reassign\n\t\twrapper.hidden = expanded;\n\t\twrapper.setAttribute('aria-hidden', expanded);\n\n\t\t// Store expanded state in localStorage\n\t\tconst sectionID = wrapper.parentNode.id;\n\n\t\tif (localStorage) {\n\t\t\tlocalStorage.setItem(`section-${sectionID}`, !expanded);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "assets/svg/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "babel.config.js",
    "content": "/**\n * Babel Config, .babelrc equivalent.\n *\n * @package\n * @type {{presets: [[]|string|Object]}}\n */\nmodule.exports = {\n\tpresets: [\n\t\t[\n\t\t\t'@10up/babel-preset-default',\n\t\t\t{\n\t\t\t\twordpress: true,\n\t\t\t},\n\t\t],\n\t],\n};\n"
  },
  {
    "path": "composer.json",
    "content": "{\n  \"name\": \"10up/tenup-scaffold\",\n  \"type\": \"wordpress-theme\",\n  \"authors\": [\n    {\n      \"name\": \"10up\",\n      \"email\": \"info@10up.com\"\n    }\n  ],\n  \"require\": {\n    \"php\": \">=7.0\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"TenUpScaffold\\\\\": \"includes/classes/\"\n    }\n  },\n  \"minimum-stability\": \"dev\",\n  \"prefer-stable\": true,\n  \"require-dev\": {\n    \"10up/wpacceptance\": \"dev-master\",\n    \"10up/phpcs-composer\": \"dev-master\"\n  },\n  \"scripts\": {\n    \"lint\": \"phpcs .\",\n    \"lint-fix\": \"phpcbf .\"\n  }\n}\n"
  },
  {
    "path": "config/webpack.config.common.js",
    "content": "const path = require('path');\nconst { CleanWebpackPlugin } = require('clean-webpack-plugin');\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\nconst FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries');\nconst MiniCssExtractPlugin = require('mini-css-extract-plugin');\nconst StyleLintPlugin = require('stylelint-webpack-plugin');\nconst WebpackBar = require('webpackbar');\nconst ImageminPlugin = require('imagemin-webpack-plugin').default;\n\nconst isProduction = process.env.NODE_ENV === 'production';\n\n// Config files.\nconst settings = require('./webpack.settings.js');\n\n/**\n * Configure entries.\n *\n * @return {Object[]} Array of webpack settings.\n */\nconst configureEntries = () => {\n\tconst entries = {};\n\n\tfor (const [key, value] of Object.entries(settings.entries)) {\n\t\tentries[key] = path.resolve(process.cwd(), value);\n\t}\n\n\treturn entries;\n};\n\nmodule.exports = {\n\tentry: configureEntries(),\n\toutput: {\n\t\tpath: path.resolve(process.cwd(), settings.paths.dist.base),\n\t\tfilename: settings.filename.js,\n\t\t/**\n\t\t * If multiple webpack runtimes (from different compilations) are used on the same webpage,\n\t\t * there is a risk of conflicts of on-demand chunks in the global namespace.\n\t\t *\n\t\t * @see (@link https://webpack.js.org/configuration/output/#outputjsonpfunction)\n\t\t */\n\t\tjsonpFunction: '__TenUpScaffold_webpackJsonp',\n\t},\n\n\t// Console stats output.\n\t// @link https://webpack.js.org/configuration/stats/#stats\n\tstats: settings.stats,\n\n\t// External objects.\n\texternals: {\n\t\tjquery: 'jQuery',\n\t\tlodash: 'lodash',\n\t},\n\n\t// Performance settings.\n\tperformance: {\n\t\tmaxAssetSize: settings.performance.maxAssetSize,\n\t},\n\n\t// Build rules to handle asset files.\n\tmodule: {\n\t\trules: [\n\t\t\t// Lint JS.\n\t\t\t{\n\t\t\t\ttest: /\\.js$/,\n\t\t\t\tenforce: 'pre',\n\t\t\t\tloader: 'eslint-loader',\n\t\t\t\toptions: {\n\t\t\t\t\tfix: true,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Scripts.\n\t\t\t{\n\t\t\t\ttest: /\\.js$/,\n\t\t\t\texclude: /node_modules(?!\\/@10up)/,\n\t\t\t\tuse: [\n\t\t\t\t\t{\n\t\t\t\t\t\tloader: 'babel-loader',\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tcacheDirectory: true,\n\t\t\t\t\t\t\tsourceMap: !isProduction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\t// Styles.\n\t\t\t{\n\t\t\t\ttest: /\\.css$/,\n\t\t\t\tinclude: path.resolve(process.cwd(), settings.paths.src.css),\n\t\t\t\tuse: [\n\t\t\t\t\t{\n\t\t\t\t\t\tloader: MiniCssExtractPlugin.loader,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tloader: 'css-loader',\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tsourceMap: !isProduction,\n\t\t\t\t\t\t\t// We copy fonts etc. using CopyWebpackPlugin.\n\t\t\t\t\t\t\turl: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tloader: 'postcss-loader',\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tsourceMap: !isProduction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\n\tplugins: [\n\t\t// Remove the extra JS files Webpack creates for CSS entries.\n\t\t// This should be fixed in Webpack 5.\n\t\tnew FixStyleOnlyEntriesPlugin({\n\t\t\tsilent: true,\n\t\t}),\n\n\t\t// Clean the `dist` folder on build.\n\t\tnew CleanWebpackPlugin({\n\t\t\tcleanStaleWebpackAssets: false,\n\t\t}),\n\n\t\t// Extract CSS into individual files.\n\t\tnew MiniCssExtractPlugin({\n\t\t\tfilename: settings.filename.css,\n\t\t\tchunkFilename: '[id].css',\n\t\t}),\n\n\t\t// Copy static assets to the `dist` folder.\n\t\tnew CopyWebpackPlugin([\n\t\t\t{\n\t\t\t\tfrom: settings.copyWebpackConfig.from,\n\t\t\t\tto: settings.copyWebpackConfig.to,\n\t\t\t\tcontext: path.resolve(process.cwd(), settings.paths.src.base),\n\t\t\t},\n\t\t]),\n\n\t\t// Compress images\n\t\t// Must happen after CopyWebpackPlugin\n\t\tnew ImageminPlugin({\n\t\t\tdisable: !isProduction,\n\t\t\ttest: settings.ImageminPlugin.test,\n\t\t}),\n\n\t\t// Lint CSS.\n\t\tnew StyleLintPlugin({\n\t\t\tcontext: path.resolve(process.cwd(), settings.paths.src.css),\n\t\t\tfiles: '**/*.css',\n\t\t}),\n\n\t\t// Fancy WebpackBar.\n\t\tnew WebpackBar(),\n\t],\n};\n"
  },
  {
    "path": "config/webpack.config.dev.js",
    "content": "const merge = require('webpack-merge');\nconst BrowserSyncPlugin = require('browser-sync-webpack-plugin');\nconst common = require('./webpack.config.common.js');\n\n// Config files.\nconst settings = require('./webpack.settings.js');\n\nmodule.exports = merge(common, {\n\tmode: 'development',\n\tdevtool: 'inline-cheap-module-source-map',\n\tplugins: [\n\t\t// Run BrowserSync.\n\t\tnew BrowserSyncPlugin(\n\t\t\t{\n\t\t\t\thost: settings.BrowserSyncConfig.host,\n\t\t\t\tport: settings.BrowserSyncConfig.port,\n\t\t\t\tproxy: settings.BrowserSyncConfig.proxy,\n\t\t\t\topen: settings.BrowserSyncConfig.open,\n\t\t\t\tfiles: settings.BrowserSyncConfig.files,\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjectCss: true,\n\t\t\t\treload: false,\n\t\t\t},\n\t\t),\n\t],\n});\n"
  },
  {
    "path": "config/webpack.config.prod.js",
    "content": "const merge = require('webpack-merge');\nconst TerserPlugin = require('terser-webpack-plugin'); // eslint-disable-line import/no-extraneous-dependencies\nconst common = require('./webpack.config.common.js');\n\nmodule.exports = merge(common, {\n\tmode: 'production',\n\n\toptimization: {\n\t\tminimizer: [\n\t\t\tnew TerserPlugin({\n\t\t\t\tcache: true,\n\t\t\t\tparallel: true,\n\t\t\t\tsourceMap: false,\n\t\t\t\tterserOptions: {\n\t\t\t\t\tparse: {\n\t\t\t\t\t\t// We want terser to parse ecma 8 code. However, we don't want it\n\t\t\t\t\t\t// to apply any minfication steps that turns valid ecma 5 code\n\t\t\t\t\t\t// into invalid ecma 5 code. This is why the 'compress' and 'output'\n\t\t\t\t\t\t// sections only apply transformations that are ecma 5 safe\n\t\t\t\t\t\t// https://github.com/facebook/create-react-app/pull/4234\n\t\t\t\t\t\tecma: 8,\n\t\t\t\t\t},\n\t\t\t\t\tcompress: {\n\t\t\t\t\t\tecma: 5,\n\t\t\t\t\t\twarnings: false,\n\t\t\t\t\t\t// Disabled because of an issue with Uglify breaking seemingly valid code:\n\t\t\t\t\t\t// https://github.com/facebook/create-react-app/issues/2376\n\t\t\t\t\t\t// Pending further investigation:\n\t\t\t\t\t\t// https://github.com/mishoo/UglifyJS2/issues/2011\n\t\t\t\t\t\tcomparisons: false,\n\t\t\t\t\t\t// Disabled because of an issue with Terser breaking valid code:\n\t\t\t\t\t\t// https://github.com/facebook/create-react-app/issues/5250\n\t\t\t\t\t\t// Pending futher investigation:\n\t\t\t\t\t\t// https://github.com/terser-js/terser/issues/120\n\t\t\t\t\t\tinline: 2,\n\t\t\t\t\t},\n\t\t\t\t\toutput: {\n\t\t\t\t\t\tecma: 5,\n\t\t\t\t\t\tcomments: false,\n\t\t\t\t\t},\n\t\t\t\t\tie8: false,\n\t\t\t\t},\n\t\t\t}),\n\t\t],\n\t},\n});\n"
  },
  {
    "path": "config/webpack.settings.js",
    "content": "// Webpack settings exports.\nmodule.exports = {\n\tentries: {\n\t\t// JS files.\n\t\tadmin: './assets/js/admin/admin.js',\n\t\tblocks: './assets/js/blocks/blocks.js',\n\t\tfrontend: './assets/js/frontend/frontend.js',\n\t\tshared: './assets/js/shared/shared.js',\n\t\tstyleguide: './assets/js/styleguide/styleguide.js',\n\t\t'blocks-editor': './includes/blocks/blocks-editor.js',\n\n\t\t// CSS files.\n\t\t'admin-style': './assets/css/admin/admin-style.css',\n\t\t'editor-style': './assets/css/frontend/editor-style.css',\n\t\t'shared-style': './assets/css/shared/shared-style.css',\n\t\tstyle: './assets/css/frontend/style.css',\n\t\t'styleguide-style': './assets/css/styleguide/styleguide.css',\n\t},\n\tfilename: {\n\t\tjs: 'js/[name].js',\n\t\tcss: 'css/[name].css',\n\t},\n\tpaths: {\n\t\tsrc: {\n\t\t\tbase: './assets/',\n\t\t\tcss: './assets/css/',\n\t\t\tjs: './assets/js/',\n\t\t},\n\t\tdist: {\n\t\t\tbase: './dist/',\n\t\t\tclean: ['./images', './css', './js'],\n\t\t},\n\t},\n\tstats: {\n\t\t// Copied from `'minimal'`.\n\t\tall: false,\n\t\terrors: true,\n\t\tmaxModules: 0,\n\t\tmodules: true,\n\t\twarnings: true,\n\t\t// Our additional options.\n\t\tassets: true,\n\t\terrorDetails: true,\n\t\texcludeAssets: /\\.(jpe?g|png|gif|svg|woff|woff2)$/i,\n\t\tmoduleTrace: true,\n\t\tperformance: true,\n\t},\n\tcopyWebpackConfig: {\n\t\tfrom: '**/*.{jpg,jpeg,png,gif,svg,eot,ttf,woff,woff2}',\n\t\tto: '[path][name].[ext]',\n\t},\n\tImageminPlugin: {\n\t\ttest: /\\.(jpe?g|png|gif|svg)$/i,\n\t},\n\tBrowserSyncConfig: {\n\t\thost: 'localhost',\n\t\tport: 3000,\n\t\tproxy: 'http://tenup-scaffold.test',\n\t\topen: false,\n\t\tfiles: [\n\t\t\t'**/*.php',\n\t\t\t'dist/js/**/*.js',\n\t\t\t'dist/css/**/*.css',\n\t\t\t'dist/svg/**/*.svg',\n\t\t\t'dist/images/**/*.{jpg,jpeg,png,gif}',\n\t\t\t'dist/fonts/**/*.{eot,ttf,woff,woff2,svg}',\n\t\t],\n\t},\n\tperformance: {\n\t\tmaxAssetSize: 100000,\n\t},\n\tmanifestConfig: {\n\t\tbasePath: '',\n\t},\n};\n"
  },
  {
    "path": "footer.php",
    "content": "<?php\n/**\n * The template for displaying the footer.\n *\n * @package TenUpScaffold\n */\n\n?>\n\t<?php wp_footer(); ?>\n\t</body>\n</html>\n"
  },
  {
    "path": "functions.php",
    "content": "<?php\n/**\n * WP Theme constants and setup functions\n *\n * @package TenUpScaffold\n */\n\n// Useful global constants.\ndefine( 'TENUP_SCAFFOLD_VERSION', '0.1.0' );\ndefine( 'TENUP_SCAFFOLD_TEMPLATE_URL', get_template_directory_uri() );\ndefine( 'TENUP_SCAFFOLD_PATH', get_template_directory() . '/' );\ndefine( 'TENUP_SCAFFOLD_INC', TENUP_SCAFFOLD_PATH . 'includes/' );\n\nrequire_once TENUP_SCAFFOLD_INC . 'core.php';\nrequire_once TENUP_SCAFFOLD_INC . 'overrides.php';\nrequire_once TENUP_SCAFFOLD_INC . 'template-tags.php';\nrequire_once TENUP_SCAFFOLD_INC . 'utility.php';\nrequire_once TENUP_SCAFFOLD_INC . 'blocks.php';\n\n// Run the setup functions.\nTenUpScaffold\\Core\\setup();\nTenUpScaffold\\Blocks\\setup();\n\n// Require Composer autoloader if it exists.\nif ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {\n\trequire_once 'vendor/autoload.php';\n}\n\nif ( ! function_exists( 'wp_body_open' ) ) {\n\n\t/**\n\t * Shim for the the new wp_body_open() function that was added in 5.2\n\t */\n\tfunction wp_body_open() {\n\t\tdo_action( 'wp_body_open' );\n\t}\n}\n"
  },
  {
    "path": "header.php",
    "content": "<?php\n/**\n * The template for displaying the header.\n *\n * @package TenUpScaffold\n */\n\n?>\n<!DOCTYPE html>\n<html <?php language_attributes(); ?> class=\"no-js\">\n\t<head>\n\t\t<meta charset=\"<?php bloginfo( 'charset' ); ?>\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t<?php wp_head(); ?>\n\t</head>\n\t<body <?php body_class(); ?>>\n\t\t<?php wp_body_open(); ?>\n\t\t<h1><?php bloginfo( 'name' ); ?></h1>\n"
  },
  {
    "path": "includes/blocks/blocks-editor.js",
    "content": "/**\n * Gutenberg block-specific JavaScript:\n * used in editor only\n */\n\n// import './example-block-1';\n"
  },
  {
    "path": "includes/blocks/example-block-1/index.js",
    "content": "/**\n * Example-block-1\n * Custom title block -- feel free to delete\n */\n\nconst { __ } = wp.i18n;\nconst { registerBlockType } = wp.blocks;\nconst { TextControl } = wp.components;\n\n/**\n * Register block\n */\nexport default registerBlockType(\n\t'tenup/example-block',\n\t{\n\t\ttitle: __( 'My first block', 'tenup-scaffold' ),\n\t\tdescription: __( 'My first block description', 'tenup-scaffold' ),\n\t\ticon: 'smiley',\n\t\tcategory: 'tenup-scaffold-blocks',\n\t\tkeywords: [\n\t\t\t__( 'example', 'tenup-scaffold' ),\n\t\t],\n\t\tattributes: {\n\t\t\tcustomTitle: {\n\t\t\t\ttype: 'string'\n\t\t\t},\n\t\t},\n\t\t/**\n\t\t * See https://wordpress.org/gutenberg/handbook/designers-developers/developers/block-api/block-edit-save/#edit\n\t\t */\n\t\tedit: props => {\n\t\t\tconst {\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTitle\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t\tsetAttributes,\n\t\t\t\tisSelected\n\t\t\t} = props;\n\n\t\t\tif ( isSelected ) {\n\t\t\t\treturn (\n\t\t\t\t\t<div className={ className }>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tid=\"example-block-text-field\"\n\t\t\t\t\t\t\tlabel={ __( 'Custom Title', 'tenup-scaffold' ) }\n\t\t\t\t\t\t\tvalue={ customTitle }\n\t\t\t\t\t\t\tonChange={ customTitle => setAttributes( { customTitle } ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn (\n\t\t\t\t\t<h2 class=\"example-block-title\">\n\t\t\t\t\t\t{ customTitle }\n\t\t\t\t\t</h2>\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * See https://wordpress.org/gutenberg/handbook/designers-developers/developers/block-api/block-edit-save/#save\n\t\t */\n\t\tsave: props => {\n\t\t\tconst {\n\t\t\t\tcustomTitle\n\t\t\t} = props.attributes;\n\n\t\t\treturn (\n\t\t\t\t<h2 class=\"example-block-title\">\n\t\t\t\t\t{ customTitle }\n\t\t\t\t</h2>\n\t\t\t);\n\t\t},\n\t},\n);\n"
  },
  {
    "path": "includes/blocks.php",
    "content": "<?php\n/**\n * Gutenberg Blocks setup\n *\n * @package TenUpScaffold\\Core\n */\n\nnamespace TenUpScaffold\\Blocks;\n\n/**\n * Set up blocks\n *\n * @return void\n */\nfunction setup() {\n\t$n = function( $function ) {\n\t\treturn __NAMESPACE__ . \"\\\\$function\";\n\t};\n\n\tadd_action( 'enqueue_block_assets', $n( 'blocks_scripts' ) );\n\tadd_action( 'enqueue_block_editor_assets', $n( 'blocks_editor_scripts' ) );\n\n\tadd_filter( 'block_categories', $n( 'blocks_categories' ), 10, 2 );\n}\n\n/**\n * Enqueue shared frontend and editor JavaScript for blocks.\n *\n * @return void\n */\nfunction blocks_scripts() {\n\n\twp_enqueue_script(\n\t\t'blocks',\n\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/js/blocks.js',\n\t\t[],\n\t\tTENUP_SCAFFOLD_VERSION,\n\t\ttrue\n\t);\n}\n\n\n/**\n * Enqueue editor-only JavaScript/CSS for blocks.\n *\n * @return void\n */\nfunction blocks_editor_scripts() {\n\n\twp_enqueue_script(\n\t\t'blocks-editor',\n\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/js/blocks-editor.js',\n\t\t[ 'wp-i18n', 'wp-element', 'wp-blocks', 'wp-components' ],\n\t\tTENUP_SCAFFOLD_VERSION,\n\t\tfalse\n\t);\n\n\twp_enqueue_style(\n\t\t'editor-style',\n\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/css/editor-style.css',\n\t\t[],\n\t\tTENUP_SCAFFOLD_VERSION\n\t);\n\n}\n\n/**\n * Filters the registered block categories.\n *\n * @param array  $categories Registered categories.\n * @param object $post       The post object.\n *\n * @return array Filtered categories.\n */\nfunction blocks_categories( $categories, $post ) {\n\tif ( ! in_array( $post->post_type, array( 'post', 'page' ), true ) ) {\n\t\treturn $categories;\n\t}\n\n\treturn array_merge(\n\t\t$categories,\n\t\tarray(\n\t\t\tarray(\n\t\t\t\t'slug'  => 'tenup-scaffold-blocks',\n\t\t\t\t'title' => __( 'Custom Blocks', 'tenup-scaffold' ),\n\t\t\t),\n\t\t)\n\t);\n}\n"
  },
  {
    "path": "includes/classes/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "includes/core.php",
    "content": "<?php\n/**\n * Core setup, site hooks and filters.\n *\n * @package TenUpScaffold\\Core\n */\n\nnamespace TenUpScaffold\\Core;\n\n/**\n * Set up theme defaults and register supported WordPress features.\n *\n * @return void\n */\nfunction setup() {\n\t$n = function( $function ) {\n\t\treturn __NAMESPACE__ . \"\\\\$function\";\n\t};\n\n\tadd_action( 'after_setup_theme', $n( 'i18n' ) );\n\tadd_action( 'after_setup_theme', $n( 'theme_setup' ) );\n\tadd_action( 'wp_enqueue_scripts', $n( 'scripts' ) );\n\tadd_action( 'wp_enqueue_scripts', $n( 'styles' ) );\n\tadd_action( 'wp_head', $n( 'js_detection' ), 0 );\n\tadd_action( 'wp_head', $n( 'add_manifest' ), 10 );\n\tadd_action( 'wp_head', $n( 'js_disabled_stylesheets' ) );\n\n\tadd_filter( 'script_loader_tag', $n( 'script_loader_tag' ), 10, 2 );\n\n\tif ( ! is_admin() ) {\n\t\tadd_filter( 'style_loader_tag', $n( 'style_loader_tag' ), 10, 2 );\n\t}\n\n}\n\n/**\n * Makes Theme available for translation.\n *\n * Translations can be added to the /languages directory.\n * If you're building a theme based on \"tenup-scaffold\", change the\n * filename of '/languages/TenUpScaffold.pot' to the name of your project.\n *\n * @return void\n */\nfunction i18n() {\n\tload_theme_textdomain( 'tenup-scaffold', TENUP_SCAFFOLD_PATH . '/languages' );\n}\n\n/**\n * Sets up theme defaults and registers support for various WordPress features.\n */\nfunction theme_setup() {\n\tadd_theme_support( 'automatic-feed-links' );\n\tadd_theme_support( 'title-tag' );\n\tadd_theme_support( 'post-thumbnails' );\n\tadd_theme_support(\n\t\t'html5',\n\t\tarray(\n\t\t\t'search-form',\n\t\t\t'gallery',\n\t\t)\n\t);\n\n\t// This theme uses wp_nav_menu() in three locations.\n\tregister_nav_menus(\n\t\tarray(\n\t\t\t'primary' => esc_html__( 'Primary Menu', 'tenup-scaffold' ),\n\t\t)\n\t);\n}\n\n/**\n * Enqueue scripts for front-end.\n *\n * @return void\n */\nfunction scripts() {\n\n\twp_enqueue_script(\n\t\t'frontend',\n\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/js/frontend.js',\n\t\t[],\n\t\tTENUP_SCAFFOLD_VERSION,\n\t\ttrue\n\t);\n\n\tif ( is_page_template( 'templates/page-styleguide.php' ) ) {\n\t\twp_enqueue_script(\n\t\t\t'styleguide',\n\t\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/js/styleguide.js',\n\t\t\t[],\n\t\t\tTENUP_SCAFFOLD_VERSION,\n\t\t\ttrue\n\t\t);\n\t}\n\n}\n\n/**\n * Enqueue styles for front-end.\n *\n * @return void\n */\nfunction styles() {\n\n\twp_enqueue_style(\n\t\t'styles',\n\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/css/style.css',\n\t\t[],\n\t\tTENUP_SCAFFOLD_VERSION\n\t);\n\n\tif ( is_page_template( 'templates/page-styleguide.php' ) ) {\n\t\twp_enqueue_style(\n\t\t\t'styleguide',\n\t\t\tTENUP_SCAFFOLD_TEMPLATE_URL . '/dist/css/styleguide-style.css',\n\t\t\t[],\n\t\t\tTENUP_SCAFFOLD_VERSION\n\t\t);\n\t}\n}\n\n/**\n * Handles JavaScript detection.\n *\n * Adds a `js` class to the root `<html>` element when JavaScript is detected.\n *\n * @return void\n */\nfunction js_detection() {\n\n\techo \"<script>(function(html){html.className = html.className.replace(/\\bno-js\\b/,'js')})(document.documentElement);</script>\\n\";\n}\n\n/**\n * Add async/defer attributes to enqueued scripts that have the specified script_execution flag.\n *\n * @link https://core.trac.wordpress.org/ticket/12009\n * @param string $tag    The script tag.\n * @param string $handle The script handle.\n * @return string\n */\nfunction script_loader_tag( $tag, $handle ) {\n\t$script_execution = wp_scripts()->get_data( $handle, 'script_execution' );\n\n\tif ( ! $script_execution ) {\n\t\treturn $tag;\n\t}\n\n\tif ( 'async' !== $script_execution && 'defer' !== $script_execution ) {\n\t\treturn $tag;\n\t}\n\n\t// Abort adding async/defer for scripts that have this script as a dependency. _doing_it_wrong()?\n\tforeach ( wp_scripts()->registered as $script ) {\n\t\tif ( in_array( $handle, $script->deps, true ) ) {\n\t\t\treturn $tag;\n\t\t}\n\t}\n\n\t// Add the attribute if it hasn't already been added.\n\tif ( ! preg_match( \":\\s$script_execution(=|>|\\s):\", $tag ) ) {\n\t\t$tag = preg_replace( ':(?=></script>):', \" $script_execution\", $tag, 1 );\n\t}\n\n\treturn $tag;\n}\n\n/**\n * Asynchronous stylesheet definitions\n *\n * Determines which stylesheets should behave\n * asynchronously on the page by storing their\n * unique handle in an array.\n *\n * @return array\n */\nfunction get_known_handles() {\n\treturn array( 'admin-bar', 'dashicons', 'styles', 'styleguide', 'wp-block-library' );\n}\n\n/**\n * Add async/defer attributes to enqueued scripts that have the specified script_execution flag.\n *\n * @link https://developer.wordpress.org/reference/hooks/style_loader_tag/\n * @param string $html   The style html output.\n * @param string $handle The style handle.\n * @return string\n */\nfunction style_loader_tag( $html, $handle ) {\n\n\t// Get previously defined stylesheets.\n\t$known_handles = get_known_handles();\n\n\t// Loop over stylesheets and replace media attribute\n\tforeach ( $known_handles as $known_style ) {\n\t\tif ( $known_style === $handle ) {\n\t\t\t$print_html = str_replace( \"media='all'\", \"media='print' onload=\\\"this.media='all'\\\"\", $html );\n\t\t}\n\t}\n\n\tif ( ! empty( $print_html ) ) {\n\t\t$html = $print_html . '<noscript>' . $html . '</noscript>';\n\t}\n\n\treturn $html;\n}\n\n/**\n * Appends a link tag used to add a manifest.json to the head\n *\n * @return void\n */\nfunction add_manifest() {\n\techo \"<link rel='manifest' href='\" . esc_url( TENUP_SCAFFOLD_TEMPLATE_URL . '/manifest.json' ) . \"' />\";\n}\n"
  },
  {
    "path": "includes/overrides.php",
    "content": "<?php\n/**\n * This file contains hooks and functions that override the behavior of WP Core.\n *\n * @package TenUpScaffold\n */\n\nnamespace TenUpScaffold\\Overrides;\n\n/**\n * Registers instances where we will override default WP Core behavior.\n *\n * @link https://developer.wordpress.org/reference/functions/print_emoji_detection_script/\n * @link https://developer.wordpress.org/reference/functions/print_emoji_styles/\n * @link https://developer.wordpress.org/reference/functions/wp_staticize_emoji/\n * @link https://developer.wordpress.org/reference/functions/wp_staticize_emoji_for_email/\n * @link https://developer.wordpress.org/reference/functions/wp_generator/\n * @link https://developer.wordpress.org/reference/functions/wlwmanifest_link/\n * @link https://developer.wordpress.org/reference/functions/rsd_link/\n *\n * @return void\n */\nfunction setup() {\n\t// Remove the Emoji detection script.\n\tremove_action( 'wp_head', 'print_emoji_detection_script', 7 );\n\n\t// Remove inline Emoji detection script.\n\tremove_action( 'admin_print_scripts', 'print_emoji_detection_script' );\n\n\t// Remove Emoji-related styles from front end and back end.\n\tremove_action( 'wp_print_styles', 'print_emoji_styles' );\n\tremove_action( 'admin_print_styles', 'print_emoji_styles' );\n\n\t// Remove Emoji-to-static-img conversion.\n\tremove_filter( 'the_content_feed', 'wp_staticize_emoji' );\n\tremove_filter( 'comment_text_rss', 'wp_staticize_emoji' );\n\tremove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );\n\n\tadd_filter( 'tiny_mce_plugins', __NAMESPACE__ . '\\disable_emojis_tinymce' );\n\tadd_filter( 'wp_resource_hints', __NAMESPACE__ . '\\disable_emoji_dns_prefetch', 10, 2 );\n\n\t// Remove WordPress generator meta.\n\tremove_action( 'wp_head', 'wp_generator' );\n\t// Remove Windows Live Writer manifest link.\n\tremove_action( 'wp_head', 'wlwmanifest_link' );\n\t// Remove the link to Really Simple Discovery service endpoint.\n\tremove_action( 'wp_head', 'rsd_link' );\n\n}\n\n/**\n * Filter function used to remove the TinyMCE emoji plugin.\n *\n * @link https://developer.wordpress.org/reference/hooks/tiny_mce_plugins/\n *\n * @param  array $plugins An array of default TinyMCE plugins.\n * @return array          An array of TinyMCE plugins, without wpemoji.\n */\nfunction disable_emojis_tinymce( $plugins ) {\n\tif ( is_array( $plugins ) && in_array( 'wpemoji', $plugins, true ) ) {\n\t\treturn array_diff( $plugins, array( 'wpemoji' ) );\n\t}\n\n\treturn $plugins;\n}\n\n/**\n * Remove emoji CDN hostname from DNS prefetching hints.\n *\n * @link https://developer.wordpress.org/reference/hooks/emoji_svg_url/\n *\n * @param  array  $urls          URLs to print for resource hints.\n * @param  string $relation_type The relation type the URLs are printed for.\n * @return array                 Difference betwen the two arrays.\n */\nfunction disable_emoji_dns_prefetch( $urls, $relation_type ) {\n\tif ( 'dns-prefetch' === $relation_type ) {\n\t\t/** This filter is documented in wp-includes/formatting.php */\n\t\t$emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' );\n\n\t\t$urls = array_values( array_diff( $urls, array( $emoji_svg_url ) ) );\n\t}\n\n\treturn $urls;\n}\n"
  },
  {
    "path": "includes/template-tags.php",
    "content": "<?php\n/**\n * Custom template tags for this theme.\n *\n * This file is for custom template tags only and it should not contain\n * functions that will be used for filtering or adding an action.\n *\n * All functions should be prefixed with TenUpScaffold in order to prevent\n * pollution of the global namespace and potential conflicts with functions\n * from plugins.\n * Example: `tenup_scaffold_function()`\n *\n * @package TenUpScaffold\\Template_Tags\n *\n */\n\n// phpcs:ignoreFile\n"
  },
  {
    "path": "includes/utility.php",
    "content": "<?php\n/**\n * Utility functions for the theme.\n *\n * This file is for custom helper functions.\n * These should not be confused with WordPress template\n * tags. Template tags typically use prefixing, as opposed\n * to Namespaces.\n *\n * @link https://developer.wordpress.org/themes/basics/template-tags/\n * @package TenUpScaffold\n */\n\nnamespace TenUpScaffold\\Utility;\n\n/**\n * Extract colors from a CSS or Sass file\n *\n * @param string $path the path to your CSS variables file\n */\nfunction get_colors( $path ) {\n\n\t$dir = get_stylesheet_directory();\n\n\tif ( file_exists( $dir . $path ) ) {\n\t\t$css_vars = file_get_contents( $dir . $path ); // phpcs:ignore WordPress.WP.AlternativeFunctions\n\t\tpreg_match_all( ' /#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\\b/', $css_vars, $matches );\n\t\treturn $matches[0];\n\t}\n\n}\n\n/**\n * Adjust the brightness of a color (HEX)\n *\n * @param string $hex The hex code for the color\n * @param number $steps amount you want to change the brightness\n * @return string new color with brightness adjusted\n */\nfunction adjust_brightness( $hex, $steps ) {\n\n\t// Steps should be between -255 and 255. Negative = darker, positive = lighter\n\t$steps = max( -255, min( 255, $steps ) );\n\n\t// Normalize into a six character long hex string\n\t$hex = str_replace( '#', '', $hex );\n\tif ( 3 === strlen( $hex ) ) {\n\t\t$hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );\n\t}\n\n\t// Split into three parts: R, G and B\n\t$color_parts = str_split( $hex, 2 );\n\t$return      = '#';\n\n\tforeach ( $color_parts as $color ) {\n\t\t$color   = hexdec( $color ); // Convert to decimal\n\t\t$color   = max( 0, min( 255, $color + $steps ) ); // Adjust color\n\t\t$return .= str_pad( dechex( $color ), 2, '0', STR_PAD_LEFT ); // Make two char hex code\n\t}\n\n\treturn $return;\n\n}\n"
  },
  {
    "path": "index.php",
    "content": "<?php\n/**\n * The main template file\n *\n * @package TenUpScaffold\n */\n\nget_header(); ?>\n\n\t<?php if ( have_posts() ) : ?>\n\t\t<?php while ( have_posts() ) : the_post(); ?>\n\t\t\t<h2><?php the_title(); ?></h2>\n\t\t\t<?php the_content(); ?>\n\t\t<?php endwhile; ?>\n\t<?php endif; ?>\n\n<?php\nget_footer();\n"
  },
  {
    "path": "languages/TenUpScaffold.pot",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: TenUpScaffold\\n\"\n\"POT-Creation-Date: 2015-03-03T12:53:58.231Z\\n\"\n\"PO-Revision-Date: 2015-03-03T12:53:58.231Z\\n\"\n\"Last-Translator: 10up <info@10up.com>\\n\"\n\"Language-Team: \\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;\"\n\"_n_noop:1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;\"\n\"esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\\n\"\n\"X-Poedit-Basepath: .\\n\"\n\"X-Poedit-SearchPath-0: ..\\n\"\n"
  },
  {
    "path": "manifest.json",
    "content": "{\n  \"name\": \"10up Scaffold\",\n  \"short_name\": \"10up Scaffold\",\n  \"description\": \"Project description for 10up Scaffold\",\n  \"display\": \"standalone\",\n  \"start_url\": \"/?utm_source=app\",\n  \"background_color\": \"#232323\",\n  \"orientation\": \"any\",\n  \"theme_color\": \"#d23226\",\n  \"icons\": [\n    {\n      \"src\": \"dist/images/icon-512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"dist/images/icon-192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"dist/images/icon-128.png\",\n      \"sizes\": \"128x128\",\n      \"type\": \"image/png\"\n    }\n  ]\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"tenup-scaffold\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Project Description\",\n  \"homepage\": \"https://project-domain.tld\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://project-git-repo.tld\"\n  },\n  \"author\": {\n    \"name\": \"10up\",\n    \"email\": \"info@10up.com\",\n    \"url\": \"https://10up.com\",\n    \"role\": \"developer\"\n  },\n  \"scripts\": {\n    \"start\": \"composer install --ignore-platform-reqs && npm install && npm run build\",\n    \"build\": \"cross-env NODE_ENV=production webpack --config config/webpack.config.prod.js\",\n    \"dev\": \"cross-env NODE_ENV=development webpack --config config/webpack.config.dev.js\",\n    \"watch\": \"cross-env NODE_ENV=development webpack --watch --config config/webpack.config.dev.js\",\n    \"build-release\": \"npm install && composer install --no-dev -o && npm run build\",\n    \"lint-release\": \"npm install && composer install && npm run lint\",\n    \"lint-css\": \"stylelint assets/css\",\n    \"lint-js\": \"eslint assets/js\",\n    \"lint-php\": \"composer run lint\",\n    \"format-js\": \"eslint --fix assets/js\",\n    \"lint\": \"npm run lint-css && npm run lint-js && npm run lint-php\",\n    \"format\": \"npm run format-js\",\n    \"test:a11y\": \"node tests/accessibility/compliance/pa11y.js\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.css\": [\n      \"stylelint\"\n    ],\n    \"*.js\": [\n      \"eslint\"\n    ],\n    \"*.php\": [\n      \"./vendor/bin/phpcs --extensions=php --warning-severity=8 -s\"\n    ]\n  },\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@10up/babel-preset-default\": \"^1.0.0\",\n    \"@10up/eslint-config\": \"^2.0.0\",\n    \"@10up/stylelint-config\": \"^1.0.9\",\n    \"@babel/core\": \"^7.9.0\",\n    \"@wordpress/eslint-plugin\": \"^5.0.1\",\n    \"babel-eslint\": \"^10.0.3\",\n    \"babel-loader\": \"^8.0.6\",\n    \"backstopjs\": \"^4.4\",\n    \"browser-sync\": \"^2.26.7\",\n    \"browser-sync-webpack-plugin\": \"^2.2.2\",\n    \"browserslist\": \"^4.8.2\",\n    \"caniuse-db\": \"^1.0.30001016\",\n    \"clean-webpack-plugin\": \"^3.0.0\",\n    \"copy-webpack-plugin\": \"^5.1.1\",\n    \"core-js\": \"^3.6.0\",\n    \"cross-env\": \"^5.2.0\",\n    \"css-loader\": \"^3.4.0\",\n    \"cssnano\": \"^4.1.10\",\n    \"eslint\": \"^6.8.0\",\n    \"eslint-config-airbnb\": \"^18.1.0\",\n    \"eslint-config-airbnb-base\": \"^14.1.0\",\n    \"eslint-config-prettier\": \"^6.10.1\",\n    \"eslint-loader\": \"^3.0.3\",\n    \"eslint-plugin-import\": \"^2.20.2\",\n    \"eslint-plugin-jsdoc\": \"^22.1.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.2.3\",\n    \"eslint-plugin-prettier\": \"^3.1.2\",\n    \"eslint-plugin-react\": \"^7.19.0\",\n    \"eslint-plugin-react-hooks\": \"^2.5.0\",\n    \"husky\": \"^3.1.0\",\n    \"imagemin-webpack-plugin\": \"^2.4.2\",\n    \"lint-staged\": \"^9.5.0\",\n    \"mini-css-extract-plugin\": \"^0.9.0\",\n    \"pa11y\": \"^5.3.0\",\n    \"postcss-editor-styles\": \"^0.3.0\",\n    \"postcss-import\": \"^12.0.1\",\n    \"postcss-loader\": \"^3.0.0\",\n    \"postcss-preset-env\": \"^6.7.0\",\n    \"prettier\": \"^2.0.4\",\n    \"stylelint\": \"^9.10.1\",\n    \"stylelint-config-wordpress\": \"^14.0.0\",\n    \"stylelint-declaration-use-variable\": \"^1.7.2\",\n    \"stylelint-order\": \"^2.2.1\",\n    \"stylelint-webpack-plugin\": \"^1.1.2\",\n    \"terser\": \"^4.4.3\",\n    \"webpack\": \"^4.41.4\",\n    \"webpack-cli\": \"^3.3.10\",\n    \"webpack-fix-style-only-entries\": \"^0.4.0\",\n    \"webpack-merge\": \"^4.2.2\",\n    \"webpackbar\": \"^4.0.0\"\n  },\n  \"testing\": {\n    \"urls\": {\n      \"homepage\": \"http://tenup-scaffold.test\",\n      \"article\": \"http://tenup-scaffold.test/hello-world\",\n      \"search-results\": \"http://tenup-scaffold.test/?s=hello\",\n      \"local\": \"http://tenup-scaffold.test\"\n    },\n    \"accessibility\": {\n      \"compliance\": \"WCAG2AA\"\n    }\n  },\n  \"engines\": {\n    \"node\": \">=12.0.0\"\n  },\n  \"dependencies\": {\n    \"normalize.css\": \"^8.0.1\"\n  }\n}\n"
  },
  {
    "path": "partials/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "phpcs.xml",
    "content": "<?xml version=\"1.0\"?>\n<ruleset name=\"10up PHPCS\">\n\t<description>10up PHPCS extended.</description>\n\n\t<rule ref=\"10up-Default\" />\n</ruleset>\n"
  },
  {
    "path": "postcss.config.js",
    "content": "/**\n * Exports the PostCSS configuration.\n *\n * @return {string} PostCSS options.\n */\nmodule.exports = ( { file, options, env } ) => ( { /* eslint-disable-line */\n\tplugins: {\n\t\t'postcss-import': {},\n\t\t'postcss-preset-env': {\n\t\t\tstage: 0,\n\t\t\tautoprefixer: {\n\t\t\t\tgrid: true,\n\t\t\t},\n\t\t},\n\t\t// Prefix editor styles with class `editor-styles-wrapper`.\n\t\t'postcss-editor-styles':\n\t\t\tfile.basename === 'editor-style.css'\n\t\t\t\t? {\n\t\t\t\t\t\tscopeTo: '.editor-styles-wrapper',\n\t\t\t\t\t\tignore: [\n\t\t\t\t\t\t\t':root',\n\t\t\t\t\t\t\t'.edit-post-visual-editor.editor-styles-wrapper',\n\t\t\t\t\t\t\t'.wp-toolbar',\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: ['html', ':disabled', '[readonly]', '[disabled]'],\n\t\t\t\t\t\ttags: ['button', 'input', 'label', 'select', 'textarea', 'form'],\n\t\t\t\t  }\n\t\t\t\t: false,\n\t\t// Minify style on production using cssano.\n\t\tcssnano:\n\t\t\tenv === 'production'\n\t\t\t\t? {\n\t\t\t\t\t\tpreset: [\n\t\t\t\t\t\t\t'default',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tautoprefixer: false,\n\t\t\t\t\t\t\t\tcalc: {\n\t\t\t\t\t\t\t\t\tprecision: 8,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tconvertValues: true,\n\t\t\t\t\t\t\t\tdiscardComments: {\n\t\t\t\t\t\t\t\t\tremoveAll: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmergeLonghand: false,\n\t\t\t\t\t\t\t\tzindex: false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t  }\n\t\t\t\t: false,\n\t},\n});\n"
  },
  {
    "path": "search.php",
    "content": "<?php\n/**\n * The template for displaying search results pages.\n *\n * @package TenUpScaffold\n */\n\nget_header(); ?>\n\n\t<section itemscope itemtype=\"https://schema.org/SearchResultsPage\">\n\t\t<?php if ( have_posts() ) : ?>\n\t\t\t<h1>\n\t\t\t\t<?php\n\t\t\t\t/* translators: the search query */\n\t\t\t\tprintf( esc_html__( 'Search Results for: %s', 'tenup-scaffold' ), '<span>' . esc_html( get_search_query() ) . '</span>' );\n\t\t\t\t?>\n\t\t\t</h1>\n\n\t\t\t<ul>\n\t\t\t<?php\n\t\t\twhile ( have_posts() ) :\n\t\t\t\tthe_post();\n\t\t\t\t?>\n\n\t\t\t\t<li itemscope itemtype=\"https://schema.org/Thing\">\n\t\t\t\t\t<?php\n\t\t\t\t\tif ( has_post_thumbnail() ) {\n\t\t\t\t\t\tthe_post_thumbnail();\n\t\t\t\t\t}\n\n\t\t\t\t\tthe_title( '<span itemprop=\"name\"><a href=\"' . esc_url( get_permalink() ) . '\" itemprop=\"url\">', '</a></span>' );\n\t\t\t\t\t?>\n\t\t\t\t\t<div itemprop=\"description\">\n\t\t\t\t\t\t<?php the_excerpt(); ?>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\n\t\t\t<?php endwhile; ?>\n\t\t\t</ul>\n\n\t\t\t<?php the_posts_navigation(); ?>\n\t\t<?php endif; ?>\n\t</section>\n\n<?php\nget_footer();\n"
  },
  {
    "path": "searchform.php",
    "content": "<?php\n/**\n * The template for displaying the search form.\n *\n * @package TenUpScaffold\n */\n\n?>\n\n<div itemscope itemtype=\"http://schema.org/WebSite\">\n\t<form role=\"search\" id=\"searchform\" class=\"search-form\" method=\"get\" action=\"<?php echo esc_url( home_url( '/' ) ); ?>\">\n\t\t<meta itemprop=\"target\" content=\"<?php echo esc_url( home_url() ); ?>/?s={s}\" />\n\t\t<label for=\"search-field\">\n\t\t\t<?php echo esc_html_x( 'Search for:', 'label', 'tenup-scaffold' ); ?>\n\t\t</label>\n\t\t<input itemprop=\"query-input\" type=\"search\" id=\"search-field\" value=\"<?php echo get_search_query(); ?>\" placeholder=\"<?php echo esc_attr_x( 'Search &hellip;', 'placeholder', 'tenup-scaffold' ); ?>\" name=\"s\" />\n\t\t<input type=\"submit\" value=\"<?php echo esc_attr_x( 'Submit', 'submit button', 'tenup-scaffold' ); ?>\">\n\t</form>\n</div>\n"
  },
  {
    "path": "style.css",
    "content": "/**\n * Theme Name:  10up Scaffold\n * Theme URI:   https://10up.com\n * Description: Project description.\n * Author:      10up\n * Author URI:  https://10up.com\n * Version:     0.1.0\n * Tags:\n * Text Domain: tenup-scaffold\n */\n"
  },
  {
    "path": "templates/page-styleguide.php",
    "content": "<?php\n/**\n * Template Name: Style Guide\n *\n * @package TenUpScaffold\n */\n\nnamespace TenUpScaffold\\Utility;\n\nuse function TenUpScaffold\\Utility\\adjust_brightness;\nuse function TenUpScaffold\\Utility\\get_colors;\n\nget_header();\n?>\n\n<div class=\"uikit__container\">\n\n\t<h1 class=\"uikit__heading\">\n\t\t<div class=\"uikit__block\">\n\t\t\t<span><?php echo esc_html( get_the_title() ); ?></span>\n\t\t</div>\n\t</h1>\n\n\t<div class=\"uikit__content\">\n\n\t\t<?php\n\t\t\t$colors = get_colors( '/assets/css/frontend/global/colors.css' );\n\n\t\tif ( ! empty( $colors ) ) :\n\t\t\t?>\n\t\t<section class=\"uikit__section\" id=\"colors\">\n\t\t\t<h2 class=\"heading\">Primary Palette</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<ul class=\"uikit__colors\">\n\n\t\t\t\t<?php foreach ( $colors as $color ) : ?>\n\n\t\t\t\t\t<li class=\"uikit__color\" style=\"background: <?php echo esc_attr( $color ); ?>; border-color: <?php echo esc_attr( adjust_brightness( $color, -25 ) ); ?>\">\n\t\t\t\t\t\t<p class=\"uikit__color--label uikit__text--small\"><?php echo esc_html( $color ); ?></p>\n\t\t\t\t\t</li>\n\n\t\t\t\t<?php endforeach; ?>\n\n\t\t\t\t</ul>\n\t\t\t</div><!--/.content-->\n\n\t\t</section><!--/.uikit__section-->\n\t\t<?php endif; ?>\n\n\t\t<section class=\"uikit__section\" id=\"headings\">\n\t\t\t<h2 class=\"heading\">Headings</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<h1>H1, Heading 1 {64px}</h1>\n\t\t\t\t<h2>H2, Heading 2 {48px}</h2>\n\t\t\t\t<h3>H3, Heading 3 {38px}</h3>\n\t\t\t\t<h4>H4, Heading 4 {30px}</h4>\n\t\t\t\t<h5>H5, Heading 5 {26px}</h5>\n\t\t\t</div><!--/.content-->\n\n\t\t</section><!--/.uikit__section-->\n\n\t\t<section class=\"uikit__section\" id=\"body\">\n\t\t\t<h2 class=\"heading\">Body</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<p>\n\t\t\t\t\t22pt, Acta Book, line 36 ( 1.5rem ). Lorem ipsum dolor sit amet,\n\t\t\t\t\tconsectetur adipiscing elit. Multa sunt dicta ab antiquis de contemnendis\n\t\t\t\t\tac despiciendis rebus humanis; Hoc mihi cum tuo fratre convenit. Fortasse\n\t\t\t\t\tid optimum, sed ubi illud: Plus semper voluptatis? Haec quo modo conveniant,\n\t\t\t\t\tnon sane intellego. Lorem ipsum dolor sit amet, consectetur adipiscing\n\t\t\t\t\telit. Multa sunt dicta ab antiquis de contemnendis ac despiciendis rebus\n\t\t\t\t\thumanis; Hoc mihi cum tuo fratre convenit. Fortasse id optimum, sed ubi\n\t\t\t\t\tillud: Plus semper voluptatis? Haec quo modo conveniant, non sane intellego.\n\t\t\t\t</p>\n\n\t\t\t\t<p>\n\t\t\t\t\tThis is an <a href=\"#!\">inline link text</a> example and hover link example.\n\t\t\t\t</p>\n\t\t\t</div><!--/.content-->\n\n\t\t</section><!--/.uikit__section-->\n\n\t\t<section class=\"uikit__section\" id=\"buttons\">\n\t\t\t<h2 class=\"heading\">Buttons</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<button type=\"button\" class=\"button-primary\">Button</button>\n\t\t\t\t<button type=\"button\" class=\"button-secondary\">Button</button>\n\t\t\t\t<button type=\"button\" class=\"button-tertiary\">Button</button>\n\t\t\t</div><!--/.content-->\n\n\t\t</section><!--/.uikit__section-->\n\n\t\t<section class=\"uikit__section\" id=\"inputs\">\n\t\t\t<h2 class=\"heading\">Inputs</h2>\n\n\t\t\t<div class=\"content\">\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"w1\">Text Input</label>\n\t\t\t\t\t<input type=\"text\" id=\"w1\" name=\"\" placeholder=\"Input placeholder text\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"pwd\">Password Input</label>\n\t\t\t\t\t<input type=\"password\" id=\"pwd\" name=\"\" placeholder=\"password placeholder text\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"email\">Email Input</label>\n\t\t\t\t\t<input type=\"email\" id=\"email\" name=\"\" placeholder=\"you@example.com\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"w2\">Label</label>\n\t\t\t\t\t<textarea id=\"w2\" cols=\"10\" rows=\"10\"></textarea>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"volume\">Range Input</label>\n\t\t\t\t\t<input type=\"range\" id=\"start\" name=\"\" min=\"0\" max=\"11\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"date\">Date Input</label>\n\t\t\t\t\t<input type=\"date\" id=\"date\" name=\"\" value=\"\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"num\">Number Input</label>\n\t\t\t\t\t<input type=\"number\" id=\"num\" name=\"\" value=\"\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<label for=\"w3\">Label</label>\n\t\t\t\t\t<select id=\"w3\">\n\t\t\t\t\t\t<option disabled selected>Select an Option</option>\n\t\t\t\t\t\t<option value=\"1\">Option 1</option>\n\t\t\t\t\t\t<option value=\"2\">Option 2</option>\n\t\t\t\t\t\t<option value=\"3\">Option 3</option>\n\t\t\t\t\t\t<option value=\"4\">Option 4</option>\n\t\t\t\t\t\t<option value=\"5\">Option 5</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>Checkbox Field Grouping</legend>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"w4-1\">\n\t\t\t\t\t\t\t<label for=\"w4-1\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"w4-2\">\n\t\t\t\t\t\t\t<label for=\"w4-2\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"w4-3\">\n\t\t\t\t\t\t\t<label for=\"w4-3\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"uikit-mb-1\">\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<legend>Radio Button Field Grouping</legend>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"w5\" name=\"group\">\n\t\t\t\t\t\t\t<label for=\"w5\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"w6\" name=\"group\">\n\t\t\t\t\t\t\t<label for=\"w6\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"w7\" name=\"group\">\n\t\t\t\t\t\t\t<label for=\"w7\">Label</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</div>\n\n\t\t\t</div><!--/.content-->\n\n\t\t</section><!--/.uikit__section-->\n\n\t\t<section class=\"uikit__section\" id=\"lists\">\n\t\t\t<h2 class=\"heading\">Lists</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li>Morbi natoque habitasse</li>\n\t\t\t\t\t<li>Magnis ullamcorper risus taciti\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>Justo metus turpis habitant nisl</li>\n\t\t\t\t\t\t\t<li>Platea primis semper</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>Nibh id natoque elementum</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<ol>\n\t\t\t\t\t<li>Morbi natoque habitasse</li>\n\t\t\t\t\t<li>Magnis ullamcorper risus taciti\n\t\t\t\t\t\t<ol>\n\t\t\t\t\t\t\t<li>Justo metus turpis habitant nisl</li>\n\t\t\t\t\t\t\t<li>Platea primis semper</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>Nibh id natoque elementum</li>\n\t\t\t\t</ol>\n\t\t\t</div><!--/.content-->\n\t\t</section><!--/.uikit__section-->\n\n\t\t<section class=\"uikit__section\" id=\"tables\">\n\t\t\t<h2 class=\"heading\">Tables</h2>\n\n\t\t\t<div class=\"content\">\n\t\t\t\t<table>\n\t\t\t\t\t<caption>Egestas duis tincidunt cum</caption>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td scope=\"col\">ID</td>\n\t\t\t\t\t\t\t<th scope=\"col\">Item</th>\n\t\t\t\t\t\t\t<th scope=\"col\">Purchase Date</th>\n\t\t\t\t\t\t\t<th scope=\"col\">Price</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tfoot>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th scope=\"row\" colspan=\"3\">Sum</th>\n\t\t\t\t\t\t\t<td>$15.55</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tfoot>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th scope=\"row\">1</th>\n\t\t\t\t\t\t\t<td>Stick of gum</td>\n\t\t\t\t\t\t\t<td>02/13/15</td>\n\t\t\t\t\t\t\t<td>$0.19</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th scope=\"row\">2</th>\n\t\t\t\t\t\t\t<td>Toothbrush</td>\n\t\t\t\t\t\t\t<td>11/03/14</td>\n\t\t\t\t\t\t\t<td>$2.37</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th scope=\"row\">3</th>\n\t\t\t\t\t\t\t<td>Umbrella</td>\n\t\t\t\t\t\t\t<td>05/12/17</td>\n\t\t\t\t\t\t\t<td>$12.99</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div><!--/.content-->\n\t\t</section><!--/.uikit__section-->\n\n\t</div><!--/.uikit__content-->\n\n</div><!--/.uikit__container-->\n\n<?php get_footer(); ?>\n"
  },
  {
    "path": "tests/accessibility/compliance/pa11y.js",
    "content": "/* global require, process */\n\n'use strict';\n\nconst pa11y = require( 'pa11y' );\nconst chalk = require( 'chalk' );\nconst packageJson = require( '../../../package.json' );\nconst testingUrls = packageJson.testing.urls;\n\n// Initialize variables\nlet url;\nlet key;\n\n// Loop through all the URLs and set the test destination\nif ( process.argv[2] ) {\n\n\tfor ( key in testingUrls ) {\n\n\t\tif ( key === process.argv[2] ) {\n\n\t\t\t// Set the testing URL\n\t\t\tif ( packageJson.testing.urls[key] !== '' ) {\n\n\t\t\t\turl = packageJson.testing.urls[key];\n\n\t\t\t} else {\n\n\t\t\t\t// If the URL object exists, but is empty\n\t\t\t\tconsole.log( chalk.red.bold( '✘ Error: Please add a URL for ' + key ) );\n\t\t\t\tconsole.log( '' );\n\t\t\t\tprocess.exit( 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t} // for()\n\n} else {\n\n\turl = packageJson.testing.urls.local;\n\n}\n\n// Set up the pa11y config options\nconst config = {\n\tstandard: packageJson.testing.accessibility.compliance,\n\thideElements: '#wpadminbar',\n\tincludeWarnings: true,\n\trootElement: 'body',\n\tthreshold: 2,\n\ttimeout: 20000,\n\tuserAgent: 'pa11y',\n\twidth: 1280,\n\tignore: [\n\t\t'notice'\n\t],\n\tlog: {\n\t\tdebug: console.log.bind( console ),\n\t\terror: console.error.bind( console ),\n\t\tinfo: console.log.bind( console )\n\t},\n\tchromeLaunchConfig: {\n\t\tignoreHTTPSErrors: true\n\t}\n};\n\n/**\n * Run Accessibility Test\n * @param {string} url test URL\n * @param {object} config test configuration option\n * @param {Function} [cb] Callback\n * @returns {object} test results\n */\npa11y( url, config, ( error, results ) => {\n\t\n\tif( error ) {\n\n\t\treturn console.error( error );\n\n\t} else if ( results.issues.length ) {\n\n\t\tconsole.log( results );\n\n\t} else {\n\n\t\tconsole.log( chalk.green.bold( '✔ All accessibility tests have passed.' ) );\n\n\t}\n\n} );\n"
  },
  {
    "path": "tests/js/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "tests/php/.gitkeep",
    "content": "# Basically just want to ignore the directory contents\n"
  },
  {
    "path": "tests/wpa/FrontendTest.php",
    "content": "<?php\n/**\n * Test Frontent Functionality.\n *\n * @package TenUpScaffold\n */\n\nuse WPAcceptance\\Exception\\ElementNotFound as ElementNotFound;\n\n/**\n * PHPUnit test class\n */\nclass HeaderTest extends \\WPAcceptance\\PHPUnit\\TestCase {\n\n\t/**\n\t * @testdox The stylesheet is properly enqueued.\n\t */\n\tpublic function testStylesheetEnqueued() {\n\t\t$I = $this->openBrowserPage();\n\t\t$I->moveTo( '/' );\n\n\t\t// Test stylesheet is enqueued.\n\t\ttry {\n\t\t\t$element = $I->getElement( 'link#styles-css[rel=\"stylesheet\"]' );\n\t\t} catch ( ElementNotFound $e ) {\n\t\t\t// If the stylesheet doesn't exist, we catch the exception and fail the test.\n\t\t\t$this->assertTrue( false );\n\t\t}\n\n\t\t$this->assertNotEmpty( $element );\n\t}\n\n\t/**\n\t * @testdox The frontend javascript file is properly enqueued.\n\t */\n\tpublic function testJavascriptEnqueued() {\n\t\t$I = $this->openBrowserPage();\n\t\t$I->moveTo( '/' );\n\n\t\t// Test frontend.js is enqueued.\n\t\ttry {\n\t\t\t$element = $I->getElement( 'script[src*=\"frontend.js\"' );\n\t\t} catch ( ElementNotFound $e ) {\n\t\t\t// If the script doesn't exist, we catch the exception and fail the test.\n\t\t\t$this->assertTrue( false );\n\t\t}\n\n\t\t$this->assertNotEmpty( $element );\n\t}\n\n\t/**\n\t * @testdox Feed links are present.\n\t */\n\tpublic function testAutomaticFeedLinks() {\n\t\t$I = $this->openBrowserPage();\n\t\t$I->moveTo( '/' );\n\n\t\t// Test feed link is present.\n\t\ttry {\n\t\t\t$element = $I->getElement( 'link[type=\"application/rss+xml\"' );\n\t\t} catch ( ElementNotFound $e ) {\n\t\t\t// If the feed doesn't exist, we catch the exception and fail the test.\n\t\t\t$this->assertTrue( false );\n\t\t}\n\n\t\t$this->assertNotEmpty( $element );\n\t}\n\n\t/**\n\t * @testdox The body class is dynamic.\n\t */\n\tpublic function testBodyClass() {\n\t\t$I = $this->openBrowserPage();\n\t\t$I->moveTo( '/' );\n\n\t\t$this->assertEquals( 'home blog', $I->getElementAttribute( 'body', 'class' ) );\n\t}\n}\n"
  },
  {
    "path": "tests/wpa/StandardTest.php",
    "content": "<?php\n/**\n * Test standard WP functionality\n *\n * @package TenUpScaffold\n */\n\n/**\n * PHPUnit test class\n */\nclass StandardTest extends \\WPAcceptance\\PHPUnit\\TestCase {\n\n\t/**\n\t * @testdox I see required HTML tags on front end.\n\t */\n\tpublic function testRequiredHTMLTagsOnFrontEnd() {\n\t\tparent::_testRequiredHTMLTags();\n\t}\n\n\t/**\n\t * @testdox I can log in.\n\t */\n\tpublic function testLogin() {\n\t\tparent::_testLogin();\n\t}\n\n\t/**\n\t * @testdox I see the admin bar\n\t */\n\tpublic function testAdminBarOnFront() {\n\t\tparent::_testAdminBarOnFront();\n\t}\n\n\t/**\n\t * @testdox I can save my profile\n\t */\n\tpublic function testProfileSave() {\n\t\tparent::_testProfileSave();\n\t}\n\n\t/**\n\t * @testdox I can install a plugin\n\t */\n\tpublic function testInstallPlugin() {\n\t\tparent::_testInstallPlugin();\n\t}\n\n\t/**\n\t * @testdox I can change the site title\n\t */\n\tpublic function testChangeSiteTitle() {\n\t\tparent::_testChangeSiteTitle();\n\t}\n\n\t/**\n\t * @testdox I can change permalinks\n\t */\n\tpublic function testChangePermalinks() {\n\t\tparent::_testChangePermalinks();\n\t}\n\n\t/**\n\t * @testdox I can see a single post with the correct permalink structure\n\t */\n\tpublic function testPostShows() {\n\t\tparent::_testPostShows();\n\t}\n}\n"
  },
  {
    "path": "wpacceptance.json",
    "content": "{\n  \"name\": \"tenup-scaffold\",\n  \"exclude\": [\n    \"node_modules\"\n  ],\n  \"tests\": [\n      \"./tests/wpa/*.php\"\n  ],\n  \"enforce_clean_db\": false,\n  \"project_path\": \"%WP_ROOT%/wp-content/themes/tenup-scaffold\",\n  \"environment_instructions\": [\n    [\n      \"install wordpress where url is http://tenup-scaffold.test\",\n      \"enable theme where name is tenup-scaffold\"\n    ]\n  ]\n}\n"
  }
]