Create and grow your
unique website today
28 |
29 |
30 |
31 | Build a website for your business or brand, with Neve FSE
32 | 33 | 34 | 35 | 38 |├── .distignore ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE │ ├── Bug_report.yml │ └── Feature_request.yml ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── labeler.yml └── workflows │ ├── create-build-zip.yml │ ├── create-tag.yml │ ├── deploy-s3-store.yml │ ├── diff-translations.yml │ ├── issue-labeler.yml │ ├── new-issues.yml │ ├── sync-branches.yml │ ├── test-js.yml │ └── test-php.yml ├── .gitignore ├── .releaserc.yml ├── .stylelintrc.json ├── CHANGELOG.md ├── Gruntfile.js ├── assets ├── css │ └── src │ │ ├── blocks │ │ ├── _calendar.scss │ │ ├── _image.scss │ │ ├── _latest-posts.scss │ │ ├── _main.scss │ │ ├── _navigation.scss │ │ ├── _post-terms.scss │ │ ├── _query-pagination.scss │ │ ├── _quote.scss │ │ ├── _search.scss │ │ ├── _separator.scss │ │ └── _table.scss │ │ ├── common │ │ ├── _generic.scss │ │ └── _vars.scss │ │ ├── design-pack-notice.scss │ │ ├── editor.scss │ │ ├── editor │ │ └── blocks │ │ │ ├── _button.scss │ │ │ ├── _latest-posts.scss │ │ │ └── _main.scss │ │ ├── elements │ │ ├── _comments.scss │ │ ├── _extends.scss │ │ ├── _inputs.scss │ │ └── _main.scss │ │ ├── style.scss │ │ └── welcome-notice.scss ├── fonts │ ├── albert-sans │ │ ├── AlbertSans-Italic-VariableFont_wght.ttf │ │ ├── AlbertSans-VariableFont_wght.ttf │ │ └── License.txt │ ├── figtree │ │ ├── Figtree-Italic-VariableFont_wght.ttf │ │ ├── Figtree-VariableFont_wght.ttf │ │ └── License.txt │ ├── fraunces │ │ ├── Fraunces-Italic-VariableFont_wght.ttf │ │ ├── Fraunces-VariableFont_wght.ttf │ │ └── License.txt │ ├── hanken-grotesk │ │ ├── HankenGrotesk-Italic-VariableFont_wght.ttf │ │ ├── HankenGrotesk-VariableFont_wght.ttf │ │ └── License.txt │ ├── inter │ │ ├── Inter-VariableFont_wght.ttf │ │ └── License.txt │ ├── montserrat │ │ ├── License.txt │ │ ├── Montserrat-Italic-VariableFont_wght.ttf │ │ └── Montserrat-VariableFont_wght.ttf │ ├── open-sans │ │ ├── License.txt │ │ ├── OpenSans-Italic-VariableFont_wdth,wght.ttf │ │ └── OpenSans-VariableFont_wdth,wght.ttf │ ├── outfit │ │ ├── License.txt │ │ └── Outfit-VariableFont_wght.ttf │ ├── playfair-display │ │ ├── License.txt │ │ ├── PlayfairDisplay-Italic-VariableFont_wght.ttf │ │ └── PlayfairDisplay-VariableFont_wght.ttf │ ├── source-sans-pro │ │ ├── License.txt │ │ ├── SourceSansPro-Bold.ttf │ │ ├── SourceSansPro-BoldItalic.ttf │ │ ├── SourceSansPro-Italic.ttf │ │ └── SourceSansPro-Regular.ttf │ └── spline-sans │ │ ├── License.txt │ │ └── SplineSans-VariableFont_wght.ttf ├── img │ ├── neve-fse-img01.svg │ ├── neve-fse-img02.svg │ ├── neve-fse-img03.svg │ ├── neve-fse-img04.jpg │ ├── neve-fse-img05.jpg │ ├── neve-fse-img06.jpg │ ├── neve-fse-img07.jpg │ ├── neve-fse-img08.jpg │ ├── neve-fse-img09.jpg │ ├── neve-fse-img10.jpg │ ├── neve-fse-img11.jpg │ ├── neve-fse-img12.jpg │ ├── neve-fse-img13.webp │ ├── neve-fse-img14.webp │ ├── neve-fse-logo.svg │ └── welcome-notice.png └── js │ └── src │ ├── common │ └── plugin-install.js │ ├── components │ └── DesignPackNotice.js │ ├── design-pack-notice.js │ ├── general-notice.js │ └── welcome-notice.js ├── bin ├── dist.sh ├── install-wp-tests.sh ├── makepot.sh └── pot-diff.sh ├── composer.json ├── composer.lock ├── functions.php ├── grunt ├── addtextdomain.js ├── aliases.yaml ├── postcss.js ├── rtlcss.js ├── sass.js ├── version.js ├── watch.js └── wp_readme_to_markdown.js ├── inc ├── Admin.php ├── Assets_Manager.php ├── Block_Patterns.php ├── Block_Styles.php ├── Constants.php ├── Core.php ├── Neve_Mods.php ├── Starter_Content.php └── patterns │ ├── layout │ ├── boxed-features-1.php │ ├── boxed-features-2.php │ ├── columns-content-images.php │ ├── columns-image-and-text-inv.php │ ├── columns-image-and-text.php │ ├── columns-testimonials-inv.php │ ├── columns-testimonials.php │ ├── columns-text-image.php │ ├── columns-with-cards.php │ ├── columns-with-icons.php │ ├── columns-with-services-text.php │ ├── columns-with-services.php │ ├── contact-section.php │ ├── content-with-images.php │ ├── cta-dark.php │ ├── faq-section.php │ ├── full-width-columns-content-image.php │ ├── full-width-quote.php │ ├── hero-with-feature-columns.php │ ├── hero-with-text.php │ ├── map-section.php │ ├── page-cover-bg-image.php │ ├── page-cover-with-buttons.php │ ├── portfolio-columns.php │ ├── pricing-columns.php │ └── team-members-columns.php │ ├── loops │ ├── post-loop-1.php │ ├── post-loop-2.php │ ├── post-loop-3.php │ ├── post-loop-4.php │ ├── post-loop-5.php │ ├── post-loop-6.php │ ├── post-loop-7.php │ ├── post-loop-8.php │ └── post-loop-9.php │ ├── page_titles │ ├── page-title-1.php │ ├── page-title-2.php │ ├── page-title-3.php │ ├── page-title-4.php │ └── page-title-5.php │ └── templates │ ├── archive-cover.php │ ├── archive-list.php │ ├── single-post-cover-boxed.php │ └── single-post-cover.php ├── index.php ├── languages └── .gitkeep ├── library ├── archive │ ├── archive-cover.php │ └── archive-list.php ├── front-page │ ├── front-page-2.php │ └── front-page-3.php ├── single │ ├── single-post-cover-boxed.php │ └── single-post-cover.php └── templates │ ├── about-page.php │ ├── contact-page.php │ ├── portfolio-page.php │ └── services-page.php ├── lint-staged.config.js ├── package.json ├── parts ├── footer.html ├── footer_s1.html ├── footer_s2.html ├── footer_s3.html ├── footer_s4.html ├── header.html ├── header_s1.html ├── header_s2.html └── header_s3.html ├── phpcs.xml ├── phpunit.xml ├── readme.md ├── readme.txt ├── screenshot.png ├── style.css ├── styles ├── s1-crayola.json ├── s2-majorelle-blue.json ├── s3-zomp.json ├── s4-dark-pastel-red.json ├── s5-aztec-gold.json ├── s6-vivid-red-tangelo.json └── s7-greenlight.json ├── templates ├── 404.html ├── archive.html ├── front-page.html ├── index.html ├── page.html ├── search.html ├── single.html ├── template-blank.html └── template-plain.html ├── tests ├── bootstrap.php └── test-load.php ├── theme.json └── yarn.lock /.distignore: -------------------------------------------------------------------------------- 1 | .git 2 | CONTRIBUTING.md 3 | .distignore 4 | .gitignore 5 | .travis.yml 6 | .jshintrc 7 | .commitlintrc.js 8 | docker-compose.yml 9 | Gruntfile.js 10 | grunt 11 | phpcs.xml 12 | node_modules 13 | logs 14 | e2e-tests 15 | cypress.json 16 | .eslintignore 17 | .eslintrc.js 18 | .releaserc.yml 19 | .gitattributes 20 | .babelrc 21 | .eslintrc 22 | .github 23 | package.json 24 | bin 25 | tests 26 | phpunit.xml 27 | npm-debug.log 28 | package-lock.json 29 | webpack.config.js 30 | dist 31 | .nvmrc 32 | .editorconfig 33 | artifact 34 | composer.json 35 | composer.lock 36 | themeisle.enc 37 | 38 | .idea 39 | vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php 40 | **/*.css.map 41 | .DS_Store 42 | blackfire 43 | rollup.config.js 44 | docker-compose.ci.yml 45 | visual-regressions 46 | yarn.lock 47 | .ds_store 48 | .storybook 49 | stories 50 | cypress.storybook.json 51 | tsconfig.json 52 | lint-staged.config.js 53 | .stylelintrc.json 54 | phpstan.neon 55 | .gitkeep 56 | assets/js/src 57 | assets/css/src 58 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ "plugin:@wordpress/eslint-plugin/recommended" ] 3 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Report a bug so we can get to squashing it. 3 | labels: bug 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | - type: textarea 10 | attributes: 11 | label: Description 12 | description: Please write a brief description of the bug, including what you expect to happen and what is currently happening. 13 | placeholder: | 14 | Feature '...' is not working properly. I expect '...' to happen, but '...' happens instead 15 | validations: 16 | required: true 17 | 18 | - type: textarea 19 | attributes: 20 | label: Step-by-step reproduction instructions 21 | description: Please write the steps needed to reproduce the bug. 22 | placeholder: | 23 | 1. Go to '...' 24 | 2. Click on '...' 25 | 3. Scroll down to '...' 26 | validations: 27 | required: true 28 | 29 | - type: textarea 30 | attributes: 31 | label: Screenshots, screen recording, code snippet or Help Scout ticket 32 | description: | 33 | If possible, please upload a screenshot or screen recording which demonstrates the bug. 34 | Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. 35 | Tip: You can include links to customer Help Scout support thread. 36 | validations: 37 | required: false 38 | 39 | - type: input 40 | attributes: 41 | label: Environment info 42 | description: | 43 | Please share a https://pastebin.com/ link of your system details by going to site Admin -> Tools -> Site Health -> Info and Copy to Clipboard 44 | placeholder: pastebin.com/ ... 45 | validations: 46 | required: false 47 | 48 | - type: dropdown 49 | id: regression 50 | attributes: 51 | label: Is the issue you are reporting a regression 52 | description: | 53 | i.e, a previously working feature/functionality is now broken? 54 | By specifying whether or not your issue is a regression, it will help the development team to more effectively diagnose and resolve the problem. 55 | 56 | multiple: false 57 | options: 58 | - 'No' 59 | - 'Yes, this is a regression.' 60 | validations: 61 | required: true 62 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest a feature that we can implement. 3 | labels: new feature 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: What problem does this address? 8 | description: | 9 | Can you give us a little more insight into this feature request? We'd love to know if it's related to any problems or pain points you've been facing. 10 | If so, can you please let us know what the issue is in a clear and simple way? 11 | Tip: If this is related to a customer request, please add the Help Scout thread URL. 12 | placeholder: | 13 | For example, something like "I find it tough when..." or "I get frustrated because..." would be great. 14 | validations: 15 | required: true 16 | - type: textarea 17 | attributes: 18 | label: What is your proposed solution? 19 | description: Can you please specify the desired feature or improvement and how it resolves the problem mentioned? 20 | validations: 21 | required: false 22 | - type: dropdown 23 | id: doc-needed 24 | attributes: 25 | label: Will this feature require documentation? (Optional) 26 | description: | 27 | Does this feature require the creation or update of documentation? If you're unsure, feel free to skip this. 28 | multiple: false 29 | options: 30 | - 'I dont know.' 31 | - 'No.' 32 | - 'Yes, it requires documentation.' 33 | validations: 34 | required: false -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Summary 2 | 3 | 4 | ### Will affect visual aspect of the product 5 | 6 | YES/NO 7 | 8 | ### Screenshots 9 | 10 | 11 | ### Test instructions 12 | 13 | 14 | - 15 | - 16 | 17 | 18 | Closes #. 19 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | 2 | version: 2 3 | updates: 4 | 5 | # Maintain dependencies for Composer 6 | - package-ecosystem: "composer" 7 | directory: "/" 8 | target-branch: "development" 9 | schedule: 10 | interval: "weekly" -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | regression: 2 | - '(Yes, this is a regression)' 3 | 4 | customer report: 5 | - '(helpscout|wordpress.org/support)' 6 | 7 | doc-needed: 8 | - '(Yes, it requires documentation.)' -------------------------------------------------------------------------------- /.github/workflows/create-tag.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | jobs: 8 | create_tag: 9 | runs-on: ubuntu-latest 10 | if: "! contains(github.event.head_commit.message, '[skip ci]')" 11 | strategy: 12 | matrix: 13 | node-version: [14.x] 14 | steps: 15 | - uses: actions/checkout@master 16 | with: 17 | persist-credentials: false 18 | - name: Build files using ${{ matrix.node-version }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - name: Release new version 23 | id: release 24 | run: | 25 | yarn install --frozen-lockfile 26 | composer install --prefer-dist --no-progress --no-suggest --ignore-platform-reqs 27 | yarn run build 28 | yarn run release 29 | env: 30 | CI: true 31 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} 32 | GIT_AUTHOR_NAME: themeisle[bot] 33 | GIT_AUTHOR_EMAIL: ${{ secrets.PIRATE_BOT_EMAIL }} 34 | GIT_COMMITTER_NAME: themeisle[bot] 35 | GIT_COMMITTER_EMAIL: ${{ secrets.PIRATE_BOT_EMAIL }} 36 | SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_ANNOUNCEMENTS }} 37 | SEMANTIC_RELEASE_PACKAGE: NeveFSE 38 | empty-job: 39 | # if no jobs run, github action considers it a test failure -- which seems like a bug 40 | # this makes it so the top-level if statement for the job does not give status failure. 41 | runs-on: ubuntu-latest 42 | if: success() 43 | steps: 44 | - name: Meep 45 | run: | 46 | echo "Nothing to do" 47 | -------------------------------------------------------------------------------- /.github/workflows/deploy-s3-store.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | 4 | on: 5 | push: 6 | tags: 7 | - "*" 8 | jobs: 9 | deploy: 10 | name: Deploy to server 11 | runs-on: ubuntu-22.04 12 | steps: 13 | - uses: actions/checkout@master 14 | - name: Setup node 14 15 | uses: actions/setup-node@v1 16 | with: 17 | node-version: 14.x 18 | - name: Build & create dist/artifact 19 | run: | 20 | yarn install --frozen-lockfile 21 | composer install --no-dev --prefer-dist --no-progress --no-suggest 22 | yarn run build 23 | yarn run dist 24 | - name: Upload Latest Version to S3 25 | uses: jakejarvis/s3-sync-action@master 26 | with: 27 | args: --acl public-read --follow-symlinks --delete 28 | env: 29 | AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET_DOWNLOADS }} 30 | AWS_ACCESS_KEY_ID: ${{ secrets.S3_DOWNLOADS_AWS_ACCESS_KEY_ID }} 31 | AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DOWNLOADS_AWS_SECRET_ACCESS_KEY }} 32 | AWS_REGION: 'us-west-1' # optional: defaults to us-east-1 33 | SOURCE_DIR: 'artifact' # optional: defaults to entire repository 34 | DEST_DIR: ${{ secrets.S3_AWS_PRODUCTS_FOLDER }}/$BUILD_NAME/latest 35 | - name: Upload Tagged Version to S3 36 | uses: jakejarvis/s3-sync-action@master 37 | with: 38 | args: --acl public-read --follow-symlinks --delete 39 | env: 40 | AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET_DOWNLOADS }} 41 | AWS_ACCESS_KEY_ID: ${{ secrets.S3_DOWNLOADS_AWS_ACCESS_KEY_ID }} 42 | AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_DOWNLOADS_AWS_SECRET_ACCESS_KEY }} 43 | AWS_REGION: 'us-west-1' # optional: defaults to us-east-1 44 | SOURCE_DIR: 'artifact' # optional: defaults to entire repository 45 | DEST_DIR: ${{ secrets.S3_AWS_PRODUCTS_FOLDER }}/$BUILD_NAME/$BUILD_VERSION 46 | - name: Send update to the store 47 | env: 48 | PRODUCT_ID: ${{ secrets.THEMEISLE_ID }} 49 | AUTH_TOKEN: ${{ secrets.THEMEISLE_STORE_AUTH }} 50 | STORE_URL: ${{ secrets.THEMEISLE_STORE_URL }} 51 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} 52 | BUILD_VERSION: ${{ env.BUILD_VERSION }} 53 | uses: Codeinwp/action-store-release@main 54 | - name: WordPress Theme Deploy 55 | uses: Codeinwp/action-wordpress-theme-deploy@primary 56 | env: 57 | SVN_PASSWORD: ${{ secrets.SVN_THEMEISLE_PASSWORD }} 58 | SVN_USERNAME: ${{ secrets.SVN_THEMEISLE_USERNAME }} 59 | -------------------------------------------------------------------------------- /.github/workflows/diff-translations.yml: -------------------------------------------------------------------------------- 1 | name: Translations Diff 2 | 3 | on: 4 | pull_request_review: 5 | pull_request: 6 | types: [opened, edited, synchronize, ready_for_review] 7 | branches: 8 | - 'development' 9 | 10 | jobs: 11 | translation: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout Ref Base 15 | uses: actions/checkout@v2 16 | with: 17 | path: neve-fse-head 18 | - name: Setup node 14 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: 14.x 22 | - name: FRESH Makepot BASE 23 | run: | 24 | cd neve-fse-head 25 | ls languages/ 26 | composer install --no-dev --prefer-dist --no-progress --no-suggest 27 | yarn install --frozen-lockfile 28 | yarn run build 29 | ls languages/ 30 | - name: Checkout Ref Head 31 | uses: actions/checkout@v2 32 | with: 33 | ref: development 34 | path: neve-fse-base 35 | - name: FRESH Makepot HEAD 36 | run: | 37 | cd neve-fse-base 38 | ls languages/ 39 | composer install --no-dev --prefer-dist --no-progress --no-suggest 40 | yarn install --frozen-lockfile 41 | yarn run build 42 | ls languages/ 43 | - name: Find Comment 44 | uses: peter-evans/find-comment@v2 45 | id: find_coomment 46 | with: 47 | issue-number: ${{ github.event.pull_request.number }} 48 | comment-author: 'pirate-bot' 49 | body-includes: PR has POT difference 50 | - name: Install PODiff 51 | run: | 52 | curl -o podiff.gz ftp://download.gnu.org.ua/pub/releases/podiff/podiff-1.3.tar.gz 53 | tar -xf podiff.gz 54 | cd podiff-1.3 55 | make 56 | mkdir -p $GITHUB_WORKSPACE/bin 57 | mv ./podiff $GITHUB_WORKSPACE/bin 58 | echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH 59 | cd .. 60 | - name: Run Podiff 61 | id: translation_status 62 | run: | 63 | ${GITHUB_WORKSPACE}/neve-fse-head/bin/pot-diff.sh ./neve-fse-base/languages/neve-fse.pot ./neve-fse-head/languages/neve-fse.pot $PERCENT_TRESHOLD 64 | - name: Step require review 65 | if: steps.translation_status.outputs.has_pot_diff != 'success' 66 | uses: Automattic/action-required-review@v3 67 | with: 68 | requirements: | 69 | - name: Everything else 70 | paths: unmatched 71 | teams: 72 | - "sbs" 73 | status: Has translation changes, a review from SBS team is required 74 | token: ${{ secrets.BOT_TOKEN }} 75 | -------------------------------------------------------------------------------- /.github/workflows/issue-labeler.yml: -------------------------------------------------------------------------------- 1 | name: "Issue Labeler" 2 | on: 3 | issues: 4 | types: [opened] 5 | 6 | jobs: 7 | triage: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: github/issue-labeler@master 11 | with: 12 | repo-token: "${{ secrets.BOT_TOKEN }}" 13 | enable-versioned-regex: 0 14 | configuration-path: .github/labeler.yml -------------------------------------------------------------------------------- /.github/workflows/new-issues.yml: -------------------------------------------------------------------------------- 1 | name: Add to project 2 | 3 | on: 4 | issues: 5 | types: [opened,transferred] 6 | 7 | jobs: 8 | add-to-project: 9 | name: Add issue to project 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/add-to-project@main 13 | id: add_project 14 | with: 15 | project-url: ${{ secrets.PROJECT_PLANNING }} 16 | github-token: ${{ secrets.BOT_TOKEN_PROJECT }} 17 | - name: Set Team 18 | env: 19 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN_PROJECT }} 20 | run: | 21 | gh api graphql -f query=' 22 | mutation( 23 | $project: ID! 24 | $item: ID! 25 | $status_field: ID! 26 | $status_value: String! 27 | ) { 28 | updateProjectV2ItemFieldValue( 29 | input: { 30 | projectId: $project 31 | itemId: $item 32 | fieldId: $status_field 33 | value: { 34 | singleSelectOptionId: $status_value 35 | } 36 | } 37 | ) { 38 | projectV2Item { 39 | id 40 | } 41 | } 42 | }' -f project=${{ secrets.PROJECT_PLANNING_ID }} -f item=${{ steps.add_project.outputs.itemId }} -f status_field=${{ secrets.PLANNING_TEAM_FIELD_ID }} -f status_value=f0658f06 --silent 43 | -------------------------------------------------------------------------------- /.github/workflows/sync-branches.yml: -------------------------------------------------------------------------------- 1 | name: Sync branches 2 | on: 3 | push: 4 | branches: 5 | - 'main' 6 | jobs: 7 | sync-branch: 8 | runs-on: ubuntu-latest 9 | if: ${{ github.repository_owner == 'Codeinwp' }} # Disable on forks 10 | steps: 11 | - uses: actions/checkout@master 12 | - name: Retrieve branch name 13 | id: retrieve-branch-name 14 | run: echo "::set-output name=branch_name::$(REF=${GITHUB_HEAD_REF:-$GITHUB_REF} && echo ${REF#refs/heads/} | sed 's/\//-/g')" 15 | - name: Merge master -> development 16 | if: ${{ steps.retrieve-branch-name.outputs.branch_name == 'main' }} 17 | uses: Codeinwp/merge-branch@master 18 | with: 19 | type: now 20 | from_branch: main 21 | target_branch: development 22 | github_token: ${{ secrets.BOT_TOKEN }} 23 | -------------------------------------------------------------------------------- /.github/workflows/test-js.yml: -------------------------------------------------------------------------------- 1 | name: Test JS 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - 'main' 7 | 8 | jobs: 9 | jslint: 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | node-version: [14.x] 14 | name: JS Test 15 | steps: 16 | - name: Checkout source code 17 | uses: actions/checkout@master 18 | - name: Setup node 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - name: Get yarn cache directory path 23 | id: yarn-cache-dir-path 24 | run: echo "::set-output name=dir::$(yarn cache dir)" 25 | - uses: actions/cache@v4 26 | id: yarn-cache 27 | with: 28 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 29 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 30 | restore-keys: | 31 | ${{ runner.os }}-yarn- 32 | - name: Install Dependencies 33 | run: yarn install --frozen-lockfile 34 | - name: Build source 35 | run: yarn run build 36 | - name: Run lint checks 37 | run: yarn run lint 38 | -------------------------------------------------------------------------------- /.github/workflows/test-php.yml: -------------------------------------------------------------------------------- 1 | name: Test PHP 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "main" 7 | 8 | jobs: 9 | phplint: 10 | name: Phplint 11 | runs-on: ubuntu-22.04 12 | steps: 13 | - name: Setup PHP version 14 | uses: shivammathur/setup-php@v2 15 | with: 16 | php-version: "7.2" 17 | extensions: simplexml 18 | - name: Checkout source code 19 | uses: actions/checkout@v2 20 | - name: Get Composer Cache Directory 21 | id: composer-cache 22 | run: | 23 | echo "::set-output name=dir::$(composer config cache-files-dir)" 24 | - name: Setup Composer cache 25 | uses: actions/cache@v4 26 | with: 27 | path: ${{ steps.composer-cache.outputs.dir }} 28 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 29 | restore-keys: | 30 | ${{ runner.os }}-composer- 31 | - name: Install composer 32 | run: composer install --prefer-dist --no-progress --no-suggest 33 | - name: Run PHPCS 34 | run: composer run lint 35 | phpunit: 36 | name: Phpunit 37 | runs-on: ubuntu-22.04 38 | services: 39 | mysql: 40 | image: mysql:5.7 41 | env: 42 | MYSQL_ROOT_PASSWORD: root 43 | ports: 44 | - 3306/tcp 45 | options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 46 | steps: 47 | - name: Setup PHP version 48 | uses: shivammathur/setup-php@v2 49 | with: 50 | php-version: "7.2" 51 | extensions: simplexml, mysql 52 | tools: phpunit-polyfills 53 | - name: Checkout source code 54 | uses: actions/checkout@v2 55 | - name: Install WordPress Test Suite 56 | run: | 57 | bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:${{ job.services.mysql.ports['3306'] }} 58 | - name: Get Composer Cache Directory 59 | id: composer-cache 60 | run: | 61 | echo "::set-output name=dir::$(composer config cache-files-dir)" 62 | - name: Setup Composer cache 63 | uses: actions/cache@v4 64 | with: 65 | path: ${{ steps.composer-cache.outputs.dir }} 66 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 67 | restore-keys: | 68 | ${{ runner.os }}-composer- 69 | - name: Install composer 70 | run: composer install --prefer-dist --no-progress --no-suggest 71 | - name: Run phpunit 72 | run: composer run-script phpunit 73 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | dist 4 | artifact 5 | 6 | assets/css/build 7 | assets/js/build 8 | 9 | *.log 10 | *.map 11 | /vendor/ 12 | 13 | languages/neve-fse.pot 14 | 15 | .DS_Store 16 | .phpunit.result.cache 17 | -------------------------------------------------------------------------------- /.releaserc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | branches: 3 | - 'main' 4 | plugins: 5 | - - "@semantic-release/commit-analyzer" 6 | - preset: simple-preset 7 | releaseRules: conventional-changelog-simple-preset/release-rules 8 | - - "@semantic-release/changelog" 9 | - changelogFile: CHANGELOG.md 10 | - - "@semantic-release/release-notes-generator" 11 | - preset: simple-preset 12 | - - "@semantic-release/exec" 13 | - prepareCmd: "replace-in-file \"== Changelog ==\" \"== Changelog ==\n\n${nextRelease.notes}\" readme.txt" 14 | - - "@semantic-release/exec" 15 | - prepareCmd: grunt version::${nextRelease.version} && grunt wp_readme_to_markdown 16 | - - "semantic-release-slack-bot" 17 | - notifyOnSuccess: false 18 | notifyOnFail: false 19 | markdownReleaseNotes: true 20 | branchesConfig: 21 | - pattern: main 22 | notifyOnSuccess: true 23 | notifyOnFail: false 24 | - - "@semantic-release/git" 25 | - assets: 26 | - CHANGELOG.md 27 | - readme.md 28 | - readme.txt 29 | - style.css 30 | - functions.php 31 | - package-lock.json 32 | - package.json 33 | message: "chore(release): ${nextRelease.version} \n\n${nextRelease.notes}" 34 | - - "@semantic-release/github" 35 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@wordpress/stylelint-config/scss" 4 | ], 5 | "rules": { 6 | "no-invalid-position-at-import-rule": null, 7 | "no-descending-specificity": null, 8 | "selector-class-pattern": null 9 | } 10 | } -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | const path = require( 'path' ); 2 | 3 | const paths = { 4 | global: { 5 | config: path.join( __dirname, 'grunt/' ), 6 | grunt: path.join( __dirname, 'grunt/' ), 7 | }, 8 | config: 'grunt/', 9 | grunt: 'grunt/', 10 | languages: 'languages/', 11 | logs: 'logs/', 12 | images: 'images/', 13 | vendor: 'packages/', 14 | css: 'assets/css/', 15 | }; 16 | 17 | const taskMap = { 18 | rtlcss: 'grunt-rtlcss', 19 | sass: 'grunt-contrib-sass', 20 | watch: 'grunt-contrib-watch', 21 | addtextdomain: 'grunt-wp-i18n', 22 | postcss: '@lodder/grunt-postcss', 23 | wp_readme_to_markdown: 'grunt-wp-readme-to-markdown', 24 | }; 25 | 26 | const files = { 27 | php: [ 28 | '*.php', 29 | '**/*.php', 30 | '!.git/**', 31 | '!vendor/**', 32 | '!node_modules/**', 33 | '!logs/**', 34 | ], 35 | css: [ 36 | '*.css', 37 | '**/*.css', 38 | '!*.min.css', 39 | '!**/*.min.css', 40 | '!vendor/**', 41 | '!node_modules/**', 42 | '!logs/**', 43 | ], 44 | js: [ 45 | '*.js', 46 | '**/*.js', 47 | '!*.min.js', 48 | '!**/*.min.js', 49 | '!.git/**', 50 | '!vendor/**', 51 | '!node_modules/**', 52 | '!logs/**', 53 | ], 54 | }; 55 | 56 | const gruntConfig = ( grunt ) => { 57 | 'use strict'; 58 | 59 | const config = {}; 60 | const loader = require( 'load-project-config' ); 61 | 62 | config.paths = paths; 63 | config.taskMap = taskMap; 64 | config.files = files; 65 | loader( grunt, config ).init(); 66 | }; 67 | 68 | module.exports = gruntConfig; 69 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_calendar.scss: -------------------------------------------------------------------------------- 1 | /* Border color of calendar should inherit ti-bg-alt color */ 2 | .wp-block-calendar table:where(:not(.has-text-color)) td, 3 | .wp-block-calendar table:where(:not(.has-text-color)) th { 4 | border: 1px solid var(--wp--preset--color--ti-bg-alt); 5 | padding: 8px; 6 | } 7 | 8 | /*Set bg color of calendar header to bg-inv, and the border color to bg-alt */ 9 | :where(.wp-block-calendar table:not(.has-background) th) { 10 | border-color: 1 px solid var(--wp--preset--color--ti-bg-alt); 11 | background-color: var(--wp--preset--color--ti-bg-inv); 12 | color: var(--wp--preset--color--ti-fg-alt); 13 | } 14 | 15 | /* Text of calendar should inherit ti-fg color */ 16 | .wp-block-calendar table:where(:not(.has-text-color)) { 17 | color: var(--wp--preset--color--ti-fg); 18 | } 19 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_image.scss: -------------------------------------------------------------------------------- 1 | %figcaption { 2 | text-align: left; 3 | font-size: var(--wp--preset--font-size--small); 4 | } 5 | 6 | .wp-block-image { 7 | 8 | &.aligncenter { 9 | margin-left: auto; 10 | margin-right: auto; 11 | } 12 | 13 | &.alignleft { 14 | float: left; 15 | margin-right: 2em; 16 | } 17 | 18 | &.alignright { 19 | float: right; 20 | margin-left: 2em; 21 | } 22 | } 23 | 24 | // Gallery & Image captions. 25 | .wp-block-gallery.has-nested-images, 26 | figure.wp-block-image { 27 | 28 | figcaption { 29 | 30 | @extend %figcaption; 31 | color: var(--wp--preset--color--ti-fg); 32 | opacity: 0.6; 33 | } 34 | } 35 | 36 | // Gallery image captions 37 | .wp-block-gallery.has-nested-images { 38 | 39 | figure.wp-block-image { 40 | 41 | figcaption { 42 | 43 | @extend %figcaption; 44 | background: rgba(0, 0, 0, 0.3); 45 | margin: 0; 46 | padding: 8px; 47 | opacity: 1; 48 | } 49 | 50 | &.is-style-rounded { 51 | 52 | figcaption { 53 | opacity: 0.6; 54 | background: 0; 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_latest-posts.scss: -------------------------------------------------------------------------------- 1 | .wp-block-latest-posts { 2 | 3 | img { 4 | display: block; 5 | } 6 | 7 | &.wp-block-latest-posts__list li { 8 | margin-bottom: 16px; 9 | } 10 | 11 | .wp-block-latest-posts__post-title { 12 | display: block; 13 | margin-bottom: 8px; 14 | text-decoration: none; 15 | } 16 | 17 | .wp-block-latest-posts__post-author, 18 | time { 19 | font-size: var(--wp--preset--font-size--small); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_main.scss: -------------------------------------------------------------------------------- 1 | @import "image"; 2 | @import "separator"; 3 | @import "post-terms"; 4 | @import "query-pagination"; 5 | @import "search"; 6 | @import "navigation"; 7 | @import "latest-posts"; 8 | @import "table"; 9 | @import "calendar"; 10 | @import "quote"; 11 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_navigation.scss: -------------------------------------------------------------------------------- 1 | // Overwrite the selector... 2 | .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open { 3 | background: var(--wp--preset--color--ti-bg); 4 | color: var(--wp--preset--color--ti-fg); 5 | } 6 | 7 | .wp-block-navigation__responsive-container.is-menu-open { 8 | --navigation-layout-justification-setting: center; 9 | 10 | > .wp-block-navigation__container { 11 | gap: 0; 12 | } 13 | 14 | // Root menu. 15 | .wp-block-navigation__container { 16 | gap: 24px !important; 17 | 18 | > li > a { 19 | font-size: var(--wp--preset--font-size--large) !important; 20 | } 21 | } 22 | 23 | // Submenu. 24 | .wp-block-navigation__submenu-container { 25 | gap: 24px !important; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_post-terms.scss: -------------------------------------------------------------------------------- 1 | .wp-block-post-terms { 2 | display: flex; 3 | flex-wrap: wrap; 4 | align-items: center; 5 | 6 | &.taxonomy-category, 7 | &.taxonomy-post_tag { 8 | 9 | a { 10 | padding: 4px 16px; 11 | margin: 5px; 12 | background-color: var(--wp--preset--color--ti-bg-alt); 13 | border-radius: 999px; 14 | } 15 | 16 | .wp-block-post-terms__separator { 17 | display: none; 18 | } 19 | } 20 | 21 | 22 | &.has-text-align-center { 23 | justify-content: center; 24 | } 25 | 26 | &.has-text-align-right { 27 | justify-content: flex-end; 28 | } 29 | } 30 | 31 | .wp-block-tag-cloud { 32 | display: flex; 33 | flex-wrap: wrap; 34 | align-items: center; 35 | 36 | a { 37 | padding: 4px 16px; 38 | margin: 5px; 39 | background-color: var(--wp--preset--color--ti-bg-alt); 40 | border-radius: 999px; 41 | text-decoration: none; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_query-pagination.scss: -------------------------------------------------------------------------------- 1 | .wp-block-query-pagination-numbers { 2 | 3 | .page-numbers:not(:last-child) { 4 | margin-right: 16px; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_quote.scss: -------------------------------------------------------------------------------- 1 | .wp-block-quote cite, 2 | .wp-block-quote footer { 3 | font-size: var(--wp--preset--font-size--normal); 4 | } 5 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_search.scss: -------------------------------------------------------------------------------- 1 | .wp-block-search { 2 | 3 | &.wp-block-search__button-inside .wp-block-search__inside-wrapper { 4 | 5 | @extend %input-base; 6 | } 7 | 8 | .wp-block-search__button { 9 | background: var(--wp--preset--color--ti-accent); 10 | color: var(--wp--preset--color--ti-fg-alt); 11 | border-color: var(--wp--preset--color--ti-accent); 12 | border-radius: 5px; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_separator.scss: -------------------------------------------------------------------------------- 1 | .wp-block-separator { 2 | 3 | &.is-style-wide { 4 | width: 100%; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /assets/css/src/blocks/_table.scss: -------------------------------------------------------------------------------- 1 | .wp-block-table { 2 | 3 | &.is-style-stripes tbody tr:nth-child(odd) { 4 | background-color: var(--wp--preset--color--ti-bg-alt); 5 | } 6 | 7 | thead { 8 | border-bottom: 1px solid; 9 | } 10 | 11 | tfoot { 12 | border-top: 1px solid; 13 | } 14 | 15 | figcaption { 16 | font-size: var(--wp--preset--font-size--small); 17 | color: var(--wp--preset--color--ti-fg); 18 | opacity: 0.6; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /assets/css/src/common/_generic.scss: -------------------------------------------------------------------------------- 1 | @custom-media --mobile (max-width: 481px); 2 | 3 | * { 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | -moz-osx-font-smoothing: grayscale; 9 | -webkit-font-smoothing: antialiased; 10 | } 11 | 12 | html, 13 | body { 14 | height: 100%; 15 | } 16 | 17 | .wp-site-blocks { 18 | height: 100%; 19 | display: flex; 20 | flex-direction: column; 21 | } 22 | 23 | header .is-position-sticky { 24 | position: fixed; 25 | width: 100% !important; 26 | } 27 | 28 | // Push footer to bottom. 29 | footer { 30 | margin-block-start: auto !important; 31 | } 32 | 33 | .wp-block-spacer { 34 | margin-block-start: 0 !important; 35 | } 36 | 37 | /* 38 | * Alignment styles. 39 | * 40 | * Relevant issues: 41 | * https://github.com/WordPress/gutenberg/issues/35607 42 | * https://github.com/WordPress/gutenberg/issues/35884 43 | */ 44 | 45 | 46 | .wp-site-blocks, 47 | body > .is-root-container, 48 | .edit-post-visual-editor__post-title-wrapper, 49 | .wp-block-group.alignfull, 50 | .wp-block-group.has-background, 51 | .wp-block-cover.alignfull, 52 | .is-root-container .wp-block[data-align="full"] > .wp-block-group, 53 | .is-root-container .wp-block[data-align="full"] > .wp-block-cover { 54 | padding-left: var(--wp--custom--spacing--outer); 55 | padding-right: var(--wp--custom--spacing--outer); 56 | } 57 | 58 | .wp-site-blocks .alignfull, 59 | .wp-site-blocks > .wp-block-group.has-background, 60 | .wp-site-blocks > .wp-block-cover, 61 | .wp-site-blocks > .wp-block-template-part > .wp-block-group.has-background, 62 | .wp-site-blocks > .wp-block-template-part > .wp-block-cover, 63 | body > .is-root-container > .wp-block-cover, 64 | body > .is-root-container > .wp-block-template-part > .wp-block-group.has-background, 65 | body > .is-root-container > .wp-block-template-part > .wp-block-cover, 66 | .is-root-container .wp-block[data-align="full"] { 67 | margin-left: calc(-1 * var(--wp--custom--spacing--outer)) !important; 68 | margin-right: calc(-1 * var(--wp--custom--spacing--outer)) !important; 69 | width: unset; 70 | } 71 | 72 | /** 73 | * Override button outline paddings because they 74 | * can NOT be changed from the theme.json. 75 | * Relevant issue: 76 | * https://github.com/WordPress/gutenberg/issues/34853 77 | */ 78 | body .wp-block-button.is-style-outline > .wp-block-button__link, 79 | body .wp-block-button .wp-block-button__link.is-style-outline { 80 | border: 2px solid; 81 | padding: 16px 40px; 82 | 83 | @media (--mobile) { 84 | padding: 16px 20px; 85 | } 86 | } 87 | 88 | body .wp-block-button .wp-block-button__link { 89 | 90 | @media (--mobile) { 91 | padding: 16px 20px; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /assets/css/src/common/_vars.scss: -------------------------------------------------------------------------------- 1 | $line-height-fs-huge: 1.25; 2 | $line-height-fs-x-large: 1.3; 3 | $line-height-fs-large: 1.4; 4 | $line-height-fs-medium: 1.5; 5 | $line-height-fs-normal: 1.7; 6 | $line-height-fs-small: 1.6; 7 | 8 | -------------------------------------------------------------------------------- /assets/css/src/design-pack-notice.scss: -------------------------------------------------------------------------------- 1 | @custom-media --max-tablet (max-width: 769px); 2 | @custom-media --max-desktop (max-width: 1200px); 3 | 4 | #neve-fse-design-pack-notice { 5 | 6 | .notice-wrap { 7 | display: flex; 8 | align-items: center; 9 | gap: 15px; 10 | border: 0; 11 | border-radius: 8px; 12 | padding: 20px 25px; 13 | opacity: 0; 14 | animation: fade-down-in 0.3s ease forwards 0.3s; 15 | z-index: 10000; 16 | position: fixed; 17 | background: #fff; 18 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); 19 | right: 10px; 20 | bottom: 35px; 21 | 22 | @media (--max-desktop) { 23 | bottom: 10px; 24 | right: 10px; 25 | padding: 10px 15px; 26 | margin-left: 10px; 27 | } 28 | 29 | &.dismissed { 30 | animation: fade-up-out 0.3s ease forwards 0s; 31 | } 32 | } 33 | 34 | svg { 35 | flex-shrink: 0; 36 | } 37 | 38 | button { 39 | border: 0; 40 | background: 0; 41 | cursor: pointer; 42 | padding: 0; 43 | border-radius: 5px; 44 | 45 | &:hover { 46 | background: #e7e7e7; 47 | } 48 | } 49 | 50 | .content-wrap { 51 | display: grid; 52 | } 53 | 54 | span { 55 | font-weight: 600; 56 | color: #6a6a6a; 57 | font-size: 12px; 58 | 59 | @media (--max-desktop) { 60 | font-size: 10px; 61 | } 62 | } 63 | 64 | p { 65 | 66 | @media (--max-desktop) { 67 | font-size: 12px; 68 | } 69 | font-size: 16px; 70 | margin: 0; 71 | padding: 0; 72 | } 73 | 74 | a { 75 | margin-left: 35px; 76 | font-weight: 700; 77 | font-size: 16px; 78 | text-decoration: 0; 79 | color: #fff; 80 | background: #383fef; 81 | border-radius: 5px; 82 | padding: 12px 16px; 83 | text-align: center; 84 | 85 | @media (--max-desktop) { 86 | font-size: 14px; 87 | padding: 7px 10px; 88 | margin-left: 0; 89 | flex-shrink: 0; 90 | } 91 | } 92 | } 93 | 94 | @keyframes fade-down-in { 95 | 96 | 0% { 97 | opacity: 0; 98 | transform: translateY(-20px); 99 | } 100 | 101 | 100% { 102 | opacity: 1; 103 | transform: translateY(0); 104 | } 105 | } 106 | 107 | @keyframes fade-up-out { 108 | 109 | 0% { 110 | opacity: 1; 111 | transform: translateY(0); 112 | } 113 | 114 | 100% { 115 | opacity: 0; 116 | transform: translateY(-20px); 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /assets/css/src/editor.scss: -------------------------------------------------------------------------------- 1 | @import "common/vars"; 2 | 3 | .editor-styles-wrapper { 4 | 5 | @import "common/generic"; 6 | @import "blocks/main"; 7 | @import "elements/main"; 8 | @import "editor/blocks/main"; 9 | } 10 | -------------------------------------------------------------------------------- /assets/css/src/editor/blocks/_button.scss: -------------------------------------------------------------------------------- 1 | .wp-block-button.is-style-outline > .wp-block-button__link, 2 | .wp-block-button .wp-block-button__link.is-style-outline { 3 | border-color: inherit; 4 | } 5 | -------------------------------------------------------------------------------- /assets/css/src/editor/blocks/_latest-posts.scss: -------------------------------------------------------------------------------- 1 | .wp-block-latest-posts { 2 | 3 | li > a { 4 | display: block; 5 | margin-bottom: 10px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /assets/css/src/editor/blocks/_main.scss: -------------------------------------------------------------------------------- 1 | @import "latest-posts"; 2 | @import "button"; 3 | -------------------------------------------------------------------------------- /assets/css/src/elements/_comments.scss: -------------------------------------------------------------------------------- 1 | .comment-form { 2 | display: grid; 3 | grid-template-columns: repeat(3, 1fr); 4 | grid-column-gap: 15px; 5 | 6 | > * { 7 | grid-column: 1 / span 3; 8 | } 9 | 10 | > { 11 | 12 | .comment-form-author, 13 | .comment-form-email, 14 | .comment-form-url { 15 | grid-column: span 1; 16 | } 17 | } 18 | 19 | textarea, 20 | input:not([type="submit"]) { 21 | 22 | @extend %input-base; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /assets/css/src/elements/_extends.scss: -------------------------------------------------------------------------------- 1 | %input-base { 2 | border-radius: 5px; 3 | color: var(--wp--preset--color--ti-fg); 4 | background: var(--wp--preset--color--ti-bg); 5 | border: 2px solid var(--wp--preset--color--ti-fg); 6 | font-size: var(--wp--preset--font-size--normal); 7 | } 8 | 9 | @mixin button-base { 10 | border: 0; 11 | box-shadow: none; 12 | font-weight: 600; 13 | padding: 16px 32px; 14 | border-radius: 3px; 15 | font-size: var(--wp--preset--font-size--normal); 16 | } 17 | 18 | %button { 19 | 20 | @include button-base; 21 | color: var(--wp--preset--color--ti-fg-alt); 22 | background: var(--wp--preset--color--ti-accent); 23 | border-color: var(--wp--preset--color--ti-accent); 24 | } 25 | -------------------------------------------------------------------------------- /assets/css/src/elements/_inputs.scss: -------------------------------------------------------------------------------- 1 | input:read-write, 2 | textarea, 3 | select { 4 | 5 | @extend %input-base; 6 | } 7 | 8 | input:read-write:not([type="search"]), 9 | textarea, 10 | select { 11 | width: 100%; 12 | padding: 11px; 13 | font-size: var(--wp--preset--font-size--normal); 14 | } 15 | 16 | input { 17 | font-family: inherit; 18 | } 19 | 20 | textarea { 21 | resize: vertical; 22 | font-family: inherit; 23 | } 24 | 25 | input[type="submit"], 26 | button[type="submit"] { 27 | 28 | @extend %button; 29 | } 30 | -------------------------------------------------------------------------------- /assets/css/src/elements/_main.scss: -------------------------------------------------------------------------------- 1 | @import "extends"; 2 | @import "comments"; 3 | @import "inputs"; 4 | -------------------------------------------------------------------------------- /assets/css/src/style.scss: -------------------------------------------------------------------------------- 1 | @import "common/generic"; 2 | @import "common/vars"; 3 | @import "elements/main"; 4 | @import "blocks/main"; 5 | @custom-media --tablet (max-width: 769px); 6 | -------------------------------------------------------------------------------- /assets/css/src/welcome-notice.scss: -------------------------------------------------------------------------------- 1 | @custom-media --tablet (max-width: 769px); 2 | @custom-media --desktop (max-width: 1200px); 3 | 4 | .neve-fse-welcome-notice { 5 | position: relative; 6 | padding-bottom: 0; 7 | 8 | .notice-content { 9 | display: flex; 10 | width: 100%; 11 | gap: 20px; 12 | 13 | @media (--desktop) { 14 | flex-direction: column-reverse; 15 | text-align: center; 16 | gap: 0; 17 | } 18 | } 19 | 20 | .notice-copy { 21 | padding: 30px 0; 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | 26 | @media (--desktop) { 27 | padding: 20px 0; 28 | align-items: center; 29 | } 30 | } 31 | 32 | .notice-title { 33 | line-height: 1.5; 34 | 35 | span { 36 | font-weight: 600; 37 | color: #e57451; 38 | } 39 | } 40 | 41 | .actions { 42 | display: flex; 43 | margin-top: 40px; 44 | gap: 20px; 45 | align-items: center; 46 | flex-wrap: wrap; 47 | 48 | 49 | @media (--desktop) { 50 | margin-top: 20px; 51 | gap: 10px; 52 | justify-content: center; 53 | } 54 | } 55 | 56 | .button { 57 | display: flex; 58 | align-items: center; 59 | justify-content: center; 60 | justify-items: center; 61 | 62 | } 63 | 64 | .dashicons-update { 65 | margin-right: 5px; 66 | animation: rotation 2s infinite linear; 67 | } 68 | 69 | .dashicons-external { 70 | margin-left: 5px; 71 | } 72 | 73 | p { 74 | max-width: 700px; 75 | font-size: 15px; 76 | line-height: 1.6; 77 | } 78 | 79 | 80 | .otter-preview { 81 | flex-shrink: 1; 82 | width: auto; 83 | align-self: flex-end; 84 | display: block; 85 | max-height: 300px; 86 | max-width: 60%; 87 | 88 | @media (--desktop) { 89 | max-width: 80%; 90 | margin: 0 auto; 91 | } 92 | } 93 | 94 | .otter-logo { 95 | bottom: 30px; 96 | right: 30px; 97 | opacity: 0.75; 98 | max-width: 75px; 99 | //position: absolute; 100 | } 101 | } 102 | 103 | .neve-fse-survey-notice { 104 | 105 | .notice-content { 106 | display: flex; 107 | gap: 12px; 108 | align-items: flex-start; 109 | 110 | .neve-fse-logo { 111 | width: 64px; 112 | min-width: 64px; 113 | margin-top: 12px; 114 | } 115 | 116 | .description { 117 | font-size: 15px; 118 | line-height: 1.6; 119 | margin-bottom: 12px; 120 | } 121 | 122 | .notice-copy .actions { 123 | display: flex; 124 | gap: 12px; 125 | margin-bottom: 12px; 126 | 127 | .button-hero { 128 | 129 | .dashicons-external { 130 | line-height: 42px; 131 | } 132 | } 133 | } 134 | } 135 | } 136 | 137 | -------------------------------------------------------------------------------- /assets/fonts/albert-sans/AlbertSans-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/albert-sans/AlbertSans-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/albert-sans/AlbertSans-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/albert-sans/AlbertSans-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/figtree/Figtree-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/figtree/Figtree-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/figtree/Figtree-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/figtree/Figtree-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/fraunces/Fraunces-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/fraunces/Fraunces-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/fraunces/Fraunces-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/fraunces/Fraunces-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/hanken-grotesk/HankenGrotesk-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/hanken-grotesk/HankenGrotesk-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/hanken-grotesk/HankenGrotesk-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/hanken-grotesk/HankenGrotesk-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/inter/Inter-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/inter/Inter-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/montserrat/Montserrat-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/montserrat/Montserrat-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/montserrat/Montserrat-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/montserrat/Montserrat-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/open-sans/OpenSans-Italic-VariableFont_wdth,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/open-sans/OpenSans-Italic-VariableFont_wdth,wght.ttf -------------------------------------------------------------------------------- /assets/fonts/open-sans/OpenSans-VariableFont_wdth,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/open-sans/OpenSans-VariableFont_wdth,wght.ttf -------------------------------------------------------------------------------- /assets/fonts/outfit/Outfit-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/outfit/Outfit-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/playfair-display/PlayfairDisplay-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/playfair-display/PlayfairDisplay-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/playfair-display/PlayfairDisplay-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/playfair-display/PlayfairDisplay-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/SourceSansPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/source-sans-pro/SourceSansPro-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/SourceSansPro-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/source-sans-pro/SourceSansPro-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/SourceSansPro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/source-sans-pro/SourceSansPro-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/SourceSansPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/source-sans-pro/SourceSansPro-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/spline-sans/SplineSans-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/fonts/spline-sans/SplineSans-VariableFont_wght.ttf -------------------------------------------------------------------------------- /assets/img/neve-fse-img01.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /assets/img/neve-fse-img02.svg: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /assets/img/neve-fse-img03.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /assets/img/neve-fse-img04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img04.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img05.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img06.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img07.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img08.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img09.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img10.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img11.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img12.jpg -------------------------------------------------------------------------------- /assets/img/neve-fse-img13.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img13.webp -------------------------------------------------------------------------------- /assets/img/neve-fse-img14.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/neve-fse-img14.webp -------------------------------------------------------------------------------- /assets/img/neve-fse-logo.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /assets/img/welcome-notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/neve-fse/203b78b520bc992dcb83ac38e93d4a2442d32dc7/assets/img/welcome-notice.png -------------------------------------------------------------------------------- /assets/js/src/common/plugin-install.js: -------------------------------------------------------------------------------- 1 | /* global jQuery */ 2 | 3 | const installPlugin = ( slug ) => { 4 | return new Promise( ( resolve ) => { 5 | wp.updates.ajax( 'install-plugin', { 6 | slug, 7 | success: () => { 8 | resolve( { success: true } ); 9 | }, 10 | error: ( err ) => { 11 | resolve( { success: false, code: err.errorCode } ); 12 | }, 13 | } ); 14 | } ); 15 | }; 16 | 17 | const activatePlugin = ( url ) => { 18 | return new Promise( ( resolve ) => { 19 | jQuery 20 | .get( url ) 21 | .done( () => { 22 | resolve( { success: true } ); 23 | } ) 24 | .fail( () => { 25 | resolve( { success: false } ); 26 | } ); 27 | } ); 28 | }; 29 | 30 | export { installPlugin, activatePlugin }; 31 | -------------------------------------------------------------------------------- /assets/js/src/components/DesignPackNotice.js: -------------------------------------------------------------------------------- 1 | /* global designPackNoticeData */ 2 | import { useSelect } from '@wordpress/data'; 3 | import { Icon, closeSmall } from '@wordpress/icons'; 4 | import { useEffect, useState } from '@wordpress/element'; 5 | 6 | const logo = ( 7 | 21 | ); 22 | 23 | const BLOCK_PATTERN_INSERTED_NOTICE = 'block-pattern-inserted-notice'; 24 | export default () => { 25 | const [ dismissed, setDismissed ] = useState( false ); 26 | const [ noticeTriggered, setNoticeTriggered ] = useState( false ); 27 | 28 | const patternInserted = useSelect( 29 | ( select ) => 30 | select( 'core/notices' ) 31 | .getNotices() 32 | .filter( ( n ) => n.id === BLOCK_PATTERN_INSERTED_NOTICE ) 33 | .length > 0 34 | ); 35 | 36 | useEffect( () => { 37 | if ( noticeTriggered ) { 38 | return; 39 | } 40 | if ( patternInserted ) { 41 | setNoticeTriggered( true ); 42 | } 43 | }, [ patternInserted ] ); 44 | 45 | const { ajaxUrl, ajaxAction, nonce, strings, buttonLink } = 46 | designPackNoticeData; 47 | const { dismiss, recommends, learnMore, noticeHtml } = strings; 48 | 49 | const dismissNotice = () => { 50 | const data = new window.FormData(); 51 | 52 | data.append( 'action', ajaxAction ); 53 | data.append( 'nonce', nonce ); 54 | 55 | fetch( ajaxUrl, { 56 | method: 'POST', 57 | body: data, 58 | } ).then( () => { 59 | setDismissed( true ); 60 | } ); 61 | }; 62 | 63 | const classes = [ 'notice-wrap' ]; 64 | 65 | if ( dismissed ) { 66 | classes.push( 'dismissed' ); 67 | } 68 | 69 | if ( ! noticeTriggered ) { 70 | return null; 71 | } 72 | 73 | return ( 74 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.
61 | 62 | ', 63 | ), 64 | ), 65 | ); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /inc/patterns/layout/columns-content-images.php: -------------------------------------------------------------------------------- 1 | __( 'Columns with content and images', 'neve-fse' ), 22 | 'categories' => array( 'neve-fse' ), 23 | 'keywords' => array( 'Content', 'images', 'text', 'columns' ), 24 | 'content' => ' 25 | 26 |Subheader
31 |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
40 | 41 | 42 | 43 | 46 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
46 | 47 | 48 | 49 | 58 | 59 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
46 | 47 | 48 | 49 | 54 | 55 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
36 | 37 | 38 | 39 | 44 | 45 |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
31 | 32 | 33 | 34 | 37 |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
47 | 48 | 49 | 50 | 53 |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
63 | 64 | 65 | 66 | 69 |Subheader
26 | 27 | 28 | 29 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
30 | 31 | 32 | 33 |(555) 123-4567
34 | 35 | 36 | 37 | 40 |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
35 |"...Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ut labore et dolore magna aliqua..."
61 | 62 | 63 | 64 | 67 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
30 | 31 | 32 | 33 | 36 |"...Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua..."
26 | 27 | 28 | 29 |SEAN FISHER
30 |Build a website for your business or brand, with Neve FSE
34 | 35 | 36 | 37 | 42 | 43 |
51 | Build a website for your business or brand, with Neve FSE
32 | 33 | 34 | 35 | 38 |Lorem ipsum dolor sit amet, consectetur adipiscing elit.
37 | 38 | 39 | 40 | 45 | 46 |Build a website for your business or brand, with Neve FSE
37 | 38 | 39 | 40 | 49 | 50 |No Posts were found
37 | 38 |No Posts were found
37 | 38 |No Posts were found
41 | 42 |No Posts were found
41 | 42 |No Posts were found
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |No Posts were found
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |No Posts were found
39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |No Posts were found
41 | 42 | 43 | 44 | 45 |No Posts were found
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |No Posts were found
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |No Posts were found
57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |Copyright 2023 - Neve FSE theme
15 | 16 |10 | Copyright 2023 - Neve FSE theme
11 | 12 |Unfortunately the page was not found. Click the 12 | button below to return to the homepage
13 | 14 | 15 | 16 | 19 |No Posts were found
37 | 38 |No Posts were found
35 | 36 |