From f2d6c080d47ce9f25c18eaa44f447d4fff887b61 Mon Sep 17 00:00:00 2001 From: Maciej Caderek Date: Mon, 7 Feb 2022 18:49:17 +0100 Subject: [PATCH] WIP --- index.html | 10 +- package-lock.json | 1472 +++++++++++++++++++++++++++- package.json | 6 +- src/{main.ts => main.tsx} | 42 +- src/pattern-light.png~ | Bin 26708 -> 0 bytes src/state.ts | 40 + src/test-data/pgns.ts | 22 - src/types.ts | 1 + src/ui/App.tsx | 29 + src/ui/Controls.ts | 38 - src/ui/Moves.ts | 36 - src/{style.css => ui/app.css} | 41 +- src/ui/components/Controls.tsx | 35 + src/ui/components/Load.tsx | 26 + src/ui/components/Moves.tsx | 37 + src/ui/components/load.css | 26 + src/{ => ui/img}/pattern-light.png | Bin src/{ => ui/img}/pattern.png | Bin tsconfig.json | 5 +- vite.config.ts | 10 + 20 files changed, 1749 insertions(+), 127 deletions(-) rename src/{main.ts => main.tsx} (83%) delete mode 100644 src/pattern-light.png~ create mode 100644 src/state.ts create mode 100644 src/ui/App.tsx delete mode 100644 src/ui/Controls.ts delete mode 100644 src/ui/Moves.ts rename src/{style.css => ui/app.css} (64%) create mode 100644 src/ui/components/Controls.tsx create mode 100644 src/ui/components/Load.tsx create mode 100644 src/ui/components/Moves.tsx create mode 100644 src/ui/components/load.css rename src/{ => ui/img}/pattern-light.png (100%) rename src/{ => ui/img}/pattern.png (100%) create mode 100644 vite.config.ts diff --git a/index.html b/index.html index d5365ae..d5b2d22 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,15 @@ Vite App - -
+ +
+ + + diff --git a/package-lock.json b/package-lock.json index 33abd18..82d457f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,20 @@ "@types/node": "^17.0.8", "@types/webfontloader": "^1.6.34", "typescript": "^4.4.4", - "vite": "^2.7.2" + "vite": "^2.7.2", + "vite-plugin-solid": "^2.2.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@arrows/array": { @@ -43,6 +56,471 @@ "resolved": "https://registry.npmjs.org/@arrows/composition/-/composition-1.2.2.tgz", "integrity": "sha512-9fh1yHwrx32lundiB3SlZ/VwuStPB4QakPsSLrGJFH6rCXvdrd060ivAZ7/2vlqPnEjBkPRRXOcG1YOu19p2GQ==" }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", + "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@types/chess.js": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/@types/chess.js/-/chess.js-0.11.2.tgz", @@ -77,11 +555,118 @@ "integrity": "sha512-yNIPDl3P1yK/ag9C8CdleEhWrtU1myGr3cxb0yEBN/tkCYoGP5PbQa53mQCXcOLFAvBFzJJQfuEahOZ0ARakqw==", "dev": true }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.31.12", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.31.12.tgz", + "integrity": "sha512-XQCCy4RZtlqUvkB5zxgYG0TEazc30LN4LLEN//gO9tb7fDSoKCnU3SFsDafZ6yk82QaM95ml/GYxqCzc7qpIxA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "7.16.0", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0", + "html-entities": "2.3.2" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.3.5.tgz", + "integrity": "sha512-0BM3SKlDeDGiKPGpkQH0WrhZoO/ssT8zzw9sKovhWVPDJUyLoSI32IEcIw05AyBWyPYZC2VOQ1yXJKBXhRBq0A==", + "dev": true, + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.31.12" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chess.js": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/chess.js/-/chess.js-0.12.0.tgz", "integrity": "sha512-eF1xf4j88r/AwIRxqV1FXZbVgMt4yUx05xrL+ZMqUrY+snFrUxGVHs0VgEd3AvngujDE9th7XZqqCwEKEQ7mWQ==" }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -90,6 +675,38 @@ "node": ">=4.0.0" } }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", + "dev": true + }, "node_modules/esbuild": { "version": "0.13.15", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", @@ -340,6 +957,24 @@ "win32" ] }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -360,11 +995,29 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/gif.js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/gif.js/-/gif.js-0.2.0.tgz", "integrity": "sha1-YV5uN4iFDNOiDIX+nwlTnnhJA+g=" }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/h264-mp4-encoder": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/h264-mp4-encoder/-/h264-mp4-encoder-1.0.12.tgz", @@ -390,6 +1043,21 @@ "node": ">= 0.4.0" } }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, "node_modules/i": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", @@ -410,6 +1078,79 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/merge-anything": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.2.tgz", + "integrity": "sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==", + "dev": true, + "dependencies": { + "is-what": "^4.1.6", + "ts-toolbelt": "^9.6.0" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", @@ -422,6 +1163,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "node_modules/npm": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/npm/-/npm-8.4.0.tgz", @@ -2816,6 +3563,50 @@ "fsevents": "~2.3.2" } }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/solid-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.3.5.tgz", + "integrity": "sha512-PUom2cCARfvvgxI7cwOhfXMrZZZxjp+vIrb5fzVNBFyICy8A30wTqExwfUv457eJYgKpii2D3qStW9ILtKnShw==", + "dev": true + }, + "node_modules/solid-refresh": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.0.tgz", + "integrity": "sha512-5XCUz845n/sHPzKK2i2G2EeV61tAmzv6SqzqhXcPaYhrgzVy7nKTQaBpKK8InKrriq9Z2JFF/mguIU00t/73xw==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "peerDependencies": { + "solid-js": "^1.3.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", @@ -2825,6 +3616,33 @@ "node": ">=0.10.0" } }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, "node_modules/typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", @@ -2839,9 +3657,9 @@ } }, "node_modules/vite": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.6.tgz", - "integrity": "sha512-PBNoc87rDYLtkpFU9dbVeGdbcyKzz6c34oScqivE3FEa3BhVa4ASupCzcz0eDIiSECovfLcQnLUJt9vhiEU08g==", + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", + "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", "dev": true, "dependencies": { "esbuild": "^0.13.12", @@ -2875,6 +3693,21 @@ } } }, + "node_modules/vite-plugin-solid": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.2.5.tgz", + "integrity": "sha512-SJkXdVnrPnhAWzs8Vi/+9oViUfx6TiQo8y1FFlDiyUdZR4nxTyGmRzz4xx+CC75GJL3hgDWac/zYA6sYq8SQAg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.12", + "@babel/preset-typescript": "^7.16.7", + "babel-preset-solid": "^1.3.0", + "merge-anything": "^5.0.2", + "solid-js": "^1.3.3", + "solid-refresh": "^0.4.0", + "vite": "^2.7.13" + } + }, "node_modules/webfontloader": { "version": "1.6.28", "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", @@ -2887,6 +3720,15 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@arrows/array": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@arrows/array/-/array-1.4.1.tgz", @@ -2900,6 +3742,350 @@ "resolved": "https://registry.npmjs.org/@arrows/composition/-/composition-1.2.2.tgz", "integrity": "sha512-9fh1yHwrx32lundiB3SlZ/VwuStPB4QakPsSLrGJFH6rCXvdrd060ivAZ7/2vlqPnEjBkPRRXOcG1YOu19p2GQ==" }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true + }, + "@babel/core": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.0.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + } + }, + "@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", + "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@types/chess.js": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/@types/chess.js/-/chess.js-0.11.2.tgz", @@ -2934,16 +4120,126 @@ "integrity": "sha512-yNIPDl3P1yK/ag9C8CdleEhWrtU1myGr3cxb0yEBN/tkCYoGP5PbQa53mQCXcOLFAvBFzJJQfuEahOZ0ARakqw==", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-jsx-dom-expressions": { + "version": "0.31.12", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.31.12.tgz", + "integrity": "sha512-XQCCy4RZtlqUvkB5zxgYG0TEazc30LN4LLEN//gO9tb7fDSoKCnU3SFsDafZ6yk82QaM95ml/GYxqCzc7qpIxA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.16.0", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0", + "html-entities": "2.3.2" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + } + } + }, + "babel-preset-solid": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.3.5.tgz", + "integrity": "sha512-0BM3SKlDeDGiKPGpkQH0WrhZoO/ssT8zzw9sKovhWVPDJUyLoSI32IEcIw05AyBWyPYZC2VOQ1yXJKBXhRBq0A==", + "dev": true, + "requires": { + "babel-plugin-jsx-dom-expressions": "^0.31.12" + } + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "chess.js": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/chess.js/-/chess.js-0.12.0.tgz", "integrity": "sha512-eF1xf4j88r/AwIRxqV1FXZbVgMt4yUx05xrL+ZMqUrY+snFrUxGVHs0VgEd3AvngujDE9th7XZqqCwEKEQ7mWQ==" }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==", + "dev": true + }, "esbuild": { "version": "0.13.15", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", @@ -3088,6 +4384,18 @@ "dev": true, "optional": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -3101,11 +4409,23 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "gif.js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/gif.js/-/gif.js-0.2.0.tgz", "integrity": "sha1-YV5uN4iFDNOiDIX+nwlTnnhJA+g=" }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "h264-mp4-encoder": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/h264-mp4-encoder/-/h264-mp4-encoder-1.0.12.tgz", @@ -3125,6 +4445,18 @@ "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, "i": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", @@ -3139,12 +4471,67 @@ "has": "^1.0.3" } }, + "is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "merge-anything": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.2.tgz", + "integrity": "sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==", + "dev": true, + "requires": { + "is-what": "^4.1.6", + "ts-toolbelt": "^9.6.0" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "npm": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/npm/-/npm-8.4.0.tgz", @@ -4768,12 +6155,68 @@ "fsevents": "~2.3.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "solid-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.3.5.tgz", + "integrity": "sha512-PUom2cCARfvvgxI7cwOhfXMrZZZxjp+vIrb5fzVNBFyICy8A30wTqExwfUv457eJYgKpii2D3qStW9ILtKnShw==", + "dev": true + }, + "solid-refresh": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.0.tgz", + "integrity": "sha512-5XCUz845n/sHPzKK2i2G2EeV61tAmzv6SqzqhXcPaYhrgzVy7nKTQaBpKK8InKrriq9Z2JFF/mguIU00t/73xw==", + "dev": true, + "requires": { + "@babel/generator": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "source-map-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", "dev": true }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, "typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", @@ -4781,9 +6224,9 @@ "dev": true }, "vite": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.6.tgz", - "integrity": "sha512-PBNoc87rDYLtkpFU9dbVeGdbcyKzz6c34oScqivE3FEa3BhVa4ASupCzcz0eDIiSECovfLcQnLUJt9vhiEU08g==", + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", + "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", "dev": true, "requires": { "esbuild": "^0.13.12", @@ -4793,6 +6236,21 @@ "rollup": "^2.59.0" } }, + "vite-plugin-solid": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.2.5.tgz", + "integrity": "sha512-SJkXdVnrPnhAWzs8Vi/+9oViUfx6TiQo8y1FFlDiyUdZR4nxTyGmRzz4xx+CC75GJL3hgDWac/zYA6sYq8SQAg==", + "dev": true, + "requires": { + "@babel/core": "^7.16.12", + "@babel/preset-typescript": "^7.16.7", + "babel-preset-solid": "^1.3.0", + "merge-anything": "^5.0.2", + "solid-js": "^1.3.3", + "solid-refresh": "^0.4.0", + "vite": "^2.7.13" + } + }, "webfontloader": { "version": "1.6.28", "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", diff --git a/package.json b/package.json index 2f39ac9..6d7913e 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,9 @@ "name": "chesspic", "version": "0.0.0", "scripts": { + "start": "vite --host", "dev": "vite --host", - "build": "tsc && vite build", + "build": "vite build", "preview": "vite preview" }, "devDependencies": { @@ -12,7 +13,8 @@ "@types/node": "^17.0.8", "@types/webfontloader": "^1.6.34", "typescript": "^4.4.4", - "vite": "^2.7.2" + "vite": "^2.7.2", + "vite-plugin-solid": "^2.2.5" }, "dependencies": { "@arrows/array": "^1.4.1", diff --git a/src/main.ts b/src/main.tsx similarity index 83% rename from src/main.ts rename to src/main.tsx index 7b28fa8..0f78364 100644 --- a/src/main.ts +++ b/src/main.tsx @@ -1,5 +1,4 @@ import { BoardConfig, GameConfig } from "./types"; -import "./style.css"; import Board from "./board/Board"; import Game from "./game/Game"; import styles from "./board/styles-board"; @@ -9,16 +8,19 @@ import createAnimation from "./encoders/createAnimation"; import WebFont from "webfontloader"; import Player from "./player/Player"; import * as Hammer from "hammerjs"; -import Moves from "./ui/Moves"; -import Controls from "./ui/Controls"; +// import Moves from "./ui/Moves"; +// import Controls from "./ui/Controls"; +import { state, setState } from "./state"; + +import { render } from "solid-js/web"; +import App from "./ui/App"; -const $board = document.querySelector("#board"); const $moves = document.querySelector("#moves"); const $controls = document.querySelector("#controls"); const boardConfig: BoardConfig = { size: 1024, - boardStyle: styles.lila, + boardStyle: styles.calm, piecesStyle: "tatiana", showBorder: true, showExtraInfo: true, @@ -57,14 +59,16 @@ const main = async () => { // const pgn = pgns[2]; const board = new Board(boardConfig); - $board?.appendChild(board.canvas); - // const interval = 1000; // play(board, gameConfig, pgn, interval); const player = new Player(board, gameConfig); const game = new Game().loadPGN(pgn); + console.log(game.getMoves()); + + setState({ moves: game.getMoves() }); + const handlers = { prev() { player.pause(); @@ -101,10 +105,26 @@ const main = async () => { togglePlay() { player.playing ? player.pause() : player.play(); }, + goto(ply: number) { + player.pause(); + player.goto(ply); + }, }; - const moves = new Moves($moves as HTMLElement, player).load(game.getMoves()); - const controls = new Controls($controls as HTMLElement, handlers).load(); + /** + * RENDER + **/ + render( + () => , + document.getElementById("root") as HTMLElement + ); + + const $board = document.querySelector("#board"); + console.log({ $board }); + $board?.appendChild(board.canvas); + + // const moves = new Moves($moves as HTMLElement, player).load(game.getMoves()); + // const controls = new Controls($controls as HTMLElement, handlers).load(); await player.load(game); @@ -112,8 +132,8 @@ const main = async () => { window.load = async (pgn: string) => { const game = new Game().loadPGN(pgn); await player.load(game); - moves.load(game.getMoves()); - controls.load(); + // moves.load(game.getMoves()); + // controls.load(); }; document.addEventListener( diff --git a/src/pattern-light.png~ b/src/pattern-light.png~ deleted file mode 100644 index 3e47619a9d18965e8f7e8f9da3fbd0036df33958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26708 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 VoC9MVK@S0fQIu7csgg1a{a?22@s9ui diff --git a/src/state.ts b/src/state.ts new file mode 100644 index 0000000..fc7591a --- /dev/null +++ b/src/state.ts @@ -0,0 +1,40 @@ +import { createStore } from "solid-js/store"; + +import { BoardConfig, GameConfig } from "./types"; +import styles from "./board/styles-board"; + +const boardConfig: BoardConfig = { + size: 1024, + boardStyle: styles.calm, + piecesStyle: "tatiana", + showBorder: true, + showExtraInfo: true, + showMaterial: true, + showMoveIndicator: true, + showChecks: true, + showCoords: true, + flipped: false, +}; + +const gameConfig: GameConfig = { + titleScreen: true, + fromPly: null, + toPly: null, + loop: true, +}; + +export type State = { + board: BoardConfig; + game: GameConfig; + moves: string[]; +}; + +const initialState: State = { + board: boardConfig, + game: gameConfig, + moves: [], +}; + +const [state, setState] = createStore(initialState); + +export { state, setState }; diff --git a/src/test-data/pgns.ts b/src/test-data/pgns.ts index 4b3c916..74e31e4 100644 --- a/src/test-data/pgns.ts +++ b/src/test-data/pgns.ts @@ -21,28 +21,6 @@ const pgns = [ Qc4 31. Qxf6 Kxa3 32. Qxa6+ Kxb4 33. c3+ Kxc3 34. Qa1+ Kd2 35. Qb2+ Kd1 36. Bf1 Rd2 37. Rd7 Rxd7 38. Bxc4 bxc4 39. Qxh8 Rd3 40. Qa8 c3 41. Qa4+ Ke1 42. f4 f5 43. Kc1 Rd2 44. Qa7 1-0`, - - `[Black "caderek"] -[BlackElo "1325"] -[Date "2022.01.28"] -[Event "Rated Bullet game"] -[Result "0-1"] -[Site "https://lichess.org/tfEplTYl"] -[White "PHOS747"] -[WhiteElo "1335"] - -1. e4 c5 2. Bc4 Nc6 3. Qf3 Ne5 4. Qc3 Nxc4 5. Qxc4 b6 6. Nh3 e6 7. Ng5 Qxg5 8. d4 Qxc1+ 9. Ke2 Qxh1 10. f4 Qxg2+ 11. Ke3 Qxh2 12. Nd2 Qh3+ 13. Nf3 Nf6 14. e5 Ng4+ 15. Ke4 Bb7+ 16. Kd3 Qxf3+ 17. Kd2 Qe3+ 18. Kd1 Nf2# 0-1`, - - `[Black "Grandelius, Nils"] -[BlackElo "2617"] -[Date "2021.11.16"] -[Event "Casual Blitz game"] -[Result "0-1"] -[Site "https://youtu.be/QApxkK-cRxo"] -[White "Cramling Bellon, Anna"] -[WhiteElo "1905"] - -1. d4 Nf6 2. c4 c5 3. d5 b5 4. cxb5 a6 5. Nc3 axb5 6. e4 b4 7. Nb5 d6 8. Bc4 g6 9. e5 Ng4 10. e6 Ne5 11. exf7+ Nxf7 12. Nf3 Bg7 13. O-O O-O 14. Re1 Bg4 15. h3 Bxf3 16. Qxf3 Ne5 17. Qb3 Nbd7 18. Bg5 Nb6 19. Bf1 Rf5 20. Bh4 Qf8 21. a4 bxa3 22. Rxa3 Rxa3 23. Qxa3 Rf3 24. Bxe7 Qxe7 25. gxf3 Qg5+ 26. Kh1 Qh4 27. Qa7 Qxf2 28. Qb8+ Bf8 29. Ra1 Nxf3 30. Bg2 Ne1 31. Rxe1 Qxe1+ 32. Kh2 Qe5+ 33. Kg1 Nc4 34. Nc7 Qxb2 35. Qe8 Qf6 36. Ne6 Ne5 37. Qb8 c4 38. Qb4 Qf2+ 39. Kh2 Nf3+ 40. Kh1 Qg1#`, ]; export default pgns; diff --git a/src/types.ts b/src/types.ts index 77fa3a7..982232f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -173,4 +173,5 @@ export type Handlers = { toggleExtraInfo(): void; flip(): void; togglePlay(): void; + goto(ply: number): void; }; diff --git a/src/ui/App.tsx b/src/ui/App.tsx new file mode 100644 index 0000000..d1d8c17 --- /dev/null +++ b/src/ui/App.tsx @@ -0,0 +1,29 @@ +import type { Component } from "solid-js"; +import type { DeepReadonly } from "solid-js/store"; +import Moves from "./components/Moves"; +import Controls from "./components/Controls"; +import Load from "./components/Load"; +import { Handlers } from "../types"; +import { State } from "../state"; + +import "./app.css"; + +const App: Component<{ handlers: Handlers; state: DeepReadonly }> = ( + props +) => { + return ( +
+
+
+
+ +
+
+ {/* */} + +
+
+ ); +}; + +export default App; diff --git a/src/ui/Controls.ts b/src/ui/Controls.ts deleted file mode 100644 index b19d18f..0000000 --- a/src/ui/Controls.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Handlers } from "./../types"; -import { html } from "common-tags"; - -class Controls { - constructor(private element: HTMLElement, handlers: Handlers) { - this.element.addEventListener("click", (e) => { - const target = e.target as HTMLElement; - - if (target?.dataset?.type === "control") { - const action = target?.dataset?.action; - console.log(action); - if (action && handlers.hasOwnProperty(action)) { - // @ts-ignore - handlers[action](); - } - } - }); - } - - load() { - const content = html`
- - - - - - - - - `; - - this.element.innerHTML = content; - - return this; - } -} - -export default Controls; diff --git a/src/ui/Moves.ts b/src/ui/Moves.ts deleted file mode 100644 index 761204b..0000000 --- a/src/ui/Moves.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { html } from "common-tags"; -import Player from "../player/Player"; -import chunk_ from "@arrows/array/chunk_"; - -class Moves { - constructor(private element: HTMLElement, private player: Player) { - this.element.addEventListener("click", (e) => { - const target = e.target as HTMLElement; - - if (target?.dataset?.type === "ply") { - const ply = Number(target?.dataset?.ply); - this.player.goto(ply); - } - }); - } - - load(moves: string[]) { - const items = chunk_(2, moves).map( - ([white, black], i) => - html`

- ${i + 1}. ${white} - ${black} -

` - ); - - const content = html`
- ${items.join("\n")} - `; - - this.element.innerHTML = content; - - return this; - } -} - -export default Moves; diff --git a/src/style.css b/src/ui/app.css similarity index 64% rename from src/style.css rename to src/ui/app.css index 6a23346..9bfdba9 100644 --- a/src/style.css +++ b/src/ui/app.css @@ -7,6 +7,11 @@ border: 0; margin: 0; padding: 0; + box-sizing: border-box; +} + +html { + font-size: 10px; } body { @@ -17,12 +22,14 @@ body { .dark { background-color: #191d24; - background-image: url(pattern.png); + background-image: url(src/ui/img/pattern.png); + color: #ddd; } .light { background-color: #cfcfcf; - background-image: url(pattern-light.png); + background-image: url(src/ui/img/pattern-light.png); + color: #222; } .board { @@ -47,29 +54,51 @@ body { } .moves-box { - background: rgba(255, 192, 203, 0.5); + /* background: rgba(255, 192, 203, 0.1); */ height: 85vh; grid-area: moves; } .board-box { - background: rgba(255, 166, 0, 0.5); + /* background: rgba(255, 166, 0, 0.1); */ height: 100vh; grid-area: board; } .setup-box { - background: rgba(135, 207, 235, 0.5); + /* background: rgba(135, 207, 235, 0.1); */ height: 100vh; grid-area: setup; } .controls-box { - background: rgba(0, 255, 0, 0.5); + /* background: rgba(0, 255, 0, 0.1); */ height: 15vh; grid-area: controls; } +.controls__button { + margin: 5px; + padding: 5px; + cursor: pointer; +} + +.moves { + padding: 20px; +} + +.move { + display: inline-block; + width: 50%; + min-width: 150px; + text-align: left; +} + +.ply { + padding-left: 10px; + cursor: pointer; +} + @media screen and (max-width: 1024px) { .layout { grid-template-columns: 1fr; diff --git a/src/ui/components/Controls.tsx b/src/ui/components/Controls.tsx new file mode 100644 index 0000000..abcb0ee --- /dev/null +++ b/src/ui/components/Controls.tsx @@ -0,0 +1,35 @@ +import { Component } from "solid-js"; +import { Handlers } from "../../types"; + +const Controls: Component<{ handlers: Handlers }> = (props) => { + return ( +
+ + + + + + + + +
+ ); +}; + +export default Controls; diff --git a/src/ui/components/Load.tsx b/src/ui/components/Load.tsx new file mode 100644 index 0000000..667658f --- /dev/null +++ b/src/ui/components/Load.tsx @@ -0,0 +1,26 @@ +import { Component, For } from "solid-js"; +import chunk_ from "@arrows/array/chunk_"; +import { Handlers } from "../../types"; +import "./load.css"; + +const Load: Component<{}> = (props) => { + return ( +
+ + + + +
+ ); +}; + +export default Load; diff --git a/src/ui/components/Moves.tsx b/src/ui/components/Moves.tsx new file mode 100644 index 0000000..ca4a54c --- /dev/null +++ b/src/ui/components/Moves.tsx @@ -0,0 +1,37 @@ +import { Component, For } from "solid-js"; +import chunk_ from "@arrows/array/chunk_"; +import { Handlers } from "../../types"; + +const Moves: Component<{ moves: readonly string[]; handlers: Handlers }> = ( + props +) => { + return ( +
+ + {(move, i) => { + const [white, black] = move as [string, string]; + + return ( +

+ {i() + 1}. + props.handlers.goto(i() * 2 + 1)} + > + {white} + + props.handlers.goto(i() * 2 + 2)} + > + {black} + +

+ ); + }} +
+
+ ); +}; + +export default Moves; diff --git a/src/ui/components/load.css b/src/ui/components/load.css new file mode 100644 index 0000000..39401e5 --- /dev/null +++ b/src/ui/components/load.css @@ -0,0 +1,26 @@ +.load { + background: black; + padding: 20px; +} + +.load__fen-input { + width: 100%; + padding: 10px; + font-family: "Fira Mono"; + font-size: 1.4rem; +} + +.load__pgn-input { + width: 100%; + padding: 10px; + font-family: "Fira Mono"; + font-size: 1.4rem; +} + +.load__fen-btn, +.load__pgn-btn { + width: 100%; + padding: 10px; + font-family: "Fira Mono"; + font-size: 1.4rem; +} diff --git a/src/pattern-light.png b/src/ui/img/pattern-light.png similarity index 100% rename from src/pattern-light.png rename to src/ui/img/pattern-light.png diff --git a/src/pattern.png b/src/ui/img/pattern.png similarity index 100% rename from src/pattern.png rename to src/ui/img/pattern.png diff --git a/tsconfig.json b/tsconfig.json index 8ccb856..7c4b9c5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,10 @@ "noEmit": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noImplicitReturns": true + "noImplicitReturns": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"] }, "include": ["./src", "gif.worker.js", "gif.worker.js"] } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..31ca950 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vite"; +import solidPlugin from "vite-plugin-solid"; + +export default defineConfig({ + plugins: [solidPlugin()], + build: { + target: "esnext", + polyfillDynamicImport: false, + }, +});