├── .ddev ├── .env ├── config.yaml ├── docker-compose.viteserve.yaml └── viteserve │ ├── build-dotenv.sh │ ├── build-dotenv1.sh │ ├── build-dotenv2.sh │ ├── build-dotenv3.sh │ └── vite-test-listener ├── .gitignore ├── .screenshot.png ├── README.md ├── package-lock.json ├── package.json ├── vite.config.js └── wp-content └── themes └── raft-child ├── acf-json └── group_638fa97b00877.json ├── blocks ├── svelte-demo-block-one │ ├── Test.svelte │ ├── block.json │ ├── main.js │ └── template.php └── svelte-demo-block-two │ ├── TestTwo.svelte │ ├── block.json │ ├── main.js │ └── template.php ├── functions.php ├── main.js ├── style.css └── templates ├── 404.html ├── archive.html ├── front-page.html ├── index.html ├── page.html ├── search.html ├── single.html └── template-blank.html /.ddev/.env: -------------------------------------------------------------------------------- 1 | # start vite 2 | VITE_PROJECT_DIR=. 3 | VITE_PRIMARY_PORT=5173 4 | VITE_SECONDARY_PORT=5273 5 | VITE_JS_PACKAGE_MGR=npm 6 | # end vite 7 | -------------------------------------------------------------------------------- /.ddev/config.yaml: -------------------------------------------------------------------------------- 1 | name: ddev-wp-acf-blocks-svelte 2 | type: wordpress 3 | docroot: "" 4 | php_version: "8.0" 5 | webserver_type: nginx-fpm 6 | router_http_port: "80" 7 | router_https_port: "443" 8 | xdebug_enabled: false 9 | additional_hostnames: [] 10 | additional_fqdns: [] 11 | database: 12 | type: mariadb 13 | version: "10.4" 14 | nfs_mount_enabled: false 15 | mutagen_enabled: false 16 | use_dns_when_possible: true 17 | composer_version: "2" 18 | web_environment: [] 19 | nodejs_version: "16" 20 | 21 | # Key features of ddev's config.yaml: 22 | 23 | # name: # Name of the project, automatically provides 24 | # http://projectname.ddev.site and https://projectname.ddev.site 25 | 26 | # type: # drupal6/7/8, backdrop, typo3, wordpress, php 27 | 28 | # docroot: # Relative path to the directory containing index.php. 29 | 30 | # php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1" 31 | 32 | # You can explicitly specify the webimage but this 33 | # is not recommended, as the images are often closely tied to ddev's' behavior, 34 | # so this can break upgrades. 35 | 36 | # webimage: # nginx/php docker image. 37 | 38 | # database: 39 | # type: # mysql, mariadb 40 | # version: # database version, like "10.3" or "8.0" 41 | # Note that mariadb_version or mysql_version from v1.18 and earlier 42 | # will automatically be converted to this notation with just a "ddev config --auto" 43 | 44 | # router_http_port: # Port to be used for http (defaults to port 80) 45 | # router_https_port: # Port for https (defaults to 443) 46 | 47 | # xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart" 48 | # Note that for most people the commands 49 | # "ddev xdebug" to enable xdebug and "ddev xdebug off" to disable it work better, 50 | # as leaving xdebug enabled all the time is a big performance hit. 51 | 52 | # xhprof_enabled: false # Set to true to enable xhprof and "ddev start" or "ddev restart" 53 | # Note that for most people the commands 54 | # "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better, 55 | # as leaving xhprof enabled all the time is a big performance hit. 56 | 57 | # webserver_type: nginx-fpm # or apache-fpm 58 | 59 | # timezone: Europe/Berlin 60 | # This is the timezone used in the containers and by PHP; 61 | # it can be set to any valid timezone, 62 | # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 63 | # For example Europe/Dublin or MST7MDT 64 | 65 | # composer_root: 66 | # Relative path to the composer root directory from the project root. This is 67 | # the directory which contains the composer.json and where all Composer related 68 | # commands are executed. 69 | 70 | # composer_version: "2" 71 | # You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1 72 | # to use the latest major version available at the time your container is built. 73 | # It is also possible to select a minor version for example "2.2" which will 74 | # install the latest release of that branch. Alternatively, an explicit Composer 75 | # version may be specified, for example "1.0.22". Finally, it is also possible 76 | # to use one of the key words "stable", "preview" or "snapshot" see Composer 77 | # documentation. 78 | # To reinstall Composer after the image was built, run "ddev debug refresh". 79 | 80 | # nodejs_version: "16" 81 | # change from the default system Node.js version to another supported version, like 12, 14, 17, 18. 82 | # Note that you can use 'ddev nvm' or nvm inside the web container to provide nearly any 83 | # Node.js version, including v6, etc. 84 | 85 | # additional_hostnames: 86 | # - somename 87 | # - someothername 88 | # would provide http and https URLs for "somename.ddev.site" 89 | # and "someothername.ddev.site". 90 | 91 | # additional_fqdns: 92 | # - example.com 93 | # - sub1.example.com 94 | # would provide http and https URLs for "example.com" and "sub1.example.com" 95 | # Please take care with this because it can cause great confusion. 96 | 97 | # upload_dir: custom/upload/dir 98 | # would set the destination path for ddev import-files to /custom/upload/dir 99 | # When mutagen is enabled this path is bind-mounted so that all the files 100 | # in the upload_dir don't have to be synced into mutagen 101 | 102 | # working_dir: 103 | # web: /var/www/html 104 | # db: /home 105 | # would set the default working directory for the web and db services. 106 | # These values specify the destination directory for ddev ssh and the 107 | # directory in which commands passed into ddev exec are run. 108 | 109 | # omit_containers: [db, dba, ddev-ssh-agent] 110 | # Currently only these containers are supported. Some containers can also be 111 | # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit 112 | # the "db" container, several standard features of ddev that access the 113 | # database container will be unusable. In the global configuration it is also 114 | # possible to omit ddev-router, but not here. 115 | 116 | # nfs_mount_enabled: false 117 | # Great performance improvement but requires host configuration first. 118 | # See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container 119 | 120 | # mutagen_enabled: false 121 | # Performance improvement using mutagen asynchronous updates. 122 | # See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen 123 | 124 | # fail_on_hook_fail: False 125 | # Decide whether 'ddev start' should be interrupted by a failing hook 126 | 127 | # host_https_port: "59002" 128 | # The host port binding for https can be explicitly specified. It is 129 | # dynamic unless otherwise specified. 130 | # This is not used by most people, most people use the *router* instead 131 | # of the localhost port. 132 | 133 | # host_webserver_port: "59001" 134 | # The host port binding for the ddev-webserver can be explicitly specified. It is 135 | # dynamic unless otherwise specified. 136 | # This is not used by most people, most people use the *router* instead 137 | # of the localhost port. 138 | 139 | # host_db_port: "59002" 140 | # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic 141 | # unless explicitly specified. 142 | 143 | # phpmyadmin_port: "8036" 144 | # phpmyadmin_https_port: "8037" 145 | # The PHPMyAdmin ports can be changed from the default 8036 and 8037 146 | 147 | # host_phpmyadmin_port: "8036" 148 | # The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed 149 | # through ddev-router, but it can be specified and bound. 150 | 151 | # mailhog_port: "8025" 152 | # mailhog_https_port: "8026" 153 | # The MailHog ports can be changed from the default 8025 and 8026 154 | 155 | # host_mailhog_port: "8025" 156 | # The mailhog port is not normally bound on the host at all, instead being routed 157 | # through ddev-router, but it can be bound directly to localhost if specified here. 158 | 159 | # webimage_extra_packages: [php7.4-tidy, php-bcmath] 160 | # Extra Debian packages that are needed in the webimage can be added here 161 | 162 | # dbimage_extra_packages: [telnet,netcat] 163 | # Extra Debian packages that are needed in the dbimage can be added here 164 | 165 | # use_dns_when_possible: true 166 | # If the host has internet access and the domain configured can 167 | # successfully be looked up, DNS will be used for hostname resolution 168 | # instead of editing /etc/hosts 169 | # Defaults to true 170 | 171 | # project_tld: ddev.site 172 | # The top-level domain used for project URLs 173 | # The default "ddev.site" allows DNS lookup via a wildcard 174 | # If you prefer you can change this to "ddev.local" to preserve 175 | # pre-v1.9 behavior. 176 | 177 | # ngrok_args: --basic-auth username:pass1234 178 | # Provide extra flags to the "ngrok http" command, see 179 | # https://ngrok.com/docs#http or run "ngrok http -h" 180 | 181 | # disable_settings_management: false 182 | # If true, ddev will not create CMS-specific settings files like 183 | # Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php 184 | # In this case the user must provide all such settings. 185 | 186 | # You can inject environment variables into the web container with: 187 | # web_environment: 188 | # - SOMEENV=somevalue 189 | # - SOMEOTHERENV=someothervalue 190 | 191 | # no_project_mount: false 192 | # (Experimental) If true, ddev will not mount the project into the web container; 193 | # the user is responsible for mounting it manually or via a script. 194 | # This is to enable experimentation with alternate file mounting strategies. 195 | # For advanced users only! 196 | 197 | # bind_all_interfaces: false 198 | # If true, host ports will be bound on all network interfaces, 199 | # not just the localhost interface. This means that ports 200 | # will be available on the local network if the host firewall 201 | # allows it. 202 | 203 | # default_container_timeout: 120 204 | # The default time that ddev waits for all containers to become ready can be increased from 205 | # the default 120. This helps in importing huge databases, for example. 206 | 207 | #web_extra_exposed_ports: 208 | #- name: nodejs 209 | # container_port: 3000 210 | # http_port: 2999 211 | # https_port: 3000 212 | #- name: something 213 | # container_port: 4000 214 | # https_port: 4000 215 | # http_port: 3999 216 | # Allows a set of extra ports to be exposed via ddev-router 217 | # The port behavior on the ddev-webserver must be arranged separately, for example 218 | # using web_extra_daemons. 219 | # For example, with a web app on port 3000 inside the container, this config would 220 | # expose that web app on https://.ddev.site:9999 and http://.ddev.site:9998 221 | # web_extra_exposed_ports: 222 | # - container_port: 3000 223 | # http_port: 9998 224 | # https_port: 9999 225 | 226 | #web_extra_daemons: 227 | #- name: "http-1" 228 | # command: "/var/www/html/node_modules/.bin/http-server -p 3000" 229 | # directory: /var/www/html 230 | #- name: "http-2" 231 | # command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000" 232 | # directory: /var/www/html 233 | 234 | # Many ddev commands can be extended to run tasks before or after the 235 | # ddev command is executed, for example "post-start", "post-import-db", 236 | # "pre-composer", "post-composer" 237 | # See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more 238 | # information on the commands that can be extended and the tasks you can define 239 | # for them. Example: 240 | #hooks: 241 | # Un-comment to emit the WP CLI version after ddev start. 242 | # post-start: 243 | # - exec: wp cli version 244 | -------------------------------------------------------------------------------- /.ddev/docker-compose.viteserve.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | # Override the web container's standard HTTP_EXPOSE and HTTPS_EXPOSE 3 | # Derived from the browsersync addition. 4 | # This is to expose the vite dev port. 5 | version: '3.6' 6 | services: 7 | web: 8 | expose: 9 | # needed so the upstream works: 10 | - ${VITE_PRIMARY_PORT:-5173} 11 | environment: 12 | # Set the vite-enabled js project here. 13 | # Actual settings are pulled from .ddev/.env, and 14 | # should be changed there, and not here. 15 | - VITE_PROJECT_DIR=${VITE_PROJECT_DIR:-frontend} 16 | - VITE_PRIMARY_PORT=${VITE_PRIMARY_PORT:-5173} 17 | - VITE_SECONDARY_PORT=${VITE_SECONDARY_PORT:-5273} 18 | - VITE_JS_PACKAGE_MGR=${VITE_JS_PACKAGE_MGR} 19 | # Expose the vite dev server's port (default 5173) here. 20 | # The odd port swap below is required so we do not need 21 | # to play with HMR settings due to different internal 22 | # and external ports. DDEV won't let us expose just HTTPS, 23 | # so a bit of trickery is required. 24 | - HTTP_EXPOSE=${DDEV_ROUTER_HTTP_PORT}:80,${DDEV_MAILHOG_PORT}:8025,${VITE_SECONDARY_PORT:-5273}:${VITE_PRIMARY_PORT:-5173} 25 | - HTTPS_EXPOSE=${DDEV_ROUTER_HTTPS_PORT}:80,${DDEV_MAILHOG_HTTPS_PORT}:8025,${VITE_PRIMARY_PORT:-5173}:${VITE_PRIMARY_PORT:-5173} 26 | -------------------------------------------------------------------------------- /.ddev/viteserve/build-dotenv.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | #ddev-generated 3 | 4 | BASE_DIR=$(dirname $0) 5 | echo "BASEDIR $BASE_DIR" 6 | $BASE_DIR/build-dotenv1.sh "$@" 7 | $BASE_DIR/build-dotenv2.sh 8 | $BASE_DIR/build-dotenv3.sh 9 | -------------------------------------------------------------------------------- /.ddev/viteserve/build-dotenv1.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | #ddev-generated 3 | 4 | y_flag='' 5 | 6 | print_usage() { 7 | printf "Usage: $0 [-y]" 8 | } 9 | 10 | while getopts 'y' flag; do 11 | case "${flag}" in 12 | y) y_flag='true' ;; 13 | *) 14 | print_usage 15 | exit 1 16 | ;; 17 | esac 18 | done 19 | 20 | # defaults 21 | PROJ_DIR=frontend 22 | 23 | # check for special cases 24 | if [ "$DDEV_PROJECT_TYPE" = "laravel" ]; then 25 | PROJ_DIR=. 26 | fi 27 | 28 | # @see https://stackoverflow.com/a/27650122/8600734 29 | mapfile VITE_SETTINGS <.env-frag 48 | 49 | allow_upgrade=${y_flag} 50 | 51 | if [ "$allow_upgrade" = "" ]; then 52 | if [ ! -f "./.env" ]; then 53 | allow_upgrade="true" 54 | else 55 | if grep "^# start vite" .env >/dev/null; then 56 | echo "Found vite settings in your .ddev/.env file." 57 | echo -n "Replace old settings (y/n)? " 58 | allow_upgrade=ask 59 | fi 60 | fi 61 | fi 62 | echo $allow_upgrade >.allow-upgrade 63 | -------------------------------------------------------------------------------- /.ddev/viteserve/build-dotenv2.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | #ddev-generated 3 | cd .ddev 4 | if [ -f .allow-upgrade ]; then 5 | if grep ask .allow-upgrade >/dev/null; then 6 | read replace 7 | if [ "$replace" = "y" ]; then 8 | echo "true" >.allow-upgrade 9 | else 10 | echo "false" >.allow-upgrade 11 | fi 12 | fi 13 | fi 14 | -------------------------------------------------------------------------------- /.ddev/viteserve/build-dotenv3.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | #ddev-generated 3 | cd .ddev 4 | if [ -f .allow-upgrade ]; then 5 | if grep "true" .allow-upgrade >/dev/null; then 6 | if [ -f .env ]; then 7 | sed -i.bak '/^# start vite/,/^\# end vite/d;' .env 8 | # strip weird null characters from sed output. 9 | tr <.env -d '\000' >.env-post-sed 10 | cat .env-post-sed .env-frag >.env 11 | echo ".env updated to:" 12 | cat .env 13 | rm .env-post-sed 14 | else 15 | cp .env-frag .env 16 | fi 17 | rm .env-frag 18 | fi 19 | fi 20 | -------------------------------------------------------------------------------- /.ddev/viteserve/vite-test-listener: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | #ddev-generated 3 | 4 | # This is used by viteserve's tests 5 | # to mock a vite process. It's not 6 | # part of the public interface of the 7 | # module 8 | 9 | PORT=$1 10 | PORT=${PORT:-5173} 11 | 12 | if nc -zv 127.0.0.1 $PORT &>/dev/null; then 13 | exit 1 14 | fi 15 | 16 | nohup nc -lk $PORT &>/dev/null & 17 | # Print out a PID 18 | echo $! 19 | disown %1 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # https://ddev-pull-wp.mandrasch.eu/ 2 | # Ignore all ... 3 | /* 4 | 5 | # ... but track specific files / folders: 6 | 7 | # General files 8 | !.gitignore 9 | !/README.md 10 | !/LICENSE 11 | !/.screenshot.png 12 | 13 | # DDEV config and provider script 14 | !/.ddev 15 | /.ddev/* 16 | !/.ddev/config.yaml 17 | !/.ddev/providers 18 | /.ddev/providers/* 19 | !/.ddev/providers/ssh.yaml 20 | !/.ddev/providers/backup.yaml 21 | 22 | # vite serve files 23 | # TODO: how can we achieve this more robust? let ddev handle gitignore? 24 | !/.ddev/docker-compose.viteserve.yaml 25 | !/.ddev/web-build/Dockerfile.ddev-viteserve 26 | !/.ddev/viteserve 27 | !/.ddev/commands/web/vite-serve 28 | 29 | 30 | # Child theme: 31 | !/wp-content 32 | /wp-content/* 33 | !/wp-content/themes 34 | /wp-content/themes/* 35 | !/wp-content/themes/raft-child 36 | # vite output dir (compiled) 37 | /wp-content/themes/raft-child/dist 38 | 39 | # Vite & npm 40 | !/.ddev/.env 41 | !/vite.config.js 42 | !/package.json 43 | !/package-lock.json -------------------------------------------------------------------------------- /.screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandrasch/ddev-wp-acf-blocks-svelte/521fbf2ac1a2ad27047548ad009310a3a37f8d03/.screenshot.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ddev-wp-acf-blocks-svelte 2 | 3 | 4 | [ACF Blocks](https://www.advancedcustomfields.com/resources/blocks/) meets Svelte + Vite 🧡 5 | 6 | ![Screenshot block with svelte input binding](.screenshot.png?raw=true) 7 | 8 | Status: Work in progress 🧑‍🔧 9 | 10 | Made with 11 | 12 | - https://github.com/drud/ddev ([Discord](https://discord.gg/hCZFfAMc5k)) 13 | - https://github.com/torenware/ddev-viteserve 14 | - (https://themeisle.com/themes/raft/) 15 | 16 | Inspired by [fgeierst/typo3-vite-demo](https://github.com/fgeierst/typo3-vite-demo). See more experiments: https://my-ddev-lab.mandrasch.eu/ 17 | 18 | **Local development** 19 | 20 | - Run either `ddev npm run dev` or `ddev vite-serve start` 21 | 22 | Use `define('WP_ENV','production');` or `define('WP_ENV','development');` in `wp-config.php` to simulate the environment. The default is `development`. 23 | 24 | **Local first time setup:** 25 | 26 | ```bash 27 | ddev start && \ 28 | ddev wp core download && \ 29 | ddev launch 30 | 31 | # Finish installation of WordPress in browser, afterwards: 32 | 33 | ddev wp theme install raft && \ 34 | ddev wp theme activate raft-child && \ 35 | ddev npm install 36 | ``` 37 | 38 | 1. Use `ddev launch wp-admin/` to open `https://ddev-wp-acf-blocks-svelte.ddev.site/wp-admin/` 39 | 1. **Important**: Install and activate ACF Pro https://www.advancedcustomfields.com/pro/ 40 | 1. Add Svelte Block One to a page or post of your choice 41 | 42 | Now you can run either `ddev npm run dev` or `ddev vite-serve start` for local development. 43 | 44 | ## TODOs 45 | 46 | - [ ] Render svelte blocks also in Gutenberg editor mode? 47 | - [ ] Watch [Jesse Skinner - Adding Svelte to your legacy projects 48 | ](https://www.youtube.com/watch?v=uWxkaDdqfpI) for hints 49 | 50 | ## Notes 51 | 52 | - `templates/` folder was copied over to child theme because of current bug https://github.com/WordPress/gutenberg/issues/44243 53 | - If you run composer with WordPress, that might be of interest: https://github.com/idleberg/php-wordpress-vite-assets 54 | 55 | ## How was this created? 56 | 57 | ```bash 58 | # WP Quickstart for DDEV 59 | # https://ddev.readthedocs.io/en/latest/users/quickstart/#wordpress 60 | ddev config --project-type=wordpress && ddev start && ddev wp core download && ddev launch 61 | 62 | # Finish installation in browser 63 | 64 | # Install ACF Pro for ACF Blocks feature 65 | # https://www.advancedcustomfields.com/pro/ 66 | 67 | # We use the Raft theme by themeisle, with child theme: 68 | ddev wp theme install raft && ddev wp theme activate raft-child 69 | 70 | # Vite support (https://github.com/torenware/ddev-viteserve) 71 | ddev get torenware/ddev-viteserve 72 | # Modified /.ddev/.env for configuration 73 | 74 | ddev npm init -y 75 | ddev npm install --save-dev vite @sveltejs/vite-plugin-svelte 76 | 77 | # Added scripts-section to package.json & create vite.config.js 78 | ``` 79 | 80 | ## Thanks to 81 | 82 | - https://jimmyutterstrom.com/blog/2019/06/21/svelte-3-components-in-legacy-apps/ -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "html", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "html", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@sveltejs/vite-plugin-svelte": "^1.4.0", 13 | "vite": "^3.2.4" 14 | } 15 | }, 16 | "node_modules/@esbuild/android-arm": { 17 | "version": "0.15.17", 18 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.17.tgz", 19 | "integrity": "sha512-ay6Ken4u+JStjYmqIgh71jMT0bs/rXpCCDKaMfl78B20QYWJglT5P6Ejfm4hWf6Zi+uUWNe7ZmqakRs2BQYIeg==", 20 | "cpu": [ 21 | "arm" 22 | ], 23 | "dev": true, 24 | "optional": true, 25 | "os": [ 26 | "android" 27 | ], 28 | "engines": { 29 | "node": ">=12" 30 | } 31 | }, 32 | "node_modules/@esbuild/linux-loong64": { 33 | "version": "0.15.17", 34 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.17.tgz", 35 | "integrity": "sha512-IA1O7f7qxw2DX8oqTpugHElr926phs7Rq8ULXleBMk4go5K05BU0mI8BfCkWcYAvcmVaMc13bv5W3LIUlU6Y9w==", 36 | "cpu": [ 37 | "loong64" 38 | ], 39 | "dev": true, 40 | "optional": true, 41 | "os": [ 42 | "linux" 43 | ], 44 | "engines": { 45 | "node": ">=12" 46 | } 47 | }, 48 | "node_modules/@sveltejs/vite-plugin-svelte": { 49 | "version": "1.4.0", 50 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.4.0.tgz", 51 | "integrity": "sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==", 52 | "dev": true, 53 | "dependencies": { 54 | "debug": "^4.3.4", 55 | "deepmerge": "^4.2.2", 56 | "kleur": "^4.1.5", 57 | "magic-string": "^0.26.7", 58 | "svelte-hmr": "^0.15.1", 59 | "vitefu": "^0.2.2" 60 | }, 61 | "engines": { 62 | "node": "^14.18.0 || >= 16" 63 | }, 64 | "peerDependencies": { 65 | "svelte": "^3.44.0", 66 | "vite": "^3.0.0" 67 | } 68 | }, 69 | "node_modules/debug": { 70 | "version": "4.3.4", 71 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 72 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 73 | "dev": true, 74 | "dependencies": { 75 | "ms": "2.1.2" 76 | }, 77 | "engines": { 78 | "node": ">=6.0" 79 | }, 80 | "peerDependenciesMeta": { 81 | "supports-color": { 82 | "optional": true 83 | } 84 | } 85 | }, 86 | "node_modules/deepmerge": { 87 | "version": "4.2.2", 88 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 89 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 90 | "dev": true, 91 | "engines": { 92 | "node": ">=0.10.0" 93 | } 94 | }, 95 | "node_modules/esbuild": { 96 | "version": "0.15.17", 97 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.17.tgz", 98 | "integrity": "sha512-8MbkDX+kh0kaeYGd6klMbn1uTOXHoDw7UYMd1dQYA5cqBZivf5+pzfaXZSL1RNamJfXW/uWC5+9wX5ejDgpSqg==", 99 | "dev": true, 100 | "hasInstallScript": true, 101 | "bin": { 102 | "esbuild": "bin/esbuild" 103 | }, 104 | "engines": { 105 | "node": ">=12" 106 | }, 107 | "optionalDependencies": { 108 | "@esbuild/android-arm": "0.15.17", 109 | "@esbuild/linux-loong64": "0.15.17", 110 | "esbuild-android-64": "0.15.17", 111 | "esbuild-android-arm64": "0.15.17", 112 | "esbuild-darwin-64": "0.15.17", 113 | "esbuild-darwin-arm64": "0.15.17", 114 | "esbuild-freebsd-64": "0.15.17", 115 | "esbuild-freebsd-arm64": "0.15.17", 116 | "esbuild-linux-32": "0.15.17", 117 | "esbuild-linux-64": "0.15.17", 118 | "esbuild-linux-arm": "0.15.17", 119 | "esbuild-linux-arm64": "0.15.17", 120 | "esbuild-linux-mips64le": "0.15.17", 121 | "esbuild-linux-ppc64le": "0.15.17", 122 | "esbuild-linux-riscv64": "0.15.17", 123 | "esbuild-linux-s390x": "0.15.17", 124 | "esbuild-netbsd-64": "0.15.17", 125 | "esbuild-openbsd-64": "0.15.17", 126 | "esbuild-sunos-64": "0.15.17", 127 | "esbuild-windows-32": "0.15.17", 128 | "esbuild-windows-64": "0.15.17", 129 | "esbuild-windows-arm64": "0.15.17" 130 | } 131 | }, 132 | "node_modules/esbuild-android-64": { 133 | "version": "0.15.17", 134 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.17.tgz", 135 | "integrity": "sha512-sUs6cKMAuAyWnJ/66ezWVr9SMRGFSwoMagxzdhXYggSA12zF7krXSuc1Y9JwxHq56wtv/gFAVo97TFm7RBc1Ig==", 136 | "cpu": [ 137 | "x64" 138 | ], 139 | "dev": true, 140 | "optional": true, 141 | "os": [ 142 | "android" 143 | ], 144 | "engines": { 145 | "node": ">=12" 146 | } 147 | }, 148 | "node_modules/esbuild-android-arm64": { 149 | "version": "0.15.17", 150 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.17.tgz", 151 | "integrity": "sha512-RLZuCgIx1rexwxwsXTEW40ZiZzdBI1MBphwDRFyms/iiJGwLxqCH7v75iSJk5s6AF6oa80KC6r/RmzyaX/uJNg==", 152 | "cpu": [ 153 | "arm64" 154 | ], 155 | "dev": true, 156 | "optional": true, 157 | "os": [ 158 | "android" 159 | ], 160 | "engines": { 161 | "node": ">=12" 162 | } 163 | }, 164 | "node_modules/esbuild-darwin-64": { 165 | "version": "0.15.17", 166 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.17.tgz", 167 | "integrity": "sha512-+6RTCZ0hfAb+RqTNq1uVsBcP441yZOSi6CyV9BIBryGGVg8RM3Bc6L45e5b68jdRloddN92ekS50e4ElI+cHQA==", 168 | "cpu": [ 169 | "x64" 170 | ], 171 | "dev": true, 172 | "optional": true, 173 | "os": [ 174 | "darwin" 175 | ], 176 | "engines": { 177 | "node": ">=12" 178 | } 179 | }, 180 | "node_modules/esbuild-darwin-arm64": { 181 | "version": "0.15.17", 182 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.17.tgz", 183 | "integrity": "sha512-ne4UWUHEKWLgYSE5SLr0/TBcID3k9LPnrzzRXzFLTfD+ygjnW1pMEgdMfmOKIe8jYBUYv8x/YoksriTdQb9r/Q==", 184 | "cpu": [ 185 | "arm64" 186 | ], 187 | "dev": true, 188 | "optional": true, 189 | "os": [ 190 | "darwin" 191 | ], 192 | "engines": { 193 | "node": ">=12" 194 | } 195 | }, 196 | "node_modules/esbuild-freebsd-64": { 197 | "version": "0.15.17", 198 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.17.tgz", 199 | "integrity": "sha512-6my3DrwLOe1zhR8UzVRKeo9AFM9XkApJBcx0IE+qKaEbKKBxYAiDBtd2ZMtRA2agqIwRP0kuHofTiDEzpfA+ZA==", 200 | "cpu": [ 201 | "x64" 202 | ], 203 | "dev": true, 204 | "optional": true, 205 | "os": [ 206 | "freebsd" 207 | ], 208 | "engines": { 209 | "node": ">=12" 210 | } 211 | }, 212 | "node_modules/esbuild-freebsd-arm64": { 213 | "version": "0.15.17", 214 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.17.tgz", 215 | "integrity": "sha512-LQL7+f+bz+xmAu1FcDBB304Wm2CjONUcOeF4f3TqG7wYXMxjjYQZBFv+0OVapNXyYrM2vy9JMDbps+SheuOnHg==", 216 | "cpu": [ 217 | "arm64" 218 | ], 219 | "dev": true, 220 | "optional": true, 221 | "os": [ 222 | "freebsd" 223 | ], 224 | "engines": { 225 | "node": ">=12" 226 | } 227 | }, 228 | "node_modules/esbuild-linux-32": { 229 | "version": "0.15.17", 230 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.17.tgz", 231 | "integrity": "sha512-7E9vZXMZhINQ4/KcxBxioJ2ao5gbXJ6Pa4/LEUd102g3gadSalpg0LrityFgw7ao6qmjcNWwdEYrXaDnOzyyYA==", 232 | "cpu": [ 233 | "ia32" 234 | ], 235 | "dev": true, 236 | "optional": true, 237 | "os": [ 238 | "linux" 239 | ], 240 | "engines": { 241 | "node": ">=12" 242 | } 243 | }, 244 | "node_modules/esbuild-linux-64": { 245 | "version": "0.15.17", 246 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.17.tgz", 247 | "integrity": "sha512-TnedHtFQSUVlc0J0D4ZMMalYaQ0Zbt7HSwGy4sav7BlXVqDVc/rchJ/a9dathK51apzLgRyXQMseLf6bkloaSQ==", 248 | "cpu": [ 249 | "x64" 250 | ], 251 | "dev": true, 252 | "optional": true, 253 | "os": [ 254 | "linux" 255 | ], 256 | "engines": { 257 | "node": ">=12" 258 | } 259 | }, 260 | "node_modules/esbuild-linux-arm": { 261 | "version": "0.15.17", 262 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.17.tgz", 263 | "integrity": "sha512-+ugCmBTTDIlh+UuC7E/GvyJqjGTX2pNOA+g3isG78aYcfgswrHjvstTtIfljaU95AS30qrVNLgI5h/8TsRWTrg==", 264 | "cpu": [ 265 | "arm" 266 | ], 267 | "dev": true, 268 | "optional": true, 269 | "os": [ 270 | "linux" 271 | ], 272 | "engines": { 273 | "node": ">=12" 274 | } 275 | }, 276 | "node_modules/esbuild-linux-arm64": { 277 | "version": "0.15.17", 278 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.17.tgz", 279 | "integrity": "sha512-oupYfh0lTHg+F/2ZoTNrioB+KLd6x0Zlhjz2Oa1jhl8wCGkNvwe25RytR2/SGPYpoNVcvCeoayWQRwwRuWGgfQ==", 280 | "cpu": [ 281 | "arm64" 282 | ], 283 | "dev": true, 284 | "optional": true, 285 | "os": [ 286 | "linux" 287 | ], 288 | "engines": { 289 | "node": ">=12" 290 | } 291 | }, 292 | "node_modules/esbuild-linux-mips64le": { 293 | "version": "0.15.17", 294 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.17.tgz", 295 | "integrity": "sha512-aUVyHwUXJF1hi9jsAT+At+cBxZh2yGICi/e757N6d/zzOD+eVK3PKQj68tAvIflx6/ZpnuCTKol1GpgGYrzERg==", 296 | "cpu": [ 297 | "mips64el" 298 | ], 299 | "dev": true, 300 | "optional": true, 301 | "os": [ 302 | "linux" 303 | ], 304 | "engines": { 305 | "node": ">=12" 306 | } 307 | }, 308 | "node_modules/esbuild-linux-ppc64le": { 309 | "version": "0.15.17", 310 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.17.tgz", 311 | "integrity": "sha512-i7789iFTLfLccHPNADCbaZPx9CuQblsBqv2j4XqIBN1jKIJbpQ8iqCkWoHep4PLqqKLtBLtTWh919GsrFGdeJA==", 312 | "cpu": [ 313 | "ppc64" 314 | ], 315 | "dev": true, 316 | "optional": true, 317 | "os": [ 318 | "linux" 319 | ], 320 | "engines": { 321 | "node": ">=12" 322 | } 323 | }, 324 | "node_modules/esbuild-linux-riscv64": { 325 | "version": "0.15.17", 326 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.17.tgz", 327 | "integrity": "sha512-fEQ/8tnZ2sDniBlPfTXEdg+0OP1olps96HvYdwl8ywJdAlD7AK761EL3lRbRdfMHNOId2N6+CVca43/Fiu/0AQ==", 328 | "cpu": [ 329 | "riscv64" 330 | ], 331 | "dev": true, 332 | "optional": true, 333 | "os": [ 334 | "linux" 335 | ], 336 | "engines": { 337 | "node": ">=12" 338 | } 339 | }, 340 | "node_modules/esbuild-linux-s390x": { 341 | "version": "0.15.17", 342 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.17.tgz", 343 | "integrity": "sha512-ZBQekST4gYgTKHAvUJtR1kFFulHTDlRZSE8T0wRQCmQqydNkC1teWxlR31xS6MZevjZGfa7OMVJD24bBhei/2Q==", 344 | "cpu": [ 345 | "s390x" 346 | ], 347 | "dev": true, 348 | "optional": true, 349 | "os": [ 350 | "linux" 351 | ], 352 | "engines": { 353 | "node": ">=12" 354 | } 355 | }, 356 | "node_modules/esbuild-netbsd-64": { 357 | "version": "0.15.17", 358 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.17.tgz", 359 | "integrity": "sha512-onNBFaZVN9GzGJMm3aZJJv74n/Q8FjW20G9OfSDhHjvamqJ5vbd42hNk6igQX4lgBCHTZvvBlWDJAMy+tbJAAw==", 360 | "cpu": [ 361 | "x64" 362 | ], 363 | "dev": true, 364 | "optional": true, 365 | "os": [ 366 | "netbsd" 367 | ], 368 | "engines": { 369 | "node": ">=12" 370 | } 371 | }, 372 | "node_modules/esbuild-openbsd-64": { 373 | "version": "0.15.17", 374 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.17.tgz", 375 | "integrity": "sha512-QFxHmvjaRrmTCvH/A3EmzqKUSZHRQ7/pbrJeATsb/Q6qckCeL9e7zg/1A3HiZqDXeBUV3yNeBeV1GJBjY6yVyA==", 376 | "cpu": [ 377 | "x64" 378 | ], 379 | "dev": true, 380 | "optional": true, 381 | "os": [ 382 | "openbsd" 383 | ], 384 | "engines": { 385 | "node": ">=12" 386 | } 387 | }, 388 | "node_modules/esbuild-sunos-64": { 389 | "version": "0.15.17", 390 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.17.tgz", 391 | "integrity": "sha512-7dHZA8Kc6U8rBTKojJatXtzHTUKJ3CRYimvOGIQQ1yUDOqGx/zZkCH/HkEi3Zg5SWyDj/57E5e1YJPo4ySSw/w==", 392 | "cpu": [ 393 | "x64" 394 | ], 395 | "dev": true, 396 | "optional": true, 397 | "os": [ 398 | "sunos" 399 | ], 400 | "engines": { 401 | "node": ">=12" 402 | } 403 | }, 404 | "node_modules/esbuild-windows-32": { 405 | "version": "0.15.17", 406 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.17.tgz", 407 | "integrity": "sha512-yDrNrwQ/0k4N3OZItZ6k6YnBUch8+of06YRYc3hFI8VDm7X1rkNZwhttZNAzF6+TtbnK4cIz7H2/EwdSoaGZ3g==", 408 | "cpu": [ 409 | "ia32" 410 | ], 411 | "dev": true, 412 | "optional": true, 413 | "os": [ 414 | "win32" 415 | ], 416 | "engines": { 417 | "node": ">=12" 418 | } 419 | }, 420 | "node_modules/esbuild-windows-64": { 421 | "version": "0.15.17", 422 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.17.tgz", 423 | "integrity": "sha512-jPnXvB4zMMToNPpCBdt+OEQiYFVs9wlQ5G8vMoJkrYJBp1aEt070MRpBFa6pfBFrgXquqgUiNAohMcTdy+JVFg==", 424 | "cpu": [ 425 | "x64" 426 | ], 427 | "dev": true, 428 | "optional": true, 429 | "os": [ 430 | "win32" 431 | ], 432 | "engines": { 433 | "node": ">=12" 434 | } 435 | }, 436 | "node_modules/esbuild-windows-arm64": { 437 | "version": "0.15.17", 438 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.17.tgz", 439 | "integrity": "sha512-I5QeSsz0X66V8rxVhmw03Wzn8Tz63H3L9GrsA7C5wvBXMk3qahLWuEL+l7SZ2DleKkFeZZMu1dPxOak9f1TZ4A==", 440 | "cpu": [ 441 | "arm64" 442 | ], 443 | "dev": true, 444 | "optional": true, 445 | "os": [ 446 | "win32" 447 | ], 448 | "engines": { 449 | "node": ">=12" 450 | } 451 | }, 452 | "node_modules/fsevents": { 453 | "version": "2.3.2", 454 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 455 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 456 | "dev": true, 457 | "hasInstallScript": true, 458 | "optional": true, 459 | "os": [ 460 | "darwin" 461 | ], 462 | "engines": { 463 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 464 | } 465 | }, 466 | "node_modules/function-bind": { 467 | "version": "1.1.1", 468 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 469 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 470 | "dev": true 471 | }, 472 | "node_modules/has": { 473 | "version": "1.0.3", 474 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 475 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 476 | "dev": true, 477 | "dependencies": { 478 | "function-bind": "^1.1.1" 479 | }, 480 | "engines": { 481 | "node": ">= 0.4.0" 482 | } 483 | }, 484 | "node_modules/is-core-module": { 485 | "version": "2.11.0", 486 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 487 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 488 | "dev": true, 489 | "dependencies": { 490 | "has": "^1.0.3" 491 | }, 492 | "funding": { 493 | "url": "https://github.com/sponsors/ljharb" 494 | } 495 | }, 496 | "node_modules/kleur": { 497 | "version": "4.1.5", 498 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 499 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 500 | "dev": true, 501 | "engines": { 502 | "node": ">=6" 503 | } 504 | }, 505 | "node_modules/magic-string": { 506 | "version": "0.26.7", 507 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", 508 | "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", 509 | "dev": true, 510 | "dependencies": { 511 | "sourcemap-codec": "^1.4.8" 512 | }, 513 | "engines": { 514 | "node": ">=12" 515 | } 516 | }, 517 | "node_modules/ms": { 518 | "version": "2.1.2", 519 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 520 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 521 | "dev": true 522 | }, 523 | "node_modules/nanoid": { 524 | "version": "3.3.4", 525 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 526 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 527 | "dev": true, 528 | "bin": { 529 | "nanoid": "bin/nanoid.cjs" 530 | }, 531 | "engines": { 532 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 533 | } 534 | }, 535 | "node_modules/path-parse": { 536 | "version": "1.0.7", 537 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 538 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 539 | "dev": true 540 | }, 541 | "node_modules/picocolors": { 542 | "version": "1.0.0", 543 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 544 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 545 | "dev": true 546 | }, 547 | "node_modules/postcss": { 548 | "version": "8.4.19", 549 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", 550 | "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", 551 | "dev": true, 552 | "funding": [ 553 | { 554 | "type": "opencollective", 555 | "url": "https://opencollective.com/postcss/" 556 | }, 557 | { 558 | "type": "tidelift", 559 | "url": "https://tidelift.com/funding/github/npm/postcss" 560 | } 561 | ], 562 | "dependencies": { 563 | "nanoid": "^3.3.4", 564 | "picocolors": "^1.0.0", 565 | "source-map-js": "^1.0.2" 566 | }, 567 | "engines": { 568 | "node": "^10 || ^12 || >=14" 569 | } 570 | }, 571 | "node_modules/resolve": { 572 | "version": "1.22.1", 573 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 574 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 575 | "dev": true, 576 | "dependencies": { 577 | "is-core-module": "^2.9.0", 578 | "path-parse": "^1.0.7", 579 | "supports-preserve-symlinks-flag": "^1.0.0" 580 | }, 581 | "bin": { 582 | "resolve": "bin/resolve" 583 | }, 584 | "funding": { 585 | "url": "https://github.com/sponsors/ljharb" 586 | } 587 | }, 588 | "node_modules/rollup": { 589 | "version": "2.79.1", 590 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 591 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 592 | "dev": true, 593 | "bin": { 594 | "rollup": "dist/bin/rollup" 595 | }, 596 | "engines": { 597 | "node": ">=10.0.0" 598 | }, 599 | "optionalDependencies": { 600 | "fsevents": "~2.3.2" 601 | } 602 | }, 603 | "node_modules/source-map-js": { 604 | "version": "1.0.2", 605 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 606 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 607 | "dev": true, 608 | "engines": { 609 | "node": ">=0.10.0" 610 | } 611 | }, 612 | "node_modules/sourcemap-codec": { 613 | "version": "1.4.8", 614 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 615 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 616 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 617 | "dev": true 618 | }, 619 | "node_modules/supports-preserve-symlinks-flag": { 620 | "version": "1.0.0", 621 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 622 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 623 | "dev": true, 624 | "engines": { 625 | "node": ">= 0.4" 626 | }, 627 | "funding": { 628 | "url": "https://github.com/sponsors/ljharb" 629 | } 630 | }, 631 | "node_modules/svelte": { 632 | "version": "3.53.1", 633 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz", 634 | "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==", 635 | "dev": true, 636 | "peer": true, 637 | "engines": { 638 | "node": ">= 8" 639 | } 640 | }, 641 | "node_modules/svelte-hmr": { 642 | "version": "0.15.1", 643 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", 644 | "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", 645 | "dev": true, 646 | "engines": { 647 | "node": "^12.20 || ^14.13.1 || >= 16" 648 | }, 649 | "peerDependencies": { 650 | "svelte": ">=3.19.0" 651 | } 652 | }, 653 | "node_modules/vite": { 654 | "version": "3.2.4", 655 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", 656 | "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", 657 | "dev": true, 658 | "dependencies": { 659 | "esbuild": "^0.15.9", 660 | "postcss": "^8.4.18", 661 | "resolve": "^1.22.1", 662 | "rollup": "^2.79.1" 663 | }, 664 | "bin": { 665 | "vite": "bin/vite.js" 666 | }, 667 | "engines": { 668 | "node": "^14.18.0 || >=16.0.0" 669 | }, 670 | "optionalDependencies": { 671 | "fsevents": "~2.3.2" 672 | }, 673 | "peerDependencies": { 674 | "@types/node": ">= 14", 675 | "less": "*", 676 | "sass": "*", 677 | "stylus": "*", 678 | "sugarss": "*", 679 | "terser": "^5.4.0" 680 | }, 681 | "peerDependenciesMeta": { 682 | "@types/node": { 683 | "optional": true 684 | }, 685 | "less": { 686 | "optional": true 687 | }, 688 | "sass": { 689 | "optional": true 690 | }, 691 | "stylus": { 692 | "optional": true 693 | }, 694 | "sugarss": { 695 | "optional": true 696 | }, 697 | "terser": { 698 | "optional": true 699 | } 700 | } 701 | }, 702 | "node_modules/vitefu": { 703 | "version": "0.2.2", 704 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.2.tgz", 705 | "integrity": "sha512-8CKEIWPm4B4DUDN+h+hVJa9pyNi7rzc5MYmbxhs1wcMakueGFNWB5/DL30USm9qU3xUPnL4/rrLEAwwFiD1tag==", 706 | "dev": true, 707 | "peerDependencies": { 708 | "vite": "^3.0.0" 709 | }, 710 | "peerDependenciesMeta": { 711 | "vite": { 712 | "optional": true 713 | } 714 | } 715 | } 716 | }, 717 | "dependencies": { 718 | "@esbuild/android-arm": { 719 | "version": "0.15.17", 720 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.17.tgz", 721 | "integrity": "sha512-ay6Ken4u+JStjYmqIgh71jMT0bs/rXpCCDKaMfl78B20QYWJglT5P6Ejfm4hWf6Zi+uUWNe7ZmqakRs2BQYIeg==", 722 | "dev": true, 723 | "optional": true 724 | }, 725 | "@esbuild/linux-loong64": { 726 | "version": "0.15.17", 727 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.17.tgz", 728 | "integrity": "sha512-IA1O7f7qxw2DX8oqTpugHElr926phs7Rq8ULXleBMk4go5K05BU0mI8BfCkWcYAvcmVaMc13bv5W3LIUlU6Y9w==", 729 | "dev": true, 730 | "optional": true 731 | }, 732 | "@sveltejs/vite-plugin-svelte": { 733 | "version": "1.4.0", 734 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.4.0.tgz", 735 | "integrity": "sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==", 736 | "dev": true, 737 | "requires": { 738 | "debug": "^4.3.4", 739 | "deepmerge": "^4.2.2", 740 | "kleur": "^4.1.5", 741 | "magic-string": "^0.26.7", 742 | "svelte-hmr": "^0.15.1", 743 | "vitefu": "^0.2.2" 744 | } 745 | }, 746 | "debug": { 747 | "version": "4.3.4", 748 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 749 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 750 | "dev": true, 751 | "requires": { 752 | "ms": "2.1.2" 753 | } 754 | }, 755 | "deepmerge": { 756 | "version": "4.2.2", 757 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 758 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 759 | "dev": true 760 | }, 761 | "esbuild": { 762 | "version": "0.15.17", 763 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.17.tgz", 764 | "integrity": "sha512-8MbkDX+kh0kaeYGd6klMbn1uTOXHoDw7UYMd1dQYA5cqBZivf5+pzfaXZSL1RNamJfXW/uWC5+9wX5ejDgpSqg==", 765 | "dev": true, 766 | "requires": { 767 | "@esbuild/android-arm": "0.15.17", 768 | "@esbuild/linux-loong64": "0.15.17", 769 | "esbuild-android-64": "0.15.17", 770 | "esbuild-android-arm64": "0.15.17", 771 | "esbuild-darwin-64": "0.15.17", 772 | "esbuild-darwin-arm64": "0.15.17", 773 | "esbuild-freebsd-64": "0.15.17", 774 | "esbuild-freebsd-arm64": "0.15.17", 775 | "esbuild-linux-32": "0.15.17", 776 | "esbuild-linux-64": "0.15.17", 777 | "esbuild-linux-arm": "0.15.17", 778 | "esbuild-linux-arm64": "0.15.17", 779 | "esbuild-linux-mips64le": "0.15.17", 780 | "esbuild-linux-ppc64le": "0.15.17", 781 | "esbuild-linux-riscv64": "0.15.17", 782 | "esbuild-linux-s390x": "0.15.17", 783 | "esbuild-netbsd-64": "0.15.17", 784 | "esbuild-openbsd-64": "0.15.17", 785 | "esbuild-sunos-64": "0.15.17", 786 | "esbuild-windows-32": "0.15.17", 787 | "esbuild-windows-64": "0.15.17", 788 | "esbuild-windows-arm64": "0.15.17" 789 | } 790 | }, 791 | "esbuild-android-64": { 792 | "version": "0.15.17", 793 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.17.tgz", 794 | "integrity": "sha512-sUs6cKMAuAyWnJ/66ezWVr9SMRGFSwoMagxzdhXYggSA12zF7krXSuc1Y9JwxHq56wtv/gFAVo97TFm7RBc1Ig==", 795 | "dev": true, 796 | "optional": true 797 | }, 798 | "esbuild-android-arm64": { 799 | "version": "0.15.17", 800 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.17.tgz", 801 | "integrity": "sha512-RLZuCgIx1rexwxwsXTEW40ZiZzdBI1MBphwDRFyms/iiJGwLxqCH7v75iSJk5s6AF6oa80KC6r/RmzyaX/uJNg==", 802 | "dev": true, 803 | "optional": true 804 | }, 805 | "esbuild-darwin-64": { 806 | "version": "0.15.17", 807 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.17.tgz", 808 | "integrity": "sha512-+6RTCZ0hfAb+RqTNq1uVsBcP441yZOSi6CyV9BIBryGGVg8RM3Bc6L45e5b68jdRloddN92ekS50e4ElI+cHQA==", 809 | "dev": true, 810 | "optional": true 811 | }, 812 | "esbuild-darwin-arm64": { 813 | "version": "0.15.17", 814 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.17.tgz", 815 | "integrity": "sha512-ne4UWUHEKWLgYSE5SLr0/TBcID3k9LPnrzzRXzFLTfD+ygjnW1pMEgdMfmOKIe8jYBUYv8x/YoksriTdQb9r/Q==", 816 | "dev": true, 817 | "optional": true 818 | }, 819 | "esbuild-freebsd-64": { 820 | "version": "0.15.17", 821 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.17.tgz", 822 | "integrity": "sha512-6my3DrwLOe1zhR8UzVRKeo9AFM9XkApJBcx0IE+qKaEbKKBxYAiDBtd2ZMtRA2agqIwRP0kuHofTiDEzpfA+ZA==", 823 | "dev": true, 824 | "optional": true 825 | }, 826 | "esbuild-freebsd-arm64": { 827 | "version": "0.15.17", 828 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.17.tgz", 829 | "integrity": "sha512-LQL7+f+bz+xmAu1FcDBB304Wm2CjONUcOeF4f3TqG7wYXMxjjYQZBFv+0OVapNXyYrM2vy9JMDbps+SheuOnHg==", 830 | "dev": true, 831 | "optional": true 832 | }, 833 | "esbuild-linux-32": { 834 | "version": "0.15.17", 835 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.17.tgz", 836 | "integrity": "sha512-7E9vZXMZhINQ4/KcxBxioJ2ao5gbXJ6Pa4/LEUd102g3gadSalpg0LrityFgw7ao6qmjcNWwdEYrXaDnOzyyYA==", 837 | "dev": true, 838 | "optional": true 839 | }, 840 | "esbuild-linux-64": { 841 | "version": "0.15.17", 842 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.17.tgz", 843 | "integrity": "sha512-TnedHtFQSUVlc0J0D4ZMMalYaQ0Zbt7HSwGy4sav7BlXVqDVc/rchJ/a9dathK51apzLgRyXQMseLf6bkloaSQ==", 844 | "dev": true, 845 | "optional": true 846 | }, 847 | "esbuild-linux-arm": { 848 | "version": "0.15.17", 849 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.17.tgz", 850 | "integrity": "sha512-+ugCmBTTDIlh+UuC7E/GvyJqjGTX2pNOA+g3isG78aYcfgswrHjvstTtIfljaU95AS30qrVNLgI5h/8TsRWTrg==", 851 | "dev": true, 852 | "optional": true 853 | }, 854 | "esbuild-linux-arm64": { 855 | "version": "0.15.17", 856 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.17.tgz", 857 | "integrity": "sha512-oupYfh0lTHg+F/2ZoTNrioB+KLd6x0Zlhjz2Oa1jhl8wCGkNvwe25RytR2/SGPYpoNVcvCeoayWQRwwRuWGgfQ==", 858 | "dev": true, 859 | "optional": true 860 | }, 861 | "esbuild-linux-mips64le": { 862 | "version": "0.15.17", 863 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.17.tgz", 864 | "integrity": "sha512-aUVyHwUXJF1hi9jsAT+At+cBxZh2yGICi/e757N6d/zzOD+eVK3PKQj68tAvIflx6/ZpnuCTKol1GpgGYrzERg==", 865 | "dev": true, 866 | "optional": true 867 | }, 868 | "esbuild-linux-ppc64le": { 869 | "version": "0.15.17", 870 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.17.tgz", 871 | "integrity": "sha512-i7789iFTLfLccHPNADCbaZPx9CuQblsBqv2j4XqIBN1jKIJbpQ8iqCkWoHep4PLqqKLtBLtTWh919GsrFGdeJA==", 872 | "dev": true, 873 | "optional": true 874 | }, 875 | "esbuild-linux-riscv64": { 876 | "version": "0.15.17", 877 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.17.tgz", 878 | "integrity": "sha512-fEQ/8tnZ2sDniBlPfTXEdg+0OP1olps96HvYdwl8ywJdAlD7AK761EL3lRbRdfMHNOId2N6+CVca43/Fiu/0AQ==", 879 | "dev": true, 880 | "optional": true 881 | }, 882 | "esbuild-linux-s390x": { 883 | "version": "0.15.17", 884 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.17.tgz", 885 | "integrity": "sha512-ZBQekST4gYgTKHAvUJtR1kFFulHTDlRZSE8T0wRQCmQqydNkC1teWxlR31xS6MZevjZGfa7OMVJD24bBhei/2Q==", 886 | "dev": true, 887 | "optional": true 888 | }, 889 | "esbuild-netbsd-64": { 890 | "version": "0.15.17", 891 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.17.tgz", 892 | "integrity": "sha512-onNBFaZVN9GzGJMm3aZJJv74n/Q8FjW20G9OfSDhHjvamqJ5vbd42hNk6igQX4lgBCHTZvvBlWDJAMy+tbJAAw==", 893 | "dev": true, 894 | "optional": true 895 | }, 896 | "esbuild-openbsd-64": { 897 | "version": "0.15.17", 898 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.17.tgz", 899 | "integrity": "sha512-QFxHmvjaRrmTCvH/A3EmzqKUSZHRQ7/pbrJeATsb/Q6qckCeL9e7zg/1A3HiZqDXeBUV3yNeBeV1GJBjY6yVyA==", 900 | "dev": true, 901 | "optional": true 902 | }, 903 | "esbuild-sunos-64": { 904 | "version": "0.15.17", 905 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.17.tgz", 906 | "integrity": "sha512-7dHZA8Kc6U8rBTKojJatXtzHTUKJ3CRYimvOGIQQ1yUDOqGx/zZkCH/HkEi3Zg5SWyDj/57E5e1YJPo4ySSw/w==", 907 | "dev": true, 908 | "optional": true 909 | }, 910 | "esbuild-windows-32": { 911 | "version": "0.15.17", 912 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.17.tgz", 913 | "integrity": "sha512-yDrNrwQ/0k4N3OZItZ6k6YnBUch8+of06YRYc3hFI8VDm7X1rkNZwhttZNAzF6+TtbnK4cIz7H2/EwdSoaGZ3g==", 914 | "dev": true, 915 | "optional": true 916 | }, 917 | "esbuild-windows-64": { 918 | "version": "0.15.17", 919 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.17.tgz", 920 | "integrity": "sha512-jPnXvB4zMMToNPpCBdt+OEQiYFVs9wlQ5G8vMoJkrYJBp1aEt070MRpBFa6pfBFrgXquqgUiNAohMcTdy+JVFg==", 921 | "dev": true, 922 | "optional": true 923 | }, 924 | "esbuild-windows-arm64": { 925 | "version": "0.15.17", 926 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.17.tgz", 927 | "integrity": "sha512-I5QeSsz0X66V8rxVhmw03Wzn8Tz63H3L9GrsA7C5wvBXMk3qahLWuEL+l7SZ2DleKkFeZZMu1dPxOak9f1TZ4A==", 928 | "dev": true, 929 | "optional": true 930 | }, 931 | "fsevents": { 932 | "version": "2.3.2", 933 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 934 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 935 | "dev": true, 936 | "optional": true 937 | }, 938 | "function-bind": { 939 | "version": "1.1.1", 940 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 941 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 942 | "dev": true 943 | }, 944 | "has": { 945 | "version": "1.0.3", 946 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 947 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 948 | "dev": true, 949 | "requires": { 950 | "function-bind": "^1.1.1" 951 | } 952 | }, 953 | "is-core-module": { 954 | "version": "2.11.0", 955 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 956 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 957 | "dev": true, 958 | "requires": { 959 | "has": "^1.0.3" 960 | } 961 | }, 962 | "kleur": { 963 | "version": "4.1.5", 964 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 965 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 966 | "dev": true 967 | }, 968 | "magic-string": { 969 | "version": "0.26.7", 970 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", 971 | "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", 972 | "dev": true, 973 | "requires": { 974 | "sourcemap-codec": "^1.4.8" 975 | } 976 | }, 977 | "ms": { 978 | "version": "2.1.2", 979 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 980 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 981 | "dev": true 982 | }, 983 | "nanoid": { 984 | "version": "3.3.4", 985 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 986 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 987 | "dev": true 988 | }, 989 | "path-parse": { 990 | "version": "1.0.7", 991 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 992 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 993 | "dev": true 994 | }, 995 | "picocolors": { 996 | "version": "1.0.0", 997 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 998 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 999 | "dev": true 1000 | }, 1001 | "postcss": { 1002 | "version": "8.4.19", 1003 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", 1004 | "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", 1005 | "dev": true, 1006 | "requires": { 1007 | "nanoid": "^3.3.4", 1008 | "picocolors": "^1.0.0", 1009 | "source-map-js": "^1.0.2" 1010 | } 1011 | }, 1012 | "resolve": { 1013 | "version": "1.22.1", 1014 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1015 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1016 | "dev": true, 1017 | "requires": { 1018 | "is-core-module": "^2.9.0", 1019 | "path-parse": "^1.0.7", 1020 | "supports-preserve-symlinks-flag": "^1.0.0" 1021 | } 1022 | }, 1023 | "rollup": { 1024 | "version": "2.79.1", 1025 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 1026 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 1027 | "dev": true, 1028 | "requires": { 1029 | "fsevents": "~2.3.2" 1030 | } 1031 | }, 1032 | "source-map-js": { 1033 | "version": "1.0.2", 1034 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1035 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1036 | "dev": true 1037 | }, 1038 | "sourcemap-codec": { 1039 | "version": "1.4.8", 1040 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1041 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1042 | "dev": true 1043 | }, 1044 | "supports-preserve-symlinks-flag": { 1045 | "version": "1.0.0", 1046 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1047 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1048 | "dev": true 1049 | }, 1050 | "svelte": { 1051 | "version": "3.53.1", 1052 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz", 1053 | "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==", 1054 | "dev": true, 1055 | "peer": true 1056 | }, 1057 | "svelte-hmr": { 1058 | "version": "0.15.1", 1059 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", 1060 | "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", 1061 | "dev": true, 1062 | "requires": {} 1063 | }, 1064 | "vite": { 1065 | "version": "3.2.4", 1066 | "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", 1067 | "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", 1068 | "dev": true, 1069 | "requires": { 1070 | "esbuild": "^0.15.9", 1071 | "fsevents": "~2.3.2", 1072 | "postcss": "^8.4.18", 1073 | "resolve": "^1.22.1", 1074 | "rollup": "^2.79.1" 1075 | } 1076 | }, 1077 | "vitefu": { 1078 | "version": "0.2.2", 1079 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.2.tgz", 1080 | "integrity": "sha512-8CKEIWPm4B4DUDN+h+hVJa9pyNi7rzc5MYmbxhs1wcMakueGFNWB5/DL30USm9qU3xUPnL4/rrLEAwwFiD1tag==", 1081 | "dev": true, 1082 | "requires": {} 1083 | } 1084 | } 1085 | } 1086 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "html", 3 | "version": "1.0.0", 4 | "description": "- `templates/` folder was copied over to child theme because of current bug https://github.com/WordPress/gutenberg/issues/44243", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/mandrasch/ddev-wp-acf-blocks-svelte.git" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/mandrasch/ddev-wp-acf-blocks-svelte/issues" 20 | }, 21 | "homepage": "https://github.com/mandrasch/ddev-wp-acf-blocks-svelte#readme", 22 | "devDependencies": { 23 | "@sveltejs/vite-plugin-svelte": "^1.4.0", 24 | "vite": "^3.2.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | // https://stackblitz.com/edit/vitejs-vite-vtb3nk?file=vite.config.js&terminal=dev 2 | 3 | // inspired by 4 | // https://github.com/fgeierst/typo3-vite-demo/blob/master/packages/typo3_vite_demo/Resources/Private/JavaScript/vite.config.js 5 | 6 | import { defineConfig } from 'vite' 7 | import { svelte } from '@sveltejs/vite-plugin-svelte' 8 | 9 | // https://vitejs.dev/config/ 10 | export default defineConfig({ 11 | plugins: [svelte()], 12 | // root: path.resolve(__dirname, 'src/js'), 13 | server: { 14 | host: "0.0.0.0", // leave this unchanged for DDEV! 15 | port: 5173, 16 | origin: 'https://ddev-wp-acf-blocks-svelte.ddev.site' 17 | }, 18 | publicDir: false, // disable copy `public/` to outDir 19 | build: { 20 | // generate manifest.json in outDir 21 | manifest: true, 22 | rollupOptions: { 23 | 24 | input: 'wp-content/themes/raft-child/main.js' 25 | 26 | 27 | /* Single files approach 28 | input: { 29 | 'svelte-demo-block': 'wp-content/themes/raft-child/blocks/svelte-demo-block/main.js', 30 | 'svelte-demo-block': 'wp-content/themes/raft-child/blocks/svelte-demo-block/main.js', 31 | },*/ 32 | // It is also possible to split it into multiple js files, see: https://rollupjs.org/guide/en/#input 33 | // But then we need to be careful with dev includes path () and path for production builds: src="/wp-content/themes/raft-child/dist/entry-svelte-demo-block.js" 34 | /* output: { 35 | entryFileNames: 'entry-[name].js' 36 | }*/ 37 | }, 38 | outDir: 'wp-content/themes/raft-child/dist', 39 | } 40 | 41 | }) 42 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/acf-json/group_638fa97b00877.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "group_638fa97b00877", 3 | "title": "Svelte Demo Block", 4 | "fields": [ 5 | { 6 | "key": "field_638fa97b63a02", 7 | "label": "Title", 8 | "name": "title", 9 | "aria-label": "", 10 | "type": "text", 11 | "instructions": "", 12 | "required": 0, 13 | "conditional_logic": 0, 14 | "wrapper": { 15 | "width": "", 16 | "class": "", 17 | "id": "" 18 | }, 19 | "default_value": "", 20 | "maxlength": "", 21 | "placeholder": "", 22 | "prepend": "", 23 | "append": "" 24 | } 25 | ], 26 | "location": [ 27 | [ 28 | { 29 | "param": "block", 30 | "operator": "==", 31 | "value": "acf\/svelte-demo-block" 32 | } 33 | ] 34 | ], 35 | "menu_order": 0, 36 | "position": "normal", 37 | "style": "default", 38 | "label_placement": "top", 39 | "instruction_placement": "label", 40 | "hide_on_screen": "", 41 | "active": true, 42 | "description": "", 43 | "show_in_rest": 0, 44 | "modified": 1670359897 45 | } -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-one/Test.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |
9 |

Title (set as prop): {title}

10 |

11 | Svelte Demo Block 🎉 12 |

13 | 14 | 18 | 19 |

Hello {name}!

20 |
21 | 22 | 29 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-one/block.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "acf/svelte-demo-block", 3 | "title": "Svelte Demo Block One", 4 | "description": "A custom svelte-demo-block block.", 5 | "style": [ "file:./svelte-demo-block.css" ], 6 | "category": "formatting", 7 | "icon": "heart", 8 | "keywords": ["svelte-demo-block"], 9 | "acf": { 10 | "mode": "preview", 11 | "renderTemplate": "template.php" 12 | }, 13 | "align": "full" 14 | } -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-one/main.js: -------------------------------------------------------------------------------- 1 | import Test from './Test.svelte'; 2 | 3 | let blockEls = document.querySelectorAll('.svelte-demo-block-container'); 4 | 5 | blockEls.forEach(function(blockEl){ 6 | 7 | const blockId = blockEl.getAttribute('data-block-id'); 8 | 9 | // Inject svelte component with props 10 | // thx to https://jimmyutterstrom.com/blog/2019/06/21/svelte-3-components-in-legacy-apps/ 11 | const test = new Test({ 12 | target: blockEl, 13 | props: svelteDemoBlockData[blockId] 14 | }); 15 | }); -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-one/template.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 |

Rendering is currently only possible on frontend, not in Gutenberg editor mode.

9 | 10 | 11 | 12 |
13 |
14 | 15 | 25 | 26 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-two/TestTwo.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |

6 | Svelte Demo Block Two 🎉 7 |

8 | 9 | 13 | 14 |

Hello {name}!

15 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-two/block.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "acf/svelte-demo-block-two", 3 | "title": "Svelte Demo Block Two", 4 | "description": "A custom svelte-demo-block-two block.", 5 | "style": [ "file:./svelte-demo-block-two.css" ], 6 | "category": "formatting", 7 | "icon": "superhero", 8 | "keywords": ["svelte-demo-block-two"], 9 | "acf": { 10 | "mode": "preview", 11 | "renderTemplate": "template.php" 12 | }, 13 | "align": "full" 14 | } -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-two/main.js: -------------------------------------------------------------------------------- 1 | import TestTwo from './TestTwo.svelte'; 2 | 3 | let blockEls = document.querySelectorAll('.svelte-demo-block-two'); 4 | 5 | blockEls.forEach(function(blockEl){ 6 | const test = new Test({ 7 | target: blockEl 8 | }); 9 | }); -------------------------------------------------------------------------------- /wp-content/themes/raft-child/blocks/svelte-demo-block-two/template.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | Rendering is currently only possible on frontend, not in Gutenberg editor mode. 5 | 6 | 7 |
-------------------------------------------------------------------------------- /wp-content/themes/raft-child/functions.php: -------------------------------------------------------------------------------- 1 | {'wp-content/themes/raft-child/main.js'}->{'file'}; 10 | $mainCssFileName = $manifestJson->{'wp-content/themes/raft-child/main.css'}->{'file'}; 11 | // add compiled js to footer 12 | wp_enqueue_script('child-main-js', get_stylesheet_directory_uri() . "/dist/" . $mainJsFileName, array(), false, true); 13 | // add css to head 14 | wp_enqueue_style('child-main-css', get_stylesheet_directory_uri() . "/dist/" . $mainCssFileName, array('parent-style', 'child-theme-css')); 15 | } 16 | } 17 | add_action('wp_enqueue_scripts', 'enqueue_child_theme_styles'); 18 | 19 | add_action('init', 'register_acf_blocks'); 20 | function register_acf_blocks() 21 | { 22 | register_block_type(__DIR__ . '/blocks/svelte-demo-block-one'); 23 | register_block_type(__DIR__ . '/blocks/svelte-demo-block-two'); 24 | } 25 | 26 | // add vite support to frontend AND gutenberg editor 27 | // https://vitejs.dev/guide/backend-integration.html 28 | // https://wpdevelopment.courses/articles/how-to-add-javascript-to-wordpress/ 29 | // https://developer.wordpress.org/reference/hooks/enqueue_block_assets/ 30 | 31 | // TODO: is footer the correct way? 32 | add_action('wp_footer', 'add_vite_dev_scripts'); // frontend 33 | // add_action('admin_head', 'add_vite_scripts'); // backend 34 | function add_vite_dev_scripts() 35 | { 36 | // Production mode, quick & dirty check, use in wp-confing.php either 37 | // define('WP_ENV', 'production') OR define('WP_ENV', 'development') 38 | if (!defined('WP_ENV') || defined('WP_ENV') && WP_ENV === 'development') { ?> 39 | 40 | 41 | 42 | 43 | '; 66 | return $tag; 67 | } 68 | */ 69 | 70 | 71 | // TODO: for production we should read from manifest.json, see: https://vitejs.dev/guide/backend-integration.html 72 | // TODO: is it easier to use just one file instead of splitted entries? 73 | // 74 | // 75 | // -------------------------------------------------------------------------------- /wp-content/themes/raft-child/main.js: -------------------------------------------------------------------------------- 1 | import './blocks/svelte-demo-block-one/main.js' 2 | import './blocks/svelte-demo-block-two/main.js' 3 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: Raft Child 3 | Description: Child theme 4 | Author: Example Author 5 | Author URI: https://example.com 6 | Template: raft 7 | Version: 1.0 8 | Text Domain: raft-child 9 | */ -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
6 | 7 | 8 |

404

9 | 10 | 11 | 12 |

Unfortunately the page was not found.

13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/archive.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
6 | 7 | 8 |
9 | 10 |
11 | 12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 | 20 |
21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 |
33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 | 47 | 48 | 49 | 50 | 51 |
52 | 53 | 54 | 55 | 56 |

Unfortunately no posts were found

57 | 58 | 59 | 60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/front-page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
6 | 7 |

Our awesome blog

8 | 9 |
10 | 11 | 12 | 13 |
14 | 15 |
16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 | 43 | 44 | 45 | 46 |

Unfortunately no posts were found

47 | 48 | 49 |
50 | 51 |
52 | 53 | 54 | 55 |
56 | 57 | 58 |

Power-up your Gutenberg layouts with Otter

59 | 60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 |
70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
6 | 7 | 8 |
9 | 10 |

Search results

11 | 12 | 13 | 14 | 15 |
16 | 17 |
18 | 19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | 27 |
28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
55 | 56 | 57 | 58 | 59 |

Unfortunately no posts were 60 | found

61 | 62 | 63 |
64 | 65 |
66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/single.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 |
18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 |
36 | 37 |
38 | 39 |
40 | 41 | 42 | 43 |
44 | 45 | 46 | 47 |
48 | 49 | 50 |
51 | 52 | 53 | 54 | 55 |
56 | 57 |
58 | 59 | 60 | 61 | 62 | 63 |
64 | 65 | 66 | 67 | 68 | 69 |
70 | 71 | 72 | 73 | 74 |
75 | 76 | 77 |
78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /wp-content/themes/raft-child/templates/template-blank.html: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------