From e3d169d5024388e1364e1cba8a9b49d0248a9ab5 Mon Sep 17 00:00:00 2001 From: Joaquim d'Souza Date: Thu, 11 Jun 2026 18:54:39 +0200 Subject: [PATCH 1/2] feat: various repo maintenance tasks done - Upgrade PHP to 8.5 - Remove tailwind (not used for WordPress block themes) - Remove jquery dependency - Include sample WordPress block - Remove Carbon Fields (no longer required, flakey dependency) - Include sample theme options page --- .devcontainer/.env.example | 19 - .devcontainer/.gitignore | 2 - .devcontainer/Dockerfile | 19 - .devcontainer/config/nginx.conf | 15 - .devcontainer/config/php.ini | 7 - .devcontainer/devcontainer.json | 11 - .devcontainer/docker-compose.yml | 45 - .gitignore | 1 - Dockerfile | 4 + composer.json | 8 +- composer.lock | 239 +- docker-compose.yml | 8 +- .../assets/global.d.ts | 9 + .../assets/main.css | 2 +- .../wordpress-starter-template/assets/main.ts | 12 + .../assets/main.tsx | 5 - .../assets/wordpress.d.ts | 11 + .../blocks/digital-clock/block.json | 19 + .../blocks/digital-clock/index.tsx | 31 + .../blocks/digital-clock/render.php | 12 + .../blocks/digital-clock/style.css | 32 + .../blocks/digital-clock/time.ts | 11 + .../blocks/digital-clock/view.ts | 15 + .../eslint.config.mjs | 4 +- .../wordpress-starter-template/functions.php | 40 +- .../package-lock.json | 11290 +++++++++------- .../wordpress-starter-template/package.json | 42 +- .../postcss.config.js | 6 - .../wordpress-starter-template/readme.txt | 2 +- .../src/ThemeOptions.php | 117 + .../wordpress-starter-template/style.css | 2 +- .../wordpress-starter-template/theme.json | 8 + .../wordpress-starter-template/tsconfig.json | 21 +- .../wordpress-starter-template/types.t.ts | 0 .../webpack.config.js | 93 +- 35 files changed, 7002 insertions(+), 5160 deletions(-) delete mode 100644 .devcontainer/.env.example delete mode 100644 .devcontainer/.gitignore delete mode 100644 .devcontainer/Dockerfile delete mode 100644 .devcontainer/config/nginx.conf delete mode 100644 .devcontainer/config/php.ini delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .devcontainer/docker-compose.yml create mode 100644 web/app/themes/wordpress-starter-template/assets/global.d.ts create mode 100644 web/app/themes/wordpress-starter-template/assets/main.ts delete mode 100644 web/app/themes/wordpress-starter-template/assets/main.tsx create mode 100644 web/app/themes/wordpress-starter-template/assets/wordpress.d.ts create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/block.json create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/index.tsx create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/render.php create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/style.css create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/time.ts create mode 100644 web/app/themes/wordpress-starter-template/blocks/digital-clock/view.ts delete mode 100644 web/app/themes/wordpress-starter-template/postcss.config.js create mode 100644 web/app/themes/wordpress-starter-template/src/ThemeOptions.php delete mode 100644 web/app/themes/wordpress-starter-template/types.t.ts diff --git a/.devcontainer/.env.example b/.devcontainer/.env.example deleted file mode 100644 index 99135d8..0000000 --- a/.devcontainer/.env.example +++ /dev/null @@ -1,19 +0,0 @@ -DB_NAME=wordpress -DB_USER=wordpress -DB_PASSWORD=password -DB_HOST=database -DB_PREFIX=wp_ - -WP_ENV=development -WP_HOME=http://localhost:8080 -WP_SITEURL=${WP_HOME}/wp - -# Generate your keys here: https://roots.io/salts.html -AUTH_KEY='generateme' -SECURE_AUTH_KEY='generateme' -LOGGED_IN_KEY='generateme' -NONCE_KEY='generateme' -AUTH_SALT='generateme' -SECURE_AUTH_SALT='generateme' -LOGGED_IN_SALT='generateme' -NONCE_SALT='generateme' diff --git a/.devcontainer/.gitignore b/.devcontainer/.gitignore deleted file mode 100644 index 215d7c8..0000000 --- a/.devcontainer/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -docker-compose.override.yml -.env diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index ad5e047..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM php:8.3-fpm - -RUN apt-get update && apt-get install -y \ - mariadb-client \ - zip \ - unzip \ - && docker-php-ext-install -j$(nproc) \ - mysqli \ - pdo_mysql \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - -RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \ - && chmod +x wp-cli.phar \ - && mv wp-cli.phar /usr/local/bin/wp - -WORKDIR /roots/app diff --git a/.devcontainer/config/nginx.conf b/.devcontainer/config/nginx.conf deleted file mode 100644 index 59deb39..0000000 --- a/.devcontainer/config/nginx.conf +++ /dev/null @@ -1,15 +0,0 @@ -server { - listen 80; - root /roots/app/web; - index index.php; - - location / { - try_files $uri $uri/ /index.php$is_args$args; - } - - location ~ \.php$ { - fastcgi_pass app:9000; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - } -} diff --git a/.devcontainer/config/php.ini b/.devcontainer/config/php.ini deleted file mode 100644 index 0bdfa9d..0000000 --- a/.devcontainer/config/php.ini +++ /dev/null @@ -1,7 +0,0 @@ -memory_limit = 256M -max_execution_time = 120 -upload_max_filesize = 64M -post_max_size = 64M -error_reporting = E_ALL -display_errors = Off -log_errors = On diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index c1d59fb..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "Bedrock Development", - "dockerComposeFile": ["docker-compose.yml"], - "service": "app", - "workspaceFolder": "/roots/app", - "forwardPorts": [8080], - "remoteEnv": { - "WP_ENV": "development" - }, - "postCreateCommand": "cp -n /roots/app/.devcontainer/.env.example /roots/app/.env" -} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index 27d78ba..0000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,45 +0,0 @@ -services: - app: - build: - context: . - dockerfile: Dockerfile - volumes: - - ..:/roots/app - - ./config/php.ini:/usr/local/etc/php/conf.d/bedrock.ini - networks: - - bedrock - depends_on: - database: - condition: service_healthy - environment: - WP_CLI_ALLOW_ROOT: 1 - - web: - image: nginx:alpine - ports: - - '8080:80' - volumes: - - ..:/roots/app:ro - - ./config/nginx.conf:/etc/nginx/conf.d/default.conf:ro - depends_on: - - app - networks: - - bedrock - - database: - image: mariadb:12 - environment: - MYSQL_DATABASE: wordpress - MYSQL_USER: wordpress - MYSQL_PASSWORD: password - MYSQL_ROOT_PASSWORD: password - networks: - - bedrock - healthcheck: - test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] - timeout: 20s - retries: 10 - -networks: - bedrock: - driver: bridge diff --git a/.gitignore b/.gitignore index 7290a7b..2d1071e 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,6 @@ web/.htaccess # Composer /vendor -/web/app/vendor auth.json # PHPUnit/Pest diff --git a/Dockerfile b/Dockerfile index a1705e4..9620ccf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,6 +31,10 @@ RUN { \ echo "xdebug.log=/tmp/xdebug_remote.log"; \ } > /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; +# Install composer (just the binary: it runs on this image's PHP, keeping the +# PHP version composer sees identical to the one WordPress runs on) +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer + # Install wp-cli RUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar RUN chmod +x /bin/wp-cli.phar diff --git a/composer.json b/composer.json index 3f1c14d..cb3e5bd 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,6 @@ "require": { "php": ">=8.5", "composer/installers": "^2.0", - "htmlburger/carbon-fields": "^3.6", "oscarotero/env": "^2.0", "roots/bedrock-autoloader": "^1.0", "roots/bedrock-disallow-indexing": "^2.0", @@ -27,7 +26,6 @@ }, "require-dev": { "laravel/pint": "^1.0", - "mnsami/composer-custom-directory-installer": "^2.0", "pestphp/pest": "^4.0", "wp-plugin/create-block-theme": "*", "wp-plugin/duplicate-post": "*", @@ -48,8 +46,7 @@ "allow-plugins": { "composer/installers": true, "roots/wordpress-core-installer": true, - "pestphp/pest-plugin": true, - "mnsami/composer-custom-directory-installer": true + "pestphp/pest-plugin": true }, "sort-packages": true }, @@ -65,9 +62,6 @@ ], "web/app/themes/{$name}/": [ "type:wordpress-theme" - ], - "web/app/vendor/{$vendor}/{$name}/": [ - "htmlburger/carbon-fields" ] }, "wordpress-install-dir": "web/wp" diff --git a/composer.lock b/composer.lock index 91d1ceb..83cbcc6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bb5b3bcb4d0c27f6e54211aad3bfbbe3", + "content-hash": "9a19e4116399a2ab2709a379962a4734", "packages": [ { "name": "composer/installers", @@ -214,146 +214,6 @@ ], "time": "2025-12-27T19:43:20+00:00" }, - { - "name": "htmlburger/carbon-fields", - "version": "v3.6.9", - "source": { - "type": "git", - "url": "https://github.com/htmlburger/carbon-fields.git", - "reference": "f82e80e3e3469d6e86cc17a8950b918ad448a059" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/htmlburger/carbon-fields/zipball/f82e80e3e3469d6e86cc17a8950b918ad448a059", - "reference": "f82e80e3e3469d6e86cc17a8950b918ad448a059", - "shasum": "" - }, - "require": { - "php": ">=5.6.20" - }, - "require-dev": { - "mockery/mockery": "1.3.6", - "phpunit/phpunit": "7.5.20|9.6.3", - "yoast/phpunit-polyfills": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Carbon_Fields\\": "core/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-only" - ], - "authors": [ - { - "name": "htmlBurger", - "email": "wordpress@htmlburger.com", - "homepage": "https://htmlburger.com/", - "role": "Developer" - }, - { - "name": "Miroslav Mitev", - "email": "mmitev.2create@gmail.com", - "role": "Developer" - }, - { - "name": "Atanas Angelov", - "email": "atanas.angelov.dev@gmail.com", - "role": "Developer" - }, - { - "name": "Georgi Stoyanov", - "email": "stoyanov.gs@gmail.com", - "role": "Developer" - }, - { - "name": "Plamen Kostadinov", - "email": "pkostadinov.2create@gmail.com", - "homepage": "http://plasmen.info/", - "role": "Developer" - }, - { - "name": "Stanimir Panchev", - "email": "Stan4omir@gmail.com", - "role": "Developer" - }, - { - "name": "Marin Atanasov", - "email": "contact@marinatanasov.com", - "homepage": "http://marinatanasov.com/", - "role": "Developer" - }, - { - "name": "Siyan Panayotov", - "homepage": "http://siyanpanayotov.com/", - "role": "Developer" - }, - { - "name": "Peter Petrov", - "email": "peter.petrov89@gmail.com", - "role": "Developer" - }, - { - "name": "Stanimir Stoyanov", - "email": "stanimir.k.stoyanov@gmail.com", - "role": "Developer" - }, - { - "name": "Kaloyan Ivanov", - "email": "kaloyanxivanov@gmail.com", - "homepage": "http://vilepixels.com/", - "role": "Developer" - }, - { - "name": "Georgi Popov", - "homepage": "http://magadanski.com/", - "role": "Developer" - }, - { - "name": "German Velchev", - "email": "germozy@gmail.com", - "role": "Developer" - }, - { - "name": "Rashko Petrov", - "email": "brutalenemy666@gmail.com", - "homepage": "http://errorfactory.com/", - "role": "Developer" - }, - { - "name": "Alexander Panayotov", - "email": "alexander.panayotov@gmail.com", - "homepage": "http://alexanderpanayotov.com/", - "role": "Developer" - }, - { - "name": "Viktor Vasilev", - "email": "liberalcho@gmail.com", - "role": "Developer" - }, - { - "name": "Georgi Georgiev", - "email": "george.georgiev96@gmail.com", - "role": "Developer" - }, - { - "name": "Atanas Vasilev", - "email": "atanasvasilev91@gmail.com", - "role": "Developer" - } - ], - "description": "WordPress developer-friendly custom fields for post types, taxonomy terms, users, comments, widgets, options and more.", - "homepage": "http://carbonfields.net/", - "support": { - "docs": "http://carbonfields.net/docs/", - "email": "wordpress@htmlburger.com", - "issues": "https://github.com/htmlburger/carbon-fields/issues", - "source": "https://github.com/htmlburger/carbon-fields" - }, - "time": "2025-06-11T11:23:23+00:00" - }, { "name": "oscarotero/env", "version": "v2.1.1", @@ -1397,28 +1257,29 @@ }, { "name": "composer/pcre", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "conflict": { - "phpstan/phpstan": "<1.11.10" + "phpstan/phpstan": "<2.2.2" }, "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" }, "type": "library", "extra": { @@ -1456,7 +1317,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" + "source": "https://github.com/composer/pcre/tree/3.4.0" }, "funding": [ { @@ -1466,13 +1327,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-11-12T16:29:46+00:00" + "time": "2026-06-07T11:47:49+00:00" }, { "name": "composer/xdebug-handler", @@ -1848,78 +1705,6 @@ }, "time": "2026-04-20T15:26:14+00:00" }, - { - "name": "mnsami/composer-custom-directory-installer", - "version": "2.2.1", - "source": { - "type": "git", - "url": "https://github.com/mnsami/composer-custom-directory-installer.git", - "reference": "23b7039ea7cf18b5846faae2b9f4d9c9445e0039" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mnsami/composer-custom-directory-installer/zipball/23b7039ea7cf18b5846faae2b9f4d9c9445e0039", - "reference": "23b7039ea7cf18b5846faae2b9f4d9c9445e0039", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0", - "php": ">=8.1" - }, - "require-dev": { - "composer/composer": "^2.0", - "friendsofphp/php-cs-fixer": "^3.75", - "phpunit/phpunit": "^10.5" - }, - "type": "composer-plugin", - "extra": { - "class": [ - "Composer\\CustomDirectoryInstaller\\LibraryPlugin", - "Composer\\CustomDirectoryInstaller\\PearPlugin", - "Composer\\CustomDirectoryInstaller\\PluginPlugin" - ], - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CustomDirectoryInstaller\\": "src/Composer/CustomDirectoryInstaller" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mina Nabil Sami", - "email": "mina.nsami@gmail.com" - } - ], - "description": "A composer plugin, to help install packages of different types in custom paths.", - "keywords": [ - "composer", - "composer-installer", - "composer-plugin", - "custom-path", - "drupal", - "installer-paths", - "monorepo", - "wordpress" - ], - "support": { - "issues": "https://github.com/mnsami/composer-custom-directory-installer/issues", - "source": "https://github.com/mnsami/composer-custom-directory-installer/tree/2.2.1" - }, - "funding": [ - { - "url": "https://github.com/mnsami", - "type": "github" - } - ], - "time": "2026-05-20T07:57:55+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.13.4", diff --git a/docker-compose.yml b/docker-compose.yml index d3c4c88..60561fb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,7 +39,13 @@ services: - "host.docker.internal:host-gateway" composer: - image: composer:2 + # Built from the project Dockerfile so composer runs on the same PHP + # version as WordPress itself (the stock composer image bundles its own + # PHP, which can fall behind the platform requirement in composer.json). + build: + context: . + dockerfile: Dockerfile + entrypoint: ["composer"] working_dir: /var/www/html restart: "no" volumes: diff --git a/web/app/themes/wordpress-starter-template/assets/global.d.ts b/web/app/themes/wordpress-starter-template/assets/global.d.ts new file mode 100644 index 0000000..c5ddcba --- /dev/null +++ b/web/app/themes/wordpress-starter-template/assets/global.d.ts @@ -0,0 +1,9 @@ +import type { Alpine } from "alpinejs"; + +declare global { + interface Window { + Alpine: Alpine; + } +} + +export {}; diff --git a/web/app/themes/wordpress-starter-template/assets/main.css b/web/app/themes/wordpress-starter-template/assets/main.css index f1d8c73..c4209fa 100644 --- a/web/app/themes/wordpress-starter-template/assets/main.css +++ b/web/app/themes/wordpress-starter-template/assets/main.css @@ -1 +1 @@ -@import "tailwindcss"; +/* Theme styles. Bundled into build/main.css by webpack. */ diff --git a/web/app/themes/wordpress-starter-template/assets/main.ts b/web/app/themes/wordpress-starter-template/assets/main.ts new file mode 100644 index 0000000..972d193 --- /dev/null +++ b/web/app/themes/wordpress-starter-template/assets/main.ts @@ -0,0 +1,12 @@ +import Alpine from "alpinejs"; + +import "./main.css"; + +window.Alpine = Alpine; + +// Block view scripts register their components on the alpine:init event. +// Starting Alpine on DOMContentLoaded guarantees every footer script has run +// (and registered its listeners) first, whatever order they load in. +document.addEventListener("DOMContentLoaded", () => { + Alpine.start(); +}); diff --git a/web/app/themes/wordpress-starter-template/assets/main.tsx b/web/app/themes/wordpress-starter-template/assets/main.tsx deleted file mode 100644 index ef18744..0000000 --- a/web/app/themes/wordpress-starter-template/assets/main.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import "@/main.css"; - -if (module.hot) { - module.hot.accept(); -} diff --git a/web/app/themes/wordpress-starter-template/assets/wordpress.d.ts b/web/app/themes/wordpress-starter-template/assets/wordpress.d.ts new file mode 100644 index 0000000..9869341 --- /dev/null +++ b/web/app/themes/wordpress-starter-template/assets/wordpress.d.ts @@ -0,0 +1,11 @@ +/* + * @wordpress/block-editor does not ship TypeScript types, so the parts of its + * API used by this theme are declared here. Extend as you use more of it. + */ +declare module "@wordpress/block-editor" { + import type { HTMLAttributes } from "react"; + + export function useBlockProps( + props?: HTMLAttributes, + ): HTMLAttributes; +} diff --git a/web/app/themes/wordpress-starter-template/blocks/digital-clock/block.json b/web/app/themes/wordpress-starter-template/blocks/digital-clock/block.json new file mode 100644 index 0000000..20e81bc --- /dev/null +++ b/web/app/themes/wordpress-starter-template/blocks/digital-clock/block.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wordpress-starter-template/digital-clock", + "version": "1.0.0", + "title": "Digital Clock", + "category": "widgets", + "icon": "clock", + "description": "A ticking digital clock, rendered with React in the editor and Alpine.js on the front end.", + "textdomain": "wordpress-starter-template", + "attributes": {}, + "supports": { + "html": false + }, + "editorScript": "file:./index.js", + "style": "file:./index.css", + "viewScript": "file:./view.js", + "render": "file:./render.php" +} diff --git a/web/app/themes/wordpress-starter-template/blocks/digital-clock/index.tsx b/web/app/themes/wordpress-starter-template/blocks/digital-clock/index.tsx new file mode 100644 index 0000000..18a1efe --- /dev/null +++ b/web/app/themes/wordpress-starter-template/blocks/digital-clock/index.tsx @@ -0,0 +1,31 @@ +import { useBlockProps } from "@wordpress/block-editor"; +import { registerBlockType } from "@wordpress/blocks"; +import { useEffect, useState } from "react"; + +import metadata from "./block.json"; +import "./style.css"; +import { formatTime } from "./time"; + +function Edit() { + const blockProps = useBlockProps(); + const [time, setTime] = useState(() => formatTime(new Date())); + + useEffect(() => { + const timer = window.setInterval(() => { + setTime(formatTime(new Date())); + }, 1000); + return () => window.clearInterval(timer); + }, []); + + return ( +
+ +
+ ); +} + +registerBlockType(metadata, { + edit: Edit, + // The front-end markup comes from render.php. + save: () => null, +}); diff --git a/web/app/themes/wordpress-starter-template/blocks/digital-clock/render.php b/web/app/themes/wordpress-starter-template/blocks/digital-clock/render.php new file mode 100644 index 0000000..675a843 --- /dev/null +++ b/web/app/themes/wordpress-starter-template/blocks/digital-clock/render.php @@ -0,0 +1,12 @@ + +
x-data="digitalClock"> + +
diff --git a/web/app/themes/wordpress-starter-template/blocks/digital-clock/style.css b/web/app/themes/wordpress-starter-template/blocks/digital-clock/style.css new file mode 100644 index 0000000..acfc037 --- /dev/null +++ b/web/app/themes/wordpress-starter-template/blocks/digital-clock/style.css @@ -0,0 +1,32 @@ +/* + * Loaded on both the front end and in the editor (via "style" in block.json), + * so the block looks the same in both. Every visual value is a CSS custom + * property: block-local --clock-* variables, defaulting to the theme.json + * tokens (settings.custom.clock => --wp--custom--clock--*) and WordPress + * presets (--wp--preset--*). + */ +/* + * The wrapper stays block-level: WordPress's constrained layout aligns blocks + * with max-width + auto margins, which inline-level boxes ignore. The pill + * styling goes on the inner