From ba2c8bf2317ea95e3ee6332ad41d78070c980b7d Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:07:10 +0300 Subject: [PATCH 1/7] #42 up version and update scripts --- package-lock.json | 4 ++-- package.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63e01e5..02ec530 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "2048-game", - "version": "1.3.3", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "2048-game", - "version": "1.3.3", + "version": "2.0.0", "license": "GNU GPL v3", "devDependencies": { "@babel/core": "^7.23.2", diff --git a/package.json b/package.json index 761f6fb..f893001 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "2048-game", - "version": "1.3.3", + "version": "2.0.0", "description": "This is a simple browser implementation of a game 2048.", "keywords": [ "2048-game", @@ -28,9 +28,9 @@ "build": "webpack --mode production", "build:dev": "webpack --mode development", "lint": "eslint src", - "lint:fix": "eslint src --fix", - "format": "npx prettier src --check", - "format:fix": "npx prettier src --write --ignore-unknown", + "lint:fix": "eslint --fix src", + "format": "npx prettier --check src", + "format:fix": "npx prettier --write --ignore-unknown src", "test": "jest tests" }, "devDependencies": { From fb0147711dd8b668cbd71c25787846f1b3466b5d Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:07:33 +0300 Subject: [PATCH 2/7] #42 update gitignore --- .gitignore | 402 +---------------------------------------------------- 1 file changed, 6 insertions(+), 396 deletions(-) diff --git a/.gitignore b/.gitignore index 8a30d25..bf75ec5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,398 +1,8 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore +# Dependency directories +node_modules -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates +# IDE / Editor +.vs -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml +# Build Folder +build From 5f2bc0e1775151f69eefebde16f4852141811ac1 Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:07:40 +0300 Subject: [PATCH 3/7] #42 update webpack config --- webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index e8ac745..c23e3f3 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -14,7 +14,7 @@ module.exports = (env, argv) => { entry: ENTRIES, output: { filename: '[name].[contenthash].js', - path: path.resolve(__dirname, 'docs'), + path: path.resolve(__dirname, 'build'), }, optimization: { splitChunks: { @@ -45,7 +45,7 @@ module.exports = (env, argv) => { patterns: [ { from: path.resolve(__dirname, 'static'), - to: path.resolve(__dirname, 'docs'), + to: path.resolve(__dirname, 'build'), }, ], }), From 4285cc73aa04f44db6e5ede63d99ec5b96ad6891 Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:08:08 +0300 Subject: [PATCH 4/7] #42 update workflows --- .github/workflows/build.yml | 13 +++++++++---- .github/workflows/format.yml | 13 +++++++++---- .github/workflows/lint.yml | 13 +++++++++---- .github/workflows/test.yml | 13 +++++++++---- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f56888b..57950b2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,17 +14,22 @@ jobs: build: strategy: matrix: - node-version: [18] + node-version: [20] os: [ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - - run: npm ci - - run: npm run build + + - name: Install and Build + run: | + npm ci + npm run build diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 1dcc5c6..a620b34 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -14,17 +14,22 @@ jobs: format: strategy: matrix: - node-version: [18] + node-version: [20] os: [ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - - run: npm ci - - run: npm run format + + - name: Install and Format + run: | + npm ci + npm run format diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 09938ae..0eb9221 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,17 +14,22 @@ jobs: lint: strategy: matrix: - node-version: [18] + node-version: [20] os: [ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - - run: npm ci - - run: npm run lint + + - name: Install and Lint + run: | + npm ci + npm run lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3718939..c5c1f14 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,17 +14,22 @@ jobs: test: strategy: matrix: - node-version: [18] + node-version: [20] os: [ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - - run: npm ci - - run: npm run test + + - name: Install and Test + run: | + npm ci + npm run test From eafb4b60a86aeff1f2e05675aaa260c360c99948 Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:08:24 +0300 Subject: [PATCH 5/7] #42 add new workflow for deploy project --- .github/workflows/deploy.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..6a2c32b --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,35 @@ +name: Build and Deploy + +on: + push: + branches: + - master + workflow_dispatch: + +permissions: + contents: write + +jobs: + build-and-deploy: + strategy: + matrix: + node-version: [20] + os: [ubuntu-22.04] + + concurrency: ci-${{ github.ref }} + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install and Build + run: | + npm ci + npm run build + + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: build From 89d2da6eaa5cbbe5177c96db76dee302e507e81d Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:09:26 +0300 Subject: [PATCH 6/7] #42 format static --- static/css/game-2048.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/css/game-2048.css b/static/css/game-2048.css index a688ae6..2a8d0c0 100644 --- a/static/css/game-2048.css +++ b/static/css/game-2048.css @@ -43,7 +43,7 @@ } .cell { - border: 1px solid #FFFFFF; + border: 1px solid #ffffff; } .tile { From fcfb1dbf8cac4a81c37e8adc2087233766ee1ed2 Mon Sep 17 00:00:00 2001 From: Eugene Serb <46799701+eugene-serb@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:10:08 +0300 Subject: [PATCH 7/7] #42 delete docs --- docs/404.md | 88 ---- docs/LICENSE.md | 674 ---------------------------- docs/css/base.css | 141 ------ docs/css/declarations.css | 114 ----- docs/css/footer.css | 19 - docs/css/game-2048.css | 177 -------- docs/css/game.css | 147 ------ docs/css/header-mini.css | 36 -- docs/css/index.css | 10 - docs/css/services.css | 26 -- docs/css/tables.css | 42 -- docs/img/android-chrome-192x192.png | Bin 2953 -> 0 bytes docs/img/android-chrome-512x512.png | Bin 11784 -> 0 bytes docs/img/apple-touch-icon.png | Bin 2866 -> 0 bytes docs/img/favicon-16x16.png | Bin 527 -> 0 bytes docs/img/favicon-32x32.png | Bin 693 -> 0 bytes docs/img/favicon.ico | Bin 15406 -> 0 bytes docs/img/og.png | Bin 26553 -> 0 bytes docs/index.f521f79ab80df92f638c.js | 1 - docs/index.html | 26 -- docs/site.webmanifest | 19 - 21 files changed, 1520 deletions(-) delete mode 100644 docs/404.md delete mode 100644 docs/LICENSE.md delete mode 100644 docs/css/base.css delete mode 100644 docs/css/declarations.css delete mode 100644 docs/css/footer.css delete mode 100644 docs/css/game-2048.css delete mode 100644 docs/css/game.css delete mode 100644 docs/css/header-mini.css delete mode 100644 docs/css/index.css delete mode 100644 docs/css/services.css delete mode 100644 docs/css/tables.css delete mode 100644 docs/img/android-chrome-192x192.png delete mode 100644 docs/img/android-chrome-512x512.png delete mode 100644 docs/img/apple-touch-icon.png delete mode 100644 docs/img/favicon-16x16.png delete mode 100644 docs/img/favicon-32x32.png delete mode 100644 docs/img/favicon.ico delete mode 100644 docs/img/og.png delete mode 100644 docs/index.f521f79ab80df92f638c.js delete mode 100644 docs/index.html delete mode 100644 docs/site.webmanifest diff --git a/docs/404.md b/docs/404.md deleted file mode 100644 index f185395..0000000 --- a/docs/404.md +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/LICENSE.md b/docs/LICENSE.md deleted file mode 100644 index f288702..0000000 --- a/docs/LICENSE.md +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/docs/css/base.css b/docs/css/base.css deleted file mode 100644 index 7871bf7..0000000 --- a/docs/css/base.css +++ /dev/null @@ -1,141 +0,0 @@ -@charset 'UTF-8'; - -*, -::after, -::before { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - font-family: 'Press Start 2P', cursive; - direction: ltr; - font-size: 10px; - line-height: 1.382em; -} - -body { - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 100vh; - background: var(--color-background); -} - -::selection { - background: var(--color-selection); -} - -:focus { - border-bottom: var(--number-border-size) solid var(--color-selection); -} - -:focus-visible { - outline: var(--number-border-size) solid var(--color-selection); - border-color: transparent; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: var(--color-text-header); - font-weight: 500; - margin-block-start: 0.382em; - margin-block-end: 0.618em; - line-height: 1.382em; -} - -h1 { - font-size: 2em; -} - -h2 { - font-size: 1.5em; -} - -h3 { - font-size: 1.17em; -} - -h4 { - font-size: 1em; -} - -h5 { - font-size: 0.83em; -} - -h6 { - font-size: 0.67em; -} - -big { - font-size: larger; -} - -small { - font-size: smaller; -} - -span, -p, -article, -blockquote { - color: var(--color-text); - font-weight: 300; -} - -ol, -ul { - padding: 16px; -} - -ul { - list-style-type: circle; -} - -a { - background-color: transparent; - border-bottom: var(--number-border-size) solid transparent; - font-weight: 500; - color: var(--color-link); - text-decoration: none; -} - -a:hover { - border-bottom: var(--number-border-size) solid var(--color-link-hover); - color: var(--color-link-hover); - transition: all 0.5s ease; - text-decoration: none; -} - -dl dd:last-child { - margin-bottom: 0; -} - -dt { - margin-bottom: 4px; - font-size: 18px; - font-weight: 500; - font-style: oblique; -} - -dd { - margin-bottom: 16px; - padding-left: 16px; - font-size: 16px; - font-weight: 300; - font-style: normal; -} - -kbd { - padding: 0 0.5ch; - border: 2px solid var(--color-d-monocromatic-d); - border-radius: 2px; - line-height: 24px; - font-size: 14px; -} diff --git a/docs/css/declarations.css b/docs/css/declarations.css deleted file mode 100644 index 8e36827..0000000 --- a/docs/css/declarations.css +++ /dev/null @@ -1,114 +0,0 @@ -@charset 'UTF-8'; - -@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap'); - -:root { - /* Base numbers */ - --number-border-radius: 8px; - --number-border-size: 2px; - /* Components sizes */ - --number-form-border-size: var(--number-border-size); - --number-form-border-radius: var(--number-border-radius); - --number-header-focus-border-size: var(--number-border-size); - --number-content-border-size: var(--number-border-size); - --number-content-border-radius: var(--number-border-radius); -} - -:root { - /* Base colors */ - --color-white: #ffffff; - --color-black: #000000; - /* Palette of five colors */ - --color-a: #087e8b; - --color-b: #ff5a5f; - --color-c: #3c3c3c; - --color-d: #f5f5f5; - --color-e: #c1839f; - /* Palette A -- monochromatic */ - --color-a-monocromatic-a: #0dc4d9; - --color-a-monocromatic-b: #39959f; - --color-a-monocromatic-c: #4ecbd9; - --color-a-monocromatic-d: #055159; - /* Palette B -- monochromatic */ - --color-b-monocromatic-a: #802d2f; - --color-b-monocromatic-b: #ffa6a9; - --color-b-monocromatic-c: #805354; - --color-b-monocromatic-d: #cc474c; - /* Palette C -- monochromatic */ - --color-c-monocromatic-a: #8a8a8a; - --color-c-monocromatic-b: #573d3d; - --color-c-monocromatic-c: #8a6060; - --color-c-monocromatic-d: #d6d6d6; - /* Palette D -- monochromatic */ - --color-d-monocromatic-a: #757575; - --color-d-monocromatic-b: #f7adad; - --color-d-monocromatic-c: #755252; - --color-d-monocromatic-d: #c2c2c2; - /* Palette E -- monochromatic */ - --color-e-monocromatic-a: #422d37; - --color-e-monocromatic-b: #cc4e86; - --color-e-monocromatic-c: #42192c; - --color-e-monocromatic-d: #8f6176; -} - -@media (prefers-color-scheme: light) { - :root { - /* Base colors */ - --color-border: #4ecbd940; - --color-background: var(--color-white); - --color-text: var(--color-c); - --color-text-header: var(--color-c); - --color-link: var(--color-a); - --color-link-hover: var(--color-a-monocromatic-a); - --color-selection: var(--color-a-monocromatic-c); - --color-fieldset-border: #4ecbd940; - --color-table-header-background: var(--color-a); - --color-table-header-text: var(--color-d); - --color-table-item: var(--color-a-monocromatic-a); - /* Components colors */ - --color-header-background: var(--color-a-monocromatic-c); - --color-header-borderline: var(--color-a); - --color-header-selection: var(--color-a-monocromatic-b); - --color-header-logo: var(--color-white); - --color-header-navigation-link: var(--color-white); - --color-header-navigation-link-hover: var(--color-white); - --color-footer-borderline: var(--color-a); - --color-footer-text: var(--color-c); - --color-content-borderline: var(--color-a); - --color-content-item-borderline: #4ecbd940; - --color-content-header-colored: var(--color-a-monocromatic-c); - --color-content-header-colored-borderline: var(--color-a); - --color-content-header-colored-selection: var(--color-a-monocromatic-b); - } -} - -@media (prefers-color-scheme: dark) { - :root { - /* Base colors */ - --color-border: #4ecbd940; - --color-background: var(--color-c); - --color-text: var(--color-d); - --color-text-header: var(--color-d); - --color-link: var(--color-a); - --color-link-hover: var(--color-a-monocromatic-a); - --color-selection: var(--color-a-monocromatic-c); - --color-fieldset-border: #4ecbd940; - --color-table-header-background: var(--color-a-monocromatic-a); - --color-table-header-text: var(--color-c); - --color-table-item: var(--color-a); - /* Components colors */ - --color-header-background: var(--color-a); - --color-header-borderline: var(--color-a-monocromatic-c); - --color-header-selection: var(--color-a-monocromatic-b); - --color-header-logo: var(--color-white); - --color-header-navigation-link: var(--color-white); - --color-header-navigation-link-hover: var(--color-white); - --color-footer-borderline: var(--color-a); - --color-footer-text: var(--color-d); - --color-content-borderline: var(--color-a); - --color-content-item-borderline: #4ecbd940; - --color-content-header-colored: var(--color-a); - --color-content-header-colored-borderline: var(--color-a-monocromatic-c); - --color-content-header-colored-selection: var(--color-a-monocromatic-b); - } -} diff --git a/docs/css/footer.css b/docs/css/footer.css deleted file mode 100644 index 4eb8911..0000000 --- a/docs/css/footer.css +++ /dev/null @@ -1,19 +0,0 @@ -@charset 'UTF-8'; - -.footer { - border-top: 4px solid var(--color-footer-borderline); -} - -.footer span { - color: var(--color-footer-text); -} - -.footer-wrapper { - padding-top: 32px; - padding-bottom: 32px; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; - gap: 32px; -} diff --git a/docs/css/game-2048.css b/docs/css/game-2048.css deleted file mode 100644 index a688ae6..0000000 --- a/docs/css/game-2048.css +++ /dev/null @@ -1,177 +0,0 @@ -@charset 'UTF-8'; - -.game-2048 { - margin: 0 auto; - width: 200px; -} - -.game-2048__map-wrapper { - width: 200px; - height: 200px; - margin-block-end: 32px; - background-color: var(--color-d); -} - -.game-2048__dialog { - display: block; - text-align: center; - font-size: 12px; - margin-block-end: 8px; -} - -.game-2048__banner { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-around; - font-size: 12px; - margin-block-end: 8px; -} - -.game-2048__rules { - text-align: left; - font-size: 10px; -} - -.map { - width: 100%; - height: 100%; - display: grid; - grid-template-columns: repeat(4, 1fr); - grid-template-rows: repeat(4, 1fr); - gap: 0; -} - -.cell { - border: 1px solid #FFFFFF; -} - -.tile { - display: flex; - justify-content: space-around; - align-items: center; - font-size: 16px; -} - -.tile-2 { - background-color: #eee4da; - color: #776e65; -} - -.tile-4 { - background-color: #ede0c8; - color: #776e65; -} - -.tile-8 { - background-color: #f2b179; - color: #faf8ef; -} - -.tile-16 { - background-color: #f59563; - color: #faf8ef; -} - -.tile-32 { - background-color: #f67c5f; - color: #faf8ef; -} - -.tile-64 { - background-color: #f65e3b; - color: #faf8ef; -} - -.tile-128 { - background-color: #edcf72; - color: #faf8ef; -} - -.tile-256 { - background-color: #edcc61; - color: #faf8ef; -} - -.tile-512 { - background-color: #edc850; - color: #faf8ef; -} - -.tile-1024 { - background-color: #edc22e; - color: #faf8ef; -} - -.tile-super { - background-color: gold; - color: #faf8ef; -} - -@media (prefers-color-scheme: dark) { - .map { - background-color: var(--color-a-monocromatic-d); - } - - .cell { - border: 1px solid var(--color-background); - } -} - -@media only screen and (min-width: 340px) { - .game-2048 { - width: 300px; - } - - .game-2048__map-wrapper { - width: 300px; - height: 300px; - margin-block-end: 32px; - } - - .tile { - font-size: 24px; - } -} - -@media only screen and (min-width: 440px) { - .game-2048 { - width: 400px; - } - - .game-2048__map-wrapper { - width: 400px; - height: 400px; - margin-block-end: 32px; - } - - .game-2048__dialog { - font-size: 16px; - margin-block-end: 16px; - } -} - -@media only screen and (min-width: 540px) { - .game-2048 { - width: 500px; - } - - .game-2048__banner { - font-size: 16px; - margin-block-end: 16px; - } - - .game-2048__rules { - font-size: 10px; - } - - .game-2048__map-wrapper { - width: 500px; - height: 500px; - margin-block-end: 32px; - } - - .tile { - font-size: 32px; - } -} diff --git a/docs/css/game.css b/docs/css/game.css deleted file mode 100644 index f6fea90..0000000 --- a/docs/css/game.css +++ /dev/null @@ -1,147 +0,0 @@ -@charset 'UTF-8'; - -.game { - margin: 32px 0; - display: flex; - flex-direction: column; - gap: 48px; -} - -.game__right-column, -.game__left-column { - display: flex; - flex-direction: column; - row-gap: 8px; -} - -.game__map-wrapper { - margin: 0 auto; - width: 200px; - height: 200px; - background-color: var(--color-d); -} - -.game__game-info { - display: flex; - flex-direction: column; - gap: 32px; -} - -.game__title { - font-size: 32px; -} - -.game__dialog { - font-size: 18px; -} - -.game__banner { - display: grid; - grid-template-columns: repeat(2, 1fr); - font-size: 14px; -} - -.game__score { - white-space: nowrap; -} - -.game__timer { - white-space: nowrap; -} - -.game__controls { - display: grid; - grid-template-columns: 1fr 3fr; - grid-row-gap: 8px; - align-items: end; -} - -.game__rating { - display: flex; - flex-direction: column; - gap: 16px; -} - -.game__rating > h3 { - font-size: 16px; -} - -.game__rating-item { - padding: 8px; - border: 2px solid var(--color-c-monocromatic-d); - display: flex; - flex-direction: row; - justify-content: space-between; - font-size: 12px; -} - -@media only screen and (min-width: 340px) { - .game__map-wrapper { - width: 300px; - height: 300px; - } -} - -@media only screen and (min-width: 440px) { - .game__map-wrapper { - width: 400px; - height: 400px; - } -} - -@media only screen and (min-width: 540px) { - .game__map-wrapper { - width: 500px; - height: 500px; - } - - .game__title { - font-size: 48px; - } -} - -@media only screen and (min-width: 880px) { - .game { - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-gap: 32px; - } - - .game__map-wrapper { - grid-column: 1 / 2; - grid-row: 1 / 2; - } - - .game__right-column { - grid-column: 2 / 4; - grid-row: 1 / 2; - } - - .game__left-column { - grid-column: 1 / 4; - grid-row: 2 / 3; - } -} - -@media only screen and (min-width: 1400px) { - .game { - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-gap: 32px; - } - - .game__map-wrapper { - grid-column: 2 / 3; - grid-row: 1 / 2; - } - - .game__right-column { - grid-column: 3 / 4; - grid-row: 1 / 2; - } - - .game__left-column { - grid-column: 1 / 2; - grid-row: 1 / 2; - } -} diff --git a/docs/css/header-mini.css b/docs/css/header-mini.css deleted file mode 100644 index c0527ab..0000000 --- a/docs/css/header-mini.css +++ /dev/null @@ -1,36 +0,0 @@ -@charset 'UTF-8'; - -.header-mini { - padding: 6px 0 2px 0; - background-color: var(--color-content-header-colored); - border-bottom: 4px solid var(--color-header-borderline); -} - -.header-mini ::selection { - background: var(--color-header-selection); -} - -.header-mini :focus { - border-bottom: var(--number-header-focus-border-size) solid - var(--color-header-navigation-link-hover); -} - -.header-mini :focus-visible { - outline: var(--number-header-focus-border-size) solid var(--color-header-navigation-link-hover); - border-color: transparent; -} - -.header-mini nav { - font-size: 10px; - text-transform: uppercase; -} - -.header-mini nav a { - border-color: transparent; - color: var(--color-header-navigation-link); -} - -.header-mini nav a:hover { - border-color: var(--color-header-navigation-link-hover); - color: var(--color-header-navigation-link-hover); -} diff --git a/docs/css/index.css b/docs/css/index.css deleted file mode 100644 index 9dce713..0000000 --- a/docs/css/index.css +++ /dev/null @@ -1,10 +0,0 @@ -@charset 'UTF-8'; - -@import url('declarations.css'); -@import url('base.css'); -@import url('services.css'); -@import url('tables.css'); -@import url('header-mini.css'); -@import url('footer.css'); -@import url('game.css'); -@import url('game-2048.css'); diff --git a/docs/css/services.css b/docs/css/services.css deleted file mode 100644 index e8f7c18..0000000 --- a/docs/css/services.css +++ /dev/null @@ -1,26 +0,0 @@ -@charset 'UTF-8'; - -.hidden { - display: none !important; -} - -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - border: 0; - padding: 0; - white-space: nowrap; - clip-path: inset(100%); - clip: rect(0 0 0 0); - overflow: hidden; -} - -.container { - width: 100%; - max-width: 1920px; - margin: 0 auto; - padding-left: 16px; - padding-right: 16px; -} diff --git a/docs/css/tables.css b/docs/css/tables.css deleted file mode 100644 index 24a195e..0000000 --- a/docs/css/tables.css +++ /dev/null @@ -1,42 +0,0 @@ -@charset 'UTF-8'; - -table, -th, -td { - width: 100%; - padding: 8px; - border-collapse: collapse; - table-layout: fixed; - font-weight: 400; -} - -.table_emerald thead { - border-bottom: 4px solid var(--color-table-item); -} - -.table_emerald thead > tr { - background-color: var(--color-table-header-background); - color: var(--color-table-header-text); -} - -.table_emerald thead > tr > th { - text-align: left; - font-weight: 400; -} - -.table_emerald thead > tr > th:first-child { - width: 25%; -} - -.table_emerald tbody > tr:nth-child(even) { - background-color: var(--color-table-item); - color: var(--color-d); -} - -tbody > tr > td:first-child { - width: 25%; -} - -.table_emerald tfoot { - border-top: 4px solid var(--color-table-header-background); -} diff --git a/docs/img/android-chrome-192x192.png b/docs/img/android-chrome-192x192.png deleted file mode 100644 index 5c3ea2c842f82f3c1f5d441025576a74c476331a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2953 zcmd^>X;4#H7RTR{cwtSTrWtq}sU3L>&Z44ci?Awocw$WCNaK_yCvdk}>|fo2gC zkVRqyLIZ;ALSz{fXapA!5S1k;G{_PV!aT;B{x&rqraw&8)TwjtyY>F}RGstAyT2Rn z>}a!9a)%@U09);B2}Eda+;GHZXe17XibE54hG=666u(rN1OTZcc7(&E^WI;xy_jBZ z3XIn#=S)Im^DoKUDPyb;!wt#&TXH^gBQm*qG3g2A7@N6st$i7e4-UUuva+Jd}9Gxtbl7M-9p#&OVSjbAS z0ch-AIFgb*$x6<^RB8tL7u>qNz*NrX(LCeA9pK~}lsMn%2l;{l%g73?5<#U~oQd(d zx#1jg(#N$cdx!iFObf3n@DrWao_&e9lJD1m;75NohH(u(y4)>f5$_gJ3?6#cx)0u4 z=_zqESG^UD5YFFl8m!45)Yrj&xBTo7K&Q`6T*;{_-f6>F5IgT-H7#R!CEm1eh@w}KmQvH4Zxx@A*ZdlgGc~0ae&-xjSC>4 zvi&HXE2ORj);67)Nl@$7OnB66)=+1A=a&`evLpXXg(EzCeuX{eS-W*S8L#os=v=e;@MJMhz-n|*+L zryyqkO==GIkd?pbepiJ$@1rq>@=MQK6Id^F%vZX{zC}2V<;Zk~4(OZHiO0Na1KzV<*Z5^VqY2^w~Gb1wOCF7i0at zYYw>8?<-&_DZqnQuHNntA{h!460I-b9#kal+lDwR6aZT1yLmm22M{B_lOGV}LFB&^ z7)o_p2p7B-Pai}X)Oe&M-Lxfz+MD@?qsV1t=e4e13*VQvdAxqn*FLmQ@9`QslsY=w z?2#gMY|{hp1vpnLu~WzFbiqo;hnomwAmOS32#*9hB}ah1qTMiKh7}8~bVAz(Pbc!e) zdQ)y&z1Tdxb)6KYC39%CM}B&TLt9GoJictVQwErR&qVt^R)S&Jm{_GAUV62D-c!j@Qd2gxAy0!|$Ehf(lg zCSOrKQSLxf&%HOWc*KFGLHKJCr9eHv9g22JPUUud)`%gD3v8I7dFGugO8DiE{aTgy zQ}?PQ631E`bdR%-n>CID7p0-0>9s@J2s(Fta~^%WCP#Pmf$prf^M34**r*r#HI1E}UZv21z=M@S7HWC#D6vYM+0rJ7l)#zYQeZ%aexF6vCxe)SWl)P8mGKj!KxVsC zkh#T`VVlSWlG(pEKdpm3tVQR_aJH_eCx)-xDk~2&`VpsxJ{5$xz#trCtsGqTfd0TcSp^Of z(2*4;82@zgFaWm=&otTto&V)Uth*&*AQD|2@-AhA69sg~dd2^N0B_=`B@53BtU9vW z=Z%i)W;>^PrS^N4q_-QoxXbc7?rZ&O6!@NlmCHTt=HX2%&!|h@wFxG0k5BRyPc<$vPUuIpvj#GiOw?lUT;_y&zBCGDIw@A_Jt z1Z;0Xp*MLSA)?TJ807!a(@BMqwo5KE6RCANk2(@@G4g?3Y5f;+Ix?sFhE_}{E zW6>adF*P*qQ6g$xj1Bnib#5rOn>6$#R%Cf&DTSlToihzQ9ZlZSP!TB-`f#{e#7C~+ zilaVkAsP4A}#A~_#nN@&zDFm*+1bhEQs72`h zbFz*Xl6*QS_4Bdkjxvg>_09n=ieC$y%z4B93&9mCHv@JSzm(QiX&{BY7g8%k>gM!x zf@R|k049vg7ch}{1}a1S`s5J+yjVqyCLqv_Ondp}d9^=OV++(L4q50+Lw9Sy&dQNc IY)QHN4_y7&ZU6uP diff --git a/docs/img/android-chrome-512x512.png b/docs/img/android-chrome-512x512.png deleted file mode 100644 index 246cd0ed15b3e9a92f5003c8dffc05ba9156946c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11784 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 diff --git a/docs/img/apple-touch-icon.png b/docs/img/apple-touch-icon.png deleted file mode 100644 index f6e6bee9b32f4915dd97a53a3d5ec2158359dcfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2866 zcmdUxdpr|t8^@P=G!<>FA|tZo6eSwVc{XH)lyqQCC-daEl~YbJ#~H1)_xO9@!&Ow}I$tj|7zVs(c0jwtP8`vN;oq{hI5X>gKN69?frD zaUUMuUDPIHTMWu_NTuGriGzK9Muwxl#}vS`Y6(+Mwz|Hb*4!db_8+OK=zo8JLr!3k zOO;1B#`~169Ht%~mig^UvroBxZl-9_V%Em9&`7YhD9#o4HV7iGiyNDWQ6i!xF}y4L zb{Ql}{V;OV2+(tDhRg;V{C*`J8K8x0cjs$$V};b68%TSLW~MKLlsDU@0FdeL2?RqR zWg`rY`x5WZzR<~VwygI@NK7+cFDP0`Pz7}P!I-ncH%qq{d$NhOL5%hJHE8w45-(B4 z;837dpJ(etmC@=@BU|i!aR+1dZL)7?W~9y4nW3eK8$k~};rt5==qFeRwL~)eQzOGD zBXT{&J31olp~TIvv|KTKY>^Rl?X7dY&Sdq^ODfS`K94I!l zcaYhyz6FC@9-^Yt-qFHAuO)Z(OOP_Nc($NOjbw+XS-a`k;Yp=gv?o#0aC^i`HZznj9lk zQe}Fy($-GxXe$5qgQuw>j7c&k{9cEhen8|Y{?Xzx-auURkA@&x3N#3qoI_ENfZ0;^ znC0p%+w8{=qHYgjE;${T)(;wr41>I!9XZt_Bf+$O_3dk_xod)Z-j_|ZzipD(+m_Wd z`yK1kr`B6{+;mtI&c_bxPWF*I_`)pfIdkOHp9rM8U+xg|q+TrdK!oN_7)wqUnf;CK zlFB_$2=sg9jxS1--Aws!j=IwH9O=J8b8eg^e>~mT zVxQCAt_faUdRkc}<{pvbRYrEG4k*dkUeIp}ns58m6@B_+-8*v#LZ9cS1k%0cc3^z9 z2X$4DTxnGcdUTScU_&*O)r#T9RpwX3ZUWWDl98A=i1l3a(5dq_GCrHc{y1Cb0DgRi~X=6nYd&&cv(M0<^E(R~-hrT-*z0RiK0M!T86zU;d6y zZEKJ{(CKv#^lqfYpfeG;Es^0isZVpqtE)z5j44kfc{;|NHOyfgyKl3F1 zvkc?&;T}5>mQK~OI!sCecT!Q47Dw@&J=C?Z2*qe+m?USoqpo`LLJbaa#jBZL+ZP#F z#+nVP>USZ%2W9?ACo?sP+f_W!zWae9bSzXd$xIhIf{vxTF!~U-(D7Y*=sCBra$CiB zg~xoP4^h%3T>LuP8ZQlxMwcx!UJdjICMY!RDl^nDGyb>TY?e<{tyO=~JoSb9ANwr? z6g(Hpkxfq=WnO&ixW*z1$)`I{2(Afd)f#_cArnavrC<)A{t* zlfwabA2GgfUV|Cj96$6TWjUUU#!H+Zz}l6+frfEz)VG{GX}1KR@xS`lVR>eMH#Hxq zpQdu`!ku+YVfGLIEle^OiC5JpeF!@8R3>hAThE>>qnqnvUH!`;a~!BWmE!w6O$9s6 zFz8&;*S{4vvQXt8{;T|rxEk5`K|g4*^HX=XVCVT(c7>4x^u^M8cYTC9rR~mArmbQerAS4)i$=TOuq)*#KMlK^I)p^Wzgm0s*3nx4-RqhB+H_l_n`LHUBu?q)p#16Fi^|C*ZPc$6R_~e)) zlB8i6TaT`tfKz$3VS=$SkL3wMp&@$;1^(4bqgDKH1B>#i`bRwGoAl&EU?wIw^;@*u zwzeVB@K=d#B*C>Ztb&TIt0H>1N7UJ!nKRJ(=7#dGAV$K888-D8wuSYYhaIuxk$Nf9%)>=JSnGC zqr#+E|6><*hlWMMeBP*95$9^l+2seVYWN>vJ`Z{~*M(xSYTGn7QV@5vO*+#MM1v-j wbYN+CBFXE&3wi1q@Q5GakLYv6p4%d7XUYCpa1{> diff --git a/docs/img/favicon-16x16.png b/docs/img/favicon-16x16.png deleted file mode 100644 index a97de80a5462dca5f36899b6a2cfd63a80274988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)Px$$w@>(R5(walRs?JP!Pty&qj2i6G%)j7Kx=pQLx1jiIo%y$!RCpnE4Y1>Ifl( z;!=qKo!MY&ZHb{_Me<}5(V+_x9m|9S6D&owKV&J|J@x1KxBvCo-)VQ&0vetzL-&KYyPnw{tGC0HZ~UPf%>W$RYXy-z zC=Kh47t5)k7N{EnUuW-x9zgtPq#W!FA0L#ySuERD@5qn47qiFq)y)+!?SpLARR$@9 zjE?_#V?Xz|dPieGkvZ9(8(b2l&`8aDStSzy$KGrc+RgohLy?x; zq78p8K;YOR3&_4$O;EMdvAit;KS(YMx-*@j4nXjoqyquxdGp%V;zE+#{U5-wX}%rn zV4?>=B{z{*Bs-FJC!|cSN$Ll2_ffUHF(6+UU`eJ{0iy}&QxLmPie2!Y zgS-x;ArtPM0EgwG&Gta(__6z{cF8R7A&7pdgLysJ^CLH`1=wCw(rUE_{{Y{Q5eZ9w RwlM$z002ovPDHLkV1g3V>_z|p diff --git a/docs/img/favicon-32x32.png b/docs/img/favicon-32x32.png deleted file mode 100644 index dd28e743e26a07fe611067869d70b89b5cfc458c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!safP)Px%Z%IT!R9HvtR!?gaQ4s&l3(2O`i+ZS}f~VG#iUv%gegml@$sX##i_i~XPfZFU zbhoGa0SaC`*uy4>ir+v@B1BP7rYFIMcu+5vX0zmtY|@RJWwT@xP>Pw`doyq5_vSz0 z9}|VKf8*l)L?o)50Z@PXHvirI_SR+nB!I<^Wqx`7{y}3@y`cc8Y5g7uTT;qgsk&Zr z8_A|NvO;|K0= z1Ol-00zhu8Uk`s&G|G9^VIM&Nj5>o}I6olbWdMo8bAy?7`aJLw2#X$POzZ()1-P|y7wV8zAXMYm_ zB;7QsYc=0-943iEcwis|e=5eOaSQ=amQrpx;zE!H(AnOZKTFB|VJ3uF?GC0vni#;O zjd2R#2zkI6$K91z2i8r3fxNk zHlo0-*!4JQBbovT^guSfu_PcCY#|~D$uzJNGRw!MYT=_hRN0hvo=Dtr-wEO-Go*bd zA$Loa_5MB)rW5WN<^1V!x{#XDzXGt=b(_X6!~YO~yARC9Vx668p{KZ00000NkvXXu0mjf7Rot< diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico deleted file mode 100644 index 7a6e036ef16a74c296442023576524adeb98697c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 diff --git a/docs/index.f521f79ab80df92f638c.js b/docs/index.f521f79ab80df92f638c.js deleted file mode 100644 index 122d77b..0000000 --- a/docs/index.f521f79ab80df92f638c.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(e,n){for(var r=0;r=60&&(e-=60*(n=Math.floor(e/60))),n=n<10?"0".concat(n):"".concat(n),e=e<10?"0".concat(e):"".concat(e),this._value="".concat(n,":").concat(e)}const p=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,f),c(this,u),l(this,u,h).call(this)}var e,n;return e=t,(n=[{key:"value",get:function(){return l(this,f,y).call(this),this._value}},{key:"reset",value:function(){l(this,u,h).call(this)}}])&&s(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function v(t){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},v(t)}function m(t,e){for(var n=0;ne.score?-1:void 0}))}function P(){localStorage.setItem(this._key,JSON.stringify(this._value))}function j(){localStorage[this._key]?this._value=JSON.parse(localStorage[this._key]):this._value=[],g(this,T,R).call(this)}const O=k;function x(t){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},x(t)}function I(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=this.KEYPRESS_INTERRUPT&&(12===t&&(this._context.moveToUp(),this._keypressCooldown=0),13===t&&(this._context.moveToDown(),this._keypressCooldown=0),14===t&&(this._context.moveToLeft(),this._keypressCooldown=0),15===t&&(this._context.moveToRight(),this._keypressCooldown=0),8===t&&(this._context.isPaused?(this._context.start(),this._keypressCooldown=0):(this._context.stop(),this._keypressCooldown=0)),9===t&&(this._context.clear(),this._context.start(),this._keypressCooldown=0))}function J(){return"getGamepads"in window.navigator}const F=H((function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),N(this,q),N(this,K),N(this,U),N(this,X),this._context=e,$(this,X,z).call(this)}));function Q(t){return Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Q(t)}function V(t,e){for(var n=0;nMath.abs(s),l=Math.abs(s)>Math.abs(a);a>0&&c?t._context.moveToRight():a<0&&c?t._context.moveToLeft():s>0&&l?t._context.moveToDown():s<0&&l&&t._context.moveToUp()}))}const nt=Z((function t(e,n){var r,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(r=this,o=tt),o.add(r),this._context=e,this._container=n,function(t,e,n){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return n}(this,tt,et).call(this)}));function rt(t,e){var n=t&&"number"==typeof t?t:0,r=e&&"number"==typeof e?e:0;return Math.floor(Math.random()*(r-n)+n)}function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function it(t,e){for(var n=0;n=0;e--)for(var n=0;n1&&t.forEach((function(e,n){void 0!==t[n-1]&&e.cost===t[n-1].cost&&(t[n-1].cost*=2,t.splice(n,1))}));for(var n=1;n<=4;n++)4!=t.length&&t.push(0);return t}function Kt(t){for(var e=0,n=0;n<=3;n++){var r=[],o=[];switch(t){case"Up":for(var i=3;i>=0;i--)r.push(this.tiles[n][i]),o.push(this.tiles[n][i]);break;case"Down":for(var a=0;a<=3;a++)r.push(this.tiles[n][a]),o.push(this.tiles[n][a]);break;case"Left":for(var s=0;s<=3;s++)r.push(this.tiles[s][n]),o.push(this.tiles[s][n]);break;case"Right":for(var c=3;c>=0;c--)r.push(this.tiles[c][n]),o.push(this.tiles[c][n])}r=St(this,Ot,Ut).call(this,r);for(var l=0;l<=r.length;l++)r[l]!==o[l]&&e++;switch(t){case"Up":for(var u=3;u>=0;u--)this.tiles[n][u]=r.shift();break;case"Down":for(var f=0;f<=3;f++)this.tiles[n][f]=r.shift();break;case"Left":for(var h=0;h<=3;h++)this.tiles[h][n]=r.shift();break;case"Right":for(var y=3;y>=0;y--)this.tiles[y][n]=r.shift()}}St(this,jt,Xt).call(this),St(this,_t,Gt).call(this),e>0&&St(this,Et,Lt).call(this),St(this,_t,Gt).call(this),St(this,Rt,Nt).call(this),St(this,Pt,$t).call(this)}function qt(){this.MATRIX_WIDTH=4,this.MATRIX_HEIGHT=4}function zt(){this.$MAP=document.querySelector("#map"),this.$SCORE=document.querySelector("#score"),this.$TIMER=document.querySelector("#timer"),this.$DIALOG=document.querySelector("#dialog"),this.$RATING=document.querySelector("#rating")}function Yt(){this._keyboard=new W(this),this._gamepads=new F(this),this._touchscreen=new nt(this,this.$MAP)}new Ct({speedRate:200,keyRating:"es:2048"}).start()})(); \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f6d56a7..0000000 --- a/docs/index.html +++ /dev/null @@ -1,26 +0,0 @@ -Eugene Serb – 2048 Game

Eugene Serb – 2048 Game

2048 Game

Let's have fun!
Score: 0 Time: 00:00
Up
W and and
Down
S and and
Left
A and and
Rigth
D and and
Restart
R and START
Pause
P and BACK

Your records:

#ScoreTimeDate
\ No newline at end of file diff --git a/docs/site.webmanifest b/docs/site.webmanifest deleted file mode 100644 index 82e420f..0000000 --- a/docs/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "eugene-serb.github.io", - "short_name": "eugene-serb", - "icons": [ - { - "src": "./img/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "./img/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#4ECBD9", - "background_color": "#4ECBD9", - "display": "standalone" -}